TCP报文段是由TCP首部和TCP数据部分组成。TCP首部结构如下:
首部长度:一般为20字节,选项最多40字节,限制60字节。
源端口、目的端口。
序号:TCP协议面向字节流,传输文件按顺序在缓存里面分块存放,要组建数据包,一块一块的往外发,加上IP,Mac等。序号就是指这个数据包的编号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。
确认号:接收端缓存中收到数据包,然后去掉头,给发送端一个确认,我收到的数据包的最后一个字节。确认号是服务器告诉客户端该发以第几个字节为头的数据包。只要一确认,该确认的数据就会从缓存里面删掉。
数据偏移:是用来记录TCP报文段第多少个字节后,就开始是数据部分。首部最长可以60个字节。
6位标志:URG表示紧急指针是否有效,URG为1的数据包可以插队,优先发。
ACK表示确认号是否有效。PSH为1的数据包优先从接收缓存发给接收方。RST为1,表示TCP出现严重错误,要求对方重新连接。SYN表示请求建立一个连接。FIN表示通知对方本端要关闭连接。
窗口:A和B通信时,B要告诉A他的接收缓存是多少字节。A设置发送缓存的大小。两边缓存最好一样。缓存多少字节,就是窗口大小。
检验和:由发送端填充,接收端对报文段执行CRC(循环冗余校验,利用除法及余数的原理来作错误侦测)算法以检验TCP报文段在传输中是否损坏。
紧急指针:URG校验位为1才有作用,紧急指针为50,就是1-50个字节是要紧急处理的。
选项:长度可变,最长可达40字节。当没有使用“选项”时,TCP的首部长度是20字节。
确认的时候是否支持选择性确认,sack