设为首页 加入收藏

TOP

TCP为什么三次握手过程
2012-11-08 09:34:18 】 浏览:4014
Tags:TCP 为什么 握手 过程

 

记得有次在腾讯面试,被问到TCP的三次握手,问题是为什么要是3次,不记得当时是怎么回答了,不过应该是没回答好。

因为当时实在太紧张了,本来那次去面试hr告诉我只面试助总,不知为什么后来竟然要增加个面试总经理,这个总经理现在可是腾讯的副总裁了,问题都比较难。

那为什么要是三次呢,在网上找了下,有这样的答案:

1. TCP的三次握手可以明确连接请求的有效性,防止已过期的连接再次传到被连接的主机。

如果采用两次的话,会出现下面这种情况。比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;
于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。传完东西后,断开。

结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上了,这个时候B机就在等待A传东西过去。

2. 三次握手改成仅需要两次握手,死锁是可能发生

考虑计算机A和B之间的通信,假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑A是否收到自己的连接请求分组。在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。而A在发出的分组超时后,重复发送同样的分组,这样就形成了死锁。


 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇 C++使用libcurl做HttpClient 下一篇ASIO学习笔记:Sync/Async、Block..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目