2016-05-26 6 views
2

Мне не удалось загрузить файлы размером более 1,2 Кбайт на мой сайт из моей системы (Ubuntu), запрос просто продолжает останавливаться. Чем-то я нашел эту команду echo 2 > /proc/sys/net/ipv4/tcp_mtu_probing , и теперь я могу загрузить любой размер файла с моего рабочего стола на мой сайт. Я не знаю, что делает эта команда и почему это происходит. Пожалуйста, помогите мне определить эту проблему.echo 2>/proc/sys/net/ipv4/tcp_mtu_probing способен решить мою проблему, но почему? Что делает эта команда?

Я запустил echo 2 > /proc/sys/net/ipv4/tcp_mtu_probing на моем рабочем столе, и это сработало. Я ничего не изменил на сервере.

ответ

4

По man 7 tcp:

tcp_mtu_probing (целое число, по умолчанию: 0, так как Linux 2.6.17):

Этот параметр управляет TCP Пакетирования-Layer Path MTU Discovery. Следующие значения могут быть отнесены к файлу:

0 Отключен

1 Отключено по умолчанию включен, когда черная дыра обнаружена ICMP

2 Всегда включен, используйте первоначальный MSS из tcp_base_mss.

Это означает, что после включения ваша ОС попытается найти MTU между вашим клиентом и вашим сервером, используя механизм Path MTU discovery. Вероятно, это увеличивает MTU по умолчанию (1500 на Linux) в вашем случае, позволяя отправлять большие пакеты.

Вы можете проверить MTU на интерфейсе, запустив ip a:

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 

Это было странное поведение, которое не может передавать файлы как IP-фрагментации и сегментации TCP обычно заботиться о отрывов файл перед отправкой это по сети. Возможно, вы должны проверить, какова конфигурация фрагментации/сегментации по умолчанию на вашем компьютере.

+0

благодарит за помощь. Не могли бы вы также помочь мне в том, почему мне нужна эта команда на первом месте, тогда как я был в состоянии загружать большие файлы и раньше. –

+0

Это может быть связано с несколькими параметрами. На ваш вопрос нет ответа. Возможно, MTU по умолчанию был прекрасен, и маршрут к вашему серверу изменился, и один из маршрутизаторов теперь отбрасывает пакеты, размер которых превышает MTU, а не фрагментирует их, потому что бит DF (не фрагмент) установлен. Вы должны посмотреть настройки вашей системы ('/ proc/sys/net/ipv4 /' для запуска) и использовать 'traceroute', чтобы узнать, что происходит между двумя конечными точками. –

+0

спасибо за помощь. Наконец, я нашел одно исправление, не знаю, как долго он будет работать. В ubuntu 14.04 есть ошибка, которая устанавливает MTU очень высоко в моем случае около 9000. Я изменил MTU на 1200, и теперь все работает нормально. –

0

Я могу исправить эту проблему, установив по умолчанию MTU сервера на 1200. (Причина проблемы в том, что в ubuntu 14.04 есть ошибка, которая очень мала MTU, в моем случае это 9000.)