我有通过交换机端口镜像和tcpdump捕获的TCP会话。 查看时(在Wireshark中),当我发送消息时,我会看到相同的模式。 这里是出站数据包的摘录(我没有捕获入站的数据…):
[PSH, ACK] Seq=34477 Ack=46645 Len=51 # sending first message [ACK] Seq=34528 Ack=46714 Len=0 # acknowledge response (not shown) [ACK] Seq=34528 Ack=46714 Len=0 SLE=46645 SRE=46714 # TCP Dup Ack! [PSH, ACK] Seq=34528 Ack=46714 Len=51 # sending second message [ACK] Seq=34579 Ack=46783 Len=0 # acknowledge response (not shown) [ACK] Seq=34579 Ack=46783 Len=0 SLE=46714 SRE=46783 # TCP Dup Ack!
问题是,为什么我会得到这些“重复确认”数据包,实际上是TCPselect性确认(SACK)数据包,似乎与它们之前的常规ACK数据包完全冗余?
我一直看到这个TCPstream的上述模式。 机器正在运行RHEL7。 当我在常规界面(而不是镜像)上运行tcpdump时,我看不到重复的ack。
主机在您的scheme中收到重复数据包 – 一个副本来自初始源,另一个来自镜像端口。 它对两者都进行了回复,然后在镜像端口上看到两个答案。
接口无关紧要,只要数据包得到处理到内核只有应用程序关心的参数是IP和端口。