ICode9

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

TCP三次握手与四次挥手

2021-02-20 09:34:17  阅读:151  来源: 互联网

标签:主机 报文 SYN TCP 连接 四次 FIN 握手 客户端


三次握手

  1. 客户端发送SYN(seq=x)报文给服务器端,进入SYN_SEND状态。
  2. 服务器端收到SYN报文,回应一个SYN(seq=y)ACK(x+1)报文,进入SYN_RECV状态。
  3. 客户端收到服务器端的SYN报文,回应一个ACK(y+1)报文,进入Established状态。

在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(seq=x)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。当服务器收到客户的确认包时,删除该条目。如果未收到客户确认包,循环重传,如果重传次数超过系统规定的最大重传次数,删除该条目。

  • SYN:同步序列编号(Synchronize Sequence Numbers)。
  • ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。

为什么不是两次握手

为了防止无效的连接请求报文到达B服务机。

因为有可能A先发了一个连接请求报文,但是由于网络的1问题,迟迟没有到达B主机,这时候,A主机就超时重传了该报文,然后B主机响应了该请求报文,但是不妙了,第一个报文居然又到了B主机,那么B主机就会把它作为新的连接请求,如果只有两次握手,那么B主机对于该连接请求也会建立连接,但是如果是三次握手,B主机发出确认报文后,A主机不予理睬,这样就不会建立TCP连接了。

四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

  1. TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
  2. 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. 服务器关闭客户端的连接,发送一个FIN给客户端。
  4. 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

标签:主机,报文,SYN,TCP,连接,四次,FIN,握手,客户端
来源: https://www.cnblogs.com/whosmeya/p/14315640.html

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

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

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

ICode9版权所有