![什么原因会导致网络数据包包含 PUU?](https://linux22.com/image/772158/%E4%BB%80%E4%B9%88%E5%8E%9F%E5%9B%A0%E4%BC%9A%E5%AF%BC%E8%87%B4%E7%BD%91%E7%BB%9C%E6%95%B0%E6%8D%AE%E5%8C%85%E5%8C%85%E5%90%AB%20PUU%EF%BC%9F.png)
我们的系统在千兆以太网上遭受通信中断。网络上的流量负载对 100Mb 网络造成轻微压力,但整个网络都有千兆交换机、NIC 和电缆 - 至少构建我们接入的网络的客户告诉我是这样。
我们通过 100baseT 集线器插入了一台运行 Wireshark 的笔记本电脑,发现它报告了许多“以太网 II”数据包,其中原始数据以 ASCII 显示时基本上如下所示:
PUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
自然而然,我立即将这个问题命名为“网络 PUU”,随后引来一阵哄笑。我们都四十多岁了,但我想我们中的一些人永远长不大(愧疚!)
无论如何,更严重的是,其他完全有效的数据包被这些数据破坏了。IPv4 标头被字节替换为字节,U
并且数据损坏,这会导致软件拒绝数据,即使 IP 校验和没有不匹配。我们非常肯定,这些涌入网络的数据导致了通信中断。我们不知道的是它可能来自哪里。
有人见过这种情况吗?你解决了吗?你弄清楚它是从哪里来的了吗?
====编辑====
在原始描述中添加了对集线器的提及,因为从下面的评论来看,它是最有可能的损坏源!我们用来尝试查找网络问题的工具似乎又增加了一个新的、更严重的网络问题。
答案1
无论如何,更严重的是,其他完全有效的数据包被这些数据破坏了。IPv4 标头的字节被 U 字节替换,并且数据损坏,这会导致软件拒绝数据,即使 IP 校验和没有不匹配。
令人惊讶的是,仅仅交替位(乌是 ASCII 0x55 或 01010101b)实际上构成了有效的以太网帧或甚至有效的 IP 数据包。如果这种损坏也蔓延到主要完整的帧/数据包中,则它只能由故障交换机(坏的缓冲内存)或故障主机(NIC 或 RAM)引起。
如果帧数据在传输过程中损坏,那么在电缆上,FCS 极有可能无法验证,导致下一个交换机丢弃该帧。但是,如果这样的帧通过网络传输时具有有效的 FCS,则它一定已损坏前FCS 经过计算,强制要求存在缺陷的交换机或主机。
您需要追溯该流量。如果源 MAC 地址无效或无法在中间(非托管)交换机上检查,则需要沿着电缆追溯。
答案2
听起来你的网卡有问题。如果源 MAC 地址有效,你可以通过检查交换机 MAC 表找到它。如果它已损坏,你只需开始拔掉设备即可找到它。
答案3
这听起来好像您在某处有一个设备(可能是 100 Mb/s 交换机),它无法处理流量,并且当其内部缓冲区溢出时会开始损坏数据包。
(或者只是它的 RAM 有问题)。
它没有注意到数据包已损坏,并会很乐意使用新计算的新校验和重新传输这些数据包。因此坏数据包会被其他交换机接受(校验和正确,交换机不关心内容是否无意义)并通过整个网络转发。
事实上情况比这更糟糕:
考虑一下交换机如何了解哪个设备(mac 地址)位于哪个端口后面。任何发往交换机尚未学习的 mac 地址的数据包都会被淹没到所有交换机端口(除了它来自的那个端口)。这实际上将未学习的 mac 地址的数据包变成了临时广播。
因为您的交换机永远不会学习这些 mac 地址(毕竟它们是损坏的,而不是真正的 mac 地址),所以它们都被视为广播......
这实际上会用无法传送的数据包淹没整个网络。
(请注意,在这种情况下,正常的广播风暴缓解措施不起作用。它们只对真正的广播数据包起作用,而不是对这些学习洪水起作用。)
解决此问题的唯一方法是每次禁用 1 个开关,看看问题是否能解决。如果问题范围缩小到 1 个开关,则可能是该开关本身或该开关后面连接的设备。
答案4
集线器和交换机之间的区别在于,当交换机发生冲突时,它要么丢弃第二个数据包,要么存储它,然后在第一个数据包完成时转发它;而集线器会愉快地允许冲突发生,并且仅用 10101... 替换数据包的内容以指示这是一次冲突,并继续发送直到两个数据包都完成。
解决方案是淘汰集线器,因为它们已经过时了。他们在 1G 可用之前就停止制造集线器,因此集线器的速度必须是 100M 或更慢。1G 网络标准不支持集线器。
简单回顾一下历史,在出现集线器之前,就有了中继器。中继器和集线器的区别在于,中继器接收模拟信号,将其稍微清理成一个漂亮的方波,然后重新传输,而集线器实际上会稍微查看一下数据包中的内容,并尝试确保数据包格式正确。但是,它们都没有采取任何措施来解决冲突,只是任由冲突发生。中继器和集线器起源于以太网被视为无缓冲总线的时代,当时网络上只有一个设备可以同时通话。当以太网是真正的总线(10base2 和 10base5)时,要启动数据包,您需要传输起始位(10101...)直到第一位到达网络的最远端,如果在此期间没有其他人打断您,那么您将继续传输数据包。如果您被打断,就会发生冲突,双方都会后退并在稍后的随机时间重试。如果一方没有中止,那么您就会发生延迟冲突。您的集线器正在将您的延迟冲突转换为所有起始位。路径中的某些东西可能没有将数据包识别为延迟冲突,而是将其重新形成为有效数据包而不是丢弃它。或者您的混杂数据包嗅探器既看到了无效数据包,也看到了有效数据包。
相比之下,交换机不仅可以解决冲突,还可以支持全双工,即在传输数据包的同时接收另一个数据包。100M 标准支持支持和不支持全双工的交换机,并且在插入电缆时设备之间会协商。1G 以太网标准要求所有设备都支持全双工,因此 1G 连接上不允许使用集线器,因此不存在 1G 集线器。