TCPDUMP——TCP 标志

TCPDUMP——TCP 标志

为什么 PUSH 数据包总是设置 ACK 标志?为什么不直接 PUSH?

三次握手后,客户端发送的第一个数据包应该只有 PUSH。这个 ACK​​ 来自哪里?

19:14:58.013699 IP 10.201.98.71.59454 > 10.201.208.15.ssh:标志[S],序列号 1794644890,win 29200,选项[mss 1460,sackOK,TS val 18876032 ecr 0,nop,wscale 7],长度 0 19:14:58.014613 IP 10.201.208.15.ssh > 10.201.98.71.59454:标志[S.],序列号 176446139,ack 1794644891,win 29200,选项[mss 1460,nop,nop,sackOK,nop,wscale 7],长度0 19:14:58.014651 IP 10.201.98.71.59454 > 10.201.208.15.ssh:标志[.],ack 1,win 229,长度0

19:14:58.019507 IP 10.201.208.15.ssh > 10.201.98.71.59454:标志 [P.],序号 1:391,确认 1,获胜 229,长度 390

19:14:58.019541 IP 10.201.98.71.59454 > 10.201.208.15.ssh:标志[.],ack 391,win 237,长度0

答案1

为了使 TCP 正常工作,必须确认每个数据包。如果缺少 ACK,则另一端的重新传输计时器最终会超时,数据包将被重新发送。在您的 tcpdump 中,第四个数据包的 ACK 让另一端知道,您的 tcpdump 的第三个数据包已收到。“ACK 1”让另一端知道“我正在等待 #1,之前的所有数据包都已收到”。

无论有没有 PUSH 标志,只要数据包来回发送,您就应该始终看到 ACK。不发送 ACK 意味着“自从我向您发送最后一个数据包以来,我还没有看到您发送的新数据包”。

相关内容