2

RFC793 утверждает следующее об обработке RST:

Во всех состояниях, кроме SYN-SENT, все сегменты сброса (RST) проверяются путем проверки их полей SEQ. Сброс действителен, если его порядковый номер находится в окне.

Но я не уверен, что именно означает это утверждение. Допустим, у меня есть следующий сценарий:

Изображение 1

Поэтому сокет 2 сообщает сокету 1, что его размер окна составляет 6 КБ, а затем сокет 1 отправляет данные 6 КБ в сокет 2.

И затем сокет 1 отправляет пакет RST в сокет 2:

Изображение 2

Что произойдет в этом случае, будет ли пакет RST приниматься сокетом 2?

2 ответа2

2

Linux разрывает соединение TCP только в том случае, если порядковый номер RST является следующим ожидаемым порядковым номером. Это правило было применено, чтобы избежать слепой атаки сброса TCP (см. RFC 5961, раздел 3.2). Таким образом, применяются следующие правила:

1) Если бит RST установлен и порядковый номер находится за пределами текущего окна приема, молча отбросить сегмент.

2) Если бит RST установлен и порядковый номер точно соответствует следующему ожидаемому порядковому номеру (RCV.NXT), то TCP ДОЛЖЕН сбросить соединение.

3) Если бит RST установлен и порядковый номер не точно соответствует следующему ожидаемому значению последовательности, но находится в текущем окне приема (RCV.NXT <SEG.SEQ <RCV.NXT+RCV.WND), TCP ДОЛЖЕН отправить подтверждение (вызов ACK):

  <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>

Таким образом, вы в случае 1, ваш сегмент RST будет молча отброшен (по крайней мере, в Linux, это зависит от реализации, но ДОЛЖНО быть соблюдено).

0

Как только все данные будут переданы от клиента к месту назначения с помощью механизма фрагментов, использующего значение MTU, FIN будет инициирован, а не RST.

  • FIN: Передача данных завершена и больше не осталось очков. (Изящное закрытие)
  • RST: я не перечисляю в этом порту / я перегружен. (Сила близко)

Для пакета RST да проверяется порядковый номер, потому что устройства src, dst и промежуточные устройства должны прервать сеанс и запись в таблице соединений / состояний.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .