一.标志位和序号
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状态。释放连接完成