【ネットワークプログラミング・ネットワーク層】IPプロトコル


Linux を学習するためにクラウド サーバーやその他のクラウド製品が必要な学生は、 / --> Tencent Cloud <-- / --> Alibaba Cloud <-- / --> Huawei Cloud <-- / 公式 Web サイトに移動できます。軽量のクラウド サーバーは次のとおりです。年間 112 元の低コストで、新規ユーザーは最初の注文で超低割引を受けることができます。 


目次

1. IPプロトコルの概念

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

1. 4つのヘッドの長さ

2. 全長 16 ビット (アンパック)

3. 8ビットプロトコル(使い分け)

4. 16ビットヘッダーチェックサム

5. 8ビット生存時間

6. 32 ビットの送信元 IP と 32 ビットの宛先 IP

7. 4ビット版/8ビットサービスタイプ

8. 16ビット識別

9. 3桁マーク

10、13 ビットのスライス オフセット

3. IPプロトコルのネットワークセグメント分割

1. サブネット化が必要なのはなぜですか?

2. ネットワーク分割ルール

2.1 旧ネットワーク番号とホスト番号の分割方式(新方式と互換性あり)

2.2 新しいネットワーク番号とホスト番号の分割方式 CIDR

4. 特別なIPアドレス

5. IPアドレス数の制限を解決する

6. プライベートIPとパブリックIP

6.1NAT

6.2昼寝

6.3 NAT の欠陥

7. ルーティングとルーティングテーブル

1. ルーティング

2. ルーティングテーブル

3. ルーティングテーブル生成アルゴリズム


1. IPプロトコルの概念

IP: ターゲットネットワーク内のターゲットホストのアドレス

ホスト:IPアドレスは持つが経路制御はできない装置、ルータ:IPアドレスは持つが経路制御はできる装置、ノード:ホストとルーターの総称。

IP アドレスの役割: ホストを見つけて、ネットワークを介してホスト A からホスト B にデータグラムを確実に送信します (データは正常に送信される可能性が高くなります。送信が失敗した場合は、TCP のさまざまな戦略により IP がデータ送信を実行します) TCP と IP の組み合わせにより、信頼性の高いネットワーク通信が保証されます)

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

1. 4つのヘッドの長さ

TCP プロトコルと同様に、IP プロトコルの 4 ビットのヘッダー長は、メッセージの全長 = 4 ビットのヘッダー長 * 4 バイトを表します (4 ビットのビットの値の範囲は 0 ~ 15 で、ヘッダーの長さは少なくとも 20 バイトであるため、メッセージの合計の長さは 20 ~ 60 バイトの範囲になります)

上の図のメッセージを見ると、右側に 20 バイトのプロンプトがあります。これは標準 IP です。標準 IP の場合、4 桁のヘッダー長のバイナリ データは 0101 (5*4 は 20) です。

2. 全長 16 ビット (アンパック)

IP プロトコルの全長 16 ビットにはヘッダーとペイロードが含まれるため、全長 16 ビットのヘッダーを通じてペイロードの長さを取得できます (アプリケーション層の場合、そのペイロードはトランスポート層によって与えられるメッセージです) )

3. 8ビットプロトコル(使い分け)

トランスポート層のプロトコル番号は 8 ビット プロトコルで記述されるため、IP プロトコルは上向きに配信するときに、ペイロードを上位層のどのプロトコルに渡したいかを認識します。

4. 16ビットヘッダーチェックサム

検証が失敗した場合、メッセージは直接破棄されますが、TCP にはタイムアウト再送メカニズムがあり、メッセージは IP に再送信されます。

5. 8ビット生存時間

ネットワーク上でのメッセージの送信中、メッセージがホストから送信されると、そのメッセージはホストの制御下にはなくなります。メッセージはルーター間で受け渡されるため、ルーターにメッセージを破棄する権限が与えられていない場合、メッセージがループして転送され、ネットワークリソースを無駄に占有してしまうループ転送などの問題が発生する可能性があります。

IP プロトコルの 8 ビットの有効期間は、このデータグラムが宛先に到達するまでの最大ホップ数を指定します。通常は 64 です。(ルートを通過するたびにTTLが減少し、0になった場合はパケットを直接破棄します)

6. 32 ビットの送信元 IP と 32 ビットの宛先 IP

アプリケーション層によって提供されるポート番号はトランスポート層用であり、提供される IP は IP プロトコル用です。わずかに。

7. 4ビット版/8ビットサービスタイプ

4 桁のバージョンには ipv4 を表す 4 が入ります (ipv6 と ipv4 には互換性がありません)。

8 ビットのサービス タイプ: 3 ビットの優先フィールド (非推奨)、4 ビットの TOS フィールド、および 1 ビットの予約フィールド (0 に設定する必要があります)。4 桁の TOS はそれぞれ、最小遅延、最大スループット、最大信頼性、最小コストを表しており、この 4 つは互いに矛盾しており、選択できるのは 1 つだけです。ssh/telnet などのアプリケーションの場合は、最小遅延がより重要であり、ftp などのプログラムの場合は、最大スループットがより重要です。

8. 16ビット識別

16 ビット識別 (id): ホストによって送信されたメッセージを一意に識別します。IP メッセージがデータリンク層の最大送信単位より大きく、IP 層が断片化される場合、各フラグメントの ID は次のようになります。同じ。

9. 3桁マーク

3 桁のフラグ フィールド: 最初のビットは予約されています (予約とは、まだ使用されていない、予約されていることを意味します)。2 番目のビットは 1 で、フラグメント化が禁止されていることを意味します。このとき、メッセージの長さが MTU を超える場合、IP モジュールはメッセージを破棄します。3 番目のビットは「さらなるフラグメント」を意味します。フラグメント化された場合、最後のフラグメントは0 に設定され、その他は 1 に設定されます。フラグメントのビットが 1 の場合、そのフラグメントがメッセージ全体の最後のフラグメントではないことを意味します。

フラグメンテーション禁止フラグは、1に設定されるとフラグメンテーションが禁止される。パケットが路上のルータを通過する際、ルータの最大MTUがパケットのペイロード未満の場合、路上のルータはフラグメント化禁止フラグが1に設定されているためフラグメント化できず、パケットはフラグメント化されてしまいます。捨てられた。トランスポート層はタイムアウトしてメッセージを再送信し、データ送信を満たすことができるルーティング パスを選択します。(スループットを向上させる方法を見つける)。だったら全ルータの最大MTUを1500バイトにすれば良いんじゃないでしょうか?実際、最大 MTU が小さいルーターは、小容量のペイロードの通過に適しており、速度も速くなります。

10、13 ビットのスライス オフセット

13 ビット フラグメンテーション オフセット (フレームセグメント オフセット): 元の IP メッセージの先頭を基準としたフラグメントのオフセットです。実際、元のメッセージ内の現在のフラグメントがどこにあるかを示します。オフセットの実際のバイト数です。この値は * 8 で求められます。したがって、最後のメッセージを除いて、他のメッセージの長さは 8 の整数倍でなければなりません (そうでないとメッセージは連続しません)。

データリンク層の MAC フレーム プロトコルでは、ペイロードが 1500 バイト (MTU (変更可能な最大送信単位)) を超えてはいけないと規定されており、この 1500 バイトの制限には、IP メッセージ内の IP ヘッダー + ペイロードが含まれます。

データ パケットのサイズはトランスポート層によってのみ制御できますが、それでも 1500 バイトを超える場合があり、これは IP プロトコルのフラグメント化と組み立てによってのみ解決できます。送信側の IP 層はフラグメント化され、各フラグメントにはIP ヘッダー: 最後の IP 層が組み立てられます (バイト制限により IP 層が断片化されて組み立てられますが、断片化によりパケット損失の可能性が高まるため、これは良くありません)。TCP および MAC フレームは、IP の断片化とデータ パケットの組み立てを考慮せず、これは単に IP 層自体の動作です。

断片化: [More Fragments] が 1 の場合、メッセージが断片化されていることを意味します。より多くのフラグメントが 0 で、フラグメント オフセットが 0 に等しい場合は、フラグメント化がないことを意味し、その逆も同様です。

組み立て:断片化された IP パケットを写真オフセットに従って昇順に並べ替えるだけです。

正しくアセンブリされていることを確認する方法: IP プロトコルには 16 ビットのヘッダー チェックサムがあり、TCP プロトコルにもチェックサムがあります。

パケット損失の再送信:断片化によりパケットの特定の部分が失われた場合、スプライシング アセンブリは失敗します。その後、ピアは再発行する必要があります。再発行メカニズムは TCP 層でのみ利用できます。IP には再発行機能がありません。ただし、TCP の場合、TCP は IP がどのように断片化されているか、どの部分が失われたかは気にしません。問題ではありません。 , TCP は、IP 層に対して完全なメッセージのみを再送信します。

3. IPプロトコルのネットワークセグメント分割

IP アドレスは合計 32 ビットで、ネットワーク番号とホスト番号の 2 つの部分に分かれています。

ネットワーク番号: 相互に接続されている 2 つのネットワーク セグメントが異なる ID を持つようにします (学校内の大学が異なると番号が異なるのと同様です)。

ホスト番号: 同じネットワーク セグメント内では、ホストは同じネットワーク番号を持ちますが、異なるホスト番号を持つ必要があります。

1. サブネット化が必要なのはなぜですか?

インターネット上のすべてのホストは、このホストの場所を特定しやすくするために、特定のサブネットに属している必要があります。ホスト A はホスト B にデータを送信します。データグラムがルーターを通過すると、正しいネットワーク番号が選択され、大量の IP アドレスが即座に除外され、検索効率が大幅に向上します。

2. ネットワーク分割ルール

1. 異なるネットワーク セグメント間のデータ転送はルーターに依存するため、ルーターは複数のネットワーク セグメントに属するデバイスです。ルーターはホストでもあり、複数のネットワーク セグメント内の現在のネットワーク セグメントの IP アドレスを持ちます。通常、ルータのサブネットIPアドレスはネットワークセグメント識別子です。1(LANポート)

2. サブネットでは、管理サブネット内の IP デバイスは通常ルーターです。

3. DHCP と呼ばれるテクノロジーがあり、サブネット内の新しいホスト ノードに IP アドレスを自動的に割り当て、手動による IP 管理の不便さを回避できます。一般的なルーターにはDHCP機能が備わっているため、ルーターもDHCPサーバーとみなすことができます。

2.1 旧ネットワーク番号とホスト番号の分割方式(新方式と互換性あり)

すべての IP アドレスは、次の 5 つのカテゴリに分類されます。

クラス A 0.0.0.0 ~ 127.255.255.255

クラス B 128.0.0.0 ~ 191.255.255.255

クラス C 192.0.0.0 ~ 223.255.255.255

クラス D 224.0.0.0 ~ 239.255.255.255

クラス E 240.0.0.0 ~ 247.255.255.255

この分割方法は不合理です。たとえば、クラス A の IP アドレスの場合、ネットワーク番号は 7 桁しかありませんが、ホスト番号は 24 桁です。1 つのサブネットの下に非常に多くのホストがあり、クラス A が発生するシナリオはほとんどありません。アドレスは無駄が多く、クラス B アドレスの方が合理的であるため、ほとんどの組織がクラス B アドレスを申請し、クラス B アドレスが早期に割り当てられることになります。

この不合理な分割方式に対して、人々は新しい分割方式 CIDR (Classless Interdomain Routing) を提案しました。

2.2 新しいネットワーク番号とホスト番号の分割方式 CIDR

ネットワーク番号とホスト番号を区別するために追加のサブネット マスクを導入します。

サブネット マスクも 32 ビットの正の整数で、通常は文字列「0」で終わります。

IP アドレスとサブネット マスクに対して「ビットごとの AND」演算を実行すると、その結果がネットワーク番号になります。

ネットワーク番号とホスト番号の分割は、IP アドレスがクラス A、クラス B、またはクラス C のいずれであるかには関係ありません。

注: ネットワーク番号は、サブネット マスクのバイナリ 1 の最下位ビットの位置によって決まります。サブネット マスクの 2 進数の最下位 1 に続く数字は、ホスト番号に属します。

例 1:

IP アドレスとサブネット マスクの 2 進数に対してビット単位の AND 演算を実行して、ネットワーク番号を取得します。ホスト番号は 0 ~ 255 (0000 0000-1111 1111) ですが、0 はネットワーク番号を表し、255 はブロードキャスト アドレスを表すため、2 つのホスト番号 0 と 255 は使用されません。

例 2: 

4. 特別なIPアドレス

1. IP アドレス内のすべてのホスト アドレスを 0 に設定します。これが、この LAN を表すネットワーク番号になります。

2. IP アドレス内のすべてのホスト アドレスを 1 に設定します。これはブロードキャスト アドレスとなり、同じリンク上で相互に接続されているすべてのホストにデータ パケットを送信するために使用されます。

3. IP アドレス 127.* は、ローカル ループバック テストに使用されます (通常は 127.0.0.1)。

5. IPアドレス数の制限を解決する

IP アドレスは 32 ビットしかありません。一部の特殊な目的の IP アドレスが存在するため、利用可能な IP アドレスは 42 億 9,000 万よりはるかに少ないです。ただし、TCP/IP プロトコルでは、すべてのホスト (実際には各ネットワークごと) に IP アドレスが必要であると規定されています。カードには 1 つ以上の IP を設定する必要があるため、IP アドレスだけでは十分ではありません。CIDR により、古い標準の IP 使用率の低さの問題はある程度緩和されますが、IP の総数は増加していません。

IP アドレス不足の問題を解決するには、次の方法を使用します。

1. IP アドレスの動的割り当て: ネットワークに接続されているデバイスにのみ IP アドレスを割り当てるため、同じ MAC アドレスを持つデバイスがインターネットに接続するたびに同じ IP アドレスを取得できるとは限りません。

2.NATテクノロジー

3. IPv6: IPv6 は、IPv4 の単純なアップグレード バージョンではありません。これらは無関係な 2 つのプロトコルであり、相互に互換性がありません。IPv6 は、IP アドレスを表すのに 16 バイトと 128 ビットを使用します。ただし、IPv6 はまだ普及していません。

6. プライベートIPとパブリックIP

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

1. 10.*、最初の 8 桁はネットワーク番号で、合計 16,777,216 個のアドレス (エンタープライズ レベルのルーターで使用)

2. 172.16. ~ 172.31.、最初の 12 桁はネットワーク番号で、合計 1,048,576 個のアドレス (エンタープライズ レベルのルーターで使用)

3. 192.168.*、最初の 16 桁はネットワーク番号で、合計 65,536 個のアドレス (ホーム ルーターで使用)

この範囲に含まれるものがプライベート IP となり、残りはグローバル IP (またはパブリック IP) と呼ばれます。

ルーターの役割:

1. データパケット転送

2. DHCP機能、サブネットの設定(無線ネットワークの設定など。注:LANはイントラネットIPです)

3.NAT機能

6.1NAT

1. 2 番目のポイントでは、ルーターがサブネットを構築できると述べましたが、ホーム ルーターの場合、構築されたサブネットには複数のホストが含まれ、オペレーター ルーターの場合、構築されたサブネットには複数のホーム ルーターが含まれます。ホストからデータを送信する場合、データは必ずしもパブリック ネットワーク内にあるとは限りませんが、オペレーターのサブネット内にある場合もあり、データ パケットが依然としてイントラネット環境内にある場合もあります。

2. ルータには少なくとも 2 つの IP が装備され、そのうちの 1 つはサブネット IP (LAN ポート IP とも呼ばれ、ルータによって構築されたサブネットに対応) で、もう 1 つの IP は WAN ポート IP です。外部 IP はい、上位ルーターに接続されています。最も外側のキャリアルーターの WAN ポートはパブリック IP に接続されます。

3. 異なるルーターが同じサブネット IP (通常は 192.168.1.1) を持ちます。同じサブネット内のホスト IP アドレスを繰り返すことはできませんが、異なるサブネット間の IP アドレスは繰り返すことができます。

4. 内部ネットワーク IP192.168.1.201 がパブリック ネットワーク IP122.77.241.3 にデータを送信すると、サブネットは宛先 IP が現在のネットワーク セグメントに属していないことを検出し、データ パケットをルーターに渡し、ルータは階層ごとに処理を進め、配信を検索し、最終的に宛先 IP に到達します。3 番目の点によると、宛先 IP を持つサーバーがイントラネット IP を取得した場合、ネットワーク ケーブルに触れてもそれを返すことはできません。このイントラネット IP は複数のイントラネットに存在する可能性があるため、ホストはデータ パケットをそのサーバーに渡す必要があります。 IP をルーターの WAN ポート IP に段階的に置き換えます。この WAN ポート置換技術は NAT (Network Address Translation) と呼ばれます

LAN 内には、同じ外部ネットワーク サーバーにアクセスする複数のホストがあります。サーバーから返されるデータでは、宛先ネットワーク番号は同じです。では、NAT ルーターは、このデータ パケットをどの LAN ホストに転送するかをどのように決定するのでしょうか? LAN 内のホスト内の異なるクライアント プロセスが、異なるクライアント ポート番号を介してリモート エンドへのデータ送信を開始する場合もあります。正しいパケットを正しいプロセスに送信するには、NAT ルーターは NAPT を使用してこの問題を解決し、IP+ポート形式を使用して関連付けを確立する必要があります。

6.2昼寝

 NAT ルーターは K/V 変換テーブルを維持します。たとえば、送信元アドレスは 10.0.0.11:1025 で、宛先アドレスは 163.221.120.9:80 です。NAT ルーターの WAN ポート変換後、宛先アドレスは変更されず、送信元アドレスは 202.244.174.37:1025 に置き換えられます。

図には送信元アドレスと宛先アドレスの別のセットがあり、NAT ルータを通過する場合、WAN ポートの IP は 202.244.174.37 に置き換えられ、区別するために異なるポート番号を使用してマッピング関係が確立されます。

したがって、変換前の送信元アドレス+宛先アドレスと、変換後の送信元アドレスと宛先アドレスがキー値となるマッピングテーブルを形成し、このテーブルをNAT変換テーブルと呼びます。この変換テーブルは両方向にクエリできます。

6.3 NAT の欠陥

外部 NAT から内部サーバーへの接続を確立できません。

変換テーブルの生成と破棄には追加のオーバーヘッドが必要です。

通信処理中に NAT デバイスに異常が発生すると、ホットバックアップがあってもすべての TCP 接続が切断されます。

7. ルーティングとルーティングテーブル

1. ルーティング

ルーティング プロセスは、ホップバイホップの「道順を尋ねる」プロセスです。

いわゆる「1 ホップ」は、データリンク層の間隔です。具体的には、イーサネットにおいて、送信元MACアドレスから宛先MACアドレスまでのフレーム送信間隔を指します。

IP データ パケットの送信プロセスも、道を尋ねることと同じです。

1. IP データ パケットがルーターに到着すると、ルーターはまず宛先 IP をチェックします。

2. ルーターは、データ パケットをターゲット ホストに直接送信できるか、または次のルーターに送信する必要があるかを判断します。ターゲット IP アドレスに到達するまで順番に繰り返します (ホストが利用可能なゲートウェイを見つけられない場合、ホストはデフォルトで指定されたゲートウェイにデータ パケットを送信し、このゲートウェイがデータ パケットを処理します。ホストが通常使用するゲートウェイデフォルトゲートウェイを指します。)

3. ルーティング テーブルを使用して、データ パケットの送信先を決定します。

2. ルーティングテーブル

Route コマンドを使用して、Linux マシンのルーティング テーブルを表示します。

[jly@VM-4-11-centos linux-code]$ route
Kernel IP routing table
目标网络			下一跳(网关)	子网掩码		   使用状态					哪个接口
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    0      0        0 eth0 //默认网关
10.0.4.0        0.0.0.0         255.255.252.0   U     0      0        0 eth0
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 eth0

[jly@VM-4-11-centos linux-code]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.4.11  netmask 255.255.252.0  broadcast 10.0.7.255
        inet6 fe80::5054:ff:fe9c:67a2  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:9c:67:a2  txqueuelen 1000  (Ethernet)
        RX packets 171933080  bytes 33378182758 (31.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 165679727  bytes 28636998057 (26.6 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 12503288  bytes 1870189412 (1.7 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12503288  bytes 1870189412 (1.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

この時点では宛先IP10.0.4.0があります。

1. ルーティングテーブルを走査する

2. ルーティング テーブルに設定された宛先 IP とサブネット マスクによって、データ パケットの宛先となる宛先ネットワークが決まります。

3. からの結果とターゲット ネットワーク (宛先) を比較します。

4. ルーター内でターゲット ネットワークを見つけます。このターゲット ネットワークはネクスト ホップの宛先です。

現時点では、別の宛先 IP202.10.1.2 があります。

1. 上記の手順を繰り返し、ルーティング テーブルにターゲット ネットワークがないことを確認します。

2. ルーターのネクスト ホップの宛先は、ルーターに設定されているデフォルト ゲートウェイになります。

3. Iface インターフェースを介してメッセージを送信する

注: 異なるルータにあるデータグラムのネットワーク番号は異なります。サブネット マスクはますます長くなり、データグラムの宛先ネットワークがより具体的になっていることを示しています。

3. ルーティングテーブル生成アルゴリズム

ルーティング テーブルは、ネットワーク管理者が手動で保守することも (静的ルーティング)、距離ベクトル アルゴリズム、LS アルゴリズム、ダイクストラ アルゴリズムなどのいくつかのアルゴリズム (動的ルーティング) を通じて自動的に生成することもできます。

おすすめ

転載: blog.csdn.net/gfdxx/article/details/132241708