netstatの状態値としての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について説明しています。
user207421 14年

4

LAST_ACKは、TCP接続を閉じる直前の最後の状態です。


1
おかげで、この状態でポートがハングする原因は何ですか?
ニックボルトン

これは、これを見ているIIS Webサーバー(または他のサービス)ですか、それとも独自のアプリケーションですか?
イモ

アプリケーションは、「Cook Computing」XML-RPCクライアント(Asp.NetからIISを介して実行)を実装し、Java XML-RPCサーバーと通信しています。
ニックボルトン

1
クライアントとのTCP会話の最終段階です。ソフトウェアはTCPセッションをclose()しようとし、クライアントにLAST_ACKを送信します。その後、クライアントはLAST_ACKが受信されたことを示す確認応答を返信する必要があります。私は、クライアント(おそらくファイアウォール)がそれを認識していないか、パケットが失われている可能性があるという点で、ペールに同意します。これらは最も可能性の高い2つのケースです。
イモ

1
「クライアントにLAST_ACKを送信する」ことはありません。FINを送信し、現在FINを受信して​​ACKを送信済みで、現在ACKを待機しています。接続を閉じたの最後の状態です。
user207421 14年

2

LAST_ACKは、エンドがピアからFINを受信し、ACKを送信し、FINを送信し、ピアからの最終ACKを待っていることを意味します。この時点で、アプリケーションはそれ以上何もできません。ソケットは閉じられています。アプリケーションが終了した可能性もあります。ここからは、最終ACKを取得するか、タイムアウトするまでFINを再送信するのはTCPです。ネットワークを調査する以外、管理者としてできることはあまりありません。


0

@lmoは、「TCP接続を閉じる直前の最後の状態」であると言うのが正しいと思いますが、これに加えて、ウィキペディアのページを読んだところ、これは「 (私の理解では)最も適切に動作する接続の終了であるアクティブクローズ」メカニズムであり、むしろ「バッドスタッフハプニング」に関連する「パッシブクローズ」シーケンスの一部です。

(FWIW、私はネットワークではなく言語です。ネットワークの人から説明をうれしく思います。)


彼はそれを言うのは正しくありません、そして、受動的な閉鎖について何も悪いことはありません。あなたがやる前にピアが閉じたことを意味します。
user207421
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.