
有人告訴我,沒有相應子網路遮罩的公共 IP 位址是沒有意義的,因為人們不知道如何將網路 ID 與主機 ID 分開,這對我來說完全有意義。
然而,大多數時候我看到的 ip 位址(DNS、findmyip.com 等)只是關於 ip,沒有 cidr 號碼。例如,我剛剛向一個網站提供了一個 IP 位址,它給了我正確的網域。
我缺什麼?我猜還有一些其他協定只能與 IP 位址一起使用,但我還沒有聽說過。
如果我的問題顯示缺乏對網路如何運作的基本了解,資源將非常感激。我是一名自學所有這些東西的開發人員,除了 5 分鐘長的教程或 1000 多本晦澀難懂的書籍(嗨 TCP 圖解),我找不到我正在尋找的材料。
答案1
上面的兩個答案都是正確的 - 這是一個更詳細的非技術答案 -
電腦只需要知道 IP 位址是否屬於直接連接到它的電腦 - 並且透過同一「lan」中的集線器/交換器/wifi 的電腦被視為直接連接。
對於其他任何事情,電腦只需要知道下一步將封包傳送到哪裡 - 即路由器的位址(路由器又知道下一步將封包傳送到哪裡)。當您執行追蹤路由時,您會看到這條路徑。
子網路遮罩用於對直接連接的計算機進行分組 - 因此,對於未直接連接的計算機,不需要子網路遮罩即可到達它們。
值得注意的是,防火牆或其他軟體也可以使用子網路遮罩來指定要以相同方式處理的一組IP 位址- 這就是為什麼它們有時與LAN 外部相關的原因- 但對於通常在Internet 上進行通訊而言則不是必需的。
答案2
所有使用 TCP/IP 與其他系統通訊的系統都會查閱由系統維護的本機「轉送資訊庫」或本機路由表。
路由表條目基本上如下所示:
目標網路/網關/目標子網路遮罩/度量
這是我目前的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 eth2
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 eth2
172.16.160.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth2
192.168.87.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
每次系統想要將流量傳送到某個 IP 時,都會搜尋此表。如果它找到與子網遮罩匹配且適合的目標網絡,則會從由 標識的網絡適配器發送流量我面對。
所有這些網路介面卡都是「直接連接」的 - 這就是為什麼您會看到網關為 0.0.0.0。這意味著,例如,如果系統想要將某些內容傳送到 192.168.2.80,它可以透過介面 eth2 直接將其傳送到 192.168.2.80。
但是,由於子網路遮罩的原因,192.168.87.80 不會透過 eth2 出去,而是透過 vmnet1 出去。
如果一個 IP 適合兩個條目,則使用 CIDR 子網路遮罩較大的一個(「更具體的一個」)。如果有兩個具有相同的子網掩碼,則使用該度量來打破平局,如果到了這個時候,系統可能會選擇一個並堅持使用它或在它們之間進行負載平衡。
例如
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth2
192.168.2.0 0.0.0.0 255.255.255.240 U 100 0 0 ethX
255.255.255.240 是 CIDR /28,255.255.255.0 是 CIDR /24。因此,如果這兩個條目存在,則發送到 192.168.2.1 的內容將從介面 ethX 發出,但發送到 192.168.2.241 的內容將從介面 eth2 發出。
如果沒有任何配對怎麼辦?然後使用預設網關。請注意,它具有“最低”子網遮罩 0.0.0.0(斜線 /0)。
這就是子網路的用途。告訴系統哪個介面可以存取哪些網路。您的系統在發送流量時使用它(以確定互聯網和本地網路之間的差異),並且路由器使用它來轉送流量。
在這些情況之外,不需要子網路遮罩。基本上不需要經過網路路由層。 HTTP是應用層。
答案3
子網路遮罩對於主機本身和路由設備很有用。
您的 PC 不需要知道遠端裝置的子網路遮罩,它只需要知道位址並與它的位址進行比較自己的地址和它的自己的子網路遮罩它會知道該位址是本地位址還是遠端位址。
如果是本地,則封包將直接發送,如果是遠端,封包將發送到預設網關。