我知道tcp中的控制位定义了TCP连接的标志,如SYN、FIN、ACK。但从我的网络流量来看,有时某些数据包控制位为 0(未设置)。
这种行为意味着什么?
这些是TCP 段的标志,而不是连接。
当标志位未设置时,表示缺少为相应标志定义的含义和行为。
这意味着 ACK 并且仅设置了 ACK 标志。 RFC 说 ACK 是 16,但是当与另一个标志(例如 )结合使用时,它只是 16。 SYN/ACK (18)、FIN/ACK (17)。标志值 0 也可能表示“空”扫描。
如果您看到值为 2 的流记录,并且其中有 8 个数据包,则意味着同时存在 SYN 数据包和 ACK 数据包。
如果您看到 18 并且流中存在超过 1 个数据包,则意味着至少有一个 SYN/ACK,其余均为 ACK。
AWS 在其帮助文章 “使用 VPC 流日志记录 IP 流量” 部分中部分回答了这个问题 “流日志记录:可用字段”(重点是我的)。
以下 TCP 标志的位掩码值:
- FIN — 1
- SYN — 2
- RST — 4
- SYN-ACK — 18
如果没有记录支持的标志,则 TCP 标志值为 0。
TCP 标志可以在聚合间隔期间进行“或”运算。对于短连接,可以在流日志记录中的同一行上设置标志,例如,19 表示 SYN-ACK 和 FIN,3 表示 SYN 和 FIN。有关示例,请参阅 TCP 标志序列。
有关 TCP 标志的一般信息(例如 FIN、SYN 和 ACK 等标志的含义),请参阅维基百科上的TCP 段结构。
换句话说,您收到的消息不是四个预期标志之一(
FIN
、SYN
、RST
或 SYN-ACK
)。