このコードは、基礎から派生し、C ++面接にネットブック入門オフ牛を終えています
URL https://www.nowcoder.com/tutorial/93/e1b14ab2b40a4ef98d9e55830eb48d66
TCP
接続と切断プロセスを確立します。
接続を確立するには:
スリーウェイハンドシェイク:
1.クライアントSYNフラグビットが1にセットされ、フラグビット配列のランダムに生成された値は、= iは、パケットがサーバーに送信され、クライアントは、サーバが確認するのを待つ、SYN_SENT状態に入ります。
2.サーバーがSYN = 1は、接続を確立するために、クライアントの要求を知っているパケットを受信した後、サーバは、クライアントにSYNとACKが1に設定され、ACK = I + 1、ランダムに生成されたSEQ = J、およびデータパケットを送信しますSYN_RCVD状態に入ります。
3.クライアントの確認応答が受信され、ACKをチェックし、正しくACK 1、ACK = J + 1を設定した場合、I + 1、ACK = 1は、パケットがサーバーに送信された=、サーバーのチェックは= J + 1 ACK、ACK = 1、適切な接続が確立されている場合。
なぜスリーウェイハンドシェイク:
クライアントは、エラーが発生し、Bに送信された接続要求を防止することができませんでした。
例:最初のクライアントがタイムアウト後に要求を再送信するための要求を送信していない3ウェイハンドシェイク場合は、最後の2つの要求がサーバに到着し、2つの接続が確立され、唯一の有効な接続、別の接続は、サーバーのリソースを占有します。3ウェイハンドシェイクは、サーバが第2の要求確認を受信しない場合、それは2番目の接続を作成しません。
取り外し:
四波:
全二重TCP接続、各方向に別々に閉鎖するように。
1.クライアントは、FINパケットを送信しFIN_WAIT_1状態にデータの送信を停止し、その後、クライアントはさらにデータを受け入れることができます。
サーバは、FINパケットを受信し、クライアントにACKを送信した後2、サーバがCLOSE_WAIT状態になり、クライアントがFIN_WAIT_2状態に入る受けます。
サーバが送信するデータがない場合3.、FINパケットを送信し、LAST-ACKにサーバの状態は、クライアントが肯定応答を待ちます。
4.クライアントFINパケットを受信し、それがACKパケットを送信し、クライアントは2MSL(パケットの最大生存時間)を待機し、TIME_WAIT状態に入り、その後、接続を閉じます。