您的位置:首页 > 理论基础 > 计算机网络

TCP/IP之十:TCP连接的建立与终止

2016-09-07 10:03 639 查看
TCP是传输层的重量级成员,也是整个TCP/IP协议栈的重要组成部分,也正因为这点,协议栈的名字里面才有TCP这样的字样。TCP是端到端的通信协议,它向上层应用提供了可靠的,面向连接的服务,为了实现这样的服务,TCP采用了许多其它协议不曾用到的机制,比如序列号、滑动窗口、超时重传、慢启动等等,同步、流量控制等议题在TCP中体现得淋漓尽致。

为了分析TCP的运行机制,我们先来看看TCP的首部结构:





(1)前面四个字节和UDP类似仍然是源端口号和目的端口号;
Sequence Number:序列号,用于通信双方的同步,TCP在概念上给每个被传输的字节都编号,序列号字段存储了该分节中数据字段第一个字节的编号;
Acknowledgment Number:确认序号,TCP对通信双方发送的分节都确认(ack分节没有确认),确认是通过确认序号来完成的,确认序号字段存储的是发送方期望收到的下一个字节的编号;

Data offset: 数据偏移量,有的资料称之为首部长度,其实表达的是同一个概念,这个字段占了4位,并且以4字节为单位,所以和IP首部中的首部长度字段是一样的,它的最大值为15,说明TCP首部最长可以为60字节(20字节固定长度+最多40字节的选项字段);接下来是6位的保留字段;接着是6位标志比特,具体的标志我们在(2)中阐述;window字段用以告诉对方本地可以接收的数据编号范围;

Checksum:该校验和的计算和UDP首部中的校验和计算方法完全一样;
Urgent Pointer:紧急指针,我们在后面会详述这个字段;

接着是Options选项字段,最常见的选项是用以说明MSS;当TCP首部长度不是4字节的整数倍时需要进行填充。 

(2)6位标志字段: 

        URG:紧急指针位,该位为1,紧急指针字段才有效; 

        ACK:确认位,该位为1,确认序号才有效; 

        PSH:用以告知接收方尽快将数据提交给应用程序; 

        RST:复位标志,后面会讲TCP什么时候发送这个标志; 

        SYN:同步位,建立连接的时候用,用于同步双方的序号; 

        FIN: 撤销连接的使用用,用以告诉对方,主机不再往对端发送数据。 

(3)TCP首部的Options: 

选项格式有以下两种(第二种格式中的长度包含从选项类型到数据的总长度):
         选项类型
         选项类型        选项长度        选项数据
在RFC793中第一的选项只有三种,要求每一种TCP实现都必须支持。





0用于表示选项结束;1用于填充使每个选项为4字节的倍数(对于为什么要填充不是很明白?另外,不是每个TCP实现都会这么做);而MSS格式如下:





最新的TCP实现往往还支持时间戳选项和窗口扩大因子选项等一些其它选项。(详情可参考RFC1323)

TCP连接的建立与释放




TCP正常连接建立与释放的过程如上图所示,连接时需要三次握手,释放时需要四次握手。
三次握手过程: 

(1)客户端发送设置了SYN位的分节,序号字段为J,并且一般会通告MSS; 

(2)服务器端接收到客户端的请求,立马做出确认,并且通告本地的序号和MSS; 

(3)客户端确认,服务器端接收到确认,至此,连接建立。
四次握手过程: 
(1)客户端执行主动关闭,发送带有FIN标志的分节,说明客户端不会再往这个连接写数据; 
(2)服务器端确认这个FIN分节;(此时如果服务器不发送FIN,则连接处理半关闭状态) 
(3)服务器也发送FIN,说明服务器端也不发送数据了; 
(4)最后客户端也需要再做最后的确认。

同时打开:





同时关闭:




上面所述的正常连接建立和关闭,以及同时关闭和同时打开,囊括了TCP的所有状态,也说明了其状态转换过程。关于TCP的各种状态,最需要说明的是TIME_WAIT状态。

TIME_WAIT状态发生在连接释放时,己方发送完最后的ACK。该状态又称为2MSL(maximum segment lifetime)等待状态,意思是这个状态会持续2MSL的时间,之所以需要这样一个持续时间主要有两个原因:一是确保最后的ACK在丢失时能够重发;二是保证本连接中的数据包不会被将来新建的这个连接的副本接收(虽然出错的概率比较小 )。

最后说明两点:

(1)上面有提到MSS,这个MSS主要是为了避免IP分片的,MSS的计算到分析源码的时候我们再详细阐述; 

(2)2MSL又是如何计算的呢?分节的MSL生存时间又是怎么实现的呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: