TCP协议的功能都在其首部中得以体现,TCP报文的首部前20个字节是固定的,也就是说TCP报文的首部长度的最小值是20,格式如下:
序号:占4字节,TCP是面向字节流的,在一个TCP连接中传送的字节流的每一个字节都按顺序编号,很简单的例子:比如传送1000个字节的字节流,其中每个字节都是有编号的,比如说是0-999,这里的序号是指发送的时候本报文段的第一个字节的序。
确认号:占4字节,是期望收到下一个报文段的第一个数据字节的序号。所以我们可以知道
如果确认号=N,则:到序号为N-1为止所有的数据都已经正确收到
首部长度:占4个位,首部长度也称为数据偏移,其代表的意思是本报文的数据起始处距离本报文段的起始处有多远,因为TCP首部中存在可选字段,所以首部长度不固定,所以这个字段是必要的,可以明确指出TCP报文的首部长度。因为其是按4字节为单位的,所以4位二进制数能表示的最大数是15,也就是首部最大长度是60字节。
保留:占6位,目前未使用,置0。
码元比特:其实是有6个控制位,其中包括:URG,ACK,PSH,RST,SYN,FIN;
窗口:占16个字节,这里的窗口不是指发送方的窗口,而是指接收端此时还能接收多少数据,因为接收方接收数据的缓冲区的大小是有限的。此处的窗口值是作为发送方设置其发送窗口大小的依据。
校验和:占2个字节,用来校验首部和数据部分。
紧急指针:占2个字节,只有在URG位=1的时候才有效。
选项:可选字段最长40字节,