TCP的报文格式
- 源端口号:本次
TCP
连接中,发起连接的主机使用的端口号; - 目的端口号:本次
TCP
连接主,接受连接的主机使用的端口号; - 序号:通过TCP传输的每一个数据段,都有一个序号,作用是为了确认此数据段的顺序。网络中允许传输的数据长度是有限制的,所以当我们要通过
TCP
传输一个较大的数据时,TCP
会将数据切割成很多小的数据段进行传输。而将这些小的数据段发送到目的主机时(发送方会同时发送多个数据),并不能保证它们是按顺序到达目的地,所以对于每一个数据段,都要有一个序号,来标识它们是属于总数据的哪一部分,以保证在目的主机中能将他们重新拼接。 - 确认序号:接收方若接收到一个数据段,会发送一个确认报文给发送方,告诉发送方已经接收到这个数据段,而确认序号的作用就是告诉发送方接收到了哪条数据段。若接收方接收到了序号为
n
的报文段,则确认序号将是n+1
,表示它已经接收了n
,下一条想要接收n+1
; - 首部长度:
TCP
报文的首部+选项的字节数; - ACK:只有
1 bit
的标志位,若为1
,表示这个数据段中的确认序号是有效的,即这个数据报是对之前接收到的某个报文的确认(一个TCP
报文可以同时作为确认报文和传递数据报文)。 - RST:只有
1 bit
的标志位,若客户端向服务器的一个端口请求建立TCP
连接,但是服务器的那个端口并不允许建立连接(比如没开启此端口),则服务器会回送一个TCP
报文,将RST
位置为1,告诉客户端不要再向这个端口发起连接; - SYN:只有
1 bit
的标志位,若为1
,表示这是一条建立连接的TCP
报文段; - FIN:只有
1 bit
的标志位,若为1
,表示这是一条断开连接的TCP
报文段;