TCP的三次握手和四次挥手

一、TCP的三次握手和四次挥手

面试时常常被问到tcp三次握手和四次挥手是怎么回事

1 三次握手简介

建立TCP连接时,需要客户端和服务端共发送3个包

  • 客户端发送初始序号seq=x和syn=1请求标志
  • 服务端发送请求表示syn=1,发送确认标志ACK,发送自己的序号seq=y,发送客户端确认序号 ack=x+1
  • 客户端发送ACK确认标志,发送自己的序号seq=x+1,发送对方的确认序号ack=y+1


    image.png

2 三次握手的过程分析

  • 第一次: 客户端发送请求到服务器,服务器之道客户端发送正常,自己接收正常 SYN=1 seq=x
  • 第二次: 服务器发送给客户端,客户端知道自己发送,接收正常,服务器接收发送正常 ACK=1 ack=x+1 SYN=1 seq=y
  • 第三次: 客户端发送给服务器,服务器知道客户端发送接收正常,自己接收发送也正常 seq=x+1 ACK=1 ack=y+1
    上面的分析过程可以看出,通过三次握手,双方都知道对方的发送接收正常。

3 四次挥手简介

  • 客户端发出FIN=1 自己的序列号 seq=u 进入FIN-WAIT-1状态
  • 服务端接收到客户端的消息后,发出ACK=1的确认标志和客户端确认ack=u+1
  • 客户端接收到服务器确认结果后,进去FIN-WAIT-2的状态,此时服务器发送FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK
  • 客户端收到回复后,发送确认ACK=1 ack=w+1自己的seq=u+1,客户进去TIME-WAIT状态,客户端经过2个最长报文段寿命后,客户端CLOSE,服务器收到确认后立即进入CLOSE状态


    image.png

4 四次挥手状态分析

  • 第一次: 客户端请求断开 FIN seq=u
  • 第二次: 服务器确认客户端的断开请求 ACK ack=u+1 seq=v
  • 第三次: 服务器请求断开FIN seq=w ACK ack=u+1
  • 第四次: 客户端确认服务器的断开ACK ack=w+1 seq=u+1

5 为什么会有三次挥手 四次握手

  • 三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里
  • 四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送。
原文地址:

https://www.cnblogs.com/jainszhang/p/10641728.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容