为啥TCP握手只要3次但挥手却要4次?

网络 网络管理
TCP建立的是“全双工通信”。也就是单个TCP连接,本质上其实是由两个相互独立却方向相反的数据通道组成。

简而言之就是,在执行挥手前已经有“历史负担”了,但在握手前是没有的。

需要强调的一点是,TCP建立的是“全双工通信”。也就是单个TCP连接,本质上其实是由两个相互独立却方向相反的数据通道组成。

图片图片

基于此,在建立连接时,其实是由两组连接操作来完成,两组操作一共4个报文,也就是“四次握手”。

图片图片

但握手阶段没叫“四次握手”而是称为“三次握手”则是因为发生了“报文合并”。而之所以能够合并则是如开头所说,双方没有“历史负担”都是从零开始,可以同时建立连接。

当然,这里不是绝对的同时,建立连接总要有一方先发送SYN连接请求报文,然后接受方再响应。这时接受方就可以在响应报文ACK中合并自己的SYN连接报文,然后“一箭双雕”的发送。

图片图片

于是,原本的“四次握手”就因为中间两个报文的合并变成“三次握手”了。

但是到了需要挥手断开TCP连接时,全双工的两条数据通道都已经有了数据流,这时很难做到当其中一条数据流决定关闭时,另外一条也恰好要关闭。这也就是开头说的,大家各自都有“历史负担”了。

图片图片

当然,两条数据流正好同时断开的可能性也是有的,那就只需要“三次挥手”,但因为是特殊情况不具备代表性,所以不能作数。

这就像两个关系好的哥们,刚毕业时都是光棍,很容易约到一起去做事。但等双方各自成家后就难了,就算双方都有意愿,对方也不再一个电话就能到,而是“你先去,我等会到了给你电话”。

责任编辑:武晓燕 来源: Web学社
相关推荐

2019-05-28 10:45:07

TCP3次握手数据传输

2023-10-24 15:22:09

TCPUDP

2015-10-13 09:42:52

TCP网络协议

2019-06-12 11:26:37

TCP三次握手四次挥手

2024-01-12 08:23:11

TCPACK服务器

2021-07-03 17:47:25

TCP控制协议

2021-01-29 06:11:08

TCP通信三次握手

2021-05-18 12:27:40

TCP控制协议

2019-02-01 09:38:16

2019-07-10 10:06:24

面试官三次握手四次挥手

2020-02-17 10:10:43

TCP三次握手四次挥手

2017-09-25 21:27:07

TCP协议数据链

2014-09-19 09:46:46

TCPIP

2019-05-05 05:39:23

TCP三次握手网络协议

2021-05-28 09:08:20

TCP连接序列号

2020-06-29 14:50:47

TCP状态ACK

2015-11-09 09:58:56

2023-10-28 09:07:57

TCP面试三次握手

2022-11-17 10:20:49

TCP三次握手四次挥手

2023-10-17 15:44:19

TCP四次挥手
点赞
收藏

51CTO技术栈公众号