Эта проблема
Примечание: сначала я хотел бы понять, ПОЧЕМУ это происходит. Конечно, решение было бы тоже неплохо. :)
При загрузке большого файла по HTTP с высокой скоростью мой беспроводной трафик в основном останавливается: я не могу открыть веб-страницы, а сама загрузка приостанавливается. Это делает паузу в значительной степени сразу после запуска; иногда в 800 КБ, иногда в несколько МБ. Через некоторое время загрузка (и другой трафик) возобновляется, но проблема продолжает возникать во время той же самой загрузки.
Проблема не возникает при использовании проводного соединения через тот же маршрутизатор (Linskys WRT120N). Также обратите внимание, что при этом соединение не прерывается. Просто трафик останавливается, и я не могу просматривать веб-страницы и т.д. (SYN-пакеты отправляются, но ничего не принимается и т.д.)
Проверка с помощью Wireshark показывает, что происходит следующее:
- Сервер отправляет пакеты данных, которые подтверждены клиентом
- Сервер отправляет пакет, но SEQ указывает, что некоторые пакеты были потеряны (6 пакетов в одном случае).
- Сервер отправляет еще несколько пакетов, и клиент подтверждает их, используя "выборочное подтверждение"
- Сервер на некоторое время прекращает отправку данных (поскольку потерянные пакеты не были подтверждены или маршрутизатор перестал их пересылать?)
- В конце концов, сервер выполняет "повторную передачу", и трафик возобновляется как обычно.
Это все кажется нормальным поведением, когда происходит потеря пакета. Это постоянная потеря пакетов во время большой, высокоскоростной загрузки, которая озадачивает меня.
Что может вызвать это?
Моя собственная идея заключается в следующем: мой интернет довольно быстрый (100 Мбит / с), поэтому при запуске загрузки большого файла маршрутизатор буферизует входящие данные (поскольку беспроводная связь вводит некоторую небольшую задержку / более низкую скорость, частично из-за других сетей), но буфер переполняется, и маршрутизатор отбрасывает пакеты для регулирования трафика (и потому что у него нет выбора).
Но как это могло случиться? Разве размер окна TCP не ограничивает объем данных, которые могут остаться неподтвержденными? Итак, как может переполниться буфер маршрутизатора, если может быть только 64 КБ, ожидающих подтверждения?
Примечание. Я попытался исправить это, отключив масштабирование окна TCP и динамический размер окна с помощью параметров netsh
, но это не имеет значения.
Кроме того, Wireshark показывает шаблон сервера, отправляющего 2 пакета (из 1514 байтов), и клиента, отправляющего ACK, так исключает ли это возможное переполнение буфера? И еще несколько последующих пакетов принимаются ...
Я в недоумении здесь. Спасибо за любые идеи.
Вещи, которые (вероятно) НЕ являются причиной / я экспериментировал с
- Браузер
- Различные параметры TCP в Windows 7 (
netsh
и т.д.) - Настройки маршрутизатора, такие как MTU, интервал маяка, UPnP, ...