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

本文深入探讨TCP/IP协议中的TCP连接建立与终止过程,包括TCP首部结构、标志字段、三次握手与四次挥手,以及TIME_WAIT状态的作用。详细解析TCP的可靠性机制和连接管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

`R]AJVQ_FI5}634E}5M]M(H

(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:紧急指针,我们在后面会详述这个字段;接着是选项字段,最常见的选项是用以说明MSS;当TCP首部长度不是4字节的整数倍时需要进行填充。
(2)6位标志字段:
        URG:紧急指针位,该位为1,紧急指针字段才有效;
        ACK:确认位,该位为1,确认序号才有效;
        PSH:用以告知接收方尽快将数据提交给应用程序;
        RST:复位标志,后面会讲TCP什么时候发送这个标志;
        SYN:同步位,建立连接的时候用,用于同步双方的序号;
        FIN: 撤销连接的使用用,用以告诉对方,主机不再往对端发送数据。
(3)TCP首部的Options:
选项格式有以下两种(第二种格式中的长度包含从选项类型到数据的总长度):

         选项类型

         选项类型        选项长度        选项数据

在RFC793中第一的选项只有三种,要求每一种TCP实现都必须支持。

P_J26BEH2ZEPN~D99BR``Q3

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

QQMO12CS]7_H1K[RY@WM19J

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

TCP连接的建立与释放

Q{[)QJ~1O`02COOP~1313EN

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

三次握手过程:
(1)客户端发送设置了SYN位的分节,序号字段为J,并且一般会通告MSS;
(2)服务器端接收到客户端的请求,立马做出确认,并且通告本地的序号和MSS;
(3)客户端确认,服务器端接收到确认,至此,连接建立。

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

同时打开:

O7M)3VG][A16U2IJUYRZ[VN

同时关闭:

G~P)FF5N~9O_55%T($@XVYR

上面所述的正常连接建立和关闭,以及同时关闭和同时打开,囊括了TCP的所有状态,也说明了其状态转换过程。关于TCP的各种状态,最需要说明的是TIME_WAIT状态。TIME_WAIT状态发生在连接释放时,己方发送完最后的ACK。该状态又称为2MSL(maximum segment lifetime)等待状态,意思是这个状态会持续2MSL的时间,之所以需要这样一个持续时间主要有两个原因:一是确保最后的ACK在丢失时能够重发;二是保证本连接中的数据包不会被将来新建的这个连接的副本接收(虽然出错的概率比较小 )。

最后说明两点:

(1)上面有提到MSS,这个MSS主要是为了避免IP分片的,MSS的计算到分析源码的时候我们再详细阐述;
(2)2MSL又是如何计算的呢?分节的MSL生存时间又是怎么实现的呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值