一、TCP 报文头信息
- 序号:占四个字节,表示发送的数据字节流
- 确认号:占四个字节,发送方期待接受的下一个序列号,只有ACK=1时才生效
- ACK:确认号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认号信息
- SYN:连接请求序号标志,用于建立连接,SYN=1表示请求连接。
- FIN:结束标志,用于释放链接,为1 表示关闭本方数据流
二、TCP 建立连接过程
-
首先,客户端发送连接请求报文
-
服务端接受连接后回复ACK报文,并为这次连接分配资源
-
客户端接受到ACK报文后也向服务端发送ACK报文,并分配资源
-
然后双方开始通信
三、TCP 断开连接过程
- 假设客户端发起终端连接,也就是发送FIN报文
- 服务端接收到FIN报文后,先发送一个ACK报文,这时客户端进入fin_wait状态,继续等待server的fin报文
- 当服务端确定数据已发送完毕,则向客户端发FIN报文;
- client端收到FIN报文后,发送ACK进入time_wait状态,如果服务端没有收到可以重新发送。客户端等2MSL后依然没有收到回复,则证明server端已正常关闭。
- client关闭连接
四、总结
- 三次握手
- 首先 Client 端发送连接请求报文
- Server 段接受连接后回复 ACK 报文,并为这次连接分配资源
- Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源
- 四次挥手
- Client 端发起中断连接请求(发送 FIN 报文)
- Server 端接到 FIN 报文后,先发送 ACK,Client 端进入 FIN_WAIT 状态,继续等待 Server 端的 FIN 报文。
- 当 Server 端确定数据已发送完成,则向 Client 端发送 FIN 报文
- Client 端收到 FIN 报文后, 发送 ACK 后进入 TIME_WAIT 状态,如果 Server 端没有收到 ACK 则可以重传。Client 端等待了 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭
- Client 端关闭连接