私はこれを見ます question 、ルーティングテーブルには
192.168.1.1/32 link#4 UCS 2 0 en0
openwrt.lan 46:94:fc:63:fc:7 UHLWIir 11 3610 en0 1200
192.168.1.125/32 link#4 UCS 2 0 en0
サブネットマスクが/32
であるとはどういう意味ですか。その場合、ネットワークIDはどうなりますか?上記を単一のホストと見なす場合、ホストはネットワークIDなしで存在できますか?
私の知る限り、そのネットワークのホストに割り当てられたネットワークIDとIPアドレスは2つの異なるものです。 192.168.0.0はネットワークIDであり、そのサブネットが255.255.255.0の場合、このネットワーク内のホストは192.168.0.1-192.168.0.254になります。この場合、ホストはネットワークIDなしでどのように存在することができますか?
ここで少し混乱があります。その/ 32は、(サブ)ネットワークのサイズではなく、特定のルーティングテーブルエントリが適用されるアドレスの範囲を指します。通常、2つは同じです(ネットワークまたはサブネットを1つのユニットとしてルーティングするからです)。ただし、macOSは、同じローカルネットワーク上の他のホストに対して少し異なります。あなたが引用したものの前にいくつかの行を追加しましょう:
Destination Gateway Flags Refs Use Netif Expire
default openwrt.lan UGSc 10 0 en0
...
192.168.1 link#4 UCS 2 0 en0
192.168.1.1/32 link#4 UCS 2 0 en0
openwrt.lan 46:94:fc:63:fc:7 UHLWIir 11 3610 en0 1200
192.168.1.125/32 link#4 UCS 2 0 en0
192.168.1(192.168.1.0/24の略)はen0(別名link#4)経由でルーティングされることに注意してください。ゲートウェイを介さず、インターフェース自体を介して。これは、Mac自体が使用されているネットワークです。 192.168.1.1と192.168.1.125はどちらも特定のアドレスそのネットワーク範囲内です。これらの/ 32エントリを192.168.1エントリと比較すると、基本的に冗長な重複です。彼らは同じことを言っています、ネットワーク全体ではなく特定のアドレスについてだけです。
MacOSがこれらの冗長なアドレス固有のエントリを作成する理由はわかりませんが、おそらく上記のリストで確認できる別のことに関連しています。macOSはルーティングテーブルにARPテーブルエントリをリストします。上記の "openwrt.lan"エントリ(実際には192.168.1.1であり、番号ではなく名前で表示されています)は、en0を介してMACアドレス46:94:fc:63:fc:7にルーティングされていることを示しています。
したがって、ルートリストに表示されるのは、実際のネットワークルート(「デフォルト」や192.168.1エントリなど)とホストごとのエントリ(/ 32およびMACターゲットエントリ)の混合です。
/32
のアドレス指定一般的に言えば、/32
は、ネットワークにIPv4アドレスが1つしかなく、すべてのトラフィックがそのIPv4アドレスを持つデバイスとデフォルトゲートウェイの間を直接移動することを意味します。このデバイスは、ネットワーク上の他のデバイスと通信できません。
これにはいくつかの理由が考えられます。かもしれない:
IPアドレスのネットワークID部分は、サブネットマスクによって決定されます。例えば:
/24
IPv4ネットワークのサブネットマスクは1111.1111.1111.0000
です。つまり、最初の3オクテットがネットワークIDであり、最後のオクテットがホストIDの割り当てに使用されます(通常、一部は予約済みですが、256のIDを使用できます)。/16
IPv4ネットワークのサブネットマスクは1111.1111.0000.0000
です。つまり、最初の2オクテットはネットワークIDであり、最後のオクテットはホストIDの割り当てに使用されます(通常、一部は予約済みですが、65536個のIDです)。/32
の場合、アドレスはネットワークIDとホストIDの両方であるため、これは適用されません。 /31
アドレスも、予約された0番目のアドレスがないすべてのホストIDです。
最も簡単なのは、subnet mask
とsubnet mask binary shorthand
とCIDR
に関連する記事をウェブで検索して読むことです。
subnet calculators
もご覧ください
/32
はCIDR(省略形)であり、サブネットマスクにある1の数を示します。 /32
の場合、255.255.255.255
または11111111.11111111.11111111.1111111
つまり、ネットワークの外に出るためにゲートウェイ/ルーターが必要になる前に、ネットワーク上でIPアドレスを1つだけ持つことができます。/32では、それはあなただけです。 サブネットマスクは、ネットワーク内で使用可能なIPアドレスの範囲を定義する数値
CIDR =クラスレスドメイン間ルーティング
/ 32の使用の意味:無効な設定だとは思わないが、ネットワークを事実上オフにするか、ネットワークをあなただけに制限する...ゲートウェイがない場合にのみ、自分と話すことができるそのネットマスクの外に到達するように設定します。
そのネットワークIDはどうなるか:IPアドレスは何であるかを意味し、IPアドレスは設定したとおりになります。 IPアドレスとサブネットマスク(これは処理しているものです)は2つ異なりますが、関連しています。
ホストは、ネットワークID [ipアドレス?]なしで存在できますか?:姓名またはアドレスなしで存在できますか?はい、ホストは存在できます。 existでuの意味をより明確に定義する必要があります。
あなたが見ているのはサブネットマスクではありません。これらは、ルーティングテーブルのプレフィックスの長さを示します。
ルーティングテーブルの単純な実装では、可能なすべてのIPアドレスがリストされるので、任意のIPアドレスを指定すると、その正確なアドレスを検索して、それに関連付けられているルーティング情報²を取得できます。
明らかに、ある種の圧縮が必要です。ルーティング情報の性質は、隣接するアドレスが同じ情報を使用する可能性が高いため、 基数ツリー の形式を使用してこれらを一緒に圧縮できることです。ここでは、簡単に説明します。
0〜7の数値を指定すると、次のようにバイナリで表すことができます。
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
2つのルーティングテーブルエントリがある場合、1つはアドレス0と1、もう1つはアドレス2と3用で、これらを共有するバイナリプレフィックスの下に格納できます。 .
を使用して接頭辞の末尾の「未使用」ビットを示す場合、範囲0〜1の場合は00.
、範囲2〜3の場合は01.
になります。
これを表現する標準的な方法は、範囲の最小の数値とその後に続く接頭辞の長さです。この場合、これらは0〜1の範囲では0/2
、2〜3の範囲では2/2
になります。
しかし、アドレス6のルーティング情報を検索したい場合はどうなりますか?通常、接頭辞0/0
を使用して「デフォルト」のルーティング情報のセットを追加します。つまり、すべてのビットを照合し、次に検索するときに最も具体的な情報、つまり最長の一致する接頭辞を探します。 。したがって、今説明した完全なルーティングテーブルは次のとおりです。
0/2 00. Matches addresses 1 and 2.
2/2 01. Matches addresses 3 and 4.
0/0 ... Matches any address.
サブネットマスクはプレフィックスを使用して同じ方法で記述できるため、このスキームがよく使用されます。ただし、このスキームがサブネットの記述に使用できるからといって、サブネットの記述にのみが使用されることを意味するわけではないことに注意してください。
ルーティングテーブルプレフィックスがサブネットではない例として、2つのネットワークインターフェイスを同じネットワークに接続することができます(例:192.168.2.0/24)。 (これは、2つの個別のネットワークカードをそれぞれ独自のケーブルで同じスイッチに接続することによって実装できます。)次に、2つのルーティングテーブルエントリを使用して、2つのインターフェイス間で発信トラフィックを「分散」するようにルーティングテーブルを設定できます。
192.168.2.0/25 eth0 # range ...2.0 to ...2.127
192.168.2.128/25 eth1 # range ...2.128 to ...2.255
これにより、そのネットワークのアドレス0〜127宛てのパケットはeth0
から送信されますが、そのネットワークのアドレス128〜255宛てのパケットはeth1
から送信されます。これはこれを行うには不適切な方法ですが(ここでは説明しません)、ルーティングプレフィックスとネットワークアドレスが一致しない場合があることを示しています。
¹ ルーティングテーブル に関するWikipediaの記事では、残念ながら、プレフィックスフィールドには「ネットワークID」が保持されているとあります。これはルーティングテーブルの特定の実装では当てはまるかもしれませんが、提供する例とこの回答の後の私の例の両方に見られるように、一般的なケースでは常にネットワークIDとは限りません。
² このルーティング情報には通常、使用するインターフェイス、そのインターフェイスで接続するルーター、存在する場合は、そのインターフェイスを介して直接到達できるホストのホストのMACアドレス、ホストにパケットがある場合に送信元アドレスなどの情報が含まれます。複数の送信元アドレス、セキュリティ情報など。さまざまなデータが存在する可能性がありますが、ここではデータセット自体の内容ではなく、特定のアドレスの正しいデータセットを検索する方法についてのみ説明しているため、この説明の目的には重要ではありません。 。