linux - 为什么我得到数据大小大于 mss 的数据包?

我在两台 PC 上都使用“ifconfig ethX mtu 300”修改了 MTU。并使用 netperf 测试网络。 我用 WireShark 嗅探了 SYN 数据包中的 MSS=260。 但是我得到了一些大于 260 的数据包。为什么?

最佳答案

嗅探器捕获内核和设备驱动程序之间的数据包。如果驱动程序对数据包进行了额外的更改,您将捕获与网络上的数据包不同的内容。

这是 TCP 分段卸载的情况,其中驱动程序或硬件设备拆分(或组合)数据包以遵守正确的 TCP MSS(最大分段大小)。

您可以(暂时)禁用卸载以查看正确的段:

  • ethtool -k eth0 --- 查看设置
  • ethtool -K eth0 tso off --- 禁用tcp-segmentation-offload

信息来自问题评论中链接的文章:https://rtodto.net/generic_segmentation_offload_and_wireshark/

在 Linux 上,这种卸载也发生在环回接口(interface)上!

https://stackoverflow.com/questions/17229265/

相关文章:

php - 强制文件下载代码在本地主机上工作,但在 php 中的实际服务器上不工作

ruby-on-rails - rails 和 Heroku : Running a script

android-layout - 在滑动选项卡中水平滚动 : android

nginx - 如何替换 HTTP 请求 URI 中的特殊字符?

database - 是否有任何工具可以从数据库模式的 json 表示自动生成 ERD 图?

python - Selenium:FirefoxProfile 异常无法加载配置文件

macos - 运行 make 时如何修复 ranlib/libtool 错误

c++-cli - 导出 C++/CLI native 类 (C4679)

python - 从 Python 中的角度集生成多边形?

ajax - 我可以添加 Access-Control-Allow-Origin : * to th