「ネットワークプログラミング」ネットワーク層プロトコル_IPプロトコルの学習_そして理解を深める

「はじめに」の記事の内容は、ネットワーク層のIPプロトコルについて説明したものです。

「アトリビューション列」ネットワーク プログラミング

「ホームページ リンク」個人のホームページ

《作者》 メイプルリーフ氏(fy)

1. IPプロトコルの概要

IP は、TCP/IP システムのネットワーク層プロトコルである Internet Protocol の略語である Internet Protocol を指します

IPプロトコルはネットワーク層にあります
ここに画像の説明を挿入します

ネットワーク層で解決される問題

  • トランスポート層: 2 つのホスト間のデータ送信を担当します。代表的なプロトコル: TCP プロトコル。 データ信頼性がソース ホストからターゲット ホストに送信されることを保証します。
  • トランスポート層からのデータは引き続きネットワーク層に配信されます。
  • ネットワーク層: アドレス管理とルーティングを担当します。代表的なプロトコル: IP アドレスによってホストを識別し、 ルーティング テーブルによって 2 つのホスト間のデータ伝送路 (ルーティング) を計画する IP プロトコル。
  • TCP はトランスポート層制御プロトコルとして、データ送信の信頼性を保証しますが、TCP が提供するのはデータ送信戦略のみです 。トランスポート層の下の層とリンク層は、ネットワーク内のデータ送信を実際に担当します

ネットワーク層で解決すべき問題は次のとおりです。ネットワークを介してあるホストから別のホストにデータを送信する、つまりデータ ルーティング (パス選択)

  • IP アドレスの中核的な機能はホストを見つけることです。
  • IP には、ネットワークを介して (ホスト間で) ホスト A からホスト B にデータを送信する機能があります。
  • 能力があるからといって、それができるとは限りません。たとえば、張三は数学のテストで 150 点を取る能力がありますが、毎回 150 点を取れるとは限りません。能力があるということは、非常に高い得点が得られることを意味します。完了する確率。
  • TCP はデータ送信の戦略を提供し、IP はアクション (データ送信) の提供を担当します。
  • つまり、ネットワーク層は、データが他のホストに毎回正常に送信されることを保証することはできませんが、TCP によって提供される信頼性ポリシーの保証の下で、ネットワーク層は最終的にデータを他のホストに確実に送信できるようになります。他のホスト。

基本的な考え方

  • ホスト: 各ホストにはIPアドレスが割り当てられていますが、ルーティング制御を行わないデバイス(現在ではルーティング制御を行わないデバイスはほとんどありません)
  • ルーター: IP アドレスを備え、ルーティング制御が可能 (ネットワーク層で動作。現在の一部のルーターはすでにアプリケーション層の機能を備えています)
  • ノード: ホストとルーターの総称

パスの選択

データのネットワーク伝送は一般にネットワーク間で行われ、ルーターは複数のネットワークを接続するハードウェア デバイスであるため、ネットワーク間でデータを伝送する場合は 1 つ以上のルーターを通過する必要があります。
ここに画像の説明を挿入します

  • たとえば、ホスト B がホスト C にデータを送信します。ホスト C のアドレス (宛先 IP) を決定した後、データをルーティングできます (宛先 IP によってパスが決まります。なぜ別のパスではなくこのパスを選択するのでしょうか)。
  • ただし、データ自体は「パスを知らない」ため、データはルーティング時に独自のパスを選択できません。
  • ルーターは道路の移動方法を知っており、「ルート認識エクスペリエンス」をルーティング テーブルに記録します。
  • したがって、ルーターはルーティング テーブルを検索することで、特定のノードへの最短パスを見つけることができます。
  • したがって、データがルーティングされるときは、ルーターを経由するパスを選択し続け、段階的にターゲット ネットワークまたはターゲット ホストに近づきます。

2. IPプロトコルヘッダー

IP プロトコル ヘッダーの形式は次のとおりです。
ここに画像の説明を挿入します

  • 4 桁のバージョン番号 (version): IP プロトコルのバージョンを指定します。IPv4 の場合、4 です
  • 4 ビット ヘッダー長 (header length): IP ヘッダーの長さを 4 バイト単位で示します (ヘッダーの最大長) IP ヘッダーは 60 バイト、基本ヘッダーの長さは 20 バイトです)
  • 8 ビットのサービス タイプ (Type Of Service): 3 ビットの優先度フィールド (非推奨)、4 ビットの TOS フィールド、および 1 ビット予約フィールド (0 に設定する必要があります)。 4 桁の TOS はそれぞれ、最小遅延、最大スループット、最大信頼性、最小コストを表します。これら 4 つは互いに矛盾しており、選択できるのは 1 つだけです。たとえば、ssh/telnet などのアプリケーションの場合は最小遅延がより重要ですが、ftp などのプログラムの場合は最大スループットがより重要です。
  • 16 ビットの合計長 (total length): 各 IP を結合するために使用される IP パケットの合計長 (IP ヘッダー + ペイロード)パケット 個別のテキスト
  • 16 ビット識別子 (id): ホストによって送信されたメッセージを一意に識別します。データが IP 層で断片化されている場合、 each シャードに対応する ID はすべて同じです
  • 3 桁のフラグ フィールド: 最初のビットは予約されています。予約とは、現在使用されていないことを意味しますが、将来使用される可能性がありますが、まだ決まっていません。まだ。 2 番目のビットはフラグメンテーションが禁止されていることを示し、パケットの長さが MTU を超える場合、IP プロトコルがパケットを破棄することを示します。 3 番目のビットは「さらなるフラグメント」を表します。メッセージがフラグメント化されていない場合、このフィールドは 0 に設定されます。メッセージがフラグメント化されている場合、最後のフラグメント化されたメッセージを除き、残りのフラグメントは 0 に設定されます。パケットはすべて次のように設定されます。 1 (最後の断片化されたパケットのこのフィールドは 0 で、終了フラグと同様、'\0' で終わる C 言語の文字列と同様です)
  • 13 ビット スライス オフセット (framegament offset): 元のデータの先頭を基準としたスライスのオフセット。現在のスライスが元のデータにあるオフセット位置、実際のオフセット バイト数はこの値によって取得されます× 8。したがって、最後のメッセージを除き、他のメッセージの長さは 8 の整数倍でなければなりません。そうでない場合、メッセージは連続しません
  • 8 ビット生存時間 (Time To Live,TTL): データグラムが宛先に到達するまでの最大ホップ数 (通常は 64)ルートを通過しますTTL -= 1。0 に達しないまで減少すると、破棄されます。このフィールドは主にルーティング ループを防ぐために使用されます
  • 8ビットプロトコル:上位層プロトコルの種類を示します。
  • 16 ビット ヘッダー チェックサム: 検証に CRC を使用して、データグラムのヘッダーが破損しているかどうかを特定しますが、データ部分はチェックされません
  • 32 ビットの送信元 IP アドレス (Source IP Address): データグラムを送信した送信元ホストの IP アドレスを示します。
  • 32 ビット宛先 IP アドレス (Destination IP Address): データグラムを受信する宛先ホストの IP アドレスを示します
  • オプション フィールド: 可変長、最大 40 バイト (説明なし)

ヘッダーとペイロードを分離するにはどうすればよいですか? ?つまり、解凍方法

IP プロトコルのヘッダーは TCP プロトコルのヘッダーと似ており、IP が最下層からメッセージを取得する場合、IP はヘッダーの具体的な長さを知りませんが、IP メッセージの最初の 20 バイトが基本ヘッダーになりますIP の 20 バイトであり、この 20 バイトには 4 ビットのヘッダー長が含まれます

IP 解凍のプロセスは次のとおりです。

  • IP は下位層からメッセージを取得すると、まずメッセージの最初の 20 バイトを読み取り、4 ビットのヘッダー長を抽出し、このときに IP ヘッダーのサイズを取得します。
  • 注記: IP 基本ヘッダーの長さは 20 バイトであり、20 バイトは脳なしで読み取ることができます。
  • IP ヘッダー内の 4 ビットのヘッダー長は 4 ビットのみです。つまり、4 ビットのヘッダー長の値の範囲は0000 ~ 1111、つまり最大長です。は 15 で、ヘッダーの長さが 4 ビットであるため、長さの基本単位は 4 バイトであるため、15*4=60バイト
  • つまり、IP ヘッダーの最大長は 60 バイト、基本長は 20 バイトです。つまり、ヘッダーの値の範囲は[20 ~ 60]
  • ヘッダーには、合計 16 ビットのフィールドもあります。これは、IP メッセージの合計長 (IP ヘッダー + ペイロード) です。
  • ヘッダーの長さを取得したら、それをペイロードから直接分離できます。

注記: プロトコル層が異なれば、データ パケットの名前も異なります。トランスポート層ではデータ セグメント (segment) と呼ばれ、ネットワーク層ではデータグラムと呼ばれます。 (datagram)、リンク層でデータ フレーム (frame) と呼ばれます

IP はどの上位層プロトコルにペイロードを配信するかをどのように決定するのでしょうか?つまり使い方ですが、

  • IPヘッダーには8ビットプロトコルと呼ばれるフィールドがあり、このフィールド(プロトコル番号)は上位層プロトコルの種類を表しており、IPはこのフィールドを利用して分離されたペイロードをどの上位層プロトコルに届けるかを決定します。
  • 注: 各プロトコルには特定の番号が付いています。

解凍して分離する方法は解決されましたが、カプセル化はその逆です。

8ビット生存時間

  • ネットワーク送信処理中に、パケットのルーティング中にループルーティングが発生するなど、何らかの理由でパケットが目的のホストに到達できない場合があり、このときパケットは廃棄される無駄なパケットとなる。
  • ネットワーク内で大量の無駄なパケットが発生するのを避けるため (無駄なパケットは転送されるたびにルーターのリソースを浪費します)、IP ヘッダーには 8 ビットの生存時間と呼ばれるフィールドが表示されます。
  • 8 ビットの生存時間は、パケットが宛先に到達するまでの最大ホップ数を表します。パケットがルートを通過するたびに、ここでの生存時間は 1 ずつ減少します。生存時間が 0 に減少すると、パケットはルーターはパケットを自動的に破棄し、パケットはネットワーク内で消失します。

32 ビットの送信元 IP アドレスと 32 ビットの宛先 IP アドレス

  • 32 ビットの送信元 IP アドレスと 32 ビットの宛先 IP アドレスは、ルーティングと転送のプロセス (パスの選択) で重要な役割を果たします。
  • ルーターはこれら 2 つのアドレスを使用して、パケットの転送方法を決定します。ルーティング テーブルを検索し、送信元アドレスから宛先アドレスにパケットを送信するための最適なパスを見つけます。このプロセスはルーティングと転送と呼ばれます。
  • ルーターは、送信元 IP アドレスと宛先 IP アドレスを通じて、データ パケットの開始点と終了点を決定し、転送に最適なパスを選択して、データ パケットが迅速かつ正確に宛先に到達できるようにします。

最後に、16 ビットの識別 (id)、3 ビットのフラグ フィールド、および 13 ビットのスライス オフセットについて説明します。

3. IPネットワークセグメント分割(サブネット分割)

IPアドレスの構成

IP アドレスは、ネットワーク番号とホスト番号の 2 つの部分で構成されます。

ネットワーク番号: 相互に接続されている 2 つのネットワーク セグメントが異なる ID を持つことを確認します。
ホスト番号 : 同じネットワーク セグメント内のホストは同じネットワーク番号を持ちますが、異なるホストは異なるホスト番号を持つ必要があります

P プロトコルには、IPv4 と IPv6 の 2 つのバージョンがあります。追記内の IP プロトコルに関する言及は、特に指定がない限り、デフォルトで IPv4 を指します (IPv4 は IPv6 と互換性がありません)。

  • IPv4 の場合、IP アドレスは 4 バイト、32 ビットの正の整数 (32 ビット) です。
  • IP アドレスの後に / を追加し、/ の後に 数字 を追加します。これは、先頭から次までの番号を意味します。番号はネットワーク識別 (ネットワーク番号) に属します

たとえば、次の図のルーターは 2 つのネットワーク セグメント (サブネット) を接続します。

  • ネットワーク ラベルの場合、同じネットワーク セグメント内のホストのネットワーク番号は同じですが、異なるネットワーク セグメント内のホストのネットワーク識別子は異なります。
  • ホスト番号については、同じネットワークセグメント内のホストのホスト番号は異なりますが、異なるネットワークセグメント内のホストのホスト番号は同じでも構いません。

ここに画像の説明を挿入します

  • 異なるサブネットは、実際には同じネットワーク番号を持つホストをまとめます。
  • 新しいホストをサブネットに追加する場合、ホストのネットワーク番号はサブネットのネットワーク番号と同じである必要がありますが、ホスト番号はサブネット内の他のホストの番号と同じであってはなりません。
  • ルーターは少なくとも 2 つのサブネットにまたがります

なぜ IP ネットワークセグメントを分割する必要があるのでしょうか? ? (なぜサブネット化するのでしょうか?)

  • ネットワークを介してあるホストから別のホストにデータを送信する場合、IP アドレスを直線的に通過するのではなく、データはまずターゲット ホストが存在するネットワークに送信され、次に相手のターゲット ネットワークに送信され、その後、データが送信されます。ターゲットホスト
  • IP アドレスを直線的に巡回しない理由は、非常に効率が悪いためであり、IPv4 の場合、IP アドレスは約 42 億個あります。
  • ホストを検索するプロセスは基本的に消去法であり、最初から目的のホストを検索することを目的としている場合、検索プロセス中に一度に除外できるホストは 1 つだけです。
  • 最初にターゲット ネットワークを見つけることを目的としている場合は、検索プロセス中に、ターゲット ホストと同じネットワーク セグメントにない多数のホストを一度に除外できます。 検索効率が大幅に向上

例えば:

  • たとえば、学生番号は慎重に設計されており、各フィールドは異なる意味を表しています。
  • 各学校には多くの学部があり、コンピュータサイエンス学部の番号が001、理学部の番号が002、電子情報学部の番号が003、化学工学部の番号が004であるとします。 。
  • Zhang San はコンピュータ サイエンス学部のクラスメートです。Zhang San は自分の学生番号だけが記載された財布を見ました0030115。Zhang San は学生番号に気づかなかったので、張三は、やって来たクラスメートに尋ね続けました:あなたの学生番号は何ですか...
  • 学校に 20,000 人の生徒がいて、運が悪かったとすると、張三は 20,000 人全員に質問しなければなりませんが、この効率性は非常に感動的です。
  • このとき、張三さんの頭の中にあるアイデアがひらめきました。それに大学番号が書いてあるではありませんか? 彼はそれを大学の管理者に直接手渡し、その後、大学の管理者がそれを手渡しました。 学生番号 0030115 の大学の管理者は、学生番号 0030115 の学生にそれを渡します。これで検索効率が大幅に向上すると思いませんか

ここに画像の説明を挿入します

  • 張三さんは学生番号がどこの大学かは知りませんが、
  • しかし、そのパソコンの管理を見ると電子情報学部のものではなかったので、そのまま電子情報学部の管理者に引き渡しました。
  • この種の検索プロセスは実際には消去法であり、異なる番号 (ネットワーク セグメント) に応じて、一度に n グループの大学 (ネットワーク セグメント) を除外できるため、検索効率が大幅に向上します。
  • カレッジの管理者はルーターに相当し、各カレッジはサブネットに相当します。

そこで、データルーティング検索の効率を高めるために、IPアドレスをIPネットワークセグメントに分割(サブネット分割)します。

DHCP

ホスト番号とネットワーク番号を適切に設定すると、相互接続されたネットワーク内の各ホストの IP アドレスが異なることが保証されます。

  • 以前は、IP を手動で管理する必要がありました。IP アドレスを手動で管理するのは非常に面倒でした。サブネットに新しいホストが追加された場合、そのホストに IP アドレスを割り当てる必要がありました。サブネット内のホストがネットワークから切断された場合、 、その IP アドレスを割り当てる必要がありました。このアドレスは、後続の新しく追加されたホストに割り当てられるように再利用されます。
  • DHCPプロトコルは後に登場しました
  • DHCP (Dynamic Host Configuration Protocol、ダイナミック ホスト コンフィギュレーション プロトコル) は、UDP プロトコルを使用する LAN ネットワーク プロトコルで、主に 2 つの用途があります。1 つは指定された内部ネットワークまたはネットワーク サービス プロバイダーの IP アドレスへの自動割り当てです。すべてのコンピュータを集中管理する手段としてユーザーまたは内部ネットワーク管理者に提供
  • DHCP は UDP をベースとしたアプリケーション層プロトコルであり、一般にルータには DHCP 機能が備わっており、ルータは DHCP サーバとも言えます。

デバイスが WiFi に正常に接続されると、ルーターが自動的にデバイスに IP を割り当て、デバイスに IP アドレスが割り当てられ、インターネットにアクセスできるようになります (インターネットに接続されていないデバイスには IP アドレスがありません)。

サブネット化は誰が行うのですか? ?

  • インターネットは設計された世界であり、IP アドレスも設計されています。
  • 我が国の場合、通信事業者(チャイナモバイル、チャイナテレコム、チャイナユニコム)はサブネット部門の執行者であり、基盤となるネットワークの設計者です。

ネットワークセグメントを分割するにはどうすればよいですか? ? (サブネット化の方法)

以前は、ネットワーク番号とホスト番号を分割するソリューションが提案されていました。これは、すべての IP アドレスを 5 つのカテゴリに分割するというものでした。

次の図に示すように:
ここに画像の説明を挿入します
したがって、さまざまな IP アドレスの値の範囲は次のとおりです。

  • A类:0.0.0.0127.255.255.255
  • B类:128.0.0.0191.255.255.255
  • C类:192.0.0.0223.255.255.255
  • D类:224.0.0.0239.255.255.255
  • E类:240.0.0.0247.255.255.255

IP アドレスがどのタイプのネットワークに属しているかを判断するには、IP アドレスの最初のバイト (最初の 8 ビット) を調べることで判断できます。

CIDR (クラスレスドメイン間ルーティング)

しかし、ネットワークの急速な発展に伴い、この分割方式の限界がすぐに明らかになりました。

  • たとえば、クラス B アドレスを申請した場合、理論的には 1 つのサブネット内で 65,000 を超えるホストを許可できますが、クラス A アドレスの場合、サブネット内のホストの数はさらに多くなります。
  • ただし、実際のネットワーク構築では、1 つのサブネット内にそれほど多くは存在しません。したがって、大量の IP アドレスが無駄になります。

この状況を回避するために、CIDR (Classless Interdomain Routing) と呼ばれる新しい分割方式が提案されました。CIDR は、IPv4 アドレスをより効果的に利用することを目的とした IP アドレスの割り当てとルーティング戦略です。< /span>

  • 元の 5 種類のネットワークに基づいてサブネットを分割し続けるため、ネットワーク番号としてホスト番号の数ビットを借用する必要があります。このとき、ネットワークを区別するために、 IP アドレス番号とホスト番号を区別するため、サブネット マスク (subnet mask) の概念が導入されました。
  • 各サブネットには独自のサブネット マスクがあります。サブネット マスクは実際には 32 ビットの正の整数で、通常は文字列「0」で終わります。
  • 現在のネットワークの IP アドレスとサブネット マスクを使用して「按位与」操作を実行し、現在のネットワークのネットワーク番号を取得します
  • ここでのネットワーク番号とホスト番号の分け方は、IP アドレスがクラス A、クラス B、クラス C のいずれであるかには関係ありません。

このとき、ネットワークはより細かく小さなサブネットに分割され、継続的なサブネット分割により、サブネット内のIPアドレスに対応するホスト番号がどんどん短くなるため、サブネット内で利用可能なIPアドレスの数が減少します。 IP アドレスの数はますます小さくなり、IP アドレスの大量の無駄が回避されます。

サブネット化の例は次のとおりです。

  • IP アドレスとサブネット マスクをビットごとに AND 演算して、ネットワークのネットワーク番号を取得します。
  • すべて 0 からすべて 1 までのホスト番号がサブネットのアドレス範囲です
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    別の例:
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します

なお、サブネット化は一度だけでなく、分割したサブネットに基づいて継続して行うことも可能です。

  • 一般に、サブネット内で IP を管理するデバイスは通常ルーターです。
  • 宛先ネットワーク、サブネット マスク、サブネット内のホストはすべてルーターによって管理されます。
  • ターゲットネットワークとサブネットマスクはルーター上で構成されます

4. 特別なIPアドレス

すべての IP アドレスがホスト IP アドレスとして使用できるわけではなく、一部の IP アドレス自体が特別な目的を持っています。

  • IP アドレス内のすべてのホスト アドレスを 0 に設定します。これが、この LAN を表すネットワーク番号になります。たとえば、上の図の 140.252.40.0 または 140.252.40.64 は、このアドレスはネットワーク番号を表すため、ホストに割り当てることはできません
  • IP アドレス内のすべてのホスト アドレスを 1 に設定します。これはブロードキャスト アドレスとなり、同じリンク上で相互に接続されているすべてのホストにデータ パケットを送信するために使用されます。たとえば、上の図の 140.252.40.255 または 140.252.40.79 は、このアドレスはブロードキャスト アドレスを表すため、ホストに割り当てることはできません
  • 127.* の IP アドレスは、ネイティブ ループバック (loop back) テスト (通常は ) に使用されます。127.0.0.1

ブロードキャストアドレス

  • ブロードキャスト アドレスは、同じリンク上で互いに接続されているホスト間でパケットを送信するために使用されます (同じサブネット内のすべてのホストにブロードキャストします)。
  • ブロードキャスト アドレスは、ネットワーク (通常は同じサブネット) 上のすべてのワークステーションに同時に送信するように設計されたアドレスです。
  • ホスト番号がすべて 1 の場合、ネットワークのブロードキャスト アドレスを表します。
  • 例えば、授業中にモニターが「クラスの皆さん、起立!」と叫び、それを聞いてクラスの生徒が全員起立するという放送の意味を持つ号令です。

ローカルループバック

  • ローカル ループバックは、通常、内部通信とネットワーク デバイスの管理に使用される特別なネットワーク インターフェイスです。
  • ローカル ループバック インターフェイスは、ループバック アドレスと呼ばれる特別なカテゴリの IP アドレスに属し、通常は 127.0.0.0/8 ネットワーク セグメントとして指定され、最も一般的なのは 127.0.0.1 です。
  • ローカル ループバック リモート管理やトラブルシューティングだけでなく、ネットワーク サービスや内部通信のテストにも使用できます

5. IPアドレス数の制限

IP アドレス (IPv4) は 4 バイトの 32 ビットの正の整数であるため、2^32 IP アドレスは合計で 43 億近くあります。ただし、TCP/IP プロトコルでは、各ホストに IP アドレスが必要であると規定されています

  • 現在、世界の人口は 70 億人を超えており、半数がスマートフォンを持っていないとしても、IP アドレスを必要とするスマートフォンは 30 億台以上存在します。
  • テクノロジーの発展に伴い、私たちが使用するコンピューター、スマートウォッチ、スマート冷蔵庫、スマート洗濯機、その他のデバイスもインターネットにアクセスするには IP アドレスが必要になります。
  • さらに、IP アドレスはホストの数に応じて構成されないため、ホストには複数の IP アドレスが必要になる場合があります。また、ネットワーク内には IP アドレスを必要とするルーティング デバイスが多数存在し、一部の特殊な IP アドレスは使用できないことは言うまでもありません。 。

そのため、実際には43億個のIPアドレスでは長期的には不足するため、分割された5種類のネットワークを継続的にサブネット化し、IPアドレスの無駄を削減することを目的としたCIDRソリューションが提案されました。その理由は、IP アドレスは本質的に十分ではないため、これ以上無駄にすることはできません。

CIDRによりIPアドレスの利用率が向上し、無駄が削減されるため、IPアドレス不足の問題はある程度緩和されますが、IPアドレスの絶対的な上限は増加せず、依然として43億程度です。

IPアドレスを解決する3つの方法

  • 動的 IP アドレスの割り当て: ネットワークに接続されているデバイスにのみ IP アドレスを割り当てます。したがって、同じ MAC アドレスを持つデバイスは、インターネットに接続するたびに異なる IP アドレスを取得します。 IP アドレスが特定のデバイスに強制的にバインドされることを避けるためにも同様である必要があります
  • NAT テクノロジー: 2 つの同一の IP アドレスが異なる LAN に同時に存在できるようにします。NAT テクノロジーは、IP アドレス不足の問題を解決するだけでなく、効果的に解決することもできます。外部からの攻撃、ネットワーク内のコンピュータの隠蔽と保護
  • IPv6: IPv6 は 16 バイトと 128 ビットを使用して IP アドレスを表現するため、IP アドレス不足の問題を大幅に軽減できます。しかし、IPv6 は IPv4 を単純にアップグレードしたものではなく、無関係な 2 つのプロトコルであり、相互に互換性がないため、IPv6 はまだ普及していません

私の国では現在、IPv6 の導入が比較的順調に進んでいますが、IPv4 との互換性がないため、普及が遅れています。 IPv4 は OS に組み込まれており、その基盤となる機能が IPv6 と互換性がないため、IPv6 の普及は困難です。

NAT技術の登場により、IPアドレス不足の問題は解決されましたが、IPアドレスの絶対的な上限は増加していません(NAT技術でもまだこの問題は完全には解決されていません)

NAT 技術の出現は IPv6 の発展を妨げてきましたが、私の国では IPv6 の推進にも役立ちました。NAT 技術を通じて、IPv6 アドレスを IPv4 アドレスに変換できます。現在、私の国のほとんどのインターネット企業のイントラネット環境は、国はIPv6です

アメリカもIPv6に取り組んでいるがやる気がない(何もすることがないのになぜIPv4をひっくり返さなければならないのか)

IP アドレス不足の問題を完全に解決するには、依然として IPv6 に依存する必要があります。

6. プライベートIPアドレスとパブリックIPアドレス

組織内で LAN を構築する場合、IP アドレスは LAN 内の通信にのみ使用され、インターネットには直接接続されません。理論的には任意の IP アドレスを使用できますが、RFC 1918 では、LAN を確立するために使用されるプライベート IP アドレスを規定しています。 LAN:

  • 10.、最初の 8 桁はネットワーク番号で、合計 16,777,216 個のアドレスです。
  • 172.16.172.31.、最初の 12 桁はネットワーク番号で、合計 1,048,576 個のアドレス
  • 192.168.、最初の 16 桁はネットワーク番号で、合計 65,536 個のアドレスです。
  • この範囲に含まれるものをプライベートIP(プライベートIP、イントラネットIP)と呼び、それ以外をパブリックIP(またはグローバルIP)と呼びます。

ホストのIPを確認してください

ifconfig: このコマンドは、ネットワーク インターフェイス情報を表示および設定するために使用されます。

たとえば、Linux サーバーを購入した場合は、次のコマンドを入力します。

  • eth0表すもの: 通常、システムの最初のイーサネット インターフェイスを表します。これは、ローカル エリア ネットワークまたはインターネットに接続するために使用される物理ネットワーク インターフェイスです。 eth0 は、システム設定とネットワーク ハードウェアに応じて、有線または無線のイーサネット インターフェイスになります。
  • lo はローカル ループバック インターフェイス (loopback interface) であり、ループバック アドレスとも呼ばれます。システム内部の通信に使用される仮想ネットワークインターフェースです。通常、lo インターフェイスの IP アドレスは 127.0.0.1 で、サブネット マスクは 255.0.0.0 です。物理ネットワーク インターフェイスを経由せずに、システム内のプロセスとサービス間の通信が可能になります
  • eth0では、 インターフェイスの対応するアドレスinetはプライベートIPです。192.168.0.213

ここに画像の説明を挿入します
Linux サーバーへの接続に使用される IP はパブリック IP と呼ばれます
ここに画像の説明を挿入します
注: Windows での使用コマンドを確認してくださいipconfig

なぜオペレーターに料金を支払わなければならないのでしょうか? ?

私たちが楽しんでいるのは、Douyin の閲覧、淘宝網での購入など、インターネット会社が提供するサービスですが、インターネット会社にお金 (インターネット アクセスの費用) を支払うのではなく、そのお金を運営者に渡します。私たちはお金を払っていますか? インターネット会社ではなく通信事業者にお金を渡してください。私たちは当然、インターネット会社が提供するさまざまなサービスを楽しんでいます? ?

  • オペレータはネットワーク通信インフラの構築者であり、私たちがインターネットにアクセスする際には、さまざまなデータ(リクエストデータやレスポンスデータ)がオペレータを経由する必要があります。
  • 言い換えれば、サーバーにアクセスするためのデータ要求は、対応するサーバーに直接送信されるのではなく、データが最終的に対応するサーバーに到達する前に、オペレーターによって構築されたさまざまな基地局、さまざまなルーター、クラスターによって転送される必要があります。
  • 対応するサーバーが応答するデータもオペレーターを経由し、最終応答がクライアントに届く前にオペレーターによって転送される必要があります。
  • 通信事業者にネットワーク料金を支払うと、通信事業者が提供する通信インフラを使用する必要があり、通信インフラを利用しないとインターネットにアクセスできないため、実質的にはネットワークアクセスライセンスを購入する(インターネットにアクセスできる)のと同じになります。 。

たとえば、携帯電話番号を滞納していてもインターネットにアクセスしたい場合、オペレーターを経由すると、オペレーターはあなたのアカウントを認証し、滞納していることがわかり、リクエストは直接破棄され、次のようなものには転送されません。対応する相手のサーバー
ここに画像の説明を挿入します

  • 逆に、インターネット企業がインターネットにアクセスしたい場合は、通信事業者に料金を支払わなければインターネットにアクセスできません。つまり、サーバーからのデータをクライアントに送信できません。
  • オペレーターは仲介者の役割を果たし、双方に料金を請求するのと同じです。
  • いわゆるネットワークのセグメンテーションとサブネットの分割は、実際にはオペレータによって行われます。
  • インターネット企業はネットワーク通信を基盤として誕生するため、事業者が提供するこれらのインフラがなければ、いわゆるインターネット企業は誕生しません。
  • 同様に、当社のデータグラムも事業者を経由する必要があるため、事業者は当社のデータパケットを検知することができ、リクエストされたURLが不正なURLであることが判明したり、データパケットがGoogleやTwitterなどの外部ネットワークにアクセスしたりした場合、など。オペレーターは、データ パケットを転送するのではなく、リクエストを直接フォークします。

言い換えれば、ユーザーがインターネットにアクセスするために使用するデータは、まず事業者の関連するネットワーク機器を通過し、次にインターネット会社の対応するサーバーに送信される必要があります。オペレータに料金を支払わなければなりません。

ルーター機能

  1. データ転送
  2. DHCPとLAN(サブネット)の設定
  3. NAT

ルーターは、ホーム ルーターとエンタープライズ ルーターに分けられます。

  • LANの設定に使用するIPはプライベートIPである必要があり、パブリックIPは使用できません。
  • 家庭用ルーター: 低電力で日常使用に適しています。LAN の構築に使用されるプライベート IP は通常、192.168. です。
  • エンタープライズ レベルのルーター: LAN の構築に使用されるプライベート IP は通常、10. または 172.16. から です。172.31.

データが対応するサーバーに送信される仕組み

ルーターは、2 つ以上のサブネットを接続するハードウェア デバイスです。ルーターには、LAN口WAN口 という 2 つのネットワーク インターフェイスがあります。

  • LAN口(Local Area Network): ローカルネットワークに接続されているポートを示します。主にホームネットワーク内のスイッチ、ハブ、または PC に接続されます。
  • WAN口(Wide Area Network): テーブルは、一般にインターネットを指すパブリック ネットワークに接続するインターフェイスとして理解できます。

LAN ポートの IP アドレスは LAN ポート IP (内部) と呼ばれ、サブネット IP とも呼ばれます。WAN ポートの IP アドレスは WAN ポート IP と呼ばれ、外部 IP (外部) とも呼ばれます。

私たちが使用するコンピューター、ホームルーター、キャリアルーター、WAN、アクセスしたいサーバーの関係はおおよそ次のとおりです。
ここに画像の説明を挿入します

  • 異なるルーターは同じサブネット IP を持ちます (通常は 192.168.1.1)。サブネット内のホスト IP アドレスを繰り返すことはできませんが、サブネット間の IP アドレスを繰り返すことはできません。繰り返すことができます。
  • すべてのホーム ルーターは、実際には、オペレーターのルーターのサブネット内のノードです。このようなオペレーター ルーターには、多くのレベルがある場合があります。最も外側のオペレーター ルーターの WAN ポート IP は、パブリック ネットワーク IP です。
  • 自分で実装したサーバー プログラムをパブリック ネットワーク上でアクセスできるようにするには、Alibaba Cloud/Tencent Cloud で購入できる外部ネットワーク IP を持つサーバーにプログラムを展開する必要があります。

注記:プライベート IP はパブリック ネットワークに表示できません

プライベート IP をパブリック ネットワークに表示できないのはなぜですか?

  • プライベート ネットワーク IP は繰り返すことができるため、異なる LAN で同じ IP アドレスを使用できるため、IP の欠点が軽減されます。
  • つまり、プライベート IP アドレスは世界的に一意ではないため、パブリック ネットワーク上で直接使用すると、ルーティングの混乱が発生します。したがって、プライベート IP アドレスが外部ネットワークにアクセスしたい場合は、ルーターを経由してアドレス変換を実行し、プライベート IP (ローカル エリア ネットワークに固有) をパブリック IP (世界に固有) に変換します。

プライベート IP はパブリック ネットワーク上に表示できないため、次のようになります。

  • したがって、サブネット内のホストが外部ネットワークと通信するとき、ルーターはデータ パケットの IP ヘッダーの 源IP地址 をルーターの < a i=2 >、このような段階的な置換により、最終データ パケット内の送信元 IP アドレスはパブリック ネットワーク IP になり、このテクノロジーは (、ネットワーク アドレス変換、プライベート アドレスを正規の IP アドレスに変換)WAN口IPNATNetwork Address Translation

データ転送の一般的なプロセスは次のとおりです。

  • パケットが次のようになると仮定します。122.77.241.3/24
  • データ パケットが自分のホストからホーム ルーターに送信されると、ルーターは宛先 IP が自分のサブネットに存在しないことがわかります。
  • はこの時点で源IP ルーターによってWAN口IP 置き換えられ、その後、ルーター自体に直接接続されている別のサブネットに転送されます
  • 転送されたデータ パケットがオペレーターのルーターに到着し、マルチレベル転送 (オペレーターの複数のサブネットを通過) を経て、最終的にデータ パケットの宛先 IP が自身のサブネット内にないことが判明したとします。
  • この時点では、 に置き換えて、データ パケットをパブリック ネットワークに直接転送します源IP をルーターのWAN口IP
  • その後、パブリック ネットワークによって対応する宛先 IP に転送されます

図に示すように:
ここに画像の説明を挿入します
データ パケットがどのように返されるかについては後で説明します。

7. ルーティング

データ パケットのルーティング プロセス (1 つずつ道を尋ねるプロセスに似ています)

  • ルーティング プロセス中、データ パケットは実際には「道を尋ねる」プロセスと同様にホップごとに行われます。
  • いわゆる「ワン ホップ」はデータ リンク層の間隔であり、特にイーサネットでは、源MAC地址 から 目的MAC地址 間隔

ここに画像の説明を挿入します
IP データ パケットの送信プロセスは道を尋ねることと同じであり、IP データ パケットの送信プロセス中に多くのルーターに遭遇します。

これらのルーターは、データ パケットのルーティングと転送に役立ちます。データ パケットがルーターに到達すると、対応するルーターはデータの宛先 IP アドレスをチェックし、データのネクスト ホップがどこにあるべきかを指示します。

  • IP データ パケットがルーターに到達すると、ルーターはまず宛先 IP を確認します。
  • ルーターは、データ パケットをターゲット ホストに直接送信できるか、または次のルーターに送信する必要があるかを決定します (ルーティング テーブルを確認します)。
  • ターゲット IP アドレスに到達するまで順番に繰り返します

現在のデータ パケットの送信先を決定するにはどうすればよいですか?

  • これは、内部でルーティング テーブルを維持する各ノード (ルーター) に依存します。
  • ルーティング テーブルを確認すると、データ テーブルを誰に送信すべきかがわかります。

IP パケット内の 目的IP の場合、ルーターのルーティング テーブルの検索結果は次の 3 種類になります。

  • ルーティング テーブルをクエリした後、ルーターはデータの次のホップがどのサブネットにジャンプすべきかを学習します。
  • ルータはルーティング テーブルを照会しても、一致するサブネットが見つからない場合、ルータはデータをデフォルト ルート (デフォルト ゲートウェイ) に転送します。
  • ルータは、ルーティング テーブルを照会した後、データのターゲット ネットワークが現在のネットワークであることを認識し、この時点で、現在のネットワーク内の対応するホストにデータを転送します。

ルーティングテーブルを表示する

ルーティング テーブルは、route コマンドを使用して表示できます。このコマンドにより、現在のシステムのルーティング テーブルを表示できます。
ここに画像の説明を挿入します
エントリ部分の説明:< /span>

  • Destination: ターゲットネットワークまたはホストのIPアドレス
  • Gateway: ネクストホップ ゲートウェイ、つまりパケットをターゲット ネットワークまたはホストに送信するネクストホップ ルーターの IP アドレス。
  • Genmask: ターゲットネットワークまたはホストのネットマスク
  • Flags: ルーティング テーブル エントリのステータスと属性を示すために使用されるフラグ ビット。共通のフラグ ビットには、U (ルーティング テーブル エントリが使用可能)、G (ルーティング テーブル エントリがゲートウェイによって指定され、このエントリのネクスト ホップ アドレスがルータのアドレスであることを示します)、H (ルーティング テーブル エントリがホストルーティング)
  • Iface:Interface、パケットがどのネットワーク インターフェイスを経由して送信されるかを示します。

これらのフィールドのいくつかの意味は次のとおりです。

  • default: これがデフォルト ルート (ゲートウェイ) であることを示します。つまり、システムが一致するターゲット ネットワークまたはホストを見つけられない場合、このルーティング テーブル エントリが使用されます。
  • 0.0.0.0: 対象のネットワークまたはホストが任意のネットワークまたはホストであることを示します。
  • UG: これがデフォルトのルーティング テーブル エントリであり、ゲートウェイ フィールドが有効であることを示します。G フラグのないエントリは、宛先ネットワーク アドレスがローカル インターフェイスに直接接続されているネットワークであり、ルーターによって転送される必要がないことを示します。

ルーティングテーブルを確認するプロセス

  • IP データ パケットがルーターに到着すると、ルーターはデータ パケットの宛先 IP アドレスを確認し、ルーティング テーブル内のサブネット マスクとの「ビット単位の AND」を実行します。
    Genmask操作 (ルーティング テーブルをトラバース) を実行し、その結果をサブネット マスクに対応する宛先ネットワーク アドレスDestinationと比較します。一致する場合は、データ パケットの次のホップにジャンプする必要があることを意味します。このサブネットの場合、データ パケットは対応する送信インターフェイスを介して送信されますIface

  • パケットの宛先 IP アドレスとサブネット マスクの間の「ビット単位の AND」を実行しても、一致する宛先ネットワーク アドレスが見つからない場合、ルーターはパケットをデフォルト ルートに送信します。ルーティング テーブルの宛先ネットワーク アドレスの default。デフォルト ルートの対応する FlagsUG であることがわかり、これにより実際にデータが別のルーターに転送され、データが他のルーターで継続できるようになります。

  • データ パケットはルータを介してルーティングされ続けた後、最終的にターゲット ホストが配置されているターゲット ネットワークに到達します。このとき、データ パケットは宛先 IP アドレスのネットワーク番号に基づいてルーティングされるのではなく、宛先 IP アドレスのホスト番号をルーティングし、最終的にデータ パケットに対応するホスト番号に従ってターゲット ホストにデータを送信できます。

ルーティング テーブルは、ネットワーク管理者が手動で保守することも (静的ルーティング)、いくつかのアルゴリズムによって自動的に生成することもできます (動的ルーティング)。

ルーティングテーブル生成アルゴリズム:距離ベクトルアルゴリズム、LSアルゴリズム、ダイクストラアルゴリズムなど

知らせ:ネットワーク層の IP プロトコルは、データ ルーティングの決定を行い、実際のデータはデータリンク層 (実際に作業を行う層) によって転送されます

最後に、上記で説明されていない 16 ビットの識別 (id)、3 ビットのフラグ フィールド、および 13 ビットのスライス オフセットを追加します。

8. 断片化と集合

以下では、16 ビットの識別 (id)、3 ビットのフラグ フィールド、および 13 ビットのスライス オフセットについて説明します。
ここに画像の説明を挿入します
これにはデータリンク層の問題が関係します

  • IP は、ネットワークを介してあるホストから別のホストにデータ パケットを送信できます。データ パケットがネットワークを介して送信される場合、最終的にターゲット ホストに到達する前に、ルーターによってルーティングおよび転送される必要があります。
  • したがって、IP がネットワーク経由でデータ パケットを送信するための前提条件は、最初に、あるノードから自身に接続されている次のノードにデータ パケットを送信する必要があるということです。、この問題は実際には IP 下のデータリンク層によって解決されます。データリンク層の代表的なプロトコルは MAC フレーム プロトコルです
  • つまり、データリンク層は、隣接するノード間の通信、データパケットをフレームにカプセル化して、物理媒体を介して送信する役割を担います。
  • 2 つのノードが直接接続されているということは、2 つのノードが同じ LAN 内にあることを意味するため、隣接する 2 つのノード間のデータ伝送を議論する場合、実際に議論されるのは LAN 通信の問題になります。

最大伝送単位MTU

  • MAC フレームは、データ リンク層プロトコルです。IP から送信されたデータをデータ フレームにカプセル化し、ネットワークに送信します (データ フレームはネットワーク ケーブル上を走行します)。ただし、MAC フレーム プロトコルには、データ フレームのサイズに制限があります。データが送信されます。データ フレームを送信する場合、この値を超えることはできません。この値は MTU (最大送信単位) と呼ばれます。
  • 最大送信単位 (Maximum Transmission Unit,MTU) は、データリンク層がネットワーク通信で送信できる最大データ フレームのサイズを指します。 MTU のサイズは通常、ネットワーク デバイスまたはネットワーク プロトコルによって指定され、一度に転送できるデータ量が制限されます
  • デフォルトの MTU サイズは通常 1500 バイトです

Linux で ifconfig コマンドを使用して
ここに画像の説明を挿入します

  • MAC フレーム プロトコルは 1500 バイトを超えるデータを送信できません
  • したがって、IP 層によって配信されるデータ パケットの長さは 1500 バイトを超えることはできません。IP报头+有效载荷 <= 1500字节
  • 1500 バイトより大きい場合、MAC フレーム プロトコルはデータを送信できません。
  • IP 層で送信するデータが 1500 バイトを超える場合は、まず IP 層でデータをフラグメント化し、次にフラグメント化されたデータを下位層の MAC フレームに渡して送信します。
  • IP プロトコルは送信されるメッセージのサイズを制御できないため、送信されるメッセージのサイズはトランスポート層プロトコル (TCP または UDP) によって制御されます。

フラグメンテーションがあるため、アセンブリも必要です。フラグメンテーションとアセンブリは IP 層で完了します。フラグメンテーションとアセンブリは純粋に IP プロトコルの動作であり、上位のトランスポート層や下位のデータリンク層とは何の関係もありません。

知らせ:IP のフラグメンテーションとアセンブリは主流の状況ではありません。IP のフラグメンテーションとアセンブリは特殊な状況です。主流の状況については、次のセクションで説明します。次の記事 記事: データリンク層についてもう一度話しましょう

スライスして組み立てる方法は? ?

フラグメンテーションとアセンブリは、次の 3 つのフィールドに依存して完了できます。

  • 16 ビット識別子 (id): ホストによって送信されたメッセージを一意に識別します。データが IP 層で断片化されている場合、 each シャードに対応する ID はすべて同じです
  • 3 桁のフラグ フィールド: 最初のビットは予約されています。予約とは、現在は使用されていないが、将来は使用される可能性があることを意味します。 2 番目のビットはフラグメンテーションが禁止されていることを示し、パケットの長さが MTU を超える場合、IP プロトコルがパケットを破棄することを示します。 3 番目のビットは「さらなるフラグメント」を表します。メッセージがフラグメント化されていない場合、このフィールドは 0 に設定されます。メッセージがフラグメント化されている場合、最後のフラグメント化されたメッセージを除き、残りのフラグメントは 0 に設定されます。パケットはすべて次のように設定されます。 1 (最後の断片化されたパケットのこのフィールドは 0 で、終了フラグと同様、'\0' で終わる C 言語の文字列と同様です)
  • 13 ビット スライス オフセット (framegament offset): 元のデータの先頭を基準としたスライスのオフセット。現在のスライスが元のデータにあるオフセット位置、実際のオフセット バイト数はこの値によって取得されます× 8。したがって、最後のメッセージを除き、他のメッセージの長さは 8 の整数倍でなければなりません。そうでない場合、メッセージは連続しません

知らせ: 断片化されたパケットは IP ヘッダーで再カプセル化する必要があります

IP パケットが断片化されているかどうかを確認するにはどうすればよいですか?

  • 3 ビット フラグ フィールドの 3 番目のフラグ ビットは、「さらなる断片化」を示します。メッセージが断片化されていない場合、このフィールドは 0 に設定されます。メッセージが断片化されている場合は、最後の断片化されたメッセージを除き、フラグメントに設定されたパケットを除きます。 0、他の断片化されたパケットは 1 に設定されます。

同じメッセージの断片はどのようにして識別できるのでしょうか?

  • 16 ビット識別により、断片化されたパケットの 16 ビット ID は同じになります。

どの断片化されたパケットが最初でどれが最後であるかを判断するにはどうすればよいですか?

  • 最後の断片化されたメッセージは、3 番目のフラグ ビット、追加のフラグメント、およびフラグメント オフセットによってわかります。つまり、多分片标志位为0 && 片偏移>0 変化することは最後の断片化されたメッセージを表します a>
  • 最初の断片化されたメッセージは多分片标志位为1 && 片偏移 == 0によって判断されます。満たされた場合、それが最初の断片化されたメッセージになります

断片化されたパケットが収集されたかどうかを確認するにはどうすればよいですか?どのように分割されたメッセージが最初に来て、どの分割メッセージが最後に来るのかを組み立てる方法は何ですか?

  • 断片化されたメッセージが完全に受信されたかどうかは、13 ビットの断片化オフセット (現在の開始位置 + 自分の長さ == 次の断片化されたメッセージに埋められるオフセット サイズ) によって判断され、断片化されたメッセージが不完全な場合は、直接破棄され、ピアに送信されます。 TCP はメッセージ全体を再送信します。
  • アセンブル方法も 13 ビットのスライス オフセットによって決まりますが、断片化されたメッセージのスライス オフセットを昇順にソートするだけです。

組み立てられたメッセージが正しいことを確認するにはどうすればよいでしょうか?

  • 16ビットヘッダ検査および判定に合格
  • 上位層の TCP/UDP に渡される際には、TCP/UDP 自身の 16 ビットヘッダ検査と判定によっても TCP/UDP が判定されます。
  • 検証が失敗した場合、パケットは直接破棄されます。

データの断片化と組み立ては IP 層によって完了します

  • データの断片化と組み立ては IP 層で完了し、上位のトランスポート層や下位のリンク層は気にしません。

シャーディングは良いのか?

トランスポート層は IP 層の断片化の問題を気にしませんが、断片化はトランスポート層にも影響を与えます。

  • ネットワーク伝送中にデータが断片化された場合、受信側が断片化されたメッセージをすべて受信し、それらを正常に組み立てた場合にのみ、データが相手側に確実に受信されたとみなします。
  • ただし、多数の断片化されたメッセージの 1 つが失われると、受信側はメッセージを正常に組み立てることができなくなり、受信した断片化されたメッセージはすべて破棄され、トランスポート層 TCP はメッセージ (全体) を再送信します。
  • 断片化によりパケット損失の可能性が増加します
  • パケット損失が発生しない確率を99.99%とします。メッセージはIP層で断片化され、3つの断片化されたメッセージに分割されます。このとき、パケット損失の確率は次のようになります。増加、99.99%*99.99%*99.99% < 99.99%

シャーディングを減らすにはどうすればよいですか?

実際のデータ断片化の根本的な理由は、トランスポート層が一度に配信するデータが多すぎるため、IP がデータを MAC フレームに直接渡すことができなくなることです。トランスポート層が IP に一度に配信されるデータ量を制御する場合、時間が大きすぎないようにすれば、当然のことながら、データを IP 層で断片化する必要はありません。

  • したがって、TCPは伝送制御プロトコルとして、一度に下り方向に配信されるデータが、MSS(Minimum SegmentSize、最大セグメント長)と呼ばれる一定のしきい値を超えないように制御する必要があります。 TCP接続。
  • MAC フレームの最大ペイロードは MTU、TCP の最大ペイロードは MSS です。
  • 通常、IP および TCP プロトコル ヘッダーの長さは 20 バイトであるため、MSS の値は MTU から IP および TCP プロトコル ヘッダーの長さを引いたものと等しくなります。 MAC フレームの MTU は通常 1500 バイトですMSS = MTU - 20 - 20ので、MSS 値は通常 1460 バイトです
  • したがって、データの断片化を避けるために、TCP が MSS のサイズ内で送信されるデータを制御することをお勧めします。
  • ただし、異なるネットワーク リンクの MTU は異なる場合があることに注意してください。送信中にデータがより小さい MTU のネットワークを通過する場合でも、データを断片化する必要がある場合があります。

要約すると、データの断片化の実際の理由は、トランスポート層が一度に送信するデータが多すぎるためです。データの断片化を回避するには、TCP によって送信されるデータのサイズを MSS 内で制御する必要があります。

シャーディングのプロセス

IP 層が 3000 バイトのデータ (IP ヘッダー + ペイロード) を送信したいとします。データは MAC フレームで指定された MTU (1500) を超えるため、IP はまずデータをフラグメント化し、次に 1 つずつフラグメント化する必要があります。フラグメントは送信のために MAC フレームに渡されます。

IP 層によって追加された IP ヘッダーの長さが 20 バイトで、データが次のように断片化されて 3 つの断片化されたメッセージを形成すると仮定します。

断片化されたメッセージ メッセージの総バイト数 IPヘッダーバイト ペイロード 16ビットの識別子 より多くのシャードフラグ 13ビットスライスオフセット
1 1500 20 1480年 111だとします 1 0
2 1500 20 1480年 111 1 185
3 60 20 40 111 1 370

知らせ: 13 ビットのスライス オフセットに記録されるバイト数は、元のデータの先頭にある現在のスライスのオフセット バイトの値です。÷ 8< a i =2> アセンブリの問題のほとんどは上で説明されているため、詳細には触れません。次の記事では、データ リンク層の MAC フレーム プロトコルについて説明します
ここに画像の説明を挿入します

「 作者 」 枫叶先生
「 更新 」 2023.10.14
「 声明 」 余之才疏学浅,故所撰文疏漏难免,
          或有谬误或不准确之处,敬请读者批评指正。

おすすめ

転載: blog.csdn.net/m0_64280701/article/details/132096716