Почему я вижу пакет RST, ACK вместо пакета RST?

В Wireshark я часто вижу, что потоки TCP заканчиваются пакетом RST, ACK вместо пакета RST. Кто-нибудь знает, почему это?

Пример того, что я вижу:

SYN SYN, ACK ...данные... RST, ACK

Wireshark не собирает пакет RST до пакета RST, ACK.

34 голоса | спросил packetwrassler 21 J0000006Europe/Moscow 2013, 23:56:44

2 ответа


44

A RST /ACK не является подтверждением RST, так же как SYN /ACK не является точно подтверждением SYN. Установление TCP фактически является четырехсторонним процессом: инициирующий узел отправляет SYN принимающему хосту, который отправляет ACK для этого SYN. Принимающий хост отправляет SYN на инициирующий узел, который отправляет ACK обратно. Это устанавливает связь с состоянием.

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

Чтобы сделать это более эффективным, принимающий хост может ACK SYN и отправить свой собственный SYN в тот же пакет, создав трехсторонний процесс, который мы привыкли видеть.

SYN -->
    <-- SYN/ACK
ACK -->

В случае RST /ACK устройство подтверждает, какие данные были отправлены в предыдущем пакете (-ях) в последовательности с ACK, а затем уведомляет отправителя, что соединение закрыто с RST. Устройство просто объединяет два пакета в один, как SYN /ACK. RST /ACK обычно не является нормальным ответом при закрытии сеанса TCP, но это также не обязательно указывает на проблему.

ответил Santino 22 J0000006Europe/Moscow 2013, 01:44:32
1

После установления соединения все пакеты должны иметь ACK и соответствовать порядковому номеру полученных пакетов для надежного транспорта /безопасности. RST без ACK не будет приниматься. Когда одна сторона отправляет RST, сокет немедленно закрывается, и принимающая сторона также закрывает сокет сразу после получения действительного RST. Он не должен быть и не может быть подтвержден.

после рукопожатия TCP

A ---> B Syn = x, Ack = y, len = z, флаг ACK

B ---> A Syn = y, Ack = x + z, len = o, флаг ACK

A ---> B Syn = x + z, Ack = y + o, len = p, ACK Flag

B ---> A Syn = y + o, ACK = x + z + p, len = q, RST, ACK Flag

B закрывает сокет после того, как он отправляет последний пакет, и A закрывает сокет после его получения.

(не рассматривая здесь TCP-окно, или может быть больше пакетов с одного конца перед объявлением)

Флаг ACK, номер подтверждения и процедура подтверждения связаны, но не одно и то же.

В RFC793

  

RFC793

Номер подтверждения: 32 бит

If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive.  Once a connection is established this is always sent.

Сброс обработки

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

Приемник RST сначала проверяет его, затем изменяет состояние. Если   приемник находился в состоянии LISTEN, он игнорирует его. Если приемник был   в состоянии SYN-RECEIVED и ранее находилось в состоянии LISTEN,   то приемник возвращается в состояние LISTEN, иначе приемник   прерывает соединение и переходит в состояние ЗАКРЫТО. Если приемник   был в любом другом состоянии, он прерывает соединение и советует пользователю   и переходит в состояние ЗАКРЫТО.

ответил sdaffa23fdsf 23 J0000006Europe/Moscow 2013, 15:45:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132