面試題:不同網段的兩臺PC相PING,爲什麼不通?--解答

問題:兩臺不同網段的PC連到一臺cisco2950(無三層設備),爲什麼不同網段的PC無法進行通信?PC不是要廣播嗎他們連到同一臺交換機,另一臺PC應該收到了ARP廣播啊?

 

掌握cmd下的兩個命令arproute你就會明白,下面解釋一下:
首先,第一題中明確告訴你無三層設備,也就是說你連的網絡中不會有網關的存在,即使你的PC設了一個網關,但是這個網關也是無效的,同意這點嗎?畫個圖來 說:PC1--交換機--PC2PC1假設爲192.168.1.1PC2192.168.2.1,掩碼默認。那麼你在發PING請求時,應該先了 解下發出的過程。
PC
中有個ARP表,要知道PC上的數據到二層進行封裝後是要加上目的MAC的(具體請看TCP/IP協議,封裝過程中加的各種報文頭),然後根據目的 MAC地址轉發的,也就是說你的數據要想從網卡出去,就必須知道對方的MAC地址,同樣自己的PC也有個MAC地址,MAC地址和IP地址一樣,都是唯一 的標識你身份的東西(IP私網地址例外,但在某個私網中它的地址也是唯一的,如果故意設成多臺PCIP地址一樣,那會提示你有IP衝突,當然這時候也會 有新的問題,比如問你:此時是否所有的配成相同IP地址的主機都可以正常收發數據)。
   
講了點題外話,但也可以思考下:),接着回來看這個問題,那麼怎麼知道對方的MAC?答案是ARP廣播。首先PC1不知道PC2MAC地址,那麼肯定會 ARP廣播,假設PC1設了網關192.168.3.1。在CMD下用ARP -a命令查看本機ARP表,應該是什麼都沒有(如果之前PC是清空了ARP表開始做這個實驗)。ARP表項格式如下:
  Internet Address      Physical Address      Type
  192.168.216.100       00-05-45-30-1f-58     dynamic
不難看出,這個表明確指出了IP地址及與其對應的MAC地址。比如現在是PING 192.168.216.100的話,那麼查找ARP表項時就知道了其MAC地址爲00-0e-45-30-1f-58。那麼接下來就可以通過查看主機路 由表把ICMP報文從哪個接口(這裏爲PC設置的IP地址所在網卡)轉發出了。
   
PING時,首先要知道對方MAC,必然會來查找ARP表,如果有對方的MAC地址,就會在封裝報文時在目的MAC中加上從ARP表中知道的這個 MAC。如果不知道就會發ARP廣播,好,這個實驗關鍵的問題在這裏。發ARP廣播時,也要知道是從哪個接口(PC上就是網卡了)出去,那麼這時必須知道 主機路由表的情況了,主機路由表可以在CMD下用route print命令顯示出來,類似於下:
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.3.1     192.168.1.1       30
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.1.0    255.255.255.0      192.168.1.1     192.168.1.1       30
      192.168.1.1  255.255.255.255        127.0.0.1       127.0.0.1       30
    192.168.1.255  255.255.255.255      192.168.1.1     192.168.1.1       30
        224.0.0.0        240.0.0.0      192.168.1.1     192.168.1.1       30
  255.255.255.255  255.255.255.255      192.168.1.1     192.168.1.1       1
Default Gateway:       192.168.3.1
===========================================================================
Persistent Routes:
  None
這是PC1的主機路由表,默認網關爲192.168.3.1,路由表中的第一項全0的表示默認路由,即只要PC發出的數據包在路由表中找不到匹配的全部都 從這個默認路由所在接口轉發到默認網關。可以看到在這條默認路由的interface中明確指出是192.168.1.1,即192.168.1.1所在 網卡轉發到默認網關。那麼要轉發到默認網關,我就得知道默認網關的MAC地址,所以這時候又去查ARP表,一看沒有網關的MAC,所以發ARP廣播(從網 卡發出去),結果可想而知,這個網關不存在,肯定得不到網關對應的MAC地址。網關都不存在,那麼數據轉發給誰也就不知道了,所以所有的數據都在本地終 結,不向外發送。自然ICMP包是不會被髮送的。

  從上面可以看出,其實數據在發送時,應該是先查找路由表的,爲了更好地理解,把ARP放在了前頭,其實數據發送一到IP這層就開始看路由表,找出指定 的轉發接口。最後到二層成幀後要知道MAC地址,就要去查找ARP表了。這個實驗就是先看路由表,因爲不同網段所以是從遵循默認路由,轉發到默認網關。但 是要轉發到網關,也必須知道網關MAC地址,但此實驗中網關顯然是不存在,那MAC地址也不可能知道,所以ARP廣播數據(查找PC2MAC時發的 ARP廣播)根本沒處轉發,此情況下數據在本地終結不對外發送了。也就是說這個ARP廣播根本沒從你網卡這個門中走出去。
  但是有一個ARP廣播是出去的,就是查找網關的MAC時這個廣播,即192.168.3.1這個IP所對應的MAC。只要你一直在PING,那麼這個ARP廣播就會一直從網卡中發送出去。
  如果有條件可以試一下,兩臺PC連一臺二層交換機,然後用個抓包工具抓取ARP包,我是用Ethereal,非常不錯的軟件。你可以發現是隻有查找網關MACARP廣播包(即ARP請求包)從你網卡出去,其它的ARP包都沒有從這個網卡進出。
  上面這個實驗可以把默認網關去掉,再PING時是另一種結果,這個結果提示是目的主機不可達,如下:
C:\Documents and Settings\Administrator>ping 192.168.2.1 -t

Pinging 192.168.2.1 with 32 bytes of data:

Destination host unreachable.
Destination host unreachable.
爲什麼不是原來的Request timed out,因爲這時查找路由表時已經沒有默認路由這項了,即路由表中不存在此數據轉發的任何符合的條件存在,所以什麼都不用幹,直接說明要找的目的主機我沒 法找,我肯定是到達不了這臺主機的,給出了目的主機不可達的提示。而設置了網關就不一樣,至少機器知道是有個出口的,即知道東西是可以從我這裏出去的,至 少有那麼條路存在。假設現在網關存在了,比如換了個三層交換機,配上了實驗中的網關地址。這時候ARP廣播包肯定是可以出去的。
最後,綜合上面所說的,按步驟來說這個ICMP報文下來後,查找路由表,查出是從默認網關出去,那麼得先知道網關MAC,所以發查找網關對應MACARP廣播,因爲得不到這個MAC,所以數據一直就是轉發不出。這個問題其實到查找網關MAC這裏就已經基本打住了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章