看清ARP 排除網路故障

來源:互聯網
上載者:User

最近,我單位碰到一個非常奇怪的問題,一台P4品牌電腦,內建英特爾網卡,一直以來用得挺好,瀏覽互連網,內網的通訊都很正常。突然有一天,發現這台電腦在瀏覽互連網時時通時斷,ping互連網上的地址時,也是通一下,斷一下,但ping內網時什麼問題也沒有,和內網的通訊也非常正常,就是和互連網通訊時有這種現象,非常令人費解。這台電腦的IP地址為192.168.24.55,防火牆的 IP地址為192.168.24.7。

檢查物理鏈路

我單位所有訪問互連網的電腦都是通過Netscreen NS25防火牆來串連的,如果說是防火牆的問題,而其他的電腦訪問互連網都挺正常,沒有時通時斷的現象。根據這台電腦ping的現象來看,問題似乎應該在下三層,而時通時斷的現象好像是典型的物理層的問題,那麼首先開始檢查鏈路。

這台電腦是接在一台Cisco三層交換器的某一個連接埠上,防火牆也是接在這台三層交換器上,在三層交換器上啟用了路由,配置上肯定沒有問題。先檢查電腦到交換器的網線,如果說這根網線有問題,那麼這台電腦與內網的通訊也應該有問題,通過對這根網線的測試證實沒有問題。防火牆到交換器的跳線就更應該沒有問題了,因為其他的電腦都沒有問題。由此可以判斷鏈路是沒有問題的,網卡會有問題嗎?肯定也不會,因為它跟內網的通訊是正常的,所以網卡肯定也沒有問題。那麼就可以排除物理層的問題了。

類比資料通訊

再看網路層,這台電腦能夠訪問互連網,但並不是完全不行,只不過有丟包而已,似乎網路層也不應該有問題,那麼所有問題似乎就集中在資料連結層了。資料連結層的問題會是哪裡呢?思考了幾天,毫無頭緒,最後只好仔細的想一想網路通訊的過程,看能不能找到問題。

假設這台電腦有一個資料包需要發送到互連網,那麼首先它會檢查目的地址與本機地址是否是在一個網路中,如果不在一個網路中,就會將資料包發送給預設閘道,本案例中目的IP為互連網地址,所以肯定不在一個網路中,所以資料包會發送給預設閘道。在這裡預設閘道為那台Cisco三層交換器,IP地址為192.168.24.10。這時192.168.24.55這台電腦會檢查原生ARP表,尋找192.168.24.10所對應的MAC地址,如果在ARP表中沒有發現相應的ARP表項,它就會發送一個ARP請求包,將它發送給網路中的所有裝置來獲得192.168.24.10的MAC地址。由於ARP請求包是以廣播方式發送的,網路中的所有裝置都會接收到這個包,然後傳送給網路層檢驗。

當Cisco三層交換器接收到這個ARP請求時,就會檢查原生IP地址和ARP請求包中的目的IP地址是否相同,如果相同,交換器就會做出ARP應答,將它的MAC地址發送給源,也就是192.168.24.55這台電腦。這台電腦收到ARP應答包後,就會將交換器的IP地址192.168.24.10和MAC地址寫入ARP表,然後將交換器的MAC地址作為目的MAC地址封裝到資料包中,並將資料包發送到交換器。交換器在收到資料包後,就會檢查目的IP是否在本網段中,發現不在本網段中,就會尋找路由表,看看有沒有到目的IP的路由條目,如果沒有,就會將資料包發送給預設路由,在本案例中這台交換器的預設路由是那台IP為192.168.24.7的防火牆。所以交換器就會發送一個ARP廣播,以獲得防火牆的MAC地址。防火牆做出ARP應答後,交換器就會將防火牆的MAC地址作為目的MAC地址封裝到資料包中,資料包就會發送到防火牆,然後防火牆就會又重複上述過程,將資料包發送給互連網上的目的地址。這一切過程都是正常的,沒有什麼問題。在電腦和交換器的ARP表中都能找到相應的ARP記錄,用tracert命令跟蹤路由也是正常的,那問題究竟在什麼地方呢?看來還得繼續分析。

過濾ARP表

在資料包到達了互連網上的目的地址之後,響應的資料包要返回到這台電腦,那麼它也應該重複前面的過程。返回資料包先到達防火牆,在防火牆的ARP表中尋找目的IP地址所對應的MAC地址,如果沒有,就會發送ARP請求,得到目的電腦的MAC地址,將電腦的IP地址和MAC地址寫入防火牆的ARP表,封裝後發送給這台電腦。這一切看起來都是正常的,但為什麼會出現時通時斷的現象呢?由這台電腦在內網都是正常的現象來判斷,在三層交換器上應該是沒有問題的,只是在訪問互連網時才出現問題,最後決定從防火牆上開始檢查。

Telnet上防火牆,檢查防火牆配置,一切正常;檢查連接埠,一切正常;檢查路由表,也是一切正常。疑惑中,似乎不知該從哪裡下手了。突然間,想起來為了防止內網使用者盜用IP地址上網,在防火牆上做了IP地址和MAC地址的綁定的!對,檢查檢查ARP表。於是輸入命令:get arp,顯示一大串ARP表的資訊,竟然全部是IP地址和MAC地址的靜態繫結的資訊,僅僅只有一條動態,那是防火牆的下一跳的IP地址和下一跳的MAC地址的資訊,就是沒有192.168.24.55的ARP表項,難道是……ARP表的問題?似乎看到了一絲希望!

於是決定先清除幾個靜態繫結的ARP表項試試,先用unset arp命令一連清除了6條靜態繫結的ARP表項,然後在那台電腦上ping互連網的地址,居然不丟包了!?困擾我幾天的問題難道就這樣解決了嗎?我簡直有點不敢相信,又讓我的同事在這台電腦上面測試一下,登入QQ,瀏覽網頁,收發郵件……,居然一切正常,再也沒有原來時通時斷的現象了!再Telnet到防火牆上,get arp一看,192.168.24.55那台電腦的ARP表項赫然在目。看來問題真的解決了!高興之餘坐下來再好好的想一想原因吧。

故障溯源

這台Netscreen NS 25的防火牆最多支援128個ARP表項,如果不進行靜態繫結,ARP表項會不斷地進行更新,逾時的自動會刪掉,所以不會出現ARP表項被佔滿的情況。而如果是靜態繫結,那麼它永遠就不會被清除,永遠會佔據一個ARP表項,留給動態使用的ARP表項空間就會越來越少,直到全部佔滿,導致我所碰到的情況。那麼既然如此,有朋友會問了,既然都佔滿了,其他的電腦就會完全不通,為什麼會出現時通時斷的現象呢?於是我將ARP表項數了一下,靜態繫結的剛好達到127個,剩下一個給防火牆的下一跳的地址佔用了,注意這個是動態,當它的更新時間到了之後,就被刪掉了,那台電腦就佔用了這個表項,於是網路就通了,因為還有其它的電腦在不斷地訪問互連網,所以192.168.24.55的ARP表項一到達更新時間馬上就會被防火牆的下一跳的地址所佔用,這時網路就不通了。其實在這時,我單位的所有機器在訪問互連網時都會出現時通時斷的現象,只不過防火牆的下一跳的地址佔用ARP表項的時間長,互連網中斷的時間在大家能夠忍受的範圍內,都沒有發覺罷了。因為防火牆的下一跳的地址佔用ARP表項的時間長,192.168.24.55的ARP表項寫不進ARP表,產生逾時,所以它不通的時間就長一些,就出現時通時斷的現象了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.