インタビュアー: Socket TCP はどのように切断するのですか?
まえがき
ソケットとは何ですか?
ソケットの実行プロセス
TCP に基づく
UDP に基づく
- ##Socket TCP が接続を確立する方法
- #スリーウェイ ハンドシェイクはどのソケット関数で行われますか?
##序文
インターネットのことになると、誰もが間違いなく TCP、UDP、HTTP、スリーハンドル 4 ウェーブなどを思い浮かべるでしょう。しかし、ソケットのことになると、誰もが少し混乱するかもしれません。ネットワークで使われるソケットって何? ? ソケットとは何ですか?なぜネットワークは Socket から切り離せないのでしょうか?
Socket とは何ですか?
Socket は実際にはソケットです。Socket についてほとんどの人が理解しているのは、単純なネットワーク通信を実装できるということですが、
ソケットは実際には

ソケットは実際には食器洗い機に似ています。その機能は食器を洗うこと (ネットワーク通信) です。これがないと、食器を手動で洗う必要がある場合があります (トランスポート層とアプリケーション層を手動で呼び出す)。 API 間の相互接続)、しかしこれを使用すると、スイッチをクリックして期間を調整するだけで済みます (API をカプセル化)。必要ありませんが、それがなければ皿を洗うだけです (アプリケーション層とトランスポート間の対話)レイヤー)は非常に面倒になります。
、これが実際に Socket が解決するように設計されているものです。#完全なネットワーク通信は、物理トランスポート層のネットワーク ケーブルとネットワーク カードを経由する必要があります。ネットワーク トランスポート層の IP プロトコルは、どのマシンがコンピュータ システム内でさまざまなプロセスを実行するかという問題を解決するために、
「ネットワーク カード内のネットワーク データがどのプロセスのためのものであるかを識別する」
ソケットは 「TCP/IP または UDP/IP プロトコルのカプセル化」 です。ソケット自体は実際には呼び出し側インターフェイスです。このインターフェイスを使用すると、ネットワーク アプリケーションを開発するときに、下層の実装方法を気にする必要がなくなり、開発の難易度が軽減されます。
#ソケット実行プロセス
TCP に基づく

Server
- socket(): ソケットの作成を示し、最下層はソケットを表すファイル記述子を生成します
- bind(): サービスのバインドに使用されるポートとアドレスは、クライアントが接続するときに指定する必要があるため、通常はここで固定されます。
- listen():バインディングが完了すると、listen はこのポートのデータ パケットをリッスンします
- accept(): これはスイッチに相当し、準備ができており要求を受け入れることができることを示します。ただし、クライアントが正常に接続するまでブロックされます。
- read(): クライアントによって送信されたコンテンツを読み取ります
- write ():クライアントは返されるデータを書き込みます
- close(): 切断、
「4 回振る」
- socket(): ソケットの作成を示し、最下層はソケットを表すファイル記述子を生成します
- connet(): 指定されたアドレスに接続することを示します。その前に、独自のポートがランダムに作成されます。TCP の
- 「ここからスリーウェイ ハンドシェイクが始まります」
- #read(): クライアントは、サーバーから返されたデータを読み取ります。 Data
- close(): 切断、 「4 回手を振る」
- 、切断情報をクライアントに送信
UDP に基づく

ここでは詳細については説明しません。フローチャートから、
UDP はステートレスであるため、サーバーへの接続がなく、Recvfrom() メソッドを呼び出した後にクライアントのリクエストを受信し、完了するまでブロックされることがわかります。
Socket TCP が接続を確立する方法
Socket がサーバー アドレスをバインドした後、サーバーとの接続の確立が開始されます。接続は実際には有名な 3 回のハンドシェイクです

最初のハンドシェイク: A の TCP プロセスは送信制御ブロック TCB を作成し、接続要求セグメントを B に送信します。次に、同期ビット SYN を 1 に設定し、初期シーケンス番号 seq=x を選択すると、クライアント A は SYN-SENT (同期送信済み) 状態になります。 2 回目のハンドシェイク: B は接続要求セグメントを受信し、接続の確立に同意すると、A に確認を送信します。確認メッセージセグメントでは、同期ビット SYN=1、確認ビット ACK=1、確認番号 ack=x 1、初期シーケンス番号 seq=y も自身で選択されます。 SYN-RCVID 状態。 3 回目のハンドシェイク: A は B の確認を受信した後、B に確認を送信します。確認メッセージ ACK=1、確認番号 ack=y 1。この時点で、A は ESTAB-LISHED 状態になります。 B も A の確認を受け取ると、ESTAB-LISHED 状態に入ります。接続が確立されました。

- クライアントが connect を呼び出すと、接続リクエストがトリガーされ、SYN シグナルがサーバーに送信されます。この時点で、connect はブロッキング状態になります。
- サーバーは接続リクエスト、つまり SYN の受信を監視し、accept 関数を呼び出してそれを受信し、ブロッキング状態に入ります。その前に、ソケット、バインド、およびリッスン関数の使用を最大限に試みます。 ; その後、関連する syn 信号と ack 信号を返します
- Customer 端末はサーバーから情報を受信します。この時点で接続が完了し、ブロッキング状態が解除され、ack が返されます。信号がサーバーに送信されます
- サーバーは確認応答を受信し、ブロックを受け入れ、接続を完了します
#Socket TCP の切断方法

- ##第一波: A 接続解放メッセージの最初のセグメント、終了制御ビット FIN を送信します。セグメント ヘッダーに =1、およびシーケンス番号 seq=u (A の前に送信されたデータの最後のシーケンス番号に 1 を加えたものに等しい); その後、A は FIN-WAIT-1 (終了待機 1) 状態に入り、B のメッセージを待ちます。確認。
- 第 2 の波: B は、A の接続解放メッセージ セグメントを受信した後、すぐに確認メッセージ セグメント、確認番号 ack=u 1、シーケンス番号 seq=v (と等しい) を送信します。 B 以前に送信したデータの最後のシーケンス番号が 1 増加し、B は CLOSE-WAIT (クローズ待機) 状態に入ります。
- 第 3 の波: A は、B の確認メッセージ セグメントを受信した後、FIN-WAIT-2 (終了待機 2) 状態に入り、B が接続解放メッセージ セグメントを送信するのを待ち続けます。 ;
- B に送信するデータがない場合、B は接続解放メッセージ セグメントを A に送信します。セグメント ヘッダーの終了制御ビット FIN=1 とシーケンス番号 seq=w (一部のデータはセミクローズ状態で送信される場合があります)、確認番号 ack=u 1 の場合、B は LAST-ACK (最終確認) 状態に入り、A の確認を待ちます。
- 4 番目の波: A は B の接続解放メッセージ セグメントを受信し、確認を送信します。確認セグメント内の確認ビット ACK=1、確認番号 ack=w 1、シリアル番号 seq=u 1; その後、A は TIME-WAIT (時間待ち) 状態になります。 B が再度確認セグメントを受信すると、B は CLOSED 状態になります。
まず第一に、 2MSL はクライアントからです (A) FIN 受信後、ACK を送信した時点でタイミングが開始されます。 TIME-WAIT 時間以内にクライアント (A) の ACK がサーバー (B) に送信されず、サーバー (B) が再送信した FIN メッセージをクライアント (A) が受信した場合、2MSL 時間はリセットします。 2MSL を待つ理由は次のとおりです。
- 1. 元の接続データ パケットが失われます
- B がそのパケットを受信しない場合、タイムアウト後に FiN が再送信された場合、A は再送信された FIN を再度受信し、再度 ACK を送信します。
- B が自身の ACK を受信した場合、何も送信しません。その他のメッセージ
2. サーバーが ACK を受信できることを確認し、接続を正しく閉じます。
この ACK が失われる可能性があるため、サーバーがエラーを引き起こす可能性があります。 FIN-ACKメッセージを確認してください。クライアントが 2MSL を待たずに、ACK を送信した直後にクローズを解放すると仮定すると、ACK が失われると、サーバーは正常にクローズ接続状態に入ることができなくなります。
以上がインタビュアー: Socket TCP はどのように切断するのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









