tcp协议的报头格式

在了解TCP首部各个字段的意义后,我们就能更清楚的了解TCP协议的。TCP首部字节有20个字节是固定了,后面还有可选选项。TCP是以32位(4字节)对齐的。

img

源端口和目的端口:TCP是通过通口号来进行应用进程间的通信的。

序号:占32位,序号的范围是0~(2^32-1),当序号变为2^32-1后,下一个序号就要重新从0开始了。假如一个报文段的序号为1001,它的长度为100字节,那么下一个报文段的序号就是1101。

确认号:占32位。确认号是对收到的分组进行确认的。假如A向B发送了一个报文段,A的序号为101,报文段长度为100字节,那么B收到该报文段后,就需要对A发送确认报文段,这个确认报文段里的确认号为201。有以下公式:

如果确认号为N+1,那么表示到序号N位置的所有数据均已收到

数据偏移:该字段即表示tcp首部的长度,该字段占4位,单位为4字节。所以,一个TCP的首部最大为60字节。

六个控制位:每个控制位都只占一位。

  • UGR:紧急字段,当该值为1时,表示此报文段含有紧急数据,应优先发送。该字段需要和后面会说到的紧急指针配合使用。
  • ACK:确认字段。该字段在建立连接和断开连接时会用到,传送数据阶段一律为1。
  • PSH:推送字段。为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
  • RST:重置连接字段志。用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
  • SYN:同步字段。用于建立连接时使用。
  • FIN:终止字段。用于释放连接时使用。

窗口:占16位。窗口值是的范围是【0,2^16-1】之间的整数。注意,它表示的是接受窗口,表示允许接受的字节数。比如,B的向A发送了一个确认报文段,该报文段的确认号为101,窗口值为1000.那么表示B下一个接受的报文段序号应该是101,且报文段长度不能超过1000字节。

校验和:占16位。用来检验报文段有没有错误。

紧急指针:占16位。只有当URG字段为1时,该字段才有意思。它表示紧急数据的长度