关于 TCP 中的三次握手

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

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

3136 次点击
所在节点    程序员
27 条回复
BBCCBB
2019-07-16 17:51:01 +08:00
TCP 为什么是三次握手,而不是两次或四次? - HioHio 的回答 - 知乎
https://www.zhihu.com/question/24853633/answer/573627478


特么百度一下就有的东西,你还发上来
BBCCBB
2019-07-16 17:51:54 +08:00
双方需要协商初始序列号,肯定需要 ack,所以三次是必要的
v2byy
2019-07-16 18:00:21 +08:00
@BBCCBB 哈哈,我发现我还看过知乎上的这个问题
v2byy
2019-07-16 18:03:31 +08:00
@BBCCBB 但是在前两次握手中,双方都已经将 seq 发给对方了啊
cjpjxjx
2019-07-16 18:07:45 +08:00
三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天 balabala ……”

两次握手:
“喂,你听得到吗?”
“我听得到呀”
“喂喂,你听得到吗?”
“草,我听得到呀!!!!”
“你 TM 能不能听到我讲话啊!!喂!”
“……”

四次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,你能听到我吗?”
“……不想跟傻逼说话”

作者:匿名用户
链接: https://www.zhihu.com/question/24853633/answer/114872771
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
CEBBCAT
2019-07-16 18:11:46 +08:00
实践了多少年的东西,不是不让你提问,实在是人总是觉得自己想到了别人没想到的事儿。

积极探索很好啊,但不经思考和验证就发到网络上浪费大家时间就不好了
v2byy
2019-07-16 18:12:39 +08:00
@cjpjxjx 例子里的两次握手,是指有包丢了的情况。如果假设链路可靠,不会丢包呢?
BBCCBB
2019-07-16 18:14:08 +08:00
发给对方不代表对方收到了。 所以需要 ack 确认! 5 楼那个答案不可信。。。
mansurx
2019-07-16 18:20:26 +08:00
是时候拿出这张祖传老图了。


关于握手次数,楼主可以看下 QUIC 协议~
azh7138m
2019-07-16 18:22:32 +08:00
S ———- syn ————> C
S < —— syn&ack ———— C
S ————- ack —————> C


> 假设链路很可靠

ack 啥,直接发就是了,重新发明 UDP ?
goofool
2019-07-16 18:22:34 +08:00
假设不成立
kljsandjb
2019-07-16 18:27:03 +08:00
为了保证双方的收发能力都没问题
taogen
2019-07-16 18:35:45 +08:00
三次握手和可靠数据传输没有任何关系。三次握手是建立连接,可靠数据传输是由传输层和链路层相关算法实现。
pagxir
2019-07-16 18:37:54 +08:00
TCP 设计的一个目的就是运行在不可靠链路之上的。。。
xfriday
2019-07-16 18:47:21 +08:00
没有第三次握手,可以伪造源 ip 的
v2byy
2019-07-16 18:53:27 +08:00
@azh7138m 链路可靠,也需要拥塞控制啊,要考虑双方的收发能力吧
v2byy
2019-07-16 18:56:37 +08:00
@taogen 正如上面回答的,握手协商双方的 seq,如果没有 seq 号,链路层收到差错包,将之丢弃,就是通过 seq 来重传的,我觉得还是有关系的。
lhx2008
2019-07-16 18:59:40 +08:00
@v2byy 链路绝对可靠就不需要拥塞控制,链路也是可靠的,所以不存在绝对可靠的链路
zivyou
2019-07-16 19:07:31 +08:00
@lhx2008 链路绝对可靠也是需要拥塞控制的吧。发送方滑动窗口大小必须要考虑接收方的接收能力,不然包会被接收方丢弃。
OhYee
2019-07-16 19:25:25 +08:00
假设链路很可靠用 udp 啊
tcp 三次握手和链路可靠不可靠又没啥关系

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

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

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

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

© 2021 V2EX