ICode9

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

TCP三次握手及原因

2022-05-26 17:00:22  阅读:220  来源: 互联网

标签:握手 SYN TCP 三次 服务器 序列号 报文 客户端


三次握手过程

 一开始客户端处于closed状态,服务器处于listen状态

  1. 第一次握手:客户端向服务器发送一个SYN报文,并指明客户端的初始化序列号isn_client,此时客户端处于SYN_SENT状态;
  2. 第二次握手:服务器收到客户端的SYN报文后,会返回SYN+ACK报文,其中SYN指明服务器的初始化序列号isn_server,ACK的值是客户端的初始化序列号ISN_client+1,表明已经收到了来自客户端的syn报文,此时服务器处于SYN_RCVD状态;
  3. 第三次握手:客户端收到服务器的报文后,会返回一个ACK报文,它的值是isn_server+1,之后客户端进入established状态,服务器收到ACK报文后,也进入established状态,此时双方已建立好连接。

三次握手过程中,第一次和第二次不能携带数据,第三次可以。

三次握手的原因

  • 三次握手才可以阻止重复历史连接的初始化(主要原因)
比如有这种情况,客户端发送第一次SYN报文后发生网络堵塞,服务器没有收到,客户端又发送了一个新的SYN报文,但由于种种原因,旧的syn报文先到达服务器,此时服务器就会返回一个SYN+ACK报文给客户端,客户端可以根据收到的ACK的值结合自身上下文判断这是一个历史连接,然后会发送RST报文给服务器中止这次连接。两次握手无法阻止历史连接,两次握手的情况下,服务器在第一次收到客户端的SYN报文后就进入established状态,这时候服务器就已经可以发送数据了,如果这次是历史连接,服务器此时不知情的情况下发送了数据,服务器要收到客户端的RST报文才会断开连接,就会浪费资源。
  • 同步双方的初始序列号

序列号是保证可靠传输的一个关键因素,两次握手只能保证一方的初始序列号可以被对方成功接收。

  • 避免浪费资源
如果是两次握手,服务器在收到SYN报文时就会进入established状态,当客户端的SYN阻塞了,就会重复发送多次SYN报文,服务器每次收到请求就会建立一个连接,这会得到许多无效连接,造成不必要的资源浪费。

标签:握手,SYN,TCP,三次,服务器,序列号,报文,客户端
来源: https://www.cnblogs.com/unclejac/p/16314082.html

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

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

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

ICode9版权所有