TCP报文段
TCP报文段是TCP协议中传输数据的基本单位。TCP协议基于流控制、顺序控制和错误校验等机制,以确保数据的可靠传输。TCP报文段结构由多个字段组成,每个字段在TCP的工作中都有特定的作用
一个典型的TCP报文段由两部分组成:
- TCP头部(Header):包含了控制信息,如源端口、目标端口、序列号、确认号、标志位、窗口大小等。
- 数据部分(Data):也称为负载部分,承载实际传输的数据。
TCP头部长度
TCP头部的最小长度是20字节,最大长度为60字节。头部长度由"数据偏移"字段决定,表示头部的长度(单位为32位字,即4字节)。如果没有选项字段,头部长度为20字节;如果有选项,头部长度会相应增加。
TCP报文段格式
javascript
| 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 |
|---------------------------------------------------------------|
| Source Port | Destination Port | Sequence Number |
|---------------------------------------------------------------|
| Acknowledgment Number | Data Offset | Reserved | Flags | Window Size |
|---------------------------------------------------------------|
| Checksum | Urgent Pointer | Options (if any) | Data (Payload) |
主要字段说明
-
源端口号(Source Port)(16位):
- 表示发送方的端口号,用于标识通信的进程。
-
目的端口号(Destination Port)(16位):
- 表示接收方的端口号,用于标识通信的进程。
-
序列号(Sequence Number)(32位):
- 用于标识发送的数据流中的字节序列,确保数据的顺序。首次发送数据时,序列号是一个初始值,后续的每个字节的序列号依此递增。
-
确认号(Acknowledgment Number)(32位):
- 用于确认接收到的字节流的序列号。它表示期望接收的下一个字节的序列号。如果ACK标志位为1,该字段有效。
-
数据偏移(Data Offset)(4位):
- 表示TCP头部的长度(以32位字为单位)。该字段告诉接收方,TCP头部的结束位置,从而确定数据部分的起始位置。
-
保留字段(Reserved)(3位):
- 为将来扩展保留,当前值必须为0。
-
标志位(Flags)(9位):
- URG (Urgent Pointer field):紧急标志,若为1,则表明此报文段包含紧急数据。此时,Urgent Pointer字段有效。
- ACK (Acknowledgment flag):确认标志,若为1,则表明该报文段中包含确认号(Acknowledgment Number)字段。
- PSH (Push Function flag):推送标志,若为1,表示接收方应立即将数据推送给应用层,而不需等待缓冲区满。
- RST (Reset the connection flag):重置标志,若为1,表示连接由于某些原因应立即被重置,通常是由于异常终止。
- SYN (Synchronize flag):同步标志,若为1,表示连接请求,用于TCP连接的三次握手。
- FIN (Finish flag):结束标志,若为1,表示发送方已经完成数据发送,准备关闭连接。
-
窗口大小(Window Size)(16位):
- 表示接收端的可用缓冲区大小,用于流量控制。它告诉发送方可以发送多少字节的数据而不需要等待确认。
-
校验和(Checksum)(16位):
- 用于检测数据在传输过程中是否发生错误。包括TCP头部和数据部分的校验和。
-
紧急指针(Urgent Pointer)(16位):
- 当URG标志位为1时,该字段表示紧急数据的偏移量。
-
选项(Options)(可选,长度可变):
- 用于扩展TCP协议的功能,如最大报文段大小(MSS)和时间戳等。选项长度可变,通常用于性能优化或增加控制功能。
-
数据部分(Data)(可选,长度可变):
- 承载实际的应用数据,是报文段的负载部分。长度根据数据量的大小而变化。