TCP为应用层提供的服务

  1. 提供进程和进程之间的通信

    答: 怎么区分服务目的主机上的哪个进程呢? 通过提供端口号(well-known port),

    如Telnet 23,DNS 53, HTTP 80, SMTP 25, FTP 21 22(数据,控制)

  2. 提供了面向连接的服务

    答: 区别于UDP的面向报文,UDP是一个报文一个报文地传输到目的IP上,两端并不会

    建立任何的连接,所以也是不可靠的,也是无序的,先后到达的顺序无法控制,也不会考虑

    接收端的接收缓存,和应用进程的读取速度等等,很可能因为缓存溢出的丢弃到达的UDP报文,

    所以不可靠!!!

    TCP的面向连接,并不是建立一条真实的连接。而是建立一条虚链路! 并不是物理链路。

    可以通过这条虚链路,进行有序的面向字节的传输,也就是一个字节一个字节这样的有序传输过去,

    而且因为有序,所以当接收方因为期望收到的序号与接收到的序号不匹配,就说明有丢失,所以可以通过

    这条虚链路实现 重传! 而UDP无法做到,所以可靠!

  3. 缓存机制

    运行了TCP的两端,都有各自的发送缓存和接受缓存,可以模拟成一个环形的缓存。

    发送缓存: 比如有三个字节是已发送的,后面的4个字节是已从应用进程中接收到但未发出去的,再后面的指针指向应用进程要写入的下一个空白区域(空的缓存块)。

    当发送方收到已发送出去的报文的ACK确认后,就把那片缓存清空(回收),是可循环利用的空间。

    问:是不是一发送出去就可以清空这片缓存?

    答:不是?因为要保存这个副本,等待这段数据的ACK的确认,因为TCP具有重传机制,就是靠的这个缓存机制。

    接受缓存:比如四个字节是已收到但未读取,并且有个指针指向下一个等待读取的缓存位置上。然后最后还有一个指针指向下一个要接收的位置。

  4. 全双工,就是两边都有发送缓存和接受缓存,所以两端可以同时进行发送和接收,是异步的,而不用同步停止等待。

  5. 分段传输

    答:TCP的分段的概念就是,从缓存中读取字节出来组成一个报文段,加上首部,封装起来,传给IP层,加上IP首部发过去。因为不可能是每次一个字节这样发过去,效率太慢了,所以组成报文段。

  6. 复用和分用

TCP的特点

编号系统

  1. 序号

    注意:TCP为每个要传输的字节进行编号,虽然传输的时候,是传输的报文段,但是实际上是根据字节来编号,而不是根据报文段来进行编号。

    而且:一开始的序号是从0-65535中随机抽取一个数作为开始的数作为第一个字节的序号,

    所以当接收方发来的确认号为4396,并不代表他已经接收了4395个字节,因为第一个字节序号是随机的!

  2. 确认号

    接收方发送的确认号是指 接收方期待收到的下一个字节的编号。

    并且是累积计算的,比如ACK_NUM = 4396, 表示已经收到了一开始到4395号字节,并对这一堆字节进行确认。而不是对第4395个字节的确认!

流量控制

依靠这个编号系统,可以使得 接收方能够对发送方进行流量的控制。

差错控制

差错控制使得TCP是可靠的,并且TCP提供的是面向字节的差错控制。

拥塞控制

发送方允许发送的数据受 接收方的缓存的影响,还要受到当前网络堵塞状况的影响

TCP协议基础(一)的更多相关文章

  1. HTTP/TCP协议基础

    HTTP协议 基本概念 HTTP协议(超文本传输协议 HyperText Transfer Protocol):是用于从WWW服务器传输超文本到本地浏览器的传送协议.它不仅保证计算机正确快速地传输超文 ...

  2. TCP协议基础

    IP协议是Internet上使用的一个关键协议,它的全称是Internet  Protocol,即Internet协议,通常简称IP协议.通过使用IP协议,使Internet·成为一个允许连接不同类型 ...

  3. TCP协议基础知识及wireshark抓包分析实战

    TCP相关知识 应swoole长连接开发调研相关TCP知识并记录. 数据封包流程 如图,如果我需要发送一条数据给用户,实际的大小肯定是大于你发送的大小,在各个数据层都进行了数据的封包,以便你的数据能完 ...

  4. Http协议与TCP协议简单理解(转)

    在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解.TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上 ...

  5. Http协议与TCP协议简单理解

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...

  6. Http协议与TCP协议理解

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...

  7. HTTP协议 与 TCP协议 的区别

    TCP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据. TCP/IP和HTTP协议的关系,从本质上来说,二者没有可比性,我们在传输数据时,可以只使用(传输 ...

  8. iOS-----使用CFNetwork实现TCP协议的通信

    使用CFNetwork实现TCP协议的通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个通信接口,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以 ...

  9. <再看TCP/IP第一卷>TCP/IP协议族中的最压轴戏----TCP协议及细节

    题外话:刚刚过去的半个月实在是忙得我喘不过来气,虽然手里还压着几个项目得在期末考试之前做完,但是想想还是更新一下随笔,稍微换个心情.另外小吐槽一下那些在博客园里原封不动抄书当随笔的人,唉真是....算 ...

随机推荐

  1. 查看hive的信息

    一.Hive下查看数据表信息的方法方法1:查看表的字段信息desc table_name; 方法2:查看表的字段信息及元数据存储路径desc extended table_name; 方法3:查看表的 ...

  2. 【转】分布式文件系统FastDFS架构剖析

    FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX接口方式, ...

  3. 【Wince-ListView】Wince中的 ListView怎么显示网格?

    using System.Runtime.InteropServices; using System.Windows.Forms; namespace CETEST { public class Co ...

  4. (转载)Google 发布 Android 性能优化典范

    2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android  App.课程专题不仅仅介绍了Android系统中 ...

  5. 解压 压缩 C#

    public class SharpZip { public SharpZip() { } /// <summary> /// 压缩 /// </summary> /// &l ...

  6. 家庭问题x

    [问题描述] 有n个人,编号为1,2,……n,另外还知道存在K个关系.一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员. 当n,k和k个关系给出之后,求出其中共有多少个家庭.最大的家庭 ...

  7. POI2012 BEZ-Minimalist Security | noi.ac #537 Graph

    题目链接:戳我 首先注意这张图有可能不连通!! 然后我们考虑对于每一个联通块,首先任意确定一个点,给它设最终值为x,然后进行搜索.(因为对于一个联通块而言,我们知道一个点的最终值,那么整个联通块上面点 ...

  8. delphi请求http接口并上传附件

    实现附件的上传:需要使用TIdMultiPartFormDataStream控件, uses IdMultipartFormData; 例子: procedure TClientForm.Button ...

  9. 【一起学源码-微服务】Nexflix Eureka 源码二:EurekaServer启动之配置文件加载以及面向接口的配置项读取

    前言 上篇文章已经介绍了 为何要读netflix eureka源码了,这里就不再概述,下面开始正式源码解读的内容. 如若转载 请标明来源:一枝花算不算浪漫 代码总览 还记得上文中,我们通过web.xm ...

  10. jQuery文档操作之插入操作

    append() 语法 父元素.append(子元素) 解释:追加某元素,在父元素中添加新的子元素.子元素可以为:string/element(js对象)/jQuery元素 代码如下: var oli ...