TCP三次握手机制

三次握手
TCP三次握手机制_第1张图片
image.png

TCP三次握手机制_第2张图片
image.png
  • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

四次挥手

TCP三次握手机制_第3张图片
image.png

TCP三次握手机制_第4张图片
image.png
问题
  • 为什么说会有四次,因为不管在客户端发起fin还是客户端发起fin,这时都有可能当前正在处理请求数据,要等到客户端或者服务端处理结束,这时等待处理结束对方主动发起fin请求。
  • 为什么在第四次挥手后会有2个MSL的延时
    在网络不可靠的时候,第四次ack确认包可能丢失,对方无法收到ack确认包,会一直定时向A端重复发送,直到收到ACK确认包。
过程
  • 第一次挥手
    当客户端向服务端请求断开,这时会发送fin的标记报文。
  • 第二次挥手
    当服务端收到客户端fin断开报文时候,可能正在处理数据,此时服务端会发生ack报文。
  • 第三次挥手
    当服务端处理完成后,会再次向客户端发送FIN报文,此时可以断开连接。
  • 第四次挥手
    当客户端收到服务端的fin报文,会向服务端发送确认ACK,经过两个msl《Maximum Segment Lifetime》时长后断开连接。
TCP三次握手机制_第5张图片
image.png

你可能感兴趣的:(TCP三次握手机制)