
У меня уже некоторое время возникают проблемы с сетью, и я пытаюсь выяснить причину проблемы.
Вчера я перекачивал файл с ноутбука на настольный компьютер с помощью SCP через Wi-Fi. Когда началась загрузка, у обоих компьютеров был низкий пинг до локального маршрутизатора (192.168.1.1, оба были около 10-50 мс), а загрузка шла со скоростью 2-3 МБ/с.
Примерно через минуту я обнаружил, что задержка моего настольного компьютера до 192.168.1.1 резко возросла (> 1000 мс), а передача замедлилась до скорости улитки (~200 КБ/с). Однако задержка ноутбука до 192.168.1.1 осталась прежней (10-50 мс). После завершения передачи задержка настольного компьютера вернулась к своему нормальному диапазону.
Очевидно, что что-то идет не так, когда соединение перегружено. Что это может быть? Это говорит о проблеме с маршрутизатором или о проблеме с моим рабочим столом? Где правильно начать искать?
решение1
Погуглите «раздувание буфера».
По мере удешевления оперативной памяти в сетевом оборудовании появились кадровые буферы, благодаря которым не приходилось терять кадры.
К сожалению, TCP замечал перегрузку и знал, когда отступать, по потере кадров. Без потерянных кадров традиционные реализации TCP никогда не замечают перегрузку и никогда не отступают, поэтому они просто продолжают отправлять данные на высоких скоростях и ухудшают ситуацию.
Если все ваше сетевое оборудование просто буферизует все больше и больше кадров во время перегрузки и позволяет длине очереди неограниченно расти, задержка будет расти и расти, поскольку на опустошение очередей потребуется все больше и больше времени.
Методы и механизмы активного управления очередями (AQM) и такие как явное уведомление о перегрузке (ECN) могут облегчить это, но поскольку проблема не очень широко освещается, трудно понять, какие продукты избегают раздувания буфера, а какие нет. Это не похоже на то, что вы можете найти логотип «No Buffer Bloat!» на коробке и быть уверенным, что получаете хорошее оборудование.
Однако существуют дистрибутивы прошивок маршрутизаторов Wi-Fi, которые специализируются на предотвращении раздувания буфера. По крайней мере один дистрибутив был специально разработан исследователями TCP, которые первыми обнаружили проблему, и использовался в качестве платформы для исследований и разработок, пока они искали решения.
решение2
Высокая задержка происходит, когда пакеты попадают в очередь для передачи по очень загруженному каналу. Все пакеты, находящиеся в очереди перед ним, должны быть отправлены первыми. Когда спрос на канал большой, а буферы очереди большие, это приводит к большому времени передачи туда и обратно.