TCP 3ウェイハンドシェイクの4倍と境界問題の詳細な理解を振りました

この記事は参考図書データを通じて、他の人が質問をすることを歓迎し、知識をまとめたブログ

    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これは、接続要求、または接続受諾メッセージであることを示しています。TCP接続建設生産はハンドシェイクのSYNフラグが完了した後に設定される場合にのみ、SYNフラグが0に設定されています。

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

    PS:; ACK、SEQ小文字数ワード表現これらの大文字の単語のACK、SYNおよびFINフラグは、その値が1または0であるビットを表します。

 
フィールド意味
URG緊急ポインタが有効です。図1に示すように、優先すべきビットを示す
ACK確認応答番号が有効であり、一般的に1に設定されています。
PSHは、受信機アプリケーションがすぐにTCPバッファからデータを読みに行くように求められます。
RST他の要件は、接続リセットを再確立します。
SYN要求は、接続、およびシーケンス番号フィールドにそのシーケンス番号を初期値設定を確立します。接続を確立し、1つのに設定されている
FIN切断します。
スリーウェイハンドシェイクを理解します

 

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

第二のハンドシェイク:自体はSYNパケットを送信しながら、サーバがSYNパケットを受信するが、その後、サーバは、状態SYN_RECVに入り、(SYN = Y)、すなわち、SYN + ACKパケットを顧客SYN(ACK = X + 1)を確認しなければなりません。

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

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

1)クライアント・プロセスは、接続解放メッセージを発行し、データ送信を停止します。データパケットヘッダ、FIN = 1を放出する、配列番号配列は= U(最後のバイトのシーケンス番号に等しいが、以前のデータから送信されたプラス1)この場合、クライアントは、FIN-WAIT-1(終了待ちに入ります1)状態。TCP規定、FINセグメント、データを搬送しない場合だけでなく、シリアル番号を消費します。
2)サーバが接続解放メッセージ、確認メッセージ、ACK = 1、ACK = U受信 + 1、 およびCLOSE-WAITに独自のシーケンス番号seq = V、ケース、サーバー移行をもたらす(クローズ待ち)状態。TCPサーバは、クライアントが送信するデータがないが、サーバーがデータを送信した場合、クライアントはまだ受け入れられている、つまり、半閉鎖状態で、解除方向上のサーバに、この時間をクライアントに高レベルのアプリケーション・プロセスに通知します。この状態は、つまり、いくつかの時間のために全体CLOSE-WAIT状態の継続時間を継続していきます。
3)クライアントが確認応答は、サーバが送信する前に、クライアントが)待ち状態FIN-WAIT-2(2終了に入り、最後のパケットのためにサーバーを待って、接続解除を送信する場合には、サーバー側は、(も同意する必要が要請受けデータ)。
4)サーバは、クライアントが接続解放メッセージを送信し、最後のデータが終了するFIN = 1、ACK = U送り 、+ 1 それは、この場合に想定される、半閉状態にあるため、サーバは、いくつかのデータを送信する可能性がありますシリアル番号SEQ = W、この時点で、クライアントの確認応答を待っているLAST-ACK(肯定応答最後)の状態にサーバー。
5)クライアントは、接続解放メッセージサーバが確認応答を送信しなければならないACK = 1、ACK = W受信した後 + 1、 U + 1 =およびそれらのシリアル番号の配列を、ここでは、クライアントは、時間に入ります(待機)状態を待ちます。TCP接続は、現時点ではリリースされていないことに注意してください、クライアントはCLOSED状態に入る前に、対応するTCBを元に戻す2 ** MSL(最大セグメント寿命)時間、でなければなりません。
6)限り、サーバーがクライアントから送信された確認を受けたとして、ただちにCLOSED状態に入ります。同様に、TCBの失効した後、それはTCP接続を介してです。あなたは、クライアント・サーバのTCP接続が早く終わるよりも、時間の終わりを見ることができます。

 共通のインタビューの質問
それは握手閉じている時には、3ウェイハンドシェイクを接続する理由[1]の質問はありますか?

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

[質問2]なぜTIME_WAIT状態の状態に戻るCLOSE 2MSL(最大セグメント寿命)を通過する必要がありますか?

:論理的には、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接続を受信したと結論づけました。

[質問3]なぜ2ウェイハンドシェイクを使用して接続できませんか?

:2つの重要な機能を完了するための3ウェイハンドシェイク、両側には、ハンドシェーク中(両側がお互いの準備ができて知っている)データを送信するために準備を行う必要がありますが、また当事者が初期シーケンス番号に交渉できるようにするために、シリアル番号これは、送信され、認められています。

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

あなたは、接続を確立しているが、クライアントが突然壊れた場合は、[4]どのように問題を行うには?

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

オリジナルリンク:https://blog.csdn.net/qq_38950316/article/details/81087809

おすすめ

転載: www.cnblogs.com/jhpy/p/11776478.html