最近做 tcpcopy,经常需要使用 tcpdump 抓包,以下是整理的结果字段说明:

Flags [S]:请求连接
Flags [S.]:sync+ack
Flags [.]:ack
Flags [P.]:发送数据包
Flags [F]:发送方没有更多包发送了
Flags [R]:表明 packet 的发送方马上就要断开当前连接了

ACK 也就是我们所熟悉的 ack 包,用来告诉对方上一个数据包已经成功收到。不过一般不会为了 ack 单独发送一个包,都是在下一个要发送的 packet 里设置 ack 位,这属于 tcp 的优化机制,参见 delayed ack。
PSH Push 我们上面解释过,接收方接收到 P 位的 flag 包需要马上将包交给应用层处理,一般我们在 http request 的最后一个包里都能看到 P 位被设置。
RST Reset 位,表明 packet 的发送方马上就要断开当前连接了。在 http 请求结束的时候一般可以看到一个数据包设置了 RST 位。
SYN SYN 位在发送建立连接请求的时候会设置,我们所熟悉的 tcp 三次握手就是 syn 和 ack 位的配合:syn->syn+ack->ack。
FIN Finish 位设置了就表示发送方没有更多的数据要发送了,之后就要单向关闭连接了,接收方一般会回一个 ack 包。接收方再同理发送一个 FIN 就可以双向关闭连接了。
这 8 个 flag 首字母分别是:C E U A P R S F。初看难以记忆,我脑洞了下,把它们组合成 supr cafe,当然少了 super 少了个 e,我可以将就下。我们在使用 tcpdump 的时候会经常看到这几个 flag,[S],[P],[R],[F],[.]。其他几个都好理解,[.] 特殊点,是个占位符,没有其他 flag 被设置的时候就显示这个占位符,一般表示 ack。


↙↙↙阅读原文可查看相关链接,并与作者交流