TCP PSH フラグと URG フラグの違いを理解しようとしています。これまでのところ、PSH フラグが設定されている場合、受信側デバイスはバッファがいっぱいになるまで待たず、データをデバイスに送信するだけであることがわかっています。
しかし、この概念をよりよく理解できるように、実際の例を教えていただけますか?
私は経験していたhttps://packetlife.net/blog/2011/mar/2/tcp-flags-psh-and-urg/記事の説明は非常に良いのですが、示された例が理解できません。
それはこう言っている、
パケット#4では、最初のHTTPリクエストにPSHフラグが設定されており、クライアントには追加するデータがないため、リクエストをすぐにアプリケーション(この場合はWebデーモン)に送信する必要があることを示しています。
上記の場合、クライアントが送信するデータがこれ以上ない場合、なぜ FIN フラグが設定されたパケットを送信しないのでしょうか?
答え1
クライアントにはそれ以上のデータがありません今すぐしかし、将来的に何も起こらないということではありません。
プロトコルにはクライアントからのリクエストが1つだけ(そしてレスポンスも1つだけ)あると仮定しています。これはHTTPでは長い間当てはまりませんでした。複数のリクエストに対する接続の再利用はHTTP/1.1以前から存在しており、現在では広く普及しています。クライアントはリクエストを送信し、レスポンスを待ちます。その後、別のリクエストを送信します同じ接続などを介して、これらの長時間接続の利点は、TCP フロー制御が最適な状態に到達できることです。
他の多くのプロトコルでも、同じことが当てはまりません。たとえば、SMTP は電子メールを送信するために 5 つ以上のコマンド/応答を交換しますが、プロトコル仕様では「パイプライン化」(応答を待たずにすべてのコマンドを一度に送信すること) が明示的に禁止されています。つまり、クライアントは 1 行をプッシュしてサーバーに応答してもらい、さらに別の行をプッシュしてサーバーに応答してもらう、というように行う必要があります。
そしてもちろん、多くのプロトコルは相互の作用– Telnet と SSH では、サーバーがすべてのキーストロークに応答する必要があります。VNC と RDP は、すべてのマウス クリックに反応します。