Що означає LAST_ACK як значення стану в неттості?


15

Якщо сервер Windows має кілька тисяч портів, відкритих у LAST_ACKстані (як показано netstat), що це може означати? Це тому, що одна кінцева точка чекає, коли інша відповість?

Відповіді:


10

Стан last_ack (якщо я правильно пригадую свій стек TCP) - це стан, коли ви отримали своє повідомлення FIN про припинення з'єднання від свого сусіда, але вам все одно потрібно розмити і вимкнути з'єднання. Ви відправляєте фінальний FIN самостійно і чекаєте ACK.

Зазвичай висить у last_ack означає, що ваша програма тримає розетку відкритою навіть тоді, коли інший кінець закінчив надсилання даних. Це може статися з кількох причин. Можливо, є брандмауер або інший балансир навантаження, який втрачає останній ACK від клієнта, і залишає вас застрягнутим у стані last_ack. Якщо підключення не вичерпано через кілька хвилин (10 або більше), ви, ймовірно, помилку.

Перегляньте діаграму стану на веб-сторінці http://tangentsoft.net/wskfaq/articles/debugging-tcp.html


4
Неправильно. Ви описуєте CLOSE_WAIT.
користувач207421

4

LAST_ACK - це останній правий стан перед тим, як закрити з'єднання TCP.


1
Дякую, що може призвести до того, що порт зависне в такому стані?
Нік Болтон

Це веб-сервер IIS (чи інша послуга), який ви бачите на своєму власному додатку чи?
Імо

Додаток реалізує клієнт XML-RPC "Cook Computing" (від Asp.Net, запускається через IIS) і спілкується з сервером Java XML-RPC.
Нік Болтон

1
Це завершальні етапи розмови TCP з клієнтом. Ваше програмне забезпечення, схоже, закриває () сеанс TCP і надсилає клієнту LAST_ACK. Потім клієнт повинен повернути підтвердження того, що LAST_ACK отримано. Я погоджуюся з pehrs у тому, що клієнт (можливо, брандмауер), можливо, не підтвердив його або пакет може бути загублений ... це два найімовірніших випадки.
Імо

1
Він не "надсилає клієнту LAST_ACK". Він надсилає FIN і в даний час чекає ACK, вже отримавши FIN і відправивши ACK. Це останній стан після закриття з'єднання.
користувач207421

2

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


0

Я вважаю, що @lmo правильно сказати, що це "останній стан прямо перед тим, як закрити TCP-з'єднання", але крім цього, виходячи з мого читання сторінки вікіпедії, варто зазначити, що це не є частиною " Механізм активного закриття ", який (на моє розуміння) - це закінчення більшості добре сприйнятих зв'язків, а скоріше є частиною послідовності" Пасивного закриття ", яка, імовірно, асоціюється з Поважними ситуаціями.

(FWIW, я - мови, а не мережі. Буду радий поясненням від мережі.)


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