Color
@Color
Golang SWE, Cloud & DevOps

Что такое Sequence и Acknowledgment Number в TCP-заголовке?

RFC 793 гласит (перевод):
Sequence Number - порядковый номер: 32 бита
Порядковый номер первого октета данных в сегменте при отсутствии флага SYN. Если в сегменте присутствует бит SYN, поле номера содержит значение начального порядкового номера (ISN), а первый октет данных имеет номер ISN+1.
Acknowledgment Number - номер подтверждения: 32 бита
Если бит ACK установлен, это поле содержит значение следующего порядкового номера, который отправитель сегмента ожидает получить. После организации соединения это значение передается всегда.

1. В случае SYN каким образом заполняется первый октет? Как понимать "первый октет данных имеет номер ISN+1". Просто записывается ISN+1, а дальше все остальное?
2. В случае SYN-ACK, что имеется в виду под значением следующего порядкового номера, который отправитель сегмента ожидает получить? Как его рассчитать?
  • Вопрос задан
  • 15299 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В случае SYN каким образом заполняется первый октет? Как понимать "первый октет данных имеет номер ISN+1". Просто записывается ISN+1, а дальше все остальное?

Нет. В поле Sequence Number записывается номер, соответствующий первому октету TCP-сегмента. Для самого первого октета данных это будет ISN+1.

В случае SYN-ACK, что имеется в виду под значением следующего порядкового номера, который отправитель сегмента ожидает получить? Как его рассчитать?

Если вы успешно получили все октеты вплоть до N, то дальше вы ожидаете получить N+1. Так, например, при получении первого SYN и вместе с ним ISN вы как будто получили всё до этого ISN включительно, и теперь ожидаете ISN+1, о чём и говорит RFC.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы