網路傳輸時通過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包到達了目的地。


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

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

詳細請參見:
TCP/IP 協議到底在講什麼?


你要給別人寄快遞 還要知道快遞怎麼走嗎?


先來定義一下網路層。
我看到過最好的網路層的定義,就是虛擬互聯網。
為什麼叫虛擬互聯網呢? 從數據鏈路層的觀點看,不同的區域網內部運行的協議等因素可能有所不同,那麼我們就抽象出一層,用一個統一的協議將這些可能各不相同的區域網聯繫在一起。

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

虛擬互聯網就相當於網路的網路。


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

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

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

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


想想你寄信的過程,你只知道最終收信人的地址,中間的眾多周轉分揀庫房地址,你需要知道嗎


從前有個姑娘想給千里之外相好的寄情書,只知道他叫什麼名字和村子的名字,不知道路怎麼走怎麼寄給他,整天很憂鬱,隔壁老王看出他不開心,決定找到他相好的,他先問了本村有叫淡聖苟,很遺憾沒有,他就找到隔壁村子村長告訴他說:你先問下你村子裡有叫淡聖苟的,如果有你告訴我,如果沒有你就問下個村子的村長同樣的問題。就這樣在問到第250個村子的時候找到了姑娘相好的,消息傳到老王這裡,老王高興的告訴了姑娘,把信寄了出去。最後姑娘嫁給了老王。完!


小夥子對ARP不太理解


路由器用報文的目的IP查轉發表,就能得到下一跳的IP,用下一跳的IP查MAC表就能知道下一跳的mac。
那麼轉發表是怎麼生成的呢?來自路由表,而路由表是通過IGP BGP之類的路由協議得來的端到端的路由。如果MAC表中沒有對應的IP的表項怎麼辦呢,可以通過ARP協議學習到。


誇網段的,根據路由表查下一個路由器節點的ip,根據這個ip利用arp協議可以知道其mac地址。然後二層的幀里目的mac 就是寫這個mac ,但目的ip永遠是不變的。
其中路由表可以靜態配置也可以通過rip isis bgp 等動態協議學習到。


本地網段的,直接根據目的ip 請求到mac ,交換機接收到數據後,再根據交換機上的mac 表就知道從哪個埠上把數據發過去。交換機會根據各個埠接收數據幀里的mac 來生成mac 表。


你的數據打包後加上對方ip,你自己的網路設默認網關的話,這個數據包直接向網關發,沒設網關就往子網廣播,然後網路里有一個網關,可能是帶路由的交換機或路由器,根據路由表發往下一個躍點,如果目標ip不在路由表會繼續發往默認路由,在網路運營商那裡有路由器把你IP的路徑算出來。
這個過程中設備與設備之間通信基於mac地址或者廣播,數據包怎麼走基於目標ip和路由器的路由表。
數據包會被多次打包拆包,但你的數據、源ip、目標ip會一直在。


去買本《計算機網路》你就懂了,中間有很多個路由器,根據一定的演算法確定下一跳,IP是存在路由表裡的,Mac是用ARP協議獲取的


工作是搞ip定位的。
其中一個過程是路由探測,有一個linux命令可以traceroute,可以獲得你想 要的。
另外老總讓看的一篇論文,大概是有個公益項目,能讓你從骨幹路由中進行ping,traceroute之類的基礎命令。


路由器維護一個路由表,裡面儲存了目的IP地址到下一跳IP地址的映射,並根據ARP協議確定下一跳的MAC地址,這樣一個個路由器接力傳輸報文就可以到達最終的接收方了。根據網路類型不同,路由表可以手工配置或學習生成。


跟題主有同樣的疑惑,感覺樓上們的答案都沒說到點子上啊。。。

自力更生去看TCP/IP吧。。


當數據包到達一個路由器的時候,你可以簡單的理解為,根據路由錶轉發項。 得到下一跳的IP地址然後根據Mac地址錶轉發過去~ 依次循環


arp 逐步解析


同一個網路的gateway/router是可見的。 交給他們去辦好了


相鄰兩台設備(一般是屬於同一個網段)之間的通信,一般是二層協議(ip+mac arp協議),誇網段的話,就要(三層通信了),通過路由!


通過網關路由器和ARP


traceroute 最終IP即可


推薦閱讀:

為什麼每台電腦都要設置子網掩碼?
一區域網內有 5 台電腦,其中一台是固定 IP,經常會上不去網,這是為什麼?
黑客攻擊某台機器時,隱藏自己的IP的方法有幾種?相比較哪種更難以追蹤?
如何正確理解通配符掩碼?
虛擬機使用NAT連接網路,數據流量是否會攜帶物理機的信息?

TAG:計算機網路 | IP地址 | 介質訪問控制層MAC | 網路協議 |