0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Source Port          |       Destination Port        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Sequence Number                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Acknowledgment Number                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Data |           |U|A|P|R|S|F|                               |
   | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
   |       |           |G|K|H|T|N|N|                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Checksum            |         Urgent Pointer        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             data                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Source Port 源端口号,16位,取值范围0到65536。

  • Destination Port 目的端口号,16位,取值范围0到65536。

  • Sequence Number 序列号,32位。如果SYN位为1,序列号是随机的ISN,否则,序列号为Data第一个字节的编号。

  • Acknowledgment Number 确认号,32位,当ACK位为1时,确认号为程序期望收到的下一个序列号。当连接建立后,ACK总为1。

  • Data Offset 数据偏移量,4位,首部长度位数为32*data_offset

  • Reserved 预留值,6位,全为0。

  • Control Bits: 控制位,6位 URG: 紧急标志,说明紧急指针有效 ACK: 确认标志,说明确认号有效 PSH: 推标志,接受方立即将请求交给上层协议 RST: 复位标志,重建连接时使用 SYN: 同步标志,建立连接时使用 FIN: 结束标志,结束连接时使用

  • Window: 16 bits 窗口大小,16位,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。

  • Checksum 校验和,16位

  • Urgent Pointer 紧急指针,16位

  • Options 选项,可变长度

  • Padding 填充位,可变长度,使TCP报头的长度为32位的整数倍

  • Data 数据