Непреднамеренное ограничение пропускной способности — где еще искать?

На этот вопрос был дан ответ здесь . Связанный ответ включает обсуждение (выше )и несколько фрагментов кода, обеспечивающих взаимодействие между буфером обмена emacs и графическим интерфейсом, буфером обмена X, даже при запуске emacs-noxили emacs -nw.

1
03.11.2018, 09:02
1 ответ

Недавно передо мной стояла задача определить, почему скорость передачи трафика между нашим сервером приложений и конкретным единственным IP-адресом составляет 160 кбит/с, тогда как весь остальной трафик в обеих системах составляет 10 -100 Мбит/с.

Регулировка была уникальной для этих двух конечных точек, взаимодействующих друг с другом.

Я безуспешно проверил все очевидные решения по формированию и управлению трафиком.

Наконец, проанализировав некоторые перехваченные пакеты, я заметил, что флаг ECN устанавливается только при передаче между этими двумя конечными точками.

Оказалось, что клиент запрашивал явное уведомление о перегрузке (ECN )и устанавливал Congestion Experienced (CE )во всех пакетах SYN, заставляя сервер реагировать, снижая скорость передачи для уменьшения перегрузки. Флаг CE устанавливается в значащих цифрах поля дифференцированных услуг.

Вы можете проверить настройки своего Linux-сервера (/proc/sys/net/ipv4/tcp _ecn )с помощью следующей команды:

sysctl -a | grep _ecn

Установите TCP _ecn с помощью:

sysctl net.ipv4.tcp_ecn=2

Возможные значения::

0 - Disable ECN. Neither initiate nor accept ECN.
1 - Enable ECN when requested by incoming connections and also request ECN on outgoing connection attempts.
2 - Enable ECN when requested by incoming connections but do not request ECN on outgoing connections.

Default: 2

Я использовал tcpdump и WireShark, чтобы убедиться, что код CE действительно передается.

Запустите захват с помощью tcpdump, сохраните его в файле pcap, запустите запрос, который хотите захватить, а затем нажмите Ctl+c, чтобы остановить захват:

tcpdump -I any -w my_capture.pcap

Затем вы можете открыть этот pcap в WireShark и использовать фильтры, чтобы увидеть, происходит ли это.

Все пакеты, использующие ECN:

tcp.flag.ecn==1

Все пакеты отправляются с перегрузкой:

ip.dsfield.ecn==3

Я не уверен, что это решит эту конкретную проблему, но ОП запросил какие-либо возможности. Надеюсь, что кто-то, кто наткнется на этот пост и не знает, что еще проверить, сочтет эту информацию полезной и не будет тратить дни на проверку файлов конфигурации.

В конце концов я установил сервер tcp _ecn на 0, и пропускная способность сразу же подскочила до нормального диапазона. Это временное исправление, пока мы определяем, почему клиент отправляет флаг CE в пакетах SYN. Я читал, что некоторые системы могут таким образом договариваться об использовании ECN, но это совсем другая тема.

Понимание явных уведомлений о перегрузке CoS
TCP _ECN

0
03.12.2020, 21:48

Теги

Похожие вопросы