TCP协议报文结构
TCP协议的3次握手
上图是wireshark抓包看的tcp请求报文交互。
首先请求方发送syn请求给接收方,seq为随机生成的(在wireshark当中,seq采用的相对位置,所以显示的是0)。
接收方在收到syn请求后,发送ACK,SYN同样标示。其中ACK会是上次对方请求的seq+长度,意思是告诉对方,我已经接收到了这么多数据。标志位占长度1.
接下里回复ACK,此时SYN不再标示,因为第一个SYN占用长度为1,所以seq变成1。这个请求不占用字节,长度为0。
报文发送
这是3次握手之后发送的第一个请求,其中Seq=1,长度为314,接收在回复ACK是ACK=315。如下图所示:
4次分手
在分手时,发起方发送FIN请求,告诉对方我已经不用再发送请求了,接收方收到之后发送ACK告诉对方。此时一条链路断开。同时另外一方发送FIN请求,对方再次回复ACK。总共需要四次请求。
有一种特殊情况,分手只有3次,这种情况是ACK与FIN一起发送的。