ソケットラーニングネットワークの基礎準備
このセクションの紹介:
Java Socket を学んだことのない初心者をサポートするため、または Android 開発に関係するネットワーク プロトコルに関連する概念を理解するために、 結局のところ、面接中に面接官は私に、ネットワーク プロトコルには何層あるのかと尋ねました。では、IP プロトコルはどの層にあるのでしょうか?ソケットとは一体何ですか? 種類は何ですか? TCP および UDP プロトコルはどの層にありますか?違いは何ですか... そうですね、これは... したがって、このセクションの概念理論を学ぶことは依然として役立ちます。 必要!それでは早速、このセクションを始めましょう~
1. OSI 7 層ネットワーク モデルの簡単な分析
もちろん、どのような層があるかを知っている限り、私たちはネットワーク エンジニアリングの専門家ではありません。それが何に使われるかということです。
OSI 7 層ネットワーク モデル (下から上):
さて、上で OSI の 7 層ネットワーク モデルについて簡単に説明しました。
- 物理: デバイス間のデータ通信に伝送メディアと相互接続機器を提供し、信頼性の高いデータ伝送を提供します。 環境。これは、ネットワーク カード、ネットワーク ケーブル、ハブ、リピーター、モデムなど、ネットワーク伝送の物理メディア部分として理解できます。 この層では、データは整理されておらず、生のビット ストリームまたは電圧としてのみ処理されます。この層の単位は次のとおりです: ビット ビット
- データ リンク層 (Datalink): として理解できます。データ チャネルの主な機能は、信頼性の低い物理回線でどのように実行するかです。 データの信頼性の高い送信、レイヤー変更機能には、物理アドレス アドレッシング、データ フレーミング、フロー制御、データ エラー検出と再送信などが含まれます。 さらに、このデータリンクはを指します。物理層は、端末デバイス間のデータ通信のための伝送メディアと接続を提供する必要があります。メディアは 長期的には、接続には寿命があります。接続の有効期間中、送信側と受信側は 1 回以上データ通信を行うことができます。 すべてのコミュニケーションは、コミュニケーション コンタクトの確立とコミュニケーション コンタクトの切断という 2 つのプロセスを経る必要があります。これにより、データ送受信関係が確立されました~ この層のデバイスには、ネットワーク カード、ネットワーク ブリッジ、ネットワーク スイッチが含まれます。さらに、この層の単位は次のとおりです: フレーム
- ネットワーク層 (ネットワーク): 主な機能はネットワーク アドレスを変換することです。対応する物理アドレスにデータを送信する方法を決定します。 送信者は受信者へのルーティング、いわゆるルーティングとパス検索を行います。1 つの端末が複数の端末と通信する必要がある場合があり、その結果、 任意の2台の端末のデータ連携問題!簡単に言うと、ネットワーク接続を確立し、上位層にサービスを提供します。 この層のデバイスには以下が含まれます: ルーティング!この層の単位は packet で、IP プロトコルはこの層にあります。
- トランスポート層(Transport): 通信部分の最上位層に面する上位アプリケーション層に通信サービスを提供し、 ユーザー機能の中で最下位の機能です。セッション層データを受信し、必要に応じてデータを分割し、このデータをネットワークに渡します 層を構築し、これらのデータ セグメントが反対側の端に効果的に到達することを確認します。したがって、この層の単位は データセグメント であり、この層には 2 つの非常に重要なものがあります。 プロトコルは、TCP Transmission Control Protocol と UDP User Datagram Protocol で、この章の核心部分でもあります。
- セッション層 (セッション): ネットワーク内の 2 つのノード間の通信の確立、維持、終了を担当します。通信リンクを確立し、 セッション中に通信リンクを開いたままにし、2 つのノード間の対話を同期し、通信が中断されたかどうか、および通信がいつ中断されたかを判断します。 どこから再送信するかを決定します。つまり、異なるマシン上のユーザー間のセッションの確立と管理です。
- プレゼンテーション: アプリケーション層からのコマンドとデータを解釈し、対応する構文をさまざまなオブジェクトに割り当てます。 意味を持ち、特定の形式でセッション層に送信されます。その主な機能は、「エンコーディングなどのユーザー情報表現の問題を処理すること」です。 データ形式の変換、暗号化と復号化、圧縮と解凍など
- アプリケーション層 (アプリケーション): OSI 参照モデルの最上位層であり、ユーザー アプリケーションにネットワーク サービスを提供します。 他の 6 つの層の作業に基づいて、ネットワーク内のアプリケーションとネットワーク オペレーティング システムの間の接続を完了し、ユーザー間の接続を確立および終了し、ネットワーク ユーザーが必要とするさまざまなネットワーク サービスとアプリケーションを監視するためのさまざまな合意を完了します。管理とサービス。さらに、この層はさまざまなアプリケーション間の作業を調整する役割も果たします。アプリケーション層によってユーザーに提供されるサービスとプロトコルには、ファイル サービス、ディレクトリ サービス、ファイル転送サービス (FTP)、リモート ログイン サービス (Telnet)、電子メール サービス (電子メール)、印刷サービス、セキュリティ サービス、ネットワーク管理サービスが含まれます。 、データベースサービスなど
OSI は、7 層モデルにはいくつかの層しか含まれていません。各レイヤーには特別な機能が備わっています。 ネットワーク機能の観点から見たネットワーク機能:主に次の 4 つの層 (物理層、データリンク層、ネットワーク層、トランスポート層) がデータの送信と交換の機能を提供します。 つまり、ノード間の通信は主にノード間の通信に基づいており、4 番目の層は上位部分と下位部分の間のブリッジとして機能し、上位 3 つの層 (セッション層) の中で最も重要な部分です。 、プレゼンテーション層、アプリケーション層)は、主にユーザーとアプリケーション間の情報およびデータ処理機能を提供します。
OSI 7層モデルの詳細説明- つまり、下位の 4 層は主に通信サブネットの機能を完了し、上位 3 層は主にリソース サブネットの機能を完了します。
——上記の内容は以下から引用しています:
TCP/IPはプロトコル群の同義語であり、これには多くのプロトコルも含まれており、TCP/IP プロトコル スイートを形成します。 TCP/IP プロトコル クラスターは 4 つの層に分かれており、IP はプロトコル クラスターの第 2 層 (OSI の第 3 層に相当) に位置し、TCP はプロトコル クラスターの第 3 層に位置します。 (OSIの第4層に相当)。 TCP/IPの通信プロトコルは4層の階層構造を採用しており、各層が次の層を呼び出して提供します。 あなたのニーズを満たすネットワーク。これらの 4 つのレイヤーは次のとおりです:
- アプリケーション層: Simple Email Transfer (SMTP)、File Transfer Protocol (FTP)、 ネットワーク リモート アクセス プロトコル (Telnet) など
- トランスポート層: この層では、伝送制御プロトコル (TCP) などのノード間のデータ転送サービスを提供します。 User Datagram Protocol(UDP)など、TCPやUDPはデータパケットに送信データを付加して次の層に送信し、 この層は、データを送信し、データが送受信されたことを確認する責任を負います。
- ネットワーク相互接続層: すべてのデータ パケットが宛先に到達できるように、基本的なデータ パケット送信機能を提供する責任を負います。 インターネット プロトコル (IP) などのホスト (ただし、正しく受信されたかどうかはチェックしません)。
- ホストからネットワーク層: 実際のネットワークメディアの管理、実際のネットワークの使用方法を定義 (イーサネット、シリアル回線など) データを送信します。
3.TCP/UDP の違いの説明
さて、最初の 2 つのポイントは、OSI 7 層モデルと TCP/IP 4 層モデルの概念を普及させるためのものです。次に私がしたいことです。について話します ここでは、ソケット開発に関連する概念的な用語をいくつか紹介します。
1) IP アドレス
2) ポート
1. さまざまなアプリケーションを区別するために使用されます
2. ポート番号の範囲は 0 ~ 65535 で、そのうち 0 ~ 1023 はシステムではありませんポートを予約し、プログラムでは使用しないようにしてください。
3. ソケットを形成する IP アドレスとポート番号。ソケットは、ネットワーク実行プログラム間の双方向通信リンクのエンドポイントです。 これは TCP と UDP の基礎です。
4. 一般的に使用されるプロトコルで使用されるポート: HTTP: 80、FTP: 21、TELNET: 23
3) TCPプロトコルとUDPプロトコルの比較:
TCPプロトコルプロセスの詳細な説明 :
まず第一に、TCP/IP はプロトコルスイートであり、多くのプロトコルが含まれています。 UDP はその 1 つにすぎません。 TCP/IPプロトコルと名付けられた理由は次のとおりです。 TCP プロトコルと IP プロトコルは 2 つの非常に重要なプロトコルであるため、これらのプロトコルにちなんで命名されています。
TCP プロトコルと UDP プロトコルの違いを説明しましょう:
TCP (Transmission Control Protocol、伝送制御プロトコル) は、コネクション指向のプロトコル、つまりデータの送受信を行う際のプロトコルです。 これは、TCP の スリーウェイ ハンドシェイク と TCP の 4 ウェイ ウェーブ についてのインタビューでもよく聞かれます。 3回の握手: TCP 接続を確立するとき、クライアントとサーバーは接続の確立を確認するために合計 3 つのパケットを送信する必要があります。 ソケット プログラミングでは、このプロセスは接続を実行するクライアントによってトリガーされます。具体的なフローチャートは次のとおりです。
- 最初のハンドシェイク: クライアントはフラグ SYN を 1 に設定し、値 seq=J をランダムに生成し、データ パケットをサーバーに送信します。 クライアントは SYN_SENT 状態に入り、サーバーからの確認を待ちます。
- 2 回目のハンドシェイク: データ パケットを受信した後、サーバーはフラグ ビット SYN=1 によってクライアントが接続の確立を要求していることを認識し、サーバーはフラグ ビットを設定します SYN と ACK は両方とも 1 (ack=J+1) に設定され、値 seq=K がランダムに生成され、接続要求を確認するためにデータ パケットがクライアントに送信されます。 , サーバーは SYN_RCVD 状態になります。
- 3回目のハンドシェイク: クライアントは確認を受け取った後、ACKがJ+1であるかどうか、およびACKが1であるかどうかを確認します。それが正しい場合、フラグACKを設定します。 1 (ack=K+1) に設定し、データ パケットをサーバーに送信します。サーバーは、ack が K+1 であるかどうか、および ACK が 1 であるかどうかを確認します。それが正しい場合は、 接続が正常に確立され、クライアントとサーバーは ESTABLISHED 状態になり、3 ウェイ ハンドシェイクが完了すると、クライアントとサーバーは データ転送が始まります。
4回手を振る: TCP 接続の終了とは、TCP 接続が切断されたときに、クライアントとサーバーが切断を確認するために合計 4 つのパケットを送信する必要があることを意味します。 ソケット プログラミングでは、このプロセスはクライアントまたはサーバーが close を実行することによってトリガーされます。具体的なフローチャートは次のとおりです。転送、クライアントが入る FIN_WAIT_1 状態
2 回目の手を振る
: FIN を受信した後、サーバーはクライアントに ACK を送信し、確認シーケンス番号は受信したシーケンス番号 + 1 (SYN と同じ、 1 つの FIN が 1 つのシーケンス番号を占有し、サーバーは CLOSE_WAIT 状態に入ります。
- 第 3 の波: サーバーは FIN を送信してサーバーからクライアントへのデータ送信を終了し、サーバーは LAST_ACK を入力します 州。
- 第 4 の波: クライアントは FIN を受信した後、TIME_WAIT 状態に入り、確認シーケンス番号は受信したシーケンス番号 + 1 になります。サーバーは CLOSED 状態に入り、 4 つのウェーブを完了します。 さらに、同僚がアクティブ クロージャを開始する場合も考えられます:
- もう 1 つのよくある質問は、接続を確立するのに 3 ウェイ ハンドシェイクが必要であるのに、接続を閉じるには 4 回のウェーブが必要なのはなぜですか? 回答: サーバーは LISTEN 状態にあり、接続要求を確立するための SYN メッセージを受信した後、ACK と SYN を 1 つのメッセージに入れます。 クライアントに送信されました。接続を閉じるとき、相手の FIN メッセージを受信するとき、それは相手がデータを送信しなくなったことを意味するだけですが、それでも データを受信できた場合は、自分側がすべてのデータを相手に送信していない可能性があるため、すぐに閉じるか、一部のデータを送信することもできます 相手にデータを送信した後、相手に FIN メッセージを送信して、接続を終了することに同意することを表明します。そのため、通常は自分の ACK と FIN が送信されます。 別々に送ります。
UDPプロトコルの詳しい説明:
UDP(User Datagram Protocol) ユーザー データグラム プロトコル、非接続プロトコル。データを送信する前に送信元と端末は通信しません。 接続が確立され、送信する場合は、アプリケーションからデータを取得して、できるだけ早くネットワーク上に送信します。 送信側では、UDP がデータを送信する速度は、アプリケーションがデータを生成する速度、コンピューターの機能、および送信帯域幅によってのみ制限されます。 制限事項: 受信側では、UDP が各メッセージ セグメントをキューに入れ、アプリケーションは一度に 1 つのメッセージ セグメントをキューから読み取ります。 TCPと比べて、リンクを張る必要がなく、構造が単純で、正当性が保証できず、パケットロスが起こりやすい
——上記の内容は、
TCP/IPの3つから一部抜粋しています。ウェイ ハンドシェイクとフォーウェイ ウェーブ
4. Java のネットワークに提供されるいくつかの主要なカテゴリ:
さまざまなネットワーク通信レベルに対して、Java は 4 つの主要なカテゴリを提供します。ネットワーク機能のカテゴリ:
- InetAddress: ネットワーク上のハードウェア リソースを識別するために使用されます
- URL: ユニフォーム リソース ロケーター。URL
- Socket および ServerSocket を介してネットワーク上のデータを直接読み書きできます。 TCP プロトコルを使用してネットワーク通信を実装するソケット関連のクラス
- Datagram: UDP プロトコルを使用してデータグラムにデータを保存し、ネットワーク経由で通信します
このセクションでは、最初の 2 つのクラス、Socket と Datagram のみを紹介し、その後、TCP と UDP の章で説明します。
~InetAddressの使用例:
サンプルコード:
public class InetAddressTest { public static void main(String[] args) throws Exception{ //获取本机InetAddress的实例: InetAddress address = InetAddress.getLocalHost(); System.out.println("本机名:" + address.getHostName()); System.out.println("IP地址:" + address.getHostAddress()); byte[] bytes = address.getAddress(); System.out.println("字节数组形式的IP地址:" + Arrays.toString(bytes)); System.out.println("直接输出InetAddress对象:" + address); } }実行結果グラフ:
~URL: 忘れた場合は、前のHTTP プロトコルの説明はどこですか~
このセクションの概要:
このセクションはすべて概念に関するものですが、理解していなくても問題ありません。 7層モデルはと呼ばれます 何、何に使われるのでしょうか? TCP の 3 ウェイ ハンドシェイクと 4 つのウェーブがあります。それだけです。もちろん、これはあくまで、 面接対策~実際の開発ではどうやって苦労すればいいのか・・・Socketだけですね~さて、次のセクションから学習していきます Androidのソケット通信〜ありがとう〜