请简述TCP报文段的首部格式，并用表格形式展示。
user
| 字段名称       | 长度（位） | 描述                                                                 |
|----------------|------------|--------------------------------------------------------------------------|
| 源端口号       | 16         | 标识发送方应用程序的端口号                                                 |
| 目标端口号     | 16         | 标识接收方应用程序的端口号                                                 |
| 序列号         | 32         | 发送数据的第一个字节的序列号                                               |
| 确认号         | 32         | 期望接收的下一个字节的序列号                                               |
| 数据偏移       | 4          | 指明TCP首部的长度                                                        |
| 保留           | 4          | 保留供未来使用                                                           |
| 控制位         | 8          | 包括URG, ACK, PSH, RST, SYN, FIN等标志位                                   |
| 窗口大小       | 16         | 接收方缓冲区的可用空间大小，用于流量控制                                   |
| 校验和         | 16         | 用于校验TCP报文段在传输过程中是否发生错误                                  |
| 紧急指针       | 16         | 当URG标志位被设置时，此字段指向紧急数据的位置                             |
| 选项           | 变长       | 可变长度的字段，用于指定一些可选参数，如最大段大小（MSS）等                 |
| 填充           | 变长       | 用于确保TCP首部是32位的整数倍                                             |
assistant