Що таке стани 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.