Назад | Перейти на главную страницу

Последовательность TCP и номера подтверждения

Я просмотрел здесь другие вопросы, касающиеся соответствующих тем, но мне все еще не ясно.

Я только что читал этот объяснение Последовательность TCP и номера подтверждения. Примерно на полпути есть эта диаграмма:

В конце страницы объяснение последнего шага, шага 4, включает следующий текст:

Обратите внимание, что порядковый номер сегмента в строке 4 такой же, как и в строке 3, потому что ACK не занимает пространство порядкового номера.

Поэтому имейте в виду, что любые сгенерированные пакеты, которые являются просто подтверждениями (другими словами, имеют только установленный флаг ACK и не содержат данных) ранее полученных пакетов, никогда не увеличивают порядковый номер.

В настоящее время я пытаюсь понять это:

Что касается моих первых двух пунктов, это правильно? (Например, правильно ли понял автор?) Что касается моего третьего пункта, это правильно? И, наконец, если предположить, что ответ на первые два вопроса прост: 'да', то причина того, что эти числа одинаковы в обоих пакетах, потому что не было получено промежуточных пакетов от Сервер шлюза?

Я прошу общих разъяснений по этому поводу.

  • Да, порядковый номер и номер подтверждения в пакетах 3 и 4 действительно будут идентичны.
  • Нет, идентичность пакетов не гарантируется. Вы можете увидеть следующие различия:
    • Пакет 4 также может иметь PSH установлен флаг.
    • Если используются временные метки, они могут отличаться от 3 до 4.
    • Контрольная сумма, скорее всего, будет другой.
  • Причина того, что порядковый номер в пакетах 3 и 4 одинаковый, состоит в том, что пакет 3 не содержал никаких данных полезной нагрузки.
  • Причина того, что номер подтверждения в пакетах 3 и 4 одинаков, состоит в том, что за это время от сервера не было получено никаких данных.

Пакет 3 как бы избыточен. Уровень TCP может решить подождать несколько микросекунд перед его отправкой и сразу перейти к пакету 4, если приложение действительно записало что-то в сокет в течение этих микросекунд.

Я могу порекомендовать использовать Wireshark для проверки реального трафика на вашем компьютере, что может помочь понять, что происходит.