あなたは4が手を振って3ウェイハンドシェイクを知っている必要があります!!!

I.説明

ここに画像を挿入説明

  • SEQ ID NOの配列:データセグメント順マークのために4バイト、すべてのデータがシリアル番号、ローカルによって生成された乱数の最初のバイトにコンパイルされ送信されるバイトのTCP接続、バイトEDシリアル番号の後、各セグメントは、シリアル番号が割り当てられ得、配列は、データセグメント番号の最初のバイトのシーケンス番号です。

  • 確認応答番号のACK:4バイト、次を期待は、セグメント番号の最初のデータバイトの他方を受信するために、セグメントシーケンス番号の最初のバイトを搬送するデータの数を示し、数字は、参照する確認次のバイト数を受信することが予想されるので、この数とセグメントの最後のバイトが確認応答番号です。

  • 謝辞ACK:ACK = 1、確認応答番号フィールドが有効である1ビットだけ、。ACK = 0、確認応答番号が無効である場合には

  • 同期SYN:シリアル接続の確立を同期させるため。これは、接続要求パケットのセグメントである:= 1 SYN、ACK = 0であることを意味 もし応答メッセージセグメントで合意された接続、そのSYN = 1、ACK = 1。従って、SYN = 1これは、接続要求、または接続受諾メッセージであることを示しています。ハンドシェイクのSYNフラグの完了後にTCP接続完了は、0に設定されているときにSYNフラグのみ設定されます。

  • 終了FIN:接続を解除します。FIN = 1が表す:このセグメントのデータの送信者が送信された、およびトランスポート接続の解放のために

  • PS:; ACK、SEQ小文字番号ワード表現ACK、SYN、これら大文字の単語のFINフラグは、その値が1または0であるビットを表します。
    ここに画像を挿入説明

II。スリーウェイハンドシェイクが理解

ここに画像を挿入説明

  • 小明:我爱你

  • 小美: 其实......我也爱你

  • 小明:那我们在一起吧!

  • 最初のハンドシェイク:接続が確立され、クライアントはサーバにSYNパケット(SYN = X)を送信し、確認するためにサーバを待って、SYN_SENT状態になり、SYN:同期シーケンス番号(同期シーケンス番号)。

  • 第ハンドシェーク:サーバー自体が(SYN = Y)SYNパケットを送信し、すなわち、SYN + ACKパケットを、サーバが状態SYN_RECVに入っている間、顧客にSYN(ACK = X + 1)を確認する必要があり、SYNパケットを受信します。

  • 第三のハンドシェーク:クライアントがサーバにSYN + ACKパケットを受信し、サーバは受信確認パケットACK(ACK = Y + 1)を送信し、このパケットが送信され、ESTABLISHED(TCP接続が成功した)状態にクライアントとサーバは、3つ完了します握手。

IV。四手を振って、プロセスの理解

ここに画像を挿入説明

  • 小明:我不爱你了
  • 小美:渣男,我早就知道了,呜呜呜 ~~~
  • 小美:那我们分手吧!
  • 小明:好聚好散
  • クライアント・プロセスは、接続解放メッセージやデータの送信を停止します。この場合、データパケットヘッダ、FIN = 1、配列番号SEQ = Uを(以前にデータプラス1から送信された最後のバイトのシーケンス番号に等しい)解放、クライアントは、FIN-WAIT-1(終了待ちに入ります1)状態。TCP規定、FINセグメント、データを搬送しない場合だけでなく、シリアル番号を消費します。
  • サーバは、CLOSE-WAIT(閉待機)に接続解放メッセージ、確認メッセージ、ACK = 1、ACK = U + 1、および独自のシーケンス番号seq = Vをもたらす、ケース、サーバー移行を受けます。高レベルのアプリケーション・プロセスに通知するTCPサーバは、解除方向上のサーバーへのクライアントは、ある半閉鎖状態、この時間は、クライアントが送信するデータがないが、サーバーがデータを送信した場合、クライアントはまだ受け入れられています。この状態は、全体CLOSE-WAIT状態の継続であるいくつかの時間、継続します。
  • クライアントは、クライアントが接続解放メッセージを送信するためにサーバーを待って、FIN-WAIT-2(2終了待ち)状態になった場合にサーバ要求の確認を、(これはまた、最後のデータがサーバによって送信される前に同意する必要があります)を受信すると。
  • 最終的なデータが完了し、サーバ送信した後、クライアントは、FIN = 1、ACK = U + 1、以降半閉状態を接続解放メッセージを送信し、サーバは、いくつかのデータを送信する可能性があり、シーケンス番号は、この時点で想定されます配列へ=この時点では、ワット、クライアントの承認を待って、最後にACK(確認応答の最後)の状態に変換するサーバー。
  • クライアントは、接続解放メッセージサーバが肯定応答を送信しなければならない受信ACK = 1、ACK = + 1、W、およびそれらのシリアル番号SEQ = U + 1は、この場合、クライアントは、(TIME-WAITに入ります時間待ち)状態。TCP接続は、現時点ではリリースされていないことを注意は、TCBアンドゥクライアントはCLOSED状態に入る前に、対応する2 ** MSL(最大セグメント寿命)時間、でなければなりません。
  • 限り、クライアントから送信されたサーバーの受信確認として、ただちにCLOSED状態に入ります。同様に、TCBの失効した後、それはTCP接続を介してです。あなたは、以前のクライアント・サーバのTCP接続が終了するよりも時間の終わりを見ることができます。

IV。共通のインタビューの質問

  • 接続は、それが閉じられた握手のとき、スリーウェイハンドシェイクでなぜとき?
    A:端末はSYNサーバークライアント端末接続要求メッセージを受信したときにSYN + ACKパケットを直接送信することができるので。ACKメッセージを応答するために使用される、SYNなどがパケットを同期させるために使用されます。サーバー側FINパケットを受信したときにでも、接続はおそらくSOCKETは、それが最初のACKパケットにのみ応答、話したクライアント側、することができます近くにすぐにない、閉鎖された「あなたは私が受け取ったFINメッセージを送信します。」すべての私のサーバーメッセージの終わりを介して送信されているだけになるまで、私はFINパケットを送信することができますので、一緒に送信することはできません。これは、4ウェイハンドシェイクが必要です。

  • なぜ、TIME_WAIT状態の2MSL(最大セグメント寿命)の状態に戻るには、CLOSEを通過?
    :論理的には、4つのパケットが送られてきたが、我々はCLOSE状態に直接行くことができますが、私たちはネットワークの錯覚が信頼できない持っている、最後のACKを失うことが可能です。TIME_WAIT状態が再送信ACKパケットに使用されているように、失われることがあります。最後のACK応答クライアントを送信しますが、ACKが失われる可能性があります。、FINセグメントて送信が繰り返されていないACK場合サーバー。クライアントが近い、すぐに、それはサーバーがACKを受信確認しなければならないことはできません。クライアントがACKを送信した後にTIME_WAIT状態になります。クライアントが2MSL時間を待って、タイマーを設定します。あなたがその時間内に再びFINを受け取った場合、クライアントはACK 2MSLを再送信すると、再び待ちます。いわゆる2MSLは二回MSL(最大セグメント寿命)です。MSLは最大生存時間は、2MSLが伝送されるネットワークのセグメントと応答のために必要な最大時間を指します。2MSLまで、クライアントは再びFINを受け取っていない場合、クライアントはACKが正常に、TCP接続を受信したと結論づけました。

  • なぜ2ウェイハンドシェイクで接続できませんか?
    A:2つの重要な機能を完了するための3ウェイハンドシェイク、両側には、ハンドシェーク中(両側がお互いの準備ができて知っている)データを送信するために準備を行う必要がありますが、また当事者が初期シーケンス番号に交渉できるようにするために、シリアル番号これは、送信され、認められています。
    今、2人のだけの手を必要とスリーウェイハンドシェイクに入れ、デッドロックが発生する可能性があります。一例として、コンピュータCとSとの間の通信を考慮し、Sは、Cと仮定される接続要求パケットを送信し、受信したパケットがSであり、そして肯定応答パケットを送信します。契約に基づき2は、Sは、データパケットの送信を開始することができ、接続が正常に確立されたと考えて、手を振りました。しかし、Sの応答パケットの場合、Cは、送信中に失われ、そしてSは準備ができているならば、私も疑問それは、独自の接続要求パケットを受信したかどうかをどのような種類の設立Sシリアル番号、C Sのを知りません知ることができません。この場合、Cは、接続が正常に確立されていないとみなし、単に接続確認応答パケットを待って、Sによって送信されたデータパケットを無視します。Sタイムアウトパケットを送信した後に繰り返して同一のパケットを送信します。これは、デッドロックを作成します。

  • あなたは、接続を確立しているが、クライアントが突然壊れた場合どうしますか?
    A:TCPはまた、障害が発生した場合、サーバは、無駄なリソースを待っているに保つことができないクライアント、明らかに、キープアライブタイマーを持っています。サーバはクライアントの要求は、タイマーの設定時間をリセットします受信するたびに、通常は2時間で2時間は、クライアントからデータを受信していない場合、サーバーは、すべての75、検出メッセージセグメントを送信します秒1を送信します。まだ回答は得られなかった10個の連続したプローブパケットを送信した場合、サーバーは失敗したと見なさ顧客を持ち出し、その後、彼らは、接続を閉じます。

公開された70元の記事 ウォンの賞賛4 ビュー6346

おすすめ

転載: blog.csdn.net/qq_44837912/article/details/104727087