TCP/IP三次握手原因讨论

u010152920 2015-06-04 08:36:55
TCP/IP 连接采用三次握手,用来建立可靠的连接

对于为什么需要采用三次握手的原因:

谢希仁版本的注解是:


他认为,当socket close之后,收到SYN+ack报文之后,会不理睬并抛弃报文。导致另外一边白白等待。。




但是socket close之后,再收到数据报文,应该返回RST,谢这里说不理睬也不应答,这个说法是不是有问题?

大家认为采用三次握手的原因是什么??
...全文
285 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
devnn 2017-03-11
  • 打赏
  • 举报
回复
引用 12楼super_admi 的回复:
假如我需要你给我的银行账户里打一千亿美元,那么操作流行如下: 1.我通知你:我的账号是1234567890,开户行是中国人民银行,你需要往里面打入一千亿美元; 2.如果你没有钱,或者不想打,当然可以拒绝。但如果你想真往我的账户里打了一千亿美元(,那就说明你是一个傻瓜)。但不论你是否打了,你都要告诉我。当然,如果你打了一千亿美女,你就应该通知我:一千亿美元已经到了我的账户。 3.如果被你拒绝,我当然没啥好说的,我们俩到此为止。但如果你打了一千亿美元过来,那么我得反馈给你:你这个傻瓜打的一千亿美元已经到账了。第三次握手结束。
想得美
pengzhixi 2015-06-05
  • 打赏
  • 举报
回复
最后一个ack包可以单独发,也可以和第一个数据包一起发,目的是需要服务端确定你收到了。因为里面有个ack number专业的应该是seq number,但是如果你最后一个握手的ack包既不单独发送也不随数据包一起发送那么服务端会有超时机制,会重新传syn+ack包。直到超时。
super_admi 2015-06-05
  • 打赏
  • 举报
回复
假如我需要你给我的银行账户里打一千亿美元,那么操作流行如下: 1.我通知你:我的账号是1234567890,开户行是中国人民银行,你需要往里面打入一千亿美元; 2.如果你没有钱,或者不想打,当然可以拒绝。但如果你想真往我的账户里打了一千亿美元(,那就说明你是一个傻瓜)。但不论你是否打了,你都要告诉我。当然,如果你打了一千亿美女,你就应该通知我:一千亿美元已经到了我的账户。 3.如果被你拒绝,我当然没啥好说的,我们俩到此为止。但如果你打了一千亿美元过来,那么我得反馈给你:你这个傻瓜打的一千亿美元已经到账了。第三次握手结束。
t657645537 2015-06-05
  • 打赏
  • 举报
回复
引用 10 楼 t657645537 的回复:
假定是A向B连接。 A向B发送一条连接请求,B收到请求。(第一次握手) 在B向A发送ACK1时,B不能确定这条ACK1能否发送到A,所以这时候,B是半连接状态。 (第二次握手) A收到B发送的ACK1,再向B发送ACK2,也就是告诉B,我收到你的ACK了,这时候A是连接状态, (第三次握手) B收到ACK2,再把状态置成连接状态。 这时候,双方就可以通信了。 -------------------------------- 来自《TCP/IP详解》卷一 的答案。 [color=#FF0000]这里面最重要是原因是B不能确定ACK1有没有成功发送给A。[/color] 所以,小伙伴们,懂了没??
能成功发送和接收到B的数据包,对A来说,就表示可以正常连接了。 同样,对B来说也一样,所以三次握手正好。 同理,释放连接的四次握手,也是这个道理。
t657645537 2015-06-05
  • 打赏
  • 举报
回复
假定是A向B连接。 A向B发送一条连接请求,B收到请求。(第一次握手) 在B向A发送ACK1时,B不能确定这条ACK1能否发送到A,所以这时候,B是半连接状态。 (第二次握手) A收到B发送的ACK1,再向B发送ACK2,也就是告诉B,我收到你的ACK了,这时候A是连接状态, (第三次握手) B收到ACK2,再把状态置成连接状态。 这时候,双方就可以通信了。 -------------------------------- 来自《TCP/IP详解》卷一 的答案。 [color=#FF0000]这里面最重要是原因是B不能确定ACK1有没有成功发送给A。[/color] 所以,小伙伴们,懂了没??
忘世麒麟 2015-06-05
  • 打赏
  • 举报
回复
引用 8 楼 baijiaheizhiganmao 的回复:
你可以看一下:Unix网络编程的前面几章.
该问题需要辩证的看:比如UDP为什么就没有这样的情况,使用3次握手和不适用3次的原因是什么?为什么不用4次(SCTP协议使用4次),SCTP是一个比较新的协议,他使用4次的优势是什么?
忘世麒麟 2015-06-05
  • 打赏
  • 举报
回复
你可以看一下:Unix网络编程的前面几章.
七擒关羽 2015-06-05
  • 打赏
  • 举报
回复
那有这么复杂 连接请求,连接请求应答,连接确认应答 让两边都形成闭环来确认连接的成功
u010152920 2015-06-04
  • 打赏
  • 举报
回复
引用 1 楼 FightForProgrammer 的回复:
他的那个说法是在没有建立连接的前提之下吧 目的已有一个:确保客户端和服务器建立可靠连接。 当然,越能节省资源的方案越好;需要综合其他因素一起考虑采用的方案
他的解释不靠谱呀,收到syn报文之后,如果没有连接,应该是返回RST报文啊。 两次为什么不行?他的解释就有问题
ForestDB 2015-06-04
  • 打赏
  • 举报
回复
http://wenku.baidu.com/link?url=tz-3Dpwj-JSJQdG6vSo0J1L1G9oJS4eQJjYgogieIzgjdNNLmj-U9EpWhOnVthz4ANEacZCqdeG7_tqUoyEsVmTqmXIzgWR9IBP3BwXndmy 计算机网络 谢希仁 第三版 第一章习题答案 请看第13题 所以个人的理解的三次握手,就是相互意思一下,表示可以通信即可。
pengzhixi 2015-06-04
  • 打赏
  • 举报
回复
ACK里面一般都要包含滑动窗口的大小
碼上道 2015-06-04
  • 打赏
  • 举报
回复
就是两端各一个来回,中间节省一次,就是三次
FightForProgrammer 2015-06-04
  • 打赏
  • 举报
回复
他的那个说法是在没有建立连接的前提之下吧 目的已有一个:确保客户端和服务器建立可靠连接。 当然,越能节省资源的方案越好;需要综合其他因素一起考虑采用的方案

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧