如何理解 TCP 三次握手原理?为什么需要三次握手,而不是二次或者四次?

admin 2026-04-16 04:35:07 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文通过美伊会谈的生动比喻阐述TCP三次握手原理,指出二次握手可能导致信息不同步(如约定时间冲突),四次握手虽可行但最后一次确认冗余。三次握手既能确保双方序列号同步又高效,同时分析了特殊场景下同时发起连接需四次握手的例外情况。 综合评分: 82 文章分类: 网络安全,技术标准,WEB安全


cover_image

如何理解 TCP 三次握手原理?为什么需要三次握手,而不是二次或者四次?

原创

车小胖谈网络 车小胖谈网络

车小胖谈网络

2026年4月14日 17:51 中国香港

在小说阅读器读本章

去阅读

2次握手

美国:4.10上午10点伊斯兰堡好好聊聊。(消息发出)

伊朗:上午11点谈谈吧(消息发出)

双方究竟10点聊聊还是11点谈谈,无法确定。

为何无法确定?

假如伊朗发的消息丢了,没有到达美方。美方以为双方约定的是10点。美方10点到,没有看到伊朗,怒,拍桌子走了。。。

伊朗以为美方知道自己选择的是11点,故11点到达会场。看到美方不在,以为被放了鸽子。怒,回酒店。。。

3次握手

美国:4.10上午10点伊斯兰堡好好聊聊。(消息发出)

伊朗:上午11点谈谈吧(消息发出)

美国:好的,11点不见不散。

双方约定11点伊斯兰堡见面聊,双方信息同步。

4次握手

美国:4.10上午10点伊斯兰堡好好聊聊。(消息发出)

伊朗:上午11点谈谈吧(消息发出)

美国:好的,11点不见不散。(消息发出)

伊朗:好吧,11点谈谈吧(消息发出)

双方约定11点伊斯兰堡见面聊,双方信息同步。但是,最后一次伊朗发的消息完全是多余的。因为如果美方不知晓11点谈,绝对不会发出11点不见不散的,对吗?说明自己的消息已经到达美方。

既然伊朗知道11点碰头,美方也知晓11点会面,为何要发最后一次“好吧,11点谈谈吧”?完全是多余的!

2次握手信息交互不充分,无法达成信息同步。4次握手虽然可以达成信息同步,但是最后一次握手属于冗余信息。3次握手既可以完成信息同步又高效,故TCP选择3次握手。

假如伊朗为Server方,每秒接收1万次TCP连接请求。使用3次握手比4次握手可以少发送10000 packet per second,显然效率更高。

但是,在simultaneous TCP连接的场景下,则必须使用4次握手,3次握手是不充分的。

上文的小故事,默认把美方当成active一方(Client),即主动发出SYN报文。默认把伊方当成paasive一方(Server),接收到对方的SYN报文,发出自己的SYN +ACK报文。然后等待对方发出ACK报文。这是典型的TCP三次握手。

如果通信双方都是Client,都会active发出自己的SYN报文,这个就是simultaneous TCP连接的场景。

Alice:  SYN + ISN 8888

Bob:   SYN + ISN 9999

Bob:ACK + ACK Number = 8889

Alice:ACK + ACK Number =10000

这个流程图,就是典型的simultaneous TCP连接的场景。在时序上有可能Alice先发SYN + ISN 8888,也有可能Bob先发SYN + ISN 9999,没有关系的,都需要4次消息握手。

如果Bob手慢了,在接到Alice的SYN + ISN 8888消息时,自己还没有发出自己的SYN + ISN 9999,会如何?

当然是丢包了,因为socket match == NULL。

丢包之后,Bob准备好了,发出自己的SYN + ISN 9999。

当这个packet到达Alice方的时候,很显然socket 可以matched,故接收。

如果在接收SYN + ISN 9999之前,Alice的重传定时器已经重传了SYN + ISN 8888,则需要4次消息握手才能完成TCP连接,如上文的4次握手流程。

如果在接收packet之后的一瞬间,定时器fired,则可以简化为:

Alice:  SYN + ISN 8888  (丢失)

Bob:   SYN + ISN 9999

Alice:  SYN + ISN 8888 + ACK Numbe 10000(重传 + ACK对方)

Bob:   ACK + ACK Number = 8889

不算上第一个被丢的packet,则简化为3次握手,尽管概率上无限接近于0。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:车小胖谈网络 车小胖谈网络 车小胖谈网络《如何理解 TCP 三次握手原理?为什么需要三次握手,而不是二次或者四次?》

评论:0   参与:  0