Http
いわゆるハイパーテキスト転送プロトコルは、基礎となるTCP / IPプロトコルに依存して、広くWebやモバイル端末で使用されている最も一般的に使用されるアプリケーション層プロトコルです。4
テストの両面バイト知識ので、私は非常にHTTPが非常にいくつかのように記述することができます理解し、だまさいます、
HTTPは、データを転送する方法であります
どのようにHTTPは送信され、その後、私は見つけるために行ってきました:
- まず、クライアントは、ソケット(ソケットであるかを説明すれば、以下の通り)を初期化します。
- 第二に、内面のサービス終了は、常にクライアントへの接続を待って、(ソケットがすでにまあ初期化このポートをバインドされている)ポート上のソケットリスニングを持っています。
- ソケットソケットクライアントとサーバは、正式な接続を確立するために、この時間は(以下詳細にスリーウェイハンドシェイクと4波を説明します)スリーウェイハンドシェイクがあるでしょう。
- それがHTTP接続されている場合は、サーバーのセットアップは、クライアントとの接続後にデータを送信することが可能で、それが唯一のモード応答を要求することができ、クライアントがサーバに要求を送信し、サーバは要求、およびソケット接続を処理するために応答することができ、その後、サーバーあなたは最終顧客に直接データを送信することができます。
- 切断するとき、TCPプロトコルを4回実行され、サーバから切断し、次いで、手を振りました。
以下は、送信中に上記の理論ピットを解決するために始めました
1.Socket
、彼はインターフェースまたはAPIと呼ばれているどのようなソケット、我々は唯一のソケットがTCP / IPのカプセル化であると言うことであるTCP / IPを使用して、ソケットを介して、ネットワークへの通信能力がHTTPで提供することができますすることができます。
ソケット接続の前に言及したソケットへの中国のソケットは、ソケットのペア、顧客サービス側で実行、サーバー上で実行を必要とされ、クライアントとサーバのソケット接続が必要です。上記の説明に、ソケット接続があること、の3つのステップが必要で、サーバー要求、接続確認の両側にサービスのエンド・ツー・ポート監視、クライアント。双方は、このプロセスは、3ウェイハンドシェイクで確認しました。
ソケットは道こともTCPプロトコル、UDPプロトコルを使用することもできる、いわゆるTCPソケット接続が実際に接続され、スリーウェイハンドシェイクおよび第四の波を使用することができます。
注:
HTTPの最も重要な機能は言及されているに接続され、接続要求応答、各クライアント要求の応答サービスが必要とされている、接続がだけにして切断するためのイニシアチブをとるだろう、最初の要求に応えることができます。あなたは、リアルタイムの情報を取得したい場合は、通常のクライアントは、新たなデータを取得するためにサーバーに要求を送信する必要があります。
長いソケット接続は、接続状態を確立し、サーバは常に顧客側に要求を送信することができる使用が、タイミングは(同様にルータ、ゲートウェイ、ファイアウォールなど)ソケット接続ノードに通知するために、ネットワーク接続がアクティブである介し。
2.TCPスリーウェイハンドシェイク
スリーウェイハンドシェイクが振られると4は、私が知っている、なぜ私はので、私に聞かないで、強制的なインタビューの質問を卒業します!!!
- ハンドシェイクは、クライアントが閉じているとき、およびリスニングの状態で正しいサービスは、以前に述べている、ここで思い出させてくれます。
- 両者間の最初のハンドシェイクは、クライアント・サーバは、パケットを接続されているSYNパケット、SYN = 1が送信され、初期化シーケンス番号はXであり、このメッセージは、データを運ぶことができません。クライアントがある時点でSYN_SENTの状態。
- 第二のハンドシェイクの両側:サーバーは、ACK = 1(あなたのメッセージの受信を確認するため)、まだSYN = 1時、SYNパケットを送信するために、他のパーティに接続し、接続後のSYNパケットを受信し確認応答番号ACK = X + 1、このまだ有していないパケットデータの初期化シーケンス番号はY、サービスが正しい時刻に設定されているSYN_RCVDの状態。
- 第三のハンドシェイクの両側:SYNパケットのサービス側を受け取った後、サーバは、確認パケットACKを送信し、ACK = 1は、数ACKを確認= Y + 1(ショーは、パケットサービスの受信側) (第2のパケットがあるため)、ACKパケットはデータを搬送することができるシーケンス番号がX + 1に設定され、データは、シーケンス番号を運ばない消費されないであろう。この時点で、双方はであるESTABLISHED状態。
ご注意ください
- サーバは、クライアントが送信できる機能を持っていることを知らせるために、最初の握手。
- サーバは機能を送受信する能力を有することをクライアントのノウハウを聞かせするために、第2のハンドシェイク。
- サーバーを聞かせするために、サードハンドシェイクは、クライアントが受け入れる能力を持っていることを知っています。
- ソケットプログラミングは、クライアントを実行するには(接続)スリーウェイハンドシェイクをトリガーします。
- クライアントにサーバによって送信されたSYN-ACKパケットが受信されない場合は受信した確認応答パケット、第二は、最大再送回数が所定回数よりも大きい場合、サーバは、最初の再送信を実行する再送信、システムもし接続は、接続キューから削除されます。(再送のためにそれぞれ異なる時間間隔、一般的に指数関数的成長)
4波の3.TCP
- 最初の波:クライアントがサーバにFINパケットを送信するには、クライアントは、(接続を閉じる)FIN_WAIT1状態、及び、データ、受信確認のためのサーバを待機の送信を停止します。
- 第二波:サーバーはFINパケットを受信し、クライアントにサーバー、この場合には、ACKパケット(領収書の確認応答)を送信CLOSE_WAITの状態、TCP接続がハーフクローズ状態であり、クライアントはACKメッセージサーバを受け取ります以下、でFIN_WAIT2の状態、サービスを待っていると、接続解放メッセージ(FINパケット)を送信します。
- 第三の波:サーバーがクライアントにFINパケットを送信し、サーバはであるLAST_ACKの状態(最終確認状況)、確認するためにサーバーを待ちます。
- 第四の波:クライアントは、FINパケットを受信すると、サーバにACKパケット(領収書の確認応答)を送信し、その後、クライアントがあるTIME_WAITの状態、いくつかの時間(タイマー2MSLによって時間設定)の後にACKを確保パケットがサーバに到達した後、入力してCLOSED状態に。
注
最後のACKパケットがサーバに到達しない場合、MSLは、TCPパケットの最大生存時間で、2MSL待ち時間があり、サーバーは、クライアントが再び受信を保証FINパケットを、再送信されます。目的は、クライアントとサーバが正常にシャットダウンできることを確実にするためです。最後のACKパケットを送信した後、クライアントが閉じている場合は、失われた後、閉じた状態の通常のサービス側を入力することはできません。
要約すると:
- サーバーに到達するためにクライアントから送信された最後のACKセグメントを保証します。
- 防ぐ「期限切れの接続要求セグメント」は、この接続で表示されます。