tcpdump 输出中的 TCP 数据包 [P.] 标志是什么意思?

tcpdump 输出中的 TCP 数据包 [P.] 标志是什么意思?

如果 IP xxxx 使用 TCP 数据包的 [P.] 标志连接到 IP zzzz,那么这个 [P.] 标志到底是什么意思?这是否意味着 xxxx 向 zzzz 发送了一些数据?

答案1

这个[P.] Flag到底是什么

它是一个 PUSH 标志。

Tcpflags 是 S(SYN)、F(FIN)、P(PUSH)、R(RST)、U(URG)、W(ECN CWR)、E(ECN-Echo)或“.” (ACK) 的某种组合,如果没有设置标志,则为“none”。

来源TCPDUMP 的手册页

推送功能和 PUSH 标志的目的是将数据从发送用户推送到接收用户。它不提供记录服务。

推送功能与跨 TCP/用户界面的数据缓冲区的使用之间存在耦合。每次将 PUSH 标志与放入接收用户缓冲区的数据相关联时,即使缓冲区未填满,也会将缓冲区返回给用户进行处理。如果在看到 PUSH 之前数据到达并填满用户的缓冲区,则数据将以缓冲区大小为单位传递给用户。

来源[PSH,ACK] wireshark 捕获 - Wireshark 问答

PSH 和 PUSH 功能

当你发送数据时,它会TCP缓冲它。因此,如果你发送一个字符,它不会立即发送,而是等待看是否还有更多字符。但也许你想让它直接在线路上传输:这就是 PUSH 函数的作用所在。如果你 PUSH 数据,你的 TCP 会立即创建一个段(或几个段),然后他们。

但故事并没有就此结束。当对端 TCP 收到数据时,它自然会缓冲它们它不会干扰每个字节的应用程序。这就是PSH标志发挥作用的地方。如果接收 TCP 看到 PSH 标志,它将立即数据给应用程序。

没有 API 可以设置该PSH标志。通常,内核在清空缓冲区时会设置该标志。摘自《TCP/IP Illustrated》:

此标志通常用于指示发送数据包一方的缓冲区已在发送数据包时清空。换句话说,当设置了 PSH 位字段的数据包离开发送方时,发送方没有更多数据可发送。

但请注意史蒂文斯还说:

推送(接收方应尽快将该数据传递给应用程序 -未能可靠地实施或使用

来源TCP 中推送标志和紧急标志之间的区别,回答者尼库塔尔

相关内容