计算机网络-运输层 三次握手和四次挥手

继续上篇文章中提到的,这节中我们将详细讨论TCP的建立与拆除过程,也就是我们常听到的三次握手和四次挥手。

建立TCP连接

在了解TCP连接前我们需了解部分TCP报文段结构。TCP的首部报文除了源端口号和目的端口号外,还存储有上篇文章中提到过的分组序号确认号窗口长度检验和等信息,除此之外,还有一个6比特长度的标志字段,用于标识连接的建立和拆除(如SYN、RST、FIN)等。
上篇文章:计算机网络-运输层
现在假设一台客户机上的一个应用进程与一个服务器上的一个进程建立连接,该客户应用进程应首先通知客户TCP,而客户TCP将会和服务器TCP产生报文的一系列交换:

第一次握手

客户端的TCP先向服务器TCP发送一个不包含应用层数据的报文段,同时在该报文段首部中的标志位SYN比特置为1,并且记录这个报文的初始序号client_isn,然后这个报文封装进IP数据报发送给服务器。

第二次握手

当装有TCP SYN报文段的IP数据报到达服务器,服务器将读取该报文段,为TCP连接分配缓存和变量 ,并向客户TCP发送允许连接的报文段。同样,该报文段也不包含应用层数据,将SYN比特置为1,其次,该TCP报文段序号将置为client_isn+1。

第三次握手

当客户端收到TCP SYN ACK报文后,客户也为该TCP连接分配缓存和变量,这时,表明TCP连接已经建立了,接下来报文中SYN比特会被置为0,可以负载需运输到服务器中的应用层数据了。
TCP三次握手  报文段交换

终止TCP连接

当参与TCP连接的一方提出终止该连接后,双方也是经过一系列报文的交换,然后断开TCP连接,释放之前的TCP缓存和变量。另外,不同于TCP建立过程,TCP 连接的终止过程双方将还会在各种TCP状态间变化。

第一次挥手

当客户端应用进程要关闭TCP连接时,客户端TCP将发送一个FIN比特置为1的、不带应用层数据的报文段,同时,客户将进入FIN_WAIT_1状态。
处于FIN_WAIT_1状态的客户端TCP会等待一个来自服务器的TCP ACK报文段。

第二次挥手

服务器TCP收到TCP FIN报文段后,就会进入CLOSE_WAIT状态,然后向客户端发送一个TCP ACK FIN报文。同时,如果这时客户端还有需要发给对方的数据,会放在这个报文中一并发送给客户端。
处于CLOSE_WAIT状态的服务器会进入一个等待关闭连接的状态,这时服务器因为不会再收到IP数据报,故它将处理自己接收缓存中的数据,然后向对方一个TCP FIN报文段。

而收到TCP ACK FIN的客户端会进入FIN_WAIT_2状态。处于FIN_WAIT_2的客户端会等待一个会等待一个来自服务器的TCP ACK报文段,随后进入一个计时关闭状态。

第三次挥手

当服务器处理完自己接收缓存中的数据后,会向客户发送一个TCP FIN报文段,然后会进入LAST_ACK状态。
处于LAST_ACK状态的服务器会等待一个来自客户的ACK应答,收到ACK报文段后就会关闭其TCP连接。

第四次挥手

收到服务器发送的TCP FIN的客户端会发送一个ACK应答报文,然后进入TIME_WAIT状态。
处于TIME_WAIT状态的客户端不会立即关闭TCP连接,而是在等待2MSL(最大报文生存时间)时间后就会关闭它的TCP连接。

在这里插入图片描述

那么问题来了,为什么需要TIME_WAIT而不是直接关闭呢?为什么TIME_WAIT需要2MSL呢?
原来,如果没有TIME-WAIT,客户端就会直接进入CLOSED状态,这时候如果立即重启客户端并使用相同的端口,而且再假设因为网络中种种原因最后一次ACK丢失了,服务端就会重复TCP FIN请求,这时这个FIN就会被重新启动的客户端接收到;或者新启动的客户端向服务端发起请求的时候,因为服务端正在等待最后一次ACK,因此新连接请求发送的SYN就会被服务端认为时请求码错误,服务端就会回复报文重置连接。
而等待2MSL时间就是为了保证在两个传输方向上的尚未接收到或者迟到的报文段已经消失,如果接收到了重发的FIN请求能够进行最后一次ACK回复,让在网络中延迟的FIN/ACK数据都消失在网络中,不会对后续TCP连接造成影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值