目录
一、概述
1、主要特点
- 面向连接:使用前必须建立TCP连接;使用后必须释放已经建立的连接;
- 点对点通信:即一条TCP连接只能有两个端点,每一条TCP连接都是一对一的;
- 提供可靠交付的服务:数据传输无差错、不丢失、不重复、按序到达;
- 全双工通信:TCP连接两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据;
- 面向字节流:TCP的流是指流入到进程或者从进程流出的字节序列。TCP把应用程序交下来的数据看作是一连串的无结构字节流;TCP不保证接收方应用程序收到的数据块和发送方应用程序发出的数据块大小对应,但保证接收方收到的字节流和发送方应用程序发出的完全一样。
2、TCP的连接
TCP把连接作为最基本的抽象,TCP的很多特性都和面向连接这个特性有关。
TCP连接有两个端点。TCP连接的端点叫做套接字(socket)或者插口:socket = IP地址 : 端口号。每一条TCP连接唯一地被通信两端的两个插口所确定:
TCP连接 ::= {socket1, socket2} = {IP1:port1, IP2:port2}
二、TCP的首部
TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项,因此TCP首部的最小长度是20字节。另外,最大长度是60字节,因为长度可变的选项部分最大长度是40字节。TCP首部的长度是4字节的整数倍。

重点字段解析:
- 序号:占4个字节,是字节的编号,即一个字节一个编号,而不是报文段的编号。这个序号指示的是要发送的字节流的起始序号;
- 确认号:期望收到下一个报文段的第一个数据字节的序号;
- 数据偏移:占4位,指示TCP报文段的数据部分的起始位置距离TCP报文段起始位置有多远。由于TCP首部有一个可变长的选项,所以这个字段非常重要。数据偏移的单位,是4个字节,即TCP头部最长可以是15 * 4个字节;
- TCP标记:占6位,包含6个标记,每个标记位都占1位;
- 窗口:占16位,指本报文段发送方的接收窗口的大小,单位是字节。窗口用于在TCP的滑动窗口中,接受方通知发送方,滑动窗口的长度。窗口值告诉对方,从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值是接收方让发送方设置其发送窗口的依据;
- 检验和:占16位。检验和字段的检查范围包括首部和数据两部分,其中首部需要加上12个字节的伪首部。伪首部中TCP的协议号是6;
- 紧急指针:占16位。当URG=1表示,紧急指针的大小,表示本报文段中的紧急数据的字节数,紧急数据后紧接着普通数据。当所有紧急数据都处理完成时,TCP就告诉应用程序恢复到正常操作。注意,即使发送窗口为0也可以发送紧急数据;
- 选项:长度可变,最低0字节,最高40字节;
- 填充:用于使整个TCP报文首部长度是4字节的整数倍。
TCP标记包括:
- URG:Urgent,紧急标识。URG=1表示此报文中有紧急数据,应该尽快传送,而不要按原来的排队顺序来传送。相当于高优先级的数据,发送方会把紧急数据放到本报文段数据的最前面发送,而在紧急数据后面的数据仍是普通数据。
- ACK:Acknowledgment,确认报文。ACK=1表示是确认。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1;
- PSH:Push,推送标识。当PSH=1,接收方收到后要尽快交付给应用层的进程,而不用等到整个缓存都满了以后再上交;
- RST:Reset,复位标识。RST=1表示TCP连接中出现了很严重的差错,必须释放连接,然后再重新建立运输连接;RST置1还可以用来拒绝一个非法的报文段,或者拒绝打开一个连接;
- SYN:Synchronization,同步标识。在建立连接时用来同步序号。SYN=1表示这是一条连接请求和连接接受报文:当SYN=1而ACK=0,表明这是一个连接请求报文段;对方如果同意建立连接,则应在响应报文段中设置SYN=1且ACK=1;
- FIN:finish,终止标识。用来释放一个连接。FIN=1表示此报文段的发送方的数据已经发送完毕,要求释放运输连接。
三、可靠传输
1、停止等待协议
1.1 协议描述
停止等待协议,发送方建立TCP连接后,会发送一条TCP报文,然后在等待接收方返回的确认消息后,才会生成新的TCP报文并发送出去。简单来说,停止等待协议要求发送方每次发送一个报文段,在收到接收方的确认响应后才会继续发送下一条报文段。
1.2 故障处理
假如接收方没有接收到报文,或者发送方没收到接收方的确认消息,或者发送方在很久之后才收到确认消息,则发送方会在超时后重新发送原报文。
1.3 超时定时器
每发送一个消息,发送方就会设置一个超时定时器。当超时定时器超时,而发送方未接收到接收方的响应消息时,发送方会重新发送之前发送的报文。
1.4 优缺点
优点:实现简单。
缺点:信道利用率非常低。
2、连续ARQ协议
2.1 协议描述
ARQ:Automatic Repeat Request,自动重传请求。
连续ARQ协议主要是为了解决停止等待协议信道利用率低的问题。
发送方:维持发送窗口,根据发送窗口的大小连续发送相应的分组数目;
接受方:累积确认,在收到几个分组后对按序到达的最后一个分组发送确认,以及更新后的窗口大小。
2.2 累计确认
接收方不会对所有把收到的消息都做确认,而是在收到一连串的消息后,再累计进行确认。如果发送方收到了一条确认消息,就会认为接收方收到了确认消息中的确认号前面的所有的消息。
滑动窗口和累计确认,是连续ARQ协议的核心。
2.3 滑动窗口
滑动窗口的大小表示发送方在收到确认前发送的最大字节数。注意,单位是字节,不是报文段。
滑动窗口的大小由接收端指定给发送端,在发送端通过调整发送窗口的前沿和后沿来控制滑动窗口的大小。
发送窗口后沿:如果没有收到新的确认消息,不会移动;收到新的确认消息后,会后移。窗口后沿后移后,会发送窗口内没有发送过的数据,一般是后沿的前一个位置到当前位置之间的数据。当然,如果接受方要求修改发送窗口的大小,也会影响后沿移动的距离。
发送窗口前沿:当接收到确认消息的时候,发送窗口后沿会向后移动,同时,发送窗口前沿也会向后移动相应的长度。

- P1是滑动窗口的前沿,P1前面都是已发送并且收到确认的,发送端认为已经发送完成,P1后面是已发送但未收到确认的或者未发送的;
- P3是滑动窗口的后沿,P3后面是不允许发送的,P3前面是已发送的或者允许发送但是还没发送的;
- P2是状态指针,指示在发送窗口中,第一个未发送的字节;
- P3-P1是发送窗口;
- P3-P2是可用窗口(有效窗口),包含的是允许发送但是还没发送的字节;
- P1-P2是已发送但是还没收到确认的字节。
2.4 选择重传
如果接收方未使用累计确认,而是每

最低0.47元/天 解锁文章

538

被折叠的 条评论
为什么被折叠?



