TCP packet [P.] flag 在 tcpdump 的输出中意味着什么?

ccs*_*ann 6 tcp tcpdump

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

Dav*_*ill 6

这个 [P.] 标志到底是什么

\n\n

这是一个 PUSH 标志。

\n\n
\n

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

\n
\n\n

TCPDUMP源联机帮助页

\n\n
\n

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

\n\n

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

\n
\n\n

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

\n\n
\n

PSH 和 PUSH 功能

\n\n

当您发送数据时,您会TCP缓冲它。因此,如果您发送一个字符,它不会立即发送,而是等待查看是否有更多字符。但是\n也许你希望它直接在线上:这就是PUSH\n函数发挥作用的地方。如果你PUSH数据,你的TCP将立即创建一个\n段(或几个段)并推送它们。

\n\n

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

\n\n

没有 API 可以设置PSH标志的 API。通常它是由内核清空缓冲区时设置的。来自 TCP/IP 图解:

\n\n
\n

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

\n
\n\n

但请注意史蒂文斯还说:

\n\n
\n

推送(接收方应尽快将此数据传递给应用程序\n可能\xe2\x80\x94未可靠实现或使用

\n
\n
\n\n

来源TCP 中推送标志和紧急标志之间的区别,由cnicutar回答

\n