網路傳輸時透過ip可知下一個的mac地址,但我最開始只知道最終的ip那麼中途的ip和mac怎麼確定呢?用心閣2017-01-22 12:20:14

你的計算機和目標計算機並不是在一個乙太網中,而是透過一系列路由器連線起來的,路由器就是來決定中途經過哪些路由器,路由器之間會根據路由協議交換關於路徑的資訊,從而建立起路由網路。你只需要知道你最近的路由器地址,一個路由器只需要知道下一跳路由器的mac地址,而最後一個路由器知道目標ip的mac地址。

就好比你在北京要給上海某處寄信,你只需要知道你最近的郵局怎麼走,而從北京某郵局到上海某郵局可能經過北京郵件處理中心和上海郵件處理中心,北京郵件處理中心只需知道把上海市的郵件發給上海郵件處理中心就好,不用關心哪個區哪個郵局。最終收信人住址怎麼走只有上海當地郵局的郵遞員才感興趣。

詳細請參見:

TCP/IP 協議到底在講什麼?

網路傳輸時透過ip可知下一個的mac地址,但我最開始只知道最終的ip那麼中途的ip和mac怎麼確定呢?車小胖2017-01-22 16:11:26

楊貴妃愛吃荔枝,唐明皇寵愛貴妃,於是命令大臣每天從千里之外的嶺南運送新鮮的荔枝到京城長安。

網路傳輸時透過ip可知下一個的mac地址,但我最開始只知道最終的ip那麼中途的ip和mac怎麼確定呢?

網路傳輸時透過ip可知下一個的mac地址,但我最開始只知道最終的ip那麼中途的ip和mac怎麼確定呢?

這是一個並不輕鬆的任務,任務是這樣完成的:

假設嶺南與長安有15個驛站,編號為1、2 …15,每個驛站都有士兵與馬匹等待,如果有士兵騎馬攜帶發往長安的荔枝到達本驛站,將換一匹馬與士兵繼續接力。

士兵不知道如何到達長安,但卻知道下一個驛站更靠近長安

,比如1號驛站計程車兵,會朝著2號(1號驛站的下一跳)驛站騎行,2號驛站計程車兵,會朝著3號驛站騎行,以此類推,最終荔枝透過15個驛站接力的方式,到達了目的地。

設計IP路由協議的工程師的靈感,可能也來源於楊貴妃吃荔枝的故事,因為其思路是完全一致的。

源主機知道IP包的目的地(Destination IP,比如

上文裡的目的地長安

)是哪裡,但往往並不知道IP包將要經過哪些路由器(驛站),以及經過多少個路由器(驛站),但是有一點是知道的,其路由表裡肯定有一個匹配的表相,匹配到目的IP,否則就無法確定下一個驛站在哪裡。比如目的IP= 1。1。1。1,應該在路由表裡有類似的表相:

1。1。1。1/32 next-hop xxxx

1。1。1。1/24 next-hop xxxx

1。1。1。1/16 next-hop xxxx

1。1。1。1/8 next-hop xxxx

0.0.0.0 0.0.0.0 next-hop xxxx (預設閘道器)

以上是5條路由,都會匹配到目的地1。1。1。1,但是依據最長匹配原則,會優先選擇第一條路由;如果第一條路由不存在,那就匹配第二條路由,以此類推。

大多數的主機,可能只有最後一條預設路由,它會匹配任何目的地,當然也包括目的地1。1。1。1,一旦匹配到路由表相,就會得到其下一跳IP(比如這裡的預設閘道器)。

如果和預設閘道器是乙太網連線,則需要透過ARP廣播來發現對方的MAC地址(

解決乙太網頭部的Destination MAC

)。

如果是PPP/HDLC,則不需要,因為PPP/HDLC是P2P(點對點)連線,PPP / HDLC 頭部沒有地址資訊需要填充。

如果是ATM/ Frame Relay ,則直接使用指向預設閘道器的介面下的靜態地址,比如ATM的PVC (VPI/VCI),或FR的DLCI。

以上解決了通往預設閘道器(下一跳)的資料鏈路層的地址資訊,於是就把IP包發給預設閘道器(下一跳/驛站),當IP包到達下一個驛站時,也依照上面的步驟,先尋找下一跳,再解析出下一跳的資料鏈路層MAC,以此邏輯,最終IP包到達了目的地。

網路傳輸時透過ip可知下一個的mac地址,但我最開始只知道最終的ip那麼中途的ip和mac怎麼確定呢?安陽2017-01-22 17:48:13

先來定義一下網路層。

我看到過最好的網路層的定義,就是虛擬網際網路。

為什麼叫虛擬網際網路呢? 從資料鏈路層的觀點看,不同的區域網內部執行的協議等因素可能有所不同,那麼我們就抽象出一層,用一個統一的協議將這些可能各不相同的區域網聯絡在一起。

更簡單的理解,我們在定義計算機網路的時候,是說計算機網路是一個自治、互聯的計算機的集合。

那麼因特網呢,就是網路的網路。

虛擬網際網路就相當於網路的網路。

然後再來看這個問題。

1、一個分組想要在網路層進行傳輸,最重要的一個點就是定位問題——-ip地址,我們暫且不用管這裡的地址是有類地址還是無類地址,一個分組在網路層中轉發流程的第一步總是從目的(dest)ip中提取出網路號,從網路號中定位這個目的ip所屬的區域網(也就是說虛擬網際網路將每個連在虛擬網本身的區域網給編號了,方便定位)。

2、某個路由在提取出網路號之後,就要判斷這個網路號所代表的區域網是否與該路由器相連(透過查詢路由表),如果相連就可以利用arp協議將ip地址直接轉換成mac地址,然後依靠資料鏈路層和物理層直接進行傳輸。

3、但是如果這個網路號所代表的區域網與這個路由器不直接連線,那麼這個分組就要在抽象出來的虛擬網際網路中繼續傳輸,這裡還是要用到路由表,路由表中記錄的是從本地路由的哪個接口出去,能夠更快的找到相應的區域網(這個時候你可能還會出現一個問題,就是路由表的記錄是怎麼來的?),直到找到對應的區域網為止(當然也會出現找不到的情況,這個時候就會利用icmp協議報錯)

雖然從思維上,這樣就好像抽象出了一個層,叫做網路的網路,但是在物理上,他們還是基於路由(或者能夠實現路由轉發功能的器件)來實現的。所以在網路的網路中還是會涉及到arp協議。

網路傳輸時透過ip可知下一個的mac地址,但我最開始只知道最終的ip那麼中途的ip和mac怎麼確定呢?Duke2017-01-22 18:19:28

記住簡單的一句話就好:報文源目的IP始終不變,MAC過一跳變一次。

在此不考慮nat。

網路傳輸時透過ip可知下一個的mac地址,但我最開始只知道最終的ip那麼中途的ip和mac怎麼確定呢?tracy要開心2017-01-23 04:36:10

路由器用報文的目的IP查轉發表,就能得到下一跳的IP,用下一跳的IP查MAC表就能知道下一跳的mac。

那麼轉發表是怎麼生成的呢?來自路由表,而路由表是透過IGP BGP之類的路由協議得來的端到端的路由。如果MAC表中沒有對應的IP的表項怎麼辦呢,可以透過ARP協議學習到。