TCP协议头部标志位
TCP数据包的Flags(标志位)是TCP协议头部中用于控制连接状态和通信流程的关键字段。以下是所有TCP标志位的详细说明:
一、标准RFC定义的Flags(6个)
标志位 | 名称 | 值(16进制) | 作用说明 |
---|---|---|---|
URG | Urgent | 0x20 | 紧急数据标识,表示数据包中包含需要优先处理的数据(需配合紧急指针使用) |
ACK | Acknowledgment | 0x10 | 确认号有效,用于确认接收到的数据 |
PSH | Push | 0x08 | 要求接收方立即将数据提交给应用层(避免缓冲延迟) |
RST | Reset | 0x04 | 强制重置连接,通常表示异常终止 |
SYN | Synchronize | 0x02 | 同步序列号,用于建立连接(三次握手) |
FIN | Finish | 0x01 | 请求正常终止连接 |
二、扩展/实验性Flags(非RFC标准)
标志位 | 名称 | 值(16进制) | 作用说明 |
---|---|---|---|
NS | ECN-Nonce | 0x80 | 用于抵御ECN(显式拥塞通知)欺骗攻击 |
CWR | Congestion Window Reduced | 0x80 | 通知对端已减少拥塞窗口(与ECE配合使用) |
ECE | ECN-Echo | 0x40 | 表示网络存在拥塞(ECN机制) |
三、标志位的组合使用
在实际通信中,Flags通常以组合形式出现。以下是常见场景:
1. 三次握手
- 客户端SYN:
Flags [S]
(SYN) - 服务端SYN-ACK:
Flags [S.]
(SYN + ACK) - 客户端ACK:
Flags [.]
(ACK)
2. 数据传输
- 推送数据:
Flags [P.]
(PSH + ACK) - 纯确认:
Flags [.]
(ACK)
3. 连接终止
- 正常关闭:
Flags [F.]
(FIN + ACK) - 强制终止:
Flags [R.]
(RST + ACK)
4. 特殊场景
- 半关闭连接:
Flags [F.]
(FIN + ACK)单方向终止 - 同时打开:
Flags [S]
双向SYN(罕见)
四、标志位在抓包中的典型表现
1. Wireshark/tcpdump中的显示
Flags [S]
:仅SYNFlags [S.]
:SYN + ACKFlags [.]
:仅ACKFlags [P.]
:PSH + ACKFlags [F.]
:FIN + ACKFlags [R.]
:RST + ACK
2. 异常场景的Flags
- SYN Flood攻击:大量
Flags [S]
包 - RST攻击:异常
Flags [R]
包中断连接 - 半开连接:
Flags [S]
未收到[S.]
响应
五、通过Flags排查网络问题的案例
1. 连接超时
- 客户端发送
Flags [S]
后无响应:- 服务器未监听端口
- 防火墙拦截SYN包
2. 连接重置
- 收到
Flags [R]
:- 服务端应用崩溃
- 客户端访问未授权端口
3. 数据传输失败
- 客户端发送
Flags [P.]
但无ACK:- 中间网络设备丢包
- 接收方缓冲区满
六、完整TCP头部Flags字段结构
1 | 0 1 2 3 |
掌握Flags的用途和组合逻辑,是分析TCP协议和排查网络问题的核心技能。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 螃蟹壳!