ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为什么要进行三次握手?两次握手可以吗?

2022-05-03 18:01:14  阅读:210  来源: 互联网

标签:握手 确认 TCP 两次 三次 序列号 报文 服务端 客户端


两次握手不行,原因如下:

  • 为了防止通信双方建立错误的连接;

如上图所示,假设客户端开始给服务端发送了一个序列号为99的synTCP请求连接报文,不巧的是这个syn报文由于网络拥塞而没有及时到达服务端,然后客户端又发送了一个序列号为399的SYN请求报文给服务端,这时前面那个超时的报文恰好到达了服务端,而服务端确认了这个报文,从而服务端建立了TCP连接,然后客户端收到了序列号为99的请求报文的确认报文,于是他就一脸懵逼,但是因为两次握手已经达成,双方建立的TCP错误连接已经没有办法更改了,从而造成了通信双方建立错误的TCP连接;如果是三次握手,那么客户端会对这个错误的确认报文回复一个reset报文,从而防止建立TCP错误连接;

  • 为了通信双方各自确认初始序列号;

通信双方是通过累积确认机制进行可靠的TCP通信的,因此通信双方的初始序列号应该都得到确认,而两次握手明显只能确认客户端的初始序列号,服务端的初始序列号无法得到确认,从而无法建立可靠TCP连接;

  • TCP连接是全双工的,两次握手只能使客户端的发送通道建立,而不能使服务端的发送通道建立;

TCP连接是全双工的,客户端发送SYN报文,服务端给予确认,从而能够建立客户端到服务端的发送通道(因为客户端知道服务端能够收到数据),而服务端发送SYN报文给客户端,客户端给予确认,同样也会建立从服务端到客户端的发送通道,从而建立全双工的TCP;

标签:握手,确认,TCP,两次,三次,序列号,报文,服务端,客户端
来源: https://www.cnblogs.com/yywyy/p/16218902.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有