Мы пытались отладить очень низкую скорость передачи данных для удаленных клиентов, обращающихся к нашему веб-серверу (IIS на 2k12 R2).
RTT для клиента составляет около 150 мс, и мы изо всех сил пытаемся получить более 500 кбит / с из нашего канала 100 Мбит / с. Клиент может выполнить тестовую загрузку со скоростью более 300 Мбит / с на локальный сервер тестирования скорости, поэтому мы считаем, что проблема не на стороне клиента, а на стороне отправки.
Wireshark показывает, что отправитель (IIS) никогда не отправляет более 3 пакетов, не дожидаясь ACK. Максимальный объем передаваемых байтов составляет около 20 КБ. Размер окна приема, объявленного клиентом, составляет около 256 КБ, поэтому отправитель просто не заполняет окно.
Мы много чего пробовали, чтобы исправить это, включая отключение всех параметров разгрузки в настройках сетевой карты, отключение эвристики и т. Д. Это сводит нас с ума, поскольку означает, что наша серверная инфраструктура в основном непригодна для этой цели.
Маршрутизатор: C2911 / K9 Серверы: Dell R730s с сетевыми адаптерами Broadcomm с гипервизорами Hyper-V 2012 R2
Мы видим, как скорость загрузки на локальные серверы тестирования скорости насыщает нашу ссылку, но я считаю, только потому, что задержка очень низкая. Метки времени Wireshark показывают, что отправитель ожидает ACK, которых он не должен ждать.
Конечно, IIS не выполняет посылку с последовательной блокировкой с маленькими буферами или еще чем-то?
Мы обнаружили проблему в этом случае. Это была неправильная настройка порта на нашем маршрутизаторе, обращенного к нашему демаркационному переключателю. Интерфейс маршрутизатора был установлен на 1 Гбит, а оптоволокно - на 100 Мбит. Управление потоком также было отключено на порту коммутатора, поэтому маршрутизатор переполнял коммутатор, заставляя его отбрасывать пакеты.
Установка скорости интерфейса маршрутизатора на 100 Мбит решила проблему сброса пакетов.