Мы пытались разобраться в действительно странной проблеме, когда мы можем получить страницу из Apache 2.2.19 на solaris 10, и некоторые перестановки запросов надежно требуют различного фиксированного времени для ответа.
Похоже, что это основано на закрытии сокета TCP, из tcpdump на клиенте мы обычно видим паузу между сервером, заполняющим окно TCP своим ответом в последний раз, и последним сгустком данных вместе с FIN с сервера.
Таким образом, на проводе он просто зависает в середине передачи ответа HTTP, но netstat на сервере показывает сокет в FIN_WAIT_1. мы не можем выполнить tcpdump на сервере, чтобы прояснить ситуацию, но нам кажется, что ОС передала TCP-диалог аппаратному обеспечению, поэтому считает, что он начал 4-ходовое закрытие, но сетевая карта никогда не помещает этот пакет или выдающийся пакеты данных (может быть, 1 или 2 по 1500 байтов и 400 или что-то еще).
Это примерно настолько чистая картина, которую мы можем нарисовать, за исключением одного недавнего теста, который мы сделали, который выглядел потрясающе ... файл размером 64076 байт обслуживается apache - задержка 432 мс для последнего пакета. мы добавляем ОДИН символ в файл, и это вызвало создание дополнительного пакета, 53 байта, который также включал FIN, в отличие от пустых 52 байтов FIN, которые мы видим в файле немного меньшего размера, с задержкой. Наличие этого дополнительного пакета надежно изменяло то, как происходил FIN-разговор, и увеличивало время разговора с почти полсекунды до нескольких миллисекунд.
Чаще всего эта задержка составляла 4,6 секунды в течение всего срока службы, снова мы видим, что размер окна колеблется, SACK возвращается к Apache, когда это необходимо, но в ПОСЛЕДНИЙ раз, когда это окно заполняется, оно зависает на 46 секунд, а затем возвращается последние 2 или 3 Кбайт данных и FIN, который, по мнению Solaris, он отправил много лет назад.
Наши tcpdumps находятся на F5 BigIP, поэтому есть ASIC для проходящего трафика, а также Cisco 6509 (только L2), однако мы видим тот же пользовательский опыт при выполнении wget на соседнем устройстве Solaris, поэтому не Не верю, что BigIP творит какую-то черную магию.
Но все это смешано с путаницей в отношении размеров окон, MSS и тому подобного, но если это кому-то кажется знакомым, мы все слышим!