TCP建立连接为什么是三次握手而不是两次握手?

dreamhunter_lan 2012-11-21 02:52:19
如题。两次的话会有什么问题?
...全文
8975 48 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2015-02-17
  • 打赏
  • 举报
回复
TCP的三次握手,保证了每一方都收到了对方的回应
Bobscript 2015-02-16
  • 打赏
  • 举报
回复
3次才能让双方确保对方既能发信息也能收信息。 如果只有两次:服务器不知道客户端能否接收信息。 --------------------- 第一次的作用:服务器知道客户端能发信息 第二次的作用:客户端知道服务器能返信息(自然也同时知道了服务器能收信息) 第三次的作用:服务器知道客户端能收信息
木渣渣 2014-12-16
  • 打赏
  • 举报
回复
我发短信给她了,她看到到没 ? 回我了,那说明她看到我发的短信了,我也要回她短信告诉她我已经看到她的回信了。 顺便表白吧(黑下)好忐忑,她不回我,我就不知道她有没有看到我这条短息还是拒绝回复我了啊? 生活例子,在未得到回复之前,你永远都不知道你新发的短信对方到底有没有看到。 3次只能说明双方都在线,可以交流了,但是不保证第四次就出现问题。
huangleijay 2014-09-12
  • 打赏
  • 举报
回复
ok,已经被详尽了,不多说了
我看你有戏 2014-07-30
  • 打赏
  • 举报
回复
中国不是有句古话叫事不过三吗,3次握手符合这个规矩,老一辈的东西还是挺值得研究的
我看你有戏 2014-07-30
  • 打赏
  • 举报
回复
这种东西是科学家研究出来的,大伙都公认的东西,一定要去问为啥,还真不好说 两次我觉得也可以啊,只是科学家感觉三次更加保险吧 就好比去淘宝买东西,总是会多确认一些细节的问题,确保安全,一样的道理
wansbest 2014-07-29
  • 打赏
  • 举报
回复
TCP是全双工的,另外TCP建立连接两端需要互相通告MSS值以及窗口大小。按照楼主的假设,建立连接只做两次握手,A向B发送一个SYN,A向B通告了自己的MSS值以及窗口大小了,按照TCP可靠的特性,B必须向A发送一个ACK,两次握手完成。这时候 B--->A这条数据通道没有问题了,因为B已经知道A端的信息(mss win),但A--->B这条还存在问题,A根本不知道B端的信息。所以B必须也要发送一个SYN给A,因为ACK无需占用一个单独的消息,所以B发给A的SYN里面ACK位至1,这样就把ACK和SYN合成一个消息了。根据TCP标准,每一个消息,对端都必须对其做确认,所以A在收到B发送过来的SYN之后,需要给B一个ACK应答。这么以来,TCP建立连接就至少需要三次握手了。如果非要钻牛角尖,我就不知道对端信息,就要做数据发送,能不能行?那也可以,把两端的协议栈实现,改了就成,但那已经不叫TCP了,因为已经没遵循TCP标准了。
lming_08 2014-03-21
  • 打赏
  • 举报
回复
准确的说,无穷次都无法确认双方建立了连接。但一般只需要3次就可以了
bedynamic 2014-03-21
  • 打赏
  • 举报
回复
引用 1 楼 leigema 的回复:
你根据什么来说两次可以呢? 1.客户端发一个syn 2.服务端回一个ack并发一个syn。 3.客户端再回一个ack。 最少要发3个分组,所以是3次握手啦。 为什么要3次因为TCP要建立可靠的连接。在三次握手中协商了一些事。
+1
__phoenix 2014-03-21
  • 打赏
  • 举报
回复
三次是为了确保双方既可以发送也可以接受信息。
shiguojie19892 2014-03-21
  • 打赏
  • 举报
回复
引用 楼主 dreamhunter_lan 的回复:
如题。两次的话会有什么问题?
两次握手确定了客户可以向服务端发送,但是服务端不能确保自己(服务端)一定能向客户端发送。 所以需要第三次,让服务端确定客户收到了自己的确定请求。 ************************************************ 因为服务端会接受很多歌客户端的连接,所以有可能服务端回复了多个客户的请求,但是服务端自己不清楚自己回复的是哪个客户端,是否正确。
  • 打赏
  • 举报
回复
引用 4 楼 dreamhunter_lan 的回复:
[quote=引用 3 楼 AAA20090987 的回复:] 我想LZ应该是想问: 1.客户端发一个syn,2.服务端回一个ack。这样不就行了吗?为什么还要后面的动作呢? 呵呵。
你就不能直接往下说吗?哈哈 求解释[/quote] 其实在IP层,从A点到B点,和从B点至A点是走不同的路由的,所以双方都要测试一下路径!!!
赵自行 2014-03-20
  • 打赏
  • 举报
回复
引用 35 楼 ddsszzy 的回复:
我觉得,楼主要是有机会的话,看一下《计算机网络:系统方法(第4版)》(中文版)第231页中原话,如果第三次丢失,那么连接可以照常进行!
如果客户机到服务器的ACK报文段丢失(相应于三次握手的第三次),链接仍能正常工作 这是因为客户端已经处于ESTABLISHED状态,所以笨死应用进程可以向另一方发送数据 每个报文段都有ACK标志置位,而且为正确数据,所以第一个报文段到达服务器时,服务器也也转移到ESTABLISHED状态 这就是在说三次握手协议的第三次只是保证正确用的,意义不像前两次一样大,可以丢失。
赵自行 2014-03-19
  • 打赏
  • 举报
回复
我觉得,楼主要是有机会的话,看一下《计算机网络:系统方法(第4版)》(中文版)第231页中原话,如果第三次丢失,那么连接可以照常进行!
N_Sev7 2014-03-19
  • 打赏
  • 举报
回复
A---1----->B B知道A可以给自己发信息 但是不知道自己能否给A回信息 A<---2-----B A知道B收到了自己的信息,现在A即知道自己可以给B发,也知道B可以给自己回,但是B不知道自己回的A是否收到 A----3---->B 因此就需要第三次了 这样A和B都知道了信息能互相发送成功 开始建立连接!!!
zhuobattle 2014-03-19
  • 打赏
  • 举报
回复
类似红蓝军问题,应该说3次基本可以确认双方知道这个信息,而且对方也知道另一方知道这个信息。 但是如果要一直循环下次死磕,那么基本无解。
derekrose 2014-03-19
  • 打赏
  • 举报
回复
为了保证服务端能接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
mujiok2003 2014-03-19
  • 打赏
  • 举报
回复
引用 30 楼 mujiok2003 的回复:
相互交换seq number至少需要三次, 而sequence number的ACK正式TCP可靠性的保障。
正式--->正是
mujiok2003 2014-03-19
  • 打赏
  • 举报
回复
相互交换seq number至少需要三次, 而sequence number的ACK正式TCP可靠性的保障。
blh 2014-03-19
  • 打赏
  • 举报
回复
不用三次的话,server不能确定client是否收到自己的消息 如果没有收到,可能client根本没收到,或者client响应了,但server没收到 如果你用过对讲机你就会明白: C ->S: 你能听到吗? S->C: 听到。你能听到我吗? C->S:听到。
加载更多回复(28)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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