图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子

网络 网络管理
我们注意到了TIME_WAIT状态,客户端发送最后一个 ACK段后,连接不会立即终止,由于不能保证最后发送的数据包确实已经到达,客户端或服务器最初将保持时间等待状态,直到 ACK 段和任何新 FIN 段的最大生命周期(MSL,Maximum Segment Lifetime )才能彻底进入CLOSED状态。

​本节,瑞哥继续带您图解网络,探究一下TCP四次挥手断开连接背后的原理。

让我们直接开始!

TCP三次握手简单回顾

TCP 是一种全双工协议,为了建立连接,通过三次握手就能建立可靠的链路:

  • 首先客户端将发送一个SYN消息(SYNchronize 的缩写)表示客户端要建立与服务端的连接。
  • 服务端收到客户端的SYN报文后,回复SYN-ACK报文,包括一个SYN序列号和一个ACK号。
  • 客户端收到服务端的 SYN-ACK 消息后,向服务端发送ACK消息。

图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子

TCP三次握手简单过程

TCP四次挥手

生活中的例子

连接的两端都可以终止 TCP 连接,甚至单侧终止也是可能的,这也称为半开连接,即使一方已经断开连接,另一方仍然可以传输数据。

我们说的四次挥手,指的是双方断开连接。

我们先以生活中例子来解释一下:

图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子

四次挥手-生活中的例子:分手

小美和小明是大学同学,刚上大学的时候,小明高大帅气,还会打篮球,小美对他非常崇拜,小明也非常喜欢小美,就这样,在一个夜黑风高的夜晚,他们成了情侣。

不过随着时间的推移,加上环境的变化,两个人渐渐失去了热情,所以小美向小明提出了分手。分手的过程就类似于TCP四次挥手:

  • 第一次:小美对小明说“小明,相处那么长时间了,我觉得我们不合适,分手吧”
  • 第二次:小明听完其实没有太吃惊,但是也不能直接答应啊,不然不就成了铁打的渣男了嘛,所以第二次挥手,他礼貌的说了一下“别,我还有话和你说,其实你蛮好的,不仅人长得漂亮,性格也挺好的,也通情达理,学习也蛮刻苦的,非常开心在大学能够遇到你!”
  • 第三次:小明哔哩啪啦也讲的差不多了,是时候露出真面目了,随后他就对小美说“既然你想好了,我再纠缠你也没意思,那就和平分手吧~”
  • 第四次:小美听完小明一大堆虚伪的话,非常生气,就甩了一句“那就这样了,互删微信吧,再见!”

然后小明的微信上就会出现大大的红感叹号!

图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子

微信拉黑

这就是四次挥手,是不是很形象?

下次假如阁下忘了TCP四次挥手的步骤,我想你可以把自己当作渣男想象一下

好了,咱们言归正传,我们好好分析一下TCP四次挥手的原理。

四次挥手原理分析

图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子

四次挥手过程

如图,客户端想要和服务端断开连接:

  • 客户端会发送一个 FIN 消息,FIN是FINISH的缩写,FIN 消息的目的是使 TCP 能够优雅地终止已建立的连接,然后客户端进入称为FIN-WAIT 状态的状态,在 FIN-WAIT 状态下,客户端继续接收来自服务端的消息,并继续处理已经在队列中的消息,但客户端不会发送任何额外的数据。

这个可以联想,小美在发分手消息过程中,男朋友小明一直在发消息给小美,小美没看的消息就进入到了队列,队列中的消息,小美还是会看的,但是不会再主动回复这些消息。

  • 服务端向客户端发送ACK消息,确认他已经收到了结束的消息了,这个时候服务端将不再接受来自客户端的数据。
  • 服务端可以继续向客户端发送数据(最后交代点事情),如果服务端没有更多数据要发送,它也会通过发送 FIN 消息来终止连接。
  • 然后客户端向服务端发送ACK确认收到了服务端主动断开的消息。

至此,TCP连接断开!

图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子

TCP四次挥手——带序列号

如图,M和N都是序列号,分别代表是客户端和服务端,也是为了区别服务端和客户端的,比如看到M就想到消息是来自于客户端,看到N就想到消息来自于服务端。

所以过程又变成:

  • 客户端向服务端发送FIN M给服务端。
  • 服务端向客户端发送 ACK M+1,客户端收到M+1,就知道服务端收到了自己的Finish消息。
  • 服务端向客户端发送FIN N代表是服务端主动向客户端发送结束消息。
  • 客户端向服务端回复ACK N+1消息,服务端看到是自己的N,所以就知道客户端也收到了自己的结束消息了。

至此TCP就成功断开连接了。

断开连接的最大生命周期

这里还是举个例子,小美在发完“那就这样了,互删微信吧,再见!”的消息后,会最多等待四分钟,给小明机会去挽留:

图解网络:揭开TCP四次挥手背后的原理,结合男女朋友分手的例子

等待四分钟

假如在这四分钟内,小明没有挽留,那不好意思,彻底结束吧!Game Over!

在【四次挥手原理分析】图中,我们注意到了TIME_WAIT状态,客户端发送最后一个 ACK段后,连接不会立即终止,由于不能保证最后发送的数据包确实已经到达,客户端或服务器最初将保持时间等待状态,直到 ACK 段和任何新 FIN 段的最大生命周期(MSL,Maximum Segment Lifetime )才能彻底进入CLOSED状态。

这种机制主要出于两种考虑:

  • 防止使用相同源地址、源端口、目的地址和目的端口的其他 TCP 连接接收到延迟的数据段。
  • 保证TCP连接被远程正确关闭,即等待被动关闭连接的一方收到ACK对应的消息。
责任编辑:武晓燕 来源: 今日头条
相关推荐

2019-10-23 07:00:13

TCP三次握手四次挥手

2020-12-14 07:08:37

MSL网络Linux

2019-07-16 11:06:09

TCP四次挥手半关闭

2024-07-11 10:55:27

2021-10-14 20:33:16

TCP连接关闭

2015-10-13 09:42:52

TCP网络协议

2024-01-12 08:23:11

TCPACK服务器

2022-07-05 22:18:08

TCP网络

2022-08-05 11:03:59

TCP 四次挥手三次握手

2021-01-29 06:11:08

TCP通信三次握手

2021-05-18 12:27:40

TCP控制协议

2023-10-24 15:22:09

TCPUDP

2019-01-25 09:21:30

2020-02-17 10:10:43

TCP三次握手四次挥手

2019-06-12 11:26:37

TCP三次握手四次挥手

2017-09-25 21:27:07

TCP协议数据链

2019-07-26 07:02:05

TCP四次挥手网络协议

2023-09-02 22:02:58

TCP协议四次挥手

2021-07-03 17:47:25

TCP控制协议

2019-02-01 09:38:16

点赞
收藏

51CTO技术栈公众号