網絡基本功(二十):細說ICMP和ARP

網絡基本功(二十):細說ICMP和ARP

 

轉載請在文首保留原文出處:EMC中文支持論壇https://community.emc.com/go/chinese 

 

介紹

 

ICMP是網絡控制消息協議,主要用於傳遞查詢報文與差錯報文。ARP是地址解析協議,它的作用是在以太網環境下,通過3層的IP地址來找尋2層的MAC地址,得到一張ARP緩存表。轉發數據的時候根據ARP緩存表來進行傳輸。


更多信息

 

IMCP:

 

Internet操作是由路由器嚴密監控的。當路由器端處理報文時如有意外發生,事件通過ICMP報告給發送端。ICMP也用來測試Internet。ICMP信息封裝在IP報文中,最重要的一部分如下表所列:

p_w_picpath002.png

 

DESTINATION UNREACHABLE消息用於當路由器無法找到目標地址或當設置了DF位的報文無法遞送,因爲路徑上存在“小報文”網絡。

 

TIME EXCEEDED消息是由於報文TTL(Time to live)計數器到達0時。該事件是報文在迴環,或計數器值設置過低的跡象。對於這一錯誤信息的聰明的應用是traceroute工具,traceroute發現從主機到目的IP地址路徑上的路由器。它向目的地發送IP包,第一次的時候,將TTL設置爲1,引發第一個路由器的Time Exceeded錯誤。這樣,第一個路由器回覆ICMP包,從而讓出發主機知道途徑的第一個路由器的信息。隨後TTL被設置爲2、3、4,...,直到到達目的主機。這樣,沿途的每個路由器都會向出發主機發送ICMP包來彙報錯誤。traceroute將ICMP包的信息打印在屏幕上,就是接力路徑的信息了。這並不是TIME EXCEEDED信息的本意,但卻是非常有用的故障排查工具。

 

PARAMETER PROBLEM信息表示報文頭字段發現了非法值。這一問題表明發送主機的IP軟件或可能是途經的路由器發生了bug。

 

SOURCE QUENCH信息以前用來節制發送太多報文的主機。當主機接收到該信息,它預計將放緩發送報文。現在很少使用,因爲當擁塞發生時,這類報文會起到火上澆油的作用,而且也不清楚如何做出迴應。Internet中的擁塞控制現在大部分在傳輸層完成,使用報文丟失作爲擁塞信號。

 

REDIRECT信息用於路由器發現報文被錯誤路由的時候。路由器用該信息告知發送主機更新合適的路徑。

 

主機發送ECHO和ECHO REPLY信息以查看目前的目的地址是否可到達或是否alive。接收到ECHO信息之後,目的地址預計會發回一條ECHO REPLY信息。這些信息用在ping工具中來查看主機是否up以及是否掛在網上。

 

TIMESTAMP REQUEST和TIME REPLY信息是類似的,除了信息的到達時間以及回覆的離開時間是記錄在回覆中的。這一工具可用於衡量網絡性能。

 

ROUTER ADVERTISEMENT和ROUTER SOLICITATION信息用於主機發現附近的路由器。主機需要從至少一個路由器學習IP地址來發送報文。

 

ARP:

 

儘管Internet上的每臺設備都有一個或多個IP地址,僅用這些地址仍然不能發送報文。數據鏈路層網卡如以太網卡不理解Internet地址。對於以太網,每一個以太網卡都有一個48bit的以太網地址。網卡基於這48bit以太網地址收發幀,網卡與32bit IP地址沒有關係。

從而產生一個問題:IP地址是如何映射到數據鏈路層地址,如以太網地址的呢?解釋這一問題,讓我們以下圖爲例:一個小型校園安裝了兩個/24網絡。其中一個(CS)是交換以太網,位於Computer Science部門。網絡地址爲192.32.65.0/24。另一個局域網(EE)也是一個交換以太網,位於Electrical Engineering部門網絡地址爲192.32.63.0/24。這兩個局域網通過IP路由器互連。以太網上的各臺設備以及路由器各接口都有唯一的以太網地址,標籤從E1到E6,以及CS或EE網絡上唯一的IP地址。

p_w_picpath003.jpg

我們首先看一下host 1的用戶如何向CS上的host 2用戶發送報文。首先假設發送方知道目標接收方的名字,如xx.cs.uni.edu。第一步是查找host 2的IP地址。這一查找是通過DNS來完成的,DNS之後返回host 2的IP地址(192.32.65.5)。

 

host 1的上層軟件將目標地址192.32.65.5植入報文中並交給IP軟件發送。IP軟件查看該地址發現目標地址在CS網絡上(即本地網絡)。但是,還需要查找目的以太網地址來發送幀。一種解決方式是通過系統配置文件來將IP地址映射到以太網地址。當然這種方式是可能的,但對於有上千臺設備的大型企業來說要保證這些文件都是更新狀態是一項耗時的工作。

 

比較好的方式是host 1發送一個廣播報文到以太網詢問誰有IP地址192.32.65.5。廣播報文到達每一個CS網上的設備,各臺設備檢查自己的IP地址。只有host 2會回覆自己的以太網地址E2。通過這種方式host 1學習到IP地址192.32.65.5的以太網地址E2。這種提問和回覆的協議就稱爲ARP(Address Resolution Protocol)。使用ARP的一個優勢是它的簡單性。系統管理員無需指定各臺設備的IP地址以及子網掩碼,ARP自動完成剩下的工作。

 

此時,host 1上面的IP軟件構造以太網地址E2的報文,將IP報文(目的地址192.32.65.5)放在載荷部分。host 2的以太網卡檢測到該幀,識別目標地址是自己,把它撈出來,產生一箇中斷。以太網驅動從載荷中將IP報文提取出來並傳遞給IP軟件,軟件查看到此報文地址正確並予以處理。

 

提高ARP效率有很多種優化方法。運行ARP的設備將其結果放入緩存之中,以備短期內需要再次連接同一臺設備。下一次可在設備的緩存中找到映射結果,就無需第二次廣播。很多情況下,host 2需要發送一個回覆,迫使它運行ARP來確定發送方的以太網地址。在host 1的ARP報文中包含IP到Ethernet映射可避免這一ARP廣播。當ARP廣播到達host 2,連接對(192.32.65.7, E1)進入host 2的ARP緩存。實際上,以太網上的所有設備都可以將這一映射放入自己的ARP緩存中。

 

爲了讓映射能夠更改,例如,當配置一臺主機使用心得IP地址(但保留舊的以太網地址),幾秒鐘過後ARP緩存中的表項會過期。爲了保持緩存信息更新並且優化性能,比較好的方法是每一臺設備在配置時都廣播它的映射信息。廣播通常以ARP查找自己的IP地址的方式來完成。應當不會收到響應,但該廣播的副作用是使每一臺設備的ARP緩存都得到更新。這稱爲免費ARP(gratuitous ARP)。如果收到回覆(不期望地),則兩臺設備指定了同一IP地址。網絡管理員需解決這一問題才能使兩臺設備共同使用網絡。

 

再看上圖,假設host 1想要向網絡EE上的host 4(192.32.63.8)發送報文。host 1會發現目標IP地址不在CS網絡上,它會將所有這類遠端網絡數據流發送給路由器,也稱爲默認網關(default gateway)。習慣上,默認網關是網絡上的最低地址(198.31.65.1)。要發送幀給路由器,host 1還是必須知道路由器接口在CS網絡上的以太網地址。路由器通過發送198.31.65.1的ARP廣播來學習到E3地址,然後發送幀。路由器在Internet路徑上將報文從一個路由器發送到下一個使用相同的查找機制。

 

路由器的以太網卡收到此幀後將報文發給IP軟件。從網絡掩碼中得知該報文應當發送到EE。如果路由器不知道host 4的以太網地址,就會再次使用ARP。上圖列出了在CS和EE子網上觀察到的幀中出現的源和目的以太網及IP地址。發現到各子網中以太網地址改變而IP地址保持不變(因爲IP地址指明跨越所有互連子網的終點)。

 

從host 1發送報文到host 4,而host 1不知道host 4位於不同網絡也是可能的。解決方法是讓CS子網上的路由器回覆查找host 4的ARP並將自己的以太網地址E3作爲回覆內容。由於host 4無法看到ARP請求(路由器不會轉發以太網廣播)所以無法直接回復。路由器之後會接收發往192.32.63.8的幀並轉發到EE子網。這一方式稱爲代理ARP(proxy ARP)。用在一臺主機想要出現在一個子網上但實際上位於另一子網的特定情形。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章