web-dev-qa-db-ja.com

tcpdumpの出力でTCP packet [P.]フラグはどういう意味ですか?

IP x.x.x.xが[P.] Flag for TCP packetを使用してIP z.z.z.zに接続する場合、この[P.]フラグは正確に何を意味しますか?それは、x.x.x.xがz.z.z.zにデータを送信することを意味しますか?

2
ccsann

まさにこの[P.]フラグ

プッシュフラグです。

Tcpflagsは、S(SYN)、F(FIN)、P(プッシュ)、R(RST)、U(URG)、W(ECN CWR)、E(ECN-エコー)または `。 'の組み合わせです。 (ACK)。フラグが設定されていない場合は「none」。

ソース TCPDUMPのマンページ

プッシュ機能とプッシュフラグの目的は、送信ユーザーから受信ユーザーにデータをプッシュすることです。レコードサービスは提供しません。

プッシュ機能と、TCP /ユーザー・インターフェースを通過するデータのバッファーの使用との間にはカップリングがあります。プッシュフラグが受信側ユーザーのバッファーに配置されたデータに関連付けられるたびに、バッファーがいっぱいになっていなくても、バッファーはユーザーに返されて処理されます。プッシュが表示される前にユーザーのバッファーを満たすデータが到着した場合、データはバッファーサイズ単位でユーザーに渡されます。

ソース [PSH、ACK] Wiresharkキャプチャ-Wireshark Q&A

PSHとプッシュ機能

データを送信すると、TCPがデータをバッファします。そのため、キャラクターを送信しても、すぐには送信されませんが、それ以上あるかどうかを確認してください。しかし、たぶんあなたはそれをネットワーク上でまっすぐに行きたいと思うかもしれません:これがPush関数が入ってくるところです。データをPushすると、TCPはすぐにセグメント(またはいくつかのセグメント)を作成し、Pushそれら。

しかし、話はここで終わりません。ピアTCPがデータを受信すると、自然にそれらをバッファしますそれは、すべてのバイトのアプリケーションを妨害しません。ここでPSHフラグが作動します。受信TCPがPSHフラグを検出すると、すぐにプッシュアプリケーションへのデータ。

PSHフラグを設定するAPIはありません。通常、これは、バッファーを空にするときにカーネルによって設定されます。 TCP/IP Illustratedから:

このフラグは通常、パケットの送信に関連して、パケットを送信する側のバッファが空になったことを示すために使用されます。つまり、PSHビットフィールドが設定されたパケットが送信者を離れたとき、送信者には送信するデータがありませんでした。

しかし、スティーブンズはまた言うことに注意してください:

プッシュ(レシーバーはこのデータをできるだけ早くアプリケーションに渡す必要があります—確実に実装または使用されていません

ソース TCPのプッシュフラグと緊急フラグの違い 、回答 cnicutar

2
DavidPostill