1.TCP报头格式
TCP段作为IP段数据发送。IP报头携带几个信息字段,包括:源主机地址和目标主机地址。TCP头紧跟在IP头后面,提供特定的TCP协议信息。如下图所示:

- TCP报文头格式:

- TCP报文头说明:
Name | Lenght | Func Description |
---|---|---|
Source Port | 16 bits | 源端口号 |
Destination Port | 16 bits | 目标端口号 |
Sequence Number | 32 bits | 会话的序列号; 该字段包含由这个主机随机选择的初始序号 ISN (Initial Sequence Number ),发送数据的第一个字节序号为ISN+1 ,因为 SYN 标志会占用一个序号。 |
Acknowledgment Number | 32 bits | 确认序号; 确认序号就包含接收端所期望收到的下一个报文的 Sequence Number 为该确认序号。 |
Data Offset | 4 bits | 数据区域偏移量(又名:首部长度); 这指明数据从哪里开始,同时说明了TCP Header的大小。计算公式: Data Index = Data Offset * 4 (Data Index单位:Bytes) |
Reserved | 6 bits | 预留,必须是零。 |
Control Bits | 6 bits | Flags标记字段: URG:首部中的紧急指针字段标志,如果是 1 表示紧急指针字段有效。 ACK:首部中的确认序号字段标志,如果是 1 表示确认序号字段有效。 PSH:该字段置一表示接收方应该尽快将这个报文段交给应用层。 RST:重新建立 TCP 连接。 SYN:用同步序号发起连接。 FIN: 中止连接。 |
Window | 16 bits | 窗口大小; 每一端通过提供的窗口大小来实现TCP流量控制,窗口大小为字节数。 |
Checksum | 16 bits | 检验和字段; 检验和覆盖了整个的 TCP 报文段:TCP 首部和 TCP 数据区域,由发送端计算和填写,并由接收端进行验证。 |
Urgent Pointer | 16 bits | 紧急指针字段; 只有当 URG标志置 1 时紧急指针才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 |
Options | variable | 选项字段; 在下面专门解释… |
Padding | variable | 填充字段; TCP报头填充用于确保TCP报头以32位对齐结束,数据以32位对齐开始。填充由零组成。 |
- Options选项字段说明
当前定义的选项列表如下:
Kind (Option Code) | Length | Meaning |
---|---|---|
0x00 | - | End of option list. |
0x01 | - | No-Operation. |
0x02 | 4 | Maximum Segment Size. |
具体选项定义:
- End of Option List(0x00)
这个Option Code(0x00)
表示选项列表的末尾。 - No-Operation(0x01)
这个Option Code(0x01)
可能被用在2个Options之间,为了后面的Option能够字对齐开始。 - Maximum Segment Size(0x02)
如上图所示,Maximum Segment Size Option 长度为4个byte(包括:Kind、Length和Max Seg Size)。如果存在这个选项,它将指示发送这个报文的TCP端最大可接收报文的大小。这个字段只能在初始连接请求时发送(即,在发送SYN
报文中)。如果这个选项没有被使用,那么将允许任何大小的报文通信。
2.TCP连接状态总图
一个TCP连接进程在生命周期会经历一系列的状态变化。这些状态是:LISTEN, SYN-SENT, SYN-RECEIVED,ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT,CLOSED
。TCP连接状态总图如下:
Name | Func Description |
---|---|
LISTEN | 表示等待任何一个远程的TCP连接请求。 |
SYN-SENT | 表示已经发送了一个连接请求后,等待一个匹配连接请求。 |
SYN-RECEIVED | 表示在接收和发送连接请求后,等待一个确认连接请求ACK。 |
ESTABLISHED | 表示已经建立连接,接收到的数据可以传递给用户。这个是数据传输阶段的正常状态。 |
FIN-WAIT-1 | 表示等待来自远程TCP的连接终止请求,或对先前发送的连接终止请求的确认。 |
FIN-WAIT-2 | 表示等待来自远程TCP的连接终止请求。 |
CLOSE-WAIT | 表示等待本地用户的连接终止请求。 |
CLOSING | 表示等待来自远程TCP的连接终止请求ACK。 |
LAST-ACK | 表示等待之前发送到远程TCP的连接终止请求的ACK(包括对其连接终止请求的ACK)。 |
TIME-WAIT | 表示等待足够的时间以确保远程TCP接收到连接终止请求的ACK。 |
CLOSED | 表示没有在连接状态。 |
3. TCP Client连接状态图
TCP Client连接状态图是根据TCP Client发起连接、传输数据和断开连接这个三个过程所经历的状态。如下图(此图相当于上面的总图分解):
4.TCP Server连接状态图
5.TCP三次握手和四次握手
- TCP三次握手(左)和 TCP四次握手(右)


- TCP连接、发送数据、断开
