Що таке стани CLOSE_WAIT і TIME_WAIT?


156

Коли я це роблю netstat -a на моїй машині Windows я отримую список портів з одним із чотирьох станів:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

Що робити CLOSE_WAIT і TIME_WAIT означають / вказують?



див. "man netstat", прокрутіть вниз до розділу стану: linux.die.net/man/8/netstat
— MaQleod

1
Безсоромний штекер до відповіді на нашому сестерсіті Помилка сервера .
— Hennes

Перехресний сайт: askubuntu.com/questions/538443/…
— Mokubai

Відповіді:


166

Завдяки тому, як працює TCP / IP, з'єднання не можуть бути закриті негайно. Пакети можуть прибути з ладу або бути повторно передані після закриття з'єднання. CLOSE_WAIT вказує, що віддалена кінцева точка (інша сторона з'єднання) закрила з'єднання. TIME_WAIT вказує, що локальна кінцева точка (ця сторона) закрила з'єднання. З'єднання зберігається навколо так, що будь-які затримані пакети можуть бути узгоджені з з'єднанням і оброблені належним чином. З'єднання будуть видалені під час тайм-ауту протягом чотирьох хвилин. Подивитися http://en.wikipedia.org/wiki/Transmission_Control_Protocol для більш докладної інформації.


Але хіба це не означає, що навіть якщо пакети прибудуть після повернення функції, вони все одно будуть відкинуті програмою?
— MonsterMMORPG

@MonsterMMORPG Пакети, які надходять після завершення з'єднання, будуть оброблені мережним стеком. Зазвичай їх можна безпечно відкидати відповідно до звичайних правил дублювання пакетів. Пакети, які здаються пов'язаними з невідомим активним з'єднанням, зазвичай відкидаються і генерують відповідь. Держави WAIT захищають від цього трафіку.
— BillThor

28

По суті, стан "очікування" означає, що одна сторона закрила з'єднання, але остаточне підтвердження закриття очікується.

Див. ця діаграма держав TCP для деталей:

http://www.jxos.org/Projects/TCP/tcpstate.html


11
Це точно описує CLOSE_WAIT, але не TIME_WAIT. TIME_WAIT вказує на те, що локальне додаток закрило з'єднання, а інша сторона визнала та надіслала власну FIN. Тепер ми чекаємо будь-яких пакунків, які можуть заважати новому користувачеві одного і того ж порту.
— Chris Smowton

1
@ChrisSmowton, Отже, хто використовує правильну термінологію? На схемі або netstat? ( пор. )
— Pacerier

@Pacerier Я думаю, що вони відповідають - де ви думаєте, що вони не згодні?
— Chris Smowton

@ChrisSmowton Таким чином, це означає, що наступний власник порту може отримати додаткові байти, і це може порушити відповідь, якщо ми встановимо TIME_WAIT = 0?
— MonsterMMORPG

Можливо, але дуже малоймовірно, так як порядкові номери повинні відповідати для того, щоб програма бачила, що пакунок-зловмисник з'єднаний з потоком, або приймач повинен був би буферизувати пакет, який, очевидно, вийшов з ладу, поки не з'явився правильний порядковий номер. Я не знаю достатньо практичних реалізацій, щоб сказати, чи зроблено останнє на практиці.
— Chris Smowton

0

TIME_WAIT представляє очікування достатньо часу, щоб переконатися, що віддалений TCP отримав ACK свого запиту FIN. Подивитися en.wikipedia.org/wiki/Transmission_Control_Protocol (а також RFC 793)


1
Що це додає до інформації, наданої існуючими відповідями?
— fixer1234

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