RFC: 793
Оригинал: Transmission Control Protocol
Предыдущие версии: RFC 761
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых

RFC 793, Страница 45 из 49

Доставка сегментов

  • Состояние CLOSED (TCB не существует)
  • Все данные во входящем сегменте отбрасываются, отбрасывается также входящий сегмент, содержащий RST. В ответ на входящий сегмент без RST передается сегмент RST. Порядковый номер и номер подтверждения выбираются таким образом, чтобы сделать порядковый номер reset приемлемым для TCP, передавшего сегмент.

    Если бит ACK не установлен, используется порядковый номер 0

    <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>

    При наличии бита ACK

    <SEQ=SEG.ACK><CTL=RST>
  • Состояние LISTEN
    1. Проверка RST — все входящие RST должны игнорироваться с возвратом управления.

    2. Проверка ACK — любые подтверждения являются некорректными, если они поступают через соединение в состоянии LISTEN. В ответ на такие подтверждения должен формироваться приемлемый сегмент сброса (reset) в формате:

      <SEQ=SEG.ACK><CTL=RST>

      Возврат управления.

    3. Проверка SYN

      Если бит SYN установлен, проверяется уровень безопасности. Если уровень безопасности/разделения для входящего сегмента не соответствует в точности уровню безопасности в TCB, передается сигнал сброса и возвращается управление.

      <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>

      Если SEG.PRC > TCB.PRC, то при наличии разрешения со стороны пользователя и системы устанавливается TCB.PRC<- SEG.PRC; в противном случае передается сигнал сброса и возвращается управление.

      <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>

      Если SEG.PRC < TCB.PRC, обработка вызова продолжается.

      Устанавливаются значения RCV.NXT = SEG.SEQ+1 и IRS = SEG.SEQ, все остальные данные и поля управления помещаются в очередь для последующей обработки. Должно быть выбрано значение ISS и передан сегмент SYN в форме:

      <SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>

      Устанавливаются значения SND.NXT = ISS+1 и SND.UNA = ISS. Соединение должно быть переведено в состояние SYNRECEIVED. Отметим, что любые другие входящие данные и поля управления (включенные в SYN) будут обрабатываться в состоянии SYN-RECEIVED, но обработка SYN и ACK не должна повторяться. Если прослушивающая сторона не задана полностью (т. е., не полностью указан внешний сокет), пропущенные поля должны быть заполнены на этом этапе обработки.

    4. Проверка других полей

      Любые другие сегменты управления и данных (не содержащие SYN) должны содержать ACK и, таким образом, будут отброшены при проверке ACK. Входящий сегмент RST не может быть корректным, поскольку он не может служить откликом на какую-либо передачу в данной реинкарнации соединения. Вероятность получения такого сегмента мала, но если это произойдет, нужно просто отбросить сегмент и возвратить управление.

Страница 45 из 49

2007 - 2022 © Русские переводы RFC, IETF, ISOC.