TCP/IP协议三次握手与四次挥手

一.标志位和序号

seq序号 :发送方随机生成的

ack确认序号:ack=seq+1 标志位ACK=1时确认序号有效

SYN标志位:发起一个新连接

ACK标志位:确认序号有效

FIN标志位:断开连接

二.三次握手

三次握手是客户端与服务端建立一个TCP连接时,需要客户端和服务端发送三个包建立连接的过程

(1)第一次握手

  客户端将SYN置为1,随机产生一个seq序号=J,将该数据包发送给服务端,客户端此时状态为SYN_SEND

(2)第二次握手

  服务端收到客户端发送的数据包由SYN=1知道客户端要建立连接,客户端将SYN和ACK都置为1,同时发送确认序号ack=J+1

  随机产生一个服务端序号seq=K,将此数据包发送给客户端。服务端此时的状态为SYN_REVD

(3)第三次握手

  客户端收到服务端的数据包,由ACK=1,ack=J+1无误,客户端将ACK置为1,ack=K+1发给服务端

  服务端收到ACK=1,ack=K+1连接建立成功。客户端和服务端此时的状态为ESTABLISHED

  

三.四次挥手

四次挥手是断开TCP连接的时候,需要客户端和服务端发送四次包确认连接的断开,断开连接可由服务端或客户端任意一方触发

(1)第一次挥手

  假设客户端主动关闭。客户端发送关闭连接标志位FIN=1,序号seq=m。客户端此时状态为FIN_WAIT_1

(2)第二次挥手

  服务端收到标志位FIN=1,知道客户端要关闭连接,客户端发送标志位ACK=1,确认序号ack=m+1,seq=n。

    服务端并没有发送FIN标志位,因为服务端可能还有数据要发送 。此时服务端处于CLOSE_WAIT状态,客户端处于FIN_WAIT_2状态

(3)第三次挥手

  服务端发送标志位FIN=1,seq=u 。此时服务端处于LAST_ACK状态

(4)第四次挥手

  客户端收到FIN,发送ACK=1,确认序号ack=u+1给服务端。客户端进入TIME_WAIT状态。释放连接完成

原文地址:https://www.cnblogs.com/suni/p/8674872.html