我正在运行 Debian。如果我使用Python的scapy模块来制定UDP数据包,并添加大于大约1500字节的有效负载,我的程序就会崩溃,即使UDP的最大有效负载应该是65,507字节。
是否有一些 Linux 设置阻止我创建大的 UDP 数据包?我可以调整设置吗?
编辑:我正在Python中循环创建数据包,并且我正在与时间赛跑。该程序是一个流量生成器,旨在以设定的限制(例如:每秒 500 个数据包)生成流量。例如,如果设置为每秒 500 个数据包,那么它只有一秒钟的时间来生成 500 个数据包,因为下一秒它还会生成另外 500 个数据包,所以它不能落后。
现在,我已经达到了每秒 400 个数据包的限制,然后就跟不上了。理论上有几种解决方案:
- 使用多线程 - 我打算研究一下
- 创建更大的 UDP 数据包,从而减少开销
- 我现在正在研究什么
是的,如果我制作负载大于 1500 字节的 UDP 数据包,它们就会被分段。据我了解,内核会处理这个问题。我希望用 C 语言编写的内核能够将单个大 UDP 数据包分割成多个数据包,并将它们发送出去,速度比我的 Python 生成多个较小数据包的速度要快。我不确定这是否属实,但它很容易测试,假设我可以告诉内核停止丢弃大的 UDP 数据包,并实际将它们分段并将它们发送出去。
答案1
从https://en.wikipedia.org/wiki/Maximum_transmission_unit#Applicability--“对于以太网,最大帧大小为 1518 字节,其中 18 字节是开销(标头和 FCS),导致 MTU 为 1500 字节。”