echo 2> / proc / sys / net / ipv4 / tcp_mtu_probing能够解决我的问题,但是为什么呢?该命令的作用是什么?

Vai*_*pta 4 linux ubuntu networking tcp ipv4

我无法将大于1.2 kB的文件从我的系统(Ubuntu)上传到我的网站,但请求一直停滞不前。我以某种方式找到了此命令echo 2 > /proc/sys/net/ipv4/tcp_mtu_probing ,现在可以将任何大小的文件从桌面上传到我的网站。我不知道此命令的作用,为什么会这样。请帮助我确定此问题。

echo 2 > /proc/sys/net/ipv4/tcp_mtu_probing在台式机上运行,但我没有更改服务器上的任何内容,它可以正常工作。

Jef*_*eux 7

根据man 7 tcp

tcp_mtu_probing(整数;默认值:0;从Linux 2.6.17开始):

此参数控制TCP分组化层路径MTU发现。可以将以下值分配给该文件:

0禁用

1默认情况下禁用,当检测到ICMP黑洞时启用

2始终启用,使用tcp_base_mss的初始MSS。

这意味着一旦启用,您的操作系统就会尝试使用路径MTU发现机制在客户端和服务器之间找到MTU 。在您的情况下,它可能会增加默认的MTU(在Linux上为1500),从而允许发送更大的数据包。

您可以通过运行ip a以下命令在界面上检查MTU :

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN # <= here MTU is 16436 bytes
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
 # below MTU is 1500 bytes
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:28:fd:4c brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.2/24 brd 192.168.50.255 scope global eth0
    inet6 fe80::20c:29ff:fe28:fd4c/64 scope link
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

这是一个奇怪的行为,您无法传输文件,因为IP分段和TCP分段通常会在通过网络发送文件之前先对文件进行分块。也许您应该检查计算机上的默认分段/分段配置是什么。