關於IP網段間互訪的問題 路由是根本

2021-09-30 05:17:53 字數 3366 閱讀 2655

文章出處:

之所以ip網段間可以互相訪問,完全靠的就是路由,因此路由是ip通訊的根本。ip是機器可以進行通訊的資格證書,而路由決定該機器的資料可以到哪以及如何到,沒有路由就不可能有ip網路。ip其實就是乙個標號,而ip路由就是精心設計的基於這種標號的定址機制,這種邏輯上的解決方案使整個世界連線在了一起從而成為乙個整體。前面說過,ip提供了乙個邏輯的物理層,而傳輸層就是邏輯上的鏈路層,那麼整個ip網路就是乙個邏輯網路,這個邏輯網路絲毫不會在意下面的物理網路,也就是說不會在意下面的鏈路層和物理層。邏輯網路和下面的物理網路比如乙太網建立關係的時候,就是給網絡卡分配ip位址的時候,畢竟ip網路只是乙個邏輯意義上的網路,想要實際傳輸資料還是要靠物理網路承載,將ip位址分配給網絡卡就是表示需要這個網絡卡作為ip資料傳輸的載體,就是需要這個網絡卡傳輸到這個ip或是從這個ip發出的資料,網絡卡只是乙個承載層,當然可以承載多個ip的資料,就好比一輛卡車可以裝載多種貨物一樣,乙個人也可以身兼數職,這裡人是物理概念,而職位是邏輯概念,職位給了乙個人,這個人只是這個職位行為的執行者,具體如何執行還要看職位本身的指示,因此將ip位址給了網絡卡,網絡卡不知道如何傳輸ip資料,網絡卡的作用再次重申,就是乙個承載方,它只提供物理連線的兩點傳輸機制而已,記住是物理相連的兩點,如果想讓一切工作起來,那麼就要靠路由,路由就是ip邏輯網路這個「職位」的規則,它指示如何傳輸資料

原則上你可以給一塊網絡卡分配任意數量的ip,然後為這些ip位址指定路由就可以了,在這塊網絡卡上你只能指示往哪個目的ip位址的資料往哪個網口走,給這塊網絡卡分配多個ip位址意味著這些ip可以被尋到,也就是說有資料是以這些ip位址為目的的,因此你必須保證在別的機器或者路由器上配置指向這些ip的路由,只有這樣,資料才能有去有回來往暢通。每個路由記錄會指示資料怎麼走,走的時候還是要一步一步走的,一步一步走就是通過底層的物理承載網路走的。只要你指定了路由,那麼資料就可以通訊,邏輯ip網路和物理的鏈路層網路的關係除了承載與被承載之外其實並不大,也就是說並不是乙個物理網路的ip位址也必須是乙個網段的。舉個例子:

將一台單網絡卡的linux機器的m1的eth0配置如下兩個ip(ip addr add):

eth0:

inet  192.168.0.152/24  brd  192.168.0.255  scope  global  eth0

ient  172.16.0.5/32  scope  global  eht0

然後將另一台單網絡卡的linux機器m2的eth0配置如下的乙個ip:

eth0:

inet  10.2.2.5/24  brd  10.2.2.255  scope  global  eht0

保證兩台機器在乙個物理乙太網即可,然後在m2上ping 192.168.0.152不通,ping 172.16.0.5也不通,難道是因為乙個物理網路的ip也必須在乙個邏輯網段嗎?根本不是那麼回事,記住,ip邏輯網路中最重要的是路由,只要有路由就能通,和物理網路沒有關係,於是為m2配置如下的路由:

172.16.0.5/32  dev  eht0  scope  link

這條路由的意義是往ip位址172.16.0.5/24的資料請走eth0,現在再試試ping  172.16.0.5,還是不行,是不是有啥問題了呢?一點問題也沒有,首先說說物理網路的行為,ip邏輯網路與物理網路還有乙個相聯絡的地方就是arp機制,如果路由配置好了,那麼在路由指導下進行實際傳輸,但是實際傳輸是在物理網路進行的,因此必須要有實體地址,這就是arp的作用。以太物理網路是廣播網路,因此肯定可以隨意傳輸資料的,我們不是已經有了去往目的位址172.16.0.5的路由了嗎?那麼在訪問172.16.0.5之前首先需要172.16.0.5的mac實體地址,因為我們是在乙個物理網路內的,因此m2的網絡卡就開始了詢問:「誰的ip位址是172.16.0.5,請把你的mac位址告訴我,我的位址是10.2.2.5。」然後把這條arp詢問廣播出去,因為是廣播所有的機器都接收到這個詢問,m1擁有172.16.0.5,因此m1做出回答,然後將它的mac位址打包發給10.2.2.5,可是出事了,它不知道怎麼到10.2.2.5啊,於是mac位址便送不到10.2.2.5,於是直接阻礙了物理傳輸,於是就ping不通了,現在已經找到問題了,於是解決問題,就是很簡單的給m1配置到10.2.2.5的路由:

10.2.2.5/32  dev  eth0  scope  link

做完了以後,再在m2上試試ping 172.16.0.5,肯定通了。

因此可以看出邏輯網路是否連通和物理網路的結構沒有關係,只和路由器有關,即使剛才哪個arp引起的邏輯網路不同的問題也和路由有關,只要有路由,一切自由連通。如果物理網路是不同的網路,比如不同的乙太網,那麼道理一樣,只不過情況更複雜罷了,本質還是建立路由。既然可以為網絡卡指定ip位址,那麼可不可以說ip屬於網絡卡呢?不能,網絡卡只是傳輸媒介罷了,ip是屬於主機的,ip是提供給應用的乙個邏輯概念,並不是網絡卡的內秉屬性,還是以卡車為例,車上的貨物是物主的而不是卡車的,以人的職位為例,職位是屬於國家機器的而不是屬於人的,人只是它的執行**,這個人不幹了還可以換人,但是該職位永遠屬於國家機器。

乙個古老的問題就是路由器和交換機的區別,按照這種邏輯網路和物理網路的理解,路由器就是指示ip資料如何走的機器,交換機指導物理資料幀怎麼走,它只能提供物理連線的兩點之間的物理傳輸機制,其實路由就是乙個邏輯上的交換機,它的層次更高罷了。如果把路由當作定址來理解的話,物理網路也有乙個路由機制,交換機中也有乙個「路由表」,那就是交換機學習到的mac位址和埠的對映關係。雖然路由需要人為指定,但是有一種路由器確是在為網絡卡指定ip時自動生成的,這就是鏈路層發現的路由,該路由指導了和指定ip為乙個網段的資料報該怎麼走。規範將這個「顯然」的事實作為一條自動路由生成了,規範將ip位址存在相同部分的主機作為乙個ip網段,一般的,導線直接相連的兩個網口是乙個網段的,事實上這已經成了約定,於是協議就會認為這個網口的那一端一定和本網口指定的ip是乙個網段的,於是就有了鏈路層自動發現路由一說,含義就是:到和本網口同一ip網段的資料一定從本網口出去!這初看起來就是事實,難道不是嗎?我們不都是這麼配置網路的嗎?很不幸,這不是事實。看看我剛才舉的那個例子吧,那麼混亂的配置,幾乎沒有在同一網段的位址,竟然ping通了!這就印證了另乙個真正的事實,就是ip網路的連通在於路由而不是別的,協議自動生成的那條鏈路層路由其實是為了方便而不是真的必要,比如把上述混亂配置的例子中的鏈路層自動路由刪除,照樣可以ping通,其實那種混亂的配置下,我們根本就不用自動的鏈路層路由,那條路由是為常規配置準備的。仔細看看鏈路層路由,它實際上是借用了物理網路的方便,因為常規上盡量把乙個ip邏輯網段對映到乙個物理網段,所以可以借用這個常規的假設,因此叫做鏈路層路由。真正純粹意義的ip邏輯網和物理網是沒有關係的,不應該有上述的網段一致對映,但是規範中建議了那種對映。上面的混亂搭配的例子才是真正理論上的ip邏輯網路,可是很不實用,但是對於理解概念十分有用。

vlan間路由的問題

以下是某個在我部落格中提出的問題 配置環境引數 1.switch a 為三層交換機 2.pc1 連線到switch a 的乙太網埠 e0 1 屬於vlan10 3.pc2 連線到switch a 的乙太網埠 e0 2 屬於vlan20 4.route a 連線到switch a 的乙太網埠 e0 2...

家庭中很好用的兩個路由器跨網段互訪

首先你必須要有兩個任意路由器,其次這兩個連線方式有兩種 無非兩種,routera lan out 口連線routerb wan in口或者lan in口。在此,僅贅述接入routerb的wan口設定 3.因為我的routera是自動保留所提供的ip,以便下一次裝置接入仍然使用原ip,所以我的pc1機...

django路由 關於路由最後斜槓的問題

路由檔案中配置如下 urlpatterns path demo views.demo1 啟動服務,這時候訪問位址 正常訪問 這時候訪問位址 會報錯404 因為這裡必須嚴格匹配,在路由中配置的結尾沒有 如果需要訪問該位址的話,結尾也不能帶有斜槓 路由檔案中配置如下 urlpatterns path d...