关于 TCP 中的三次握手

2019-07-16 17:45:57 +08:00
 v2byy

TCP 是面向连接的可靠传输协议。假设链路很可靠,不会丢包,那么可不可以只有两次握手?

3144 次点击
所在节点    程序员
27 条回复
zhng920823
2019-07-16 19:27:21 +08:00
@azh7138m #10 S 和 C 方向是不是反了
CEBBCAT
2019-07-16 20:19:04 +08:00
@v2byy #17 链路层管你个锤子的 SEQ
CEBBCAT
2019-07-16 20:23:10 +08:00
> https://github.com/jawil/blog/issues/14

“已失效的连接请求报文段”的产生在这样一种情况下:client 发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。本来这是一个早已失效的报文段。但 server 收到此失效的连接请求报文段后,就误认为是 client 再次发出的一个新的连接请求。于是就向 client 发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要 server 发出确认,新的连接就建立了。由于现在 client 并没有发出建立连接的请求,因此不会理睬 server 的确认,也不会向 server 发送数据。但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。这样,server 的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client 不会向 server 的确认发出确认。server 由于收不到确认,就知道 client 并没有要求建立连接。”

现在你知道为什么要有第三次握手了吗?
petelin
2019-07-16 20:48:35 +08:00
#15 #23 楼 正解
azh7138m
2019-07-16 20:56:48 +08:00
@zhng920823 哦,那把 C 换成 M 吧(
其实只是想说明下 A/B,下意识写成了 CS,然后 ZZ 了一下,就。。。
nnnToTnnn
2019-07-17 08:55:28 +08:00
@cjpjxjx 第四次是挥手
shuizhengqi
2019-07-17 10:28:01 +08:00
假设链接可靠,为什么还需要握手,直接发不就完了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/583519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX