<blockquote>Вплоть до 29 пакета всё кажется идёт хорошо, но в 29 пакете браузер пытается отправить ACK, как я понял в ответ на FIN ACK, но похоже тут что-то не так.</blockquote> <br/> всё ок, браузер почему-то отправил сразу два ACK, без учета FIN (29) и с учетом FIN (30). Ну лишний пакет получился, и ладно. Последовательность FIN/ACK завершена корректно. <br/> <br/> <blockquote>У меня подозрение, что в после того как сервер в 28 пакете отправил FIN ACK он не дожидается ACK от клиента, верно ли это?</blockquote> <br/> не, там всё нормально <br/> <br/> <blockquote>но браузер тут-же создаёт новое подключение</blockquote> <br/> не, там браузер сразу два соединения создал. так делается для оптимизации - чтобы быстрее загрузить что-нибудь ещё. обычно на странице много контента и помимо первого GET образуются много других GET. Но в вашем случае этого не происходит и соединение не пригождается. <br/> <br/> <blockquote>не присылает никаких запросов в этом подключении</blockquote> <br/> видимо в index.html не было больше ничего, что можно запросить <br/> <br/> <blockquote>поскольку я хочу просто отправить ответ и закрыть соединение</blockquote> <br/> так и вышло, но в первом соединении. второе так и висело на всякий случай. <br/> <br/> <blockquote>в этом варианте клиенту с сервером чуть-чуть не хватило что-бы полностью обработать последовательность:</blockquote> <br/> да не чуть-чуть, здесь вместо закрытия по таймауту (FIN), на стороне сервера соединение закрылось по RST (видимо по закрытию приложения сервера или по системному таймауту), клиент и не думал начинать закрывать сокет. логично - браузер всё ещё надеется, что вы откроете другую страничку <br/> <br/> <blockquote>Правильно ли я понимаю, что сервер посылая FIN ACK не дожидается ACK и в целом неверно производит завершение TCP подключения, завершая соединение раньше времени?</blockquote> <br/> всё корректно дожидается, тут проблем нет <br/> <br/> <blockquote>Именно поэтому браузер инициирует повторное подключение, но не присылает никаких данных.</blockquote> <br/> нет, браузер именно сразу при подключении открывает два соединения (обратите внимание на два SYN в самом начале), для более быстрой обработки ваших запросов. разработчики браузера стараются как можно сильнее ускорить работу, вот и идут на такие ухищрения. <br/> <br/> <blockquote>Я попробовал отправлять запрос с помощью сторонней утилиты, в этом случае соединение завершается корректно</blockquote> <br/> а тут всего одно соединение, без второго висящего в ожидании. утилита проста как тапок, сказали подключиться, подключается, без дополнительных оптимизаций и соединений "на будущее" <br/> <br/> <blockquote>(я пробовал разные браузеры)</blockquote> <br/> видимо все браузеры конкурируют по скорости работы с Web и делают такую оптимизацию