ICode9

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

【 总结 】TCP三次握手与四次挥手

2021-11-03 10:35:10  阅读:194  来源: 互联网

标签:seq ACK 握手 TCP ack 四次 报文 客户端


三次握手

作用是为了确认双方的接收与发送能力是否正常
为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误
ACK字段:在TCP报文段中,字段ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
在这里插入图片描述

  • 第一次客户端向服务器发送TCP报文 开启 SYN = 1 序列号 seq = x
    • SYN = 1 seq = x
    • 标记位为SYN,表示“请求建立新连接”
  • 服务器端接收到来自客户端的TCP报文之后 服务器的序列号seq = y 服务器的确认号 ack = x + 1
    • SYN = 1、ACK = 1 、seq = y、ack = x + 1
    • 服务端的序列号是自己的 确认号 = 客户端传递的序列号 + 1
    • ack = x+ 1 表示收到客户端的序号Seq并将其值加1作为自己确认号Ack的值
  • 客户端接收到来自服务器端的确认收到数据的TCP报文 seq = x + 1 ack = y + 1
    • ACK = 1 、seq = x + 1 、ack = y + 1
    • 序列号 = 服务端的确认号 确认号 = 服务端传递的序列号 + 1
  • 三次握手完成 客户端和服务器端进行正常的数据传输
  • 客户端 seq = x -----------> 服务器 seq = y 、ack = x + 1 -----------> 客户端 seq = x + 1 、ack = y + 1

四次挥手

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
在这里插入图片描述

  • TCP客户端发送一个FIN报文,请求关闭连接,用来关闭客户端与服务端之间的数据传输
    • FIN = 1 、seq =x
    • 标记位为FIN,表示“请求释放连接“;
    • 客户端的序号 seq = x
  • 服务器端接收到从客户端发出的TCP报文之后,知道了客户端想要断开连接的想法,发送了一个ACK (确认收到)
    • ACK= 1 、seq = y 、ack = x + 1
    • 标记位为ACK,表示“接收到客户端发送的释放连接的请求”;
    • 序号为 seq = y
    • 确认号为ack=x + 1,收到客户端报文,将其序号Seq值加1作为本段报文确认号Ack的值
  • 服务端也想断开与客户端的连接,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号
    • FIN = 1、ACK= 1 、seq = z 、ack = x + 1
  • 客户端收到 FIN 之后,发送一个 ACK 报文作为应答
    • ACK= 1 、seq = x + 1 、ack = z + 1
  • 服务端收到 ACK 报文之后,关闭连接
    客户端发送一个想要关闭连接的 FIN + ACK --------> 服务器端 ACK(第一次先告诉客户端 我知道你想关闭连接) 、服务器端ACK + FIN(第二次服务器确定完数据已经发送完毕,然后告诉客户端 可以确认关闭了) --------> 客户端响应收到服务器的确认关闭 ACK

标签:seq,ACK,握手,TCP,ack,四次,报文,客户端
来源: https://blog.csdn.net/Twisted_/article/details/121114693

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

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

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

ICode9版权所有