HTTP POSTにはTCP 3ウェイハンドシェイクが必要ですか?


10

ブラウザからサーバーにhttpフォームデータを投稿するかどうかはよくわかりませんが、プロトコルは3方向のハンドシェイク(syn-ack-data)を行う必要がありますか、それともGET httpリクエストに対してのみ機能しますか?

回答:


12

HTTP GETとHTTP POSTSはどちらもTCPを使用します。POSTで3方向のTCPハンドシェイク(syn-synack-ack)も必要かどうかを確認する場合は、他のTCP接続と同様に行います。TCPハンドシェイクは、HTTPなどのアプリケーションプロトコルが機能を開始する前に必要です。

参考までに、あなたの3方向ハンドシェイクは正しくありません。「syn-synack-ack」である必要があります

追加:

ブラウザーがHTTPにQUIC(Quick UDP Internet Connections、発音はクイック。Proposedby Google)プロトコルを使用している場合、3方向のTCPハンドシェイクを回避できます。しかし、私の知る限り、ChromeとGoogleでサポートされています。

ほとんどのソフトウェアは、依然としてTCPであるHTTP / 2を好みますが、多くの機能で永続的な接続を使用し、その後、サーバーサーバーごとに3ウェイハンドシェイクが1回行われます。

このプロトコルが使用されている場合、GETを含むすべてのリクエストで3ウェイハンシェイクを回避できます。


24

一般的な意味で質問している場合、答えは間違いなく「はい」です。HTTPメソッド(POSTなど)にはTCP接続が必要です。TCP接続を開始する唯一の方法は、3方向ハンドシェイクを使用することです。

ただし、特定のケースで質問している場合、おそらく自分のトラフィックをキャプチャしていて、Webサイトにコンテンツを送信した後に3ウェイハンドシェイクが表示されない場合、答えは少し単純です。適切に回答する前に、HTTP関連のいくつかの概念について説明する必要があります...


HTTP1.0の最初のリリースでは、Webページから要求したすべてのオブジェクトで、各オブジェクトに対して新しいTCP接続を形成する必要がありました。いくつかのテキストと2つの画像を含む次の単純化したWebサイトを見てください。

<HTML>
  <HEAD>
    <TITLE>My Title</TITLE>
  </HEAD>
  <BODY>
    Stack Exchange Rules!
    <IMG SRC="a.gif">
    <IMG SRC="b.gif">
  </BODY>
</HTML>

従来のHTTP1.0では、このWebサイトをブラウザーにロードするには、3つの TCP接続(それぞれ独自の3ウェイハンドシェイクと4ウェイクロージャー)が必要でした。

HTTP 1.0:

--> SYN
                SYN ACK <--
--> ACK

--> GET /index.html
           <index.html> <--

--> FIN
                    ACK <--
                    FIN <--
--> ACK

--> SYN
                SYN ACK <--
--> ACK

--> GET /a.gif
                <a.gif> <--

--> FIN
                    ACK <--
                    FIN <--
--> ACK

--> SYN
                SYN ACK <--
--> ACK

--> GET /b.gif
                <b.gif> <--

--> FIN
                    ACK <--
                    FIN <--
--> ACK

上記の27パケットがあることに注意してください。HTMLページ自体(index.html)、画像a.gif、および画像b.gifの3つのアイテムをダウンロードするだけです。 (実際には27パケット以上ありますが、垂直方向のスペースを節約するために、3ウェイハンドシェイクと4ウェイクロージャーにACKのみを含め、データストリーム内のACKは省略しました)

HTTPの効率を改善するために、「接続キープアライブ」と呼ばれる機能が導入されました。これにより、HTTPは同じTCP接続を再利用して複数のオブジェクトを要求できます。上記の送金は次のように削減されます。

接続キープアライブを使用したHTTP 1.1

--> SYN
                SYN ACK <--
--> ACK

--> GET /index.html
           <index.html> <--
--> GET /a.gif
                <a.gif> <--
--> GET /b.gif
                <b.gif> <--

--> FIN
                    ACK <--
                    FIN <--
--> ACK

3つのオブジェクトすべてを要求するために単一のTCP接続のみが使用されたことに注意してください。今回は13パケットしかかかりませんでした。以前の27パケットから大幅に改善されました。

私たちが議論しなければならない最後のHTTPの改善は、パイプラインと呼ばれる機能です。この機能により、クライアントは、前に要求されたオブジェクトの受信を待たずに、一度に複数のオプションを要求できるようになり、HTTPの効率がさらに向上しました。披露させて:

パイプラインを使用したHTTP1.1

--> SYN
                SYN ACK <--
--> ACK

--> GET /index.html
--> GET /a.gif
--> GET /b.gif
           <index.html> <--
                <a.gif> <--
                <b.gif> <--

--> FIN
                    ACK <--
                    FIN <--
--> ACK

まだ1つのTCP接続しか使用しておらず、9つのパケットしか使用していません。ただし、各オブジェクトの要求と受信の間にクライアントとサーバー間でかかる往復時間(RTT)を待つ必要はありません。たとえが必要な場合は、レストランにいるとします。塩、コショウ、ケチャップが必要です。ウェイター/ウェイトレスに3つすべてのアイテムを一度に要求するか、一度に1つずつ要求して戻ってくるのを待ってから次の要求を行う方が効率的ですか?

(パイプライン処理は質問に直接関係していませんが、キープアライブやその他のHTTP効率機能と組み合わせて説明されることが多いため、完全性のためにこの回答に含めることにしました)


これでようやくあなたの質問に戻ることができます:

HTTP POSTにはTCP 3ウェイハンドシェイクが必要ですか?

Webサーバーへの接続を開き、GETメソッドを使用してWebページをダウンロードし、そのWebサーバーが接続キープアライブをサポートしている場合。POSTメソッドを含む、そのWebサーバーへの後続の要求は、単に既存のTCP接続を再利用するだけです。したがって、データは既存のTCP接続で転送されるため、その特定のPOSTでは新しい3ウェイハンドシェイクは必要ありません。

ただし、接続キープアライブの期間は無限ではありません。したがって、ウェブページをダウンロードした後、POSTを送信するまでしばらく待った場合、元のTCP接続はすでに閉じている可能性があり、この場合、ブラウザはデータをPOSTするために新しいTCP接続を開く必要があります。 3ウェイハンドシェイクを使用します。

多くのブラウザとウェブサーバーは、「接続キープアライブ」機能が接続を維持するために必要な時間に異なるタイマーを使用しているため、通常要求する時間について信頼できる数値を提供することはできません。


1
これはより完全な答えです。どうもありがとう。間違いなく賛成する価値があります。
Manikandan Sigamani

1
HTTP / 2:pを説明してみませんか?
animaacija 2017年

実際、TCP接続を開く方法は3方向ハンドシェイクだけではありません。他の方法について言えば、少なくとも同時オープン接続と分割ハンドシェイクがあります。
ジュリスト、

1
このようにすべての答えが詳細になれば、世界はより良い場所になるでしょう!よくやった、とてもよく説明された。
-dawez

TCP最適化ルーターまたはプロキシを使用すると、サーバーがクライアントの環境の最も外側の部分との接続をまだ確立しているときに、ローカルエージェントからの偽のTCP接続の確立を確認すると、ブラウザーはHTTPデータの送信を開始します。そして、TCPオプティマイザが中間またはサーバー環境で実行されている場合、少し考えてみましょう!
eel ghEEz 2018

0

確かに。しかし、とにかく、それをより効率的にする方法はまだあります。データはSYN-SYNACK-ACKパケットに入れることができますが、ハンドシェイクが完了するまで、データは使用できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.