У меня есть 2 машины в локальной сети 100 Гбит / с, которые разговаривают друг с другом по TCP.
Когда я делаю tracert или ping от клиента к серверу, даже большой ping, я получаю ответ меньше, чем 1 мс.
Однако, когда я обнюхиваю TCP-пакеты на стороне клиента, я вижу, что 40 мс проходит между моментом, когда он отправляет первое сообщение трехстороннего рукопожатия, до момента, когда он получает ответ от сервера.
Сервер выделен для этого клиента и больше ничего не обрабатывает.
Это разумно? Я ожидал, что это будет намного быстрее.
Ping обычно обрабатывается внутренним стеком TCP, но рукопожатие должно обрабатываться приложением. ОС должна
1) wake up the application,
2) wait for it to retrieve the packet,
3) do any pre-processing required when starting a new connection then
4) tell the OS to continue with the handshake.
Часть 3 выше может занять значительное время (вот почему многие серверы проходят предварительную форк). Для какого типа сетевого трафика вы наблюдаете RTT с длинным рукопожатием? Улучшается ли RTT после рукопожатия?
С.
Установка TCP_NODELAY и объединение пары сообщений в одно помогло, сообщения были слишком маленькими.
Что вы имеете в виду, когда говорите "большой пинг"? Большой пакет? В любом случае ping использует Пакеты ICMP, которые обычно небольшие и с высоким приоритетом. Итак, один из случаев - проверить ваши конфигурации.
Другое дело - попробовать не-icmp пинг, лайк tcpping. Он использует пакеты TCP syn, так что будет примерно так же.