TCP NO_DELAY + потерянный заголовок + ретрансляция TCP
Странная ситуация наблюдается в этом случае:
- HTTP-запрос отправляется с флагом TCP NO_DELAY (т. Е. Алгоритм Nagle отключен);
- WireShark не захватывает пакет TCP с глаголом и заголовками HTTP - только пакет с телом HTTP виден (пакет потерян?);
- Ответы удаленного хоста с ACK показывают, что не все данные подтверждены;
- Происходит повторная передача TCP, и теперь HTTP-глагол и заголовки перехватываются WireShark.
Больше примечаний:
- Если алгоритм Nagle включен, то потеря или повторная передача пакетов не наблюдается;
- Проблема проверена в двух разных сетях, поэтому проблема вряд ли связана с сетевой средой (за исключением, может быть, факта, что хосты являются виртуальными машинами);
- Запрос сделан с использованием C# HttpClient (.NET 4);
- Размер тела HTTP, кажется, играет роль - нет проблем для относительно маленьких пакетов.
Похоже, что NO_DELAY вызывает странное поведение с потерянным TCP-пакетом с HTTP-заголовками / глаголом внутри.
Любой совет?