Яка мета ПЕРЕЧИТИ ЧАС в розриві з'єднання TCP?


12

Я виявив, що причина активного ближчого вступу до ЧАСУ ЗАЧЕКАЙТЕ в тому, щоб переконатися, що остаточний ACK не втрачений. Але як дізнатися, чи втрачено остаточний АСК? Чи пасивний ближчий відправить FIN і тоді активний ближчий знає, що ACK був втрачений? Ось малюнок TCP FSM.

TCP FSM



1
У цій публікації в блозі є чудова відповідь: vincent.bernat.im/en/blog/…
Воєнний шимпанзе

Відповіді:


5

Чи пасивний ближчий відправить FIN і тоді активний ближчий знає, що ACK був втрачений?

Так. Цитування з тома 1 ілюстрованого TCP / IP у розділі Керування з'єднаннями TCP:

  1. Для завершення завершення кінцевий сегмент містить ACK для останнього FIN. Зауважте, що якщо FIN втрачено, він повторно передається до отримання ACK для його отримання.

Є тайм-аут. Коли ввімкнеться LAST_ACK, пасивний ближче відправиться, FINколи з’явиться тайм-аут, припускаючи, що він був втрачений. Якщо вона справді була втрачена, то активний ближчий зрештою отримає повторно переданий FINта вхід TIME_WAIT. Якщо FINне було програно, але фінал ACKбуло втрачено, то активне з'єднання входить TIME_WAITі отримує FINзнову. Коли це станеться - надходить FINв TIME_WAIT- ACKретранслюється.

Значення тайм - ауту в TIME_WAITце НЕ використовується для цілей повторної передачі. Коли вчасно TIME_WAITочікується час, передбачається, що фінал ACKбув успішно доставлений, оскільки пасивний ближчий не передавав FINпакети. Отже, час очікування TIME_WAIT- це лише кількість часу, після якого ми можемо сміливо припустити, що якщо інший кінець нічого не надіслав, то це тому, що він отримав остаточне ACKі закрив з'єднання.


1

Але як дізнатися, чи втрачено остаточний АСК?

Оскільки він не отримав його протягом періоду очікування. Я знаю, що це "духа" відповідь, але саме тому ці стани та тайм-аути існують.

Чи пасивний ближчий відправить FIN

Ні, якщо тільки для цього потоку не надійдуть подальші пакети, і це призведе до відправлення "RST" (скидання).

Весь процес є складною державною машиною для здійснення впорядкованого відключення, незважаючи на можливість відмов у мережі. Мережі розриваються, помилки стикаються, зв’язки насичуються і повинні скидати пакети, виходити з ладу пристрої і т. Д. Як вправу, запустіть дерево стану для активного з'єднання, коли одна з кінцевих точок просто зникає (наприклад, збою живлення.)

TL; DR Це дерево стану призначене для обробки всіх можливих режимів відмов.


Дякую, але я все ще плутаю першу частину. Я мав на увазі, як активний ближчий знає, що ACK не був прийнятий пасивним ближчим? Коли пасивний ближчий приймає ACK, він просто розриває свою сторону з'єднання, і якщо він не отримує ACK, він залишається в ОСТАННІЙ ACK, тож як активний ближчий дізнається, чи був отриманий ACK?
czhao

адже до кожної держави є таймери.
Ricky Beam

Вибачте, я не розумію. Як ці таймери кажуть активним ближчим, що пасивний ближчий не отримав остаточний ACK? тобто як активний ближчий знає, чи має він повторно подати остаточний ACK?
czhao

0

Мета TIME_WAIT - дозволити мережам розрізнити пакети, які надходять як належать до "старого, існуючого" з'єднання, від нового. Рекомендація полягає в тому, щоб встановити таймер TIME_WAIT вдвічі більше, ніж максимальний час роботи сегмента (MSL), у моїй системі MSL становить 1 хвилину, тому з'єднання затримуються у стані TIME_WAIT протягом 2 хвилин.

Після закінчення цього часу будь-які пакети, які надходять, більше не пов'язані зі старим з'єднанням.

TIME_WAIT не чекає безпосередньо надсилання пакетів ACK; що керується станами CLOSE_WAIT та FIN_WAIT. Коли ви перейдете до стану TIME_WAIT, розетка вже закрита.

Список літератури: http://www.tcpipguide.com/free/t_TCPConnectionTermina-3.htm https://en.wikipedia.org/wiki/Maximum_segment_lifetime http://www.lognormal.com/blog/2012/09/27/ налаштування linux-tcpip /

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.