網絡基本功(二十):細說ICMP和ARP緩存
轉載請在文首保留原文出處:EMC中文支持論壇https://community.emc.com/go/chinese 網絡
ICMP是網絡控制消息協議,主要用於傳遞查詢報文與差錯報文。ARP是地址解析協議,它的做用是在以太網環境下,經過3層的IP地址來找尋2層的MAC地址,獲得一張ARP緩存表。轉發數據的時候根據ARP緩存表來進行傳輸。ide
IMCP:工具
Internet操做是由路由器嚴密監控的。當路由器端處理報文時若有意外發生,事件經過ICMP報告給發送端。ICMP也用來測試Internet。ICMP信息封裝在IP報文中,最重要的一部分以下表所列:性能
DESTINATION UNREACHABLE消息用於當路由器沒法找到目標地址或當設置了DF位的報文沒法遞送,由於路徑上存在「小報文」網絡。學習
TIME EXCEEDED消息是因爲報文TTL(Time to live)計數器到達0時。該事件是報文在迴環,或計數器值設置太低的跡象。對於這一錯誤信息的聰明的應用是traceroute工具,traceroute發現從主機到目的IP地址路徑上的路由器。它向目的地發送IP包,第一次的時候,將TTL設置爲1,引起第一個路由器的Time Exceeded錯誤。這樣,第一個路由器回覆ICMP包,從而讓出發主機知道途徑的第一個路由器的信息。隨後TTL被設置爲二、三、4,...,直到到達目的主機。這樣,沿途的每一個路由器都會向出發主機發送ICMP包來彙報錯誤。traceroute將ICMP包的信息打印在屏幕上,就是接力路徑的信息了。這並非TIME EXCEEDED信息的本意,但倒是很是有用的故障排查工具。測試
PARAMETER PROBLEM信息表示報文頭字段發現了非法值。這一問題代表發送主機的IP軟件或多是途經的路由器發生了bug。優化
SOURCE QUENCH信息之前用來節制發送太多報文的主機。當主機接收到該信息,它預計將放緩發送報文。如今不多使用,由於當擁塞發生時,這類報文會起到火上澆油的做用,並且也不清楚如何作出迴應。Internet中的擁塞控制如今大部分在傳輸層完成,使用報文丟失做爲擁塞信號。ui
REDIRECT信息用於路由器發現報文被錯誤路由的時候。路由器用該信息告知發送主機更新合適的路徑。spa
主機發送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地址。
咱們首先看一下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)。用在一臺主機想要出如今一個子網上但實際上位於另外一子網的特定情形。