Дивлячись у Wireshark, я часто бачу, як потоки TCP закінчуються пакетом RST, ACK замість пакетом RST. Хтось знає, чому це?
Приклад того, що я бачу:
SYN SYN, ACK ... дані ... RST, ACK
Wireshark не приймає пакет RST перед пакетом RST, ACK.
Дивлячись у Wireshark, я часто бачу, як потоки TCP закінчуються пакетом RST, ACK замість пакетом RST. Хтось знає, чому це?
Приклад того, що я бачу:
SYN SYN, ACK ... дані ... RST, ACK
Wireshark не приймає пакет RST перед пакетом RST, ACK.
Відповіді:
RST / ACK не є підтвердженням RST, так само як SYN / ACK не є точно підтвердженням SYN. Встановлення TCP насправді є чотиристороннім процесом: ініціюючий хост надсилає SYN приймаючому хосту, який надсилає ACK для цього SYN. Приймаючий хост посилає SYN до ініціюючого хоста, який надсилає ACK назад. Це налагоджує державне спілкування.
SYN -->
<-- ACK
<-- SYN
ACK -->
Щоб зробити це більш ефективним, приймаючий хост може АКК SYN і надсилати свій власний SYN у тому ж пакеті, створюючи тристоронній процес, який ми звикли бачити.
SYN -->
<-- SYN/ACK
ACK -->
У випадку з RST / ACK, Пристрій розпізнає будь-які дані, що були надіслані в попередньому пакеті (послідовностях) в послідовності з ACK, а потім повідомляє відправника про те, що з'єднання перервано з RST. Пристрій просто поєднує два пакети в один, як і SYN / ACK. RST / ACK зазвичай не є нормальною реакцією на закриття сеансу TCP, але це не обов'язково вказує на проблему.
RST ACK
відповідей на підроблену адресу джерела.
Після встановлення з'єднання для всіх пакетів потрібно встановити 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
B ---> A Syn = y + o, ACK = x + z + p, len = q, RST, прапор ACK
B закриває сокет після того, як він надсилає останній пакет, а A закриває сокет після його отримання.
(не враховуючи вікно TCP тут, або може бути більше пакетів з одного кінця перед присвоєнням)
Прапор ACK, номер підтвердження та процедура підтвердження пов'язані, але не одне і те ж.
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, інакше приймач перериває з'єднання та переходить у стан закритого типу. Якщо одержувач знаходився в будь-якому іншому стані, він припиняє з'єднання та повідомляє користувача та переходить у стан ЗАКРИТО.