區域網中ARP廣播,為什麼只有在ping通之後才能看到另外一台主機?

近來遇到一些區域網中的問題,百思不得其解,還請大牛們幫忙解釋下,多謝~

PS:區域網中沒有交換機,也沒有網路的二三層隔離,網路環境就是普通的家用無線路由器。

比如,我直接輸入arp -a或者arp -n時,顯示出來的只有網關的MAC地址,其他區域網中存活的主機均看不到。如下圖:

但是我知道另外一台PC的IP地址是192.168.1.10,所以我ping了一下這台PC的MAC地址。ping通之後再進行arp -a或者arp -v,就能看到這台PC的MAC地址了。如下圖:

我想知道這是為什麼?ARP不是廣播的么?如果某個IP地址存活的話,這台主機就會響應的嗎?為什麼只有在ping通之後,arp才能看得到呢?

還有一點比較奇怪的是,我用不同的掃描工具進行掃描,為什麼得到的arp結果卻是不一樣的?而且有時候某些存活的主機還不能被掃描到?是因為本端或者對端開啟了防火牆之類的原因嗎?

請各位大牛幫忙解答一下心中的疑問,謝謝啦!


看到愛學習的小同學,無論多晚都要回答一下。

沒錯,ARP是廣播,廣播域里每台主機都可以接收192.168.1.10 的ARP Reply,並緩存其MAC地址。在這裡網關、你的主機都會緩存在 ARP cache table 里,通過ARP -a 可以顯示這個緩存表。

但是由於你的主機與192.168.1.10 一直沒有通信,所以很快這個緩存表就timeout了,所以就從 ARP cache 里消失了。

由於192.168.1.10 可能和網關一直有IP traffic,所以這個IP traffic 一直不間斷地刷新網關的ARP cache table,所以一直沒有timeout,既然192.168.1.10的MAC依然存在,故一直不需要發送ARP Request,所以192.168.1.10也無需發送ARP Reply。這也為什麼你的主機為空的原因。

而當你主動和192.168.1.10通信時,將trigger ARP request,然後 192.168.1.10 發送 ARP reply,你的主機就會有 ARP entry。


關鍵點:ARP請求是廣播,但是回應是單播

現在的區域網都是交換機連接的,交換機工作在二層(二層交換機),交換機的埠會記錄埠連接的設備的mac地址。

當網路剛剛通電,所有設備都還沒有進行通信的時候,如果主機A(192.168.1.1)要跟主機B(192.168.1.2)進行通信,首先檢查自己的arp緩存是否有B電腦的MAC地址,如果沒有,這時候主機A會喊一句ARP廣播:「誰是IP為192.168.1.2的主機?「,

此時收到這個廣播的是交換機的埠,就是連接主機A的那個埠,交換機會將arp廣播從其他埠發送出去,當主機B收到這個吆喝時,就會答應一句:「寡人便是!」,而其他主機就會不理睬,這個回答同樣會通過連接B主機的交換機埠發送,然後這個回答是ARP單播,這樣交換機埠也記錄下了相應埠有B主機的mac地址。此時單播抵達了A主機,A主機的arp緩存便記錄下了B主機的mac地址。之後的通信中,由於主機A已經有了B的MAC地址,交換機也在相應埠有記錄,主機A就可以直接進行單播通信了。

所以交換式區域網進行通信時,雖然有arp廣播的存在,但是只要不進行通信,就不會得知其他設備的MAC。

以前的共享式區域網通信,採用HUB連接,半雙工通信,那種區域網會記錄比較多的存活設備,因為無論誰只要通信過,都會在區域網內進行廣播,所有主機都能知道它在「說話「,也就知道了這個主機的存在。


arp是廣播的,但是arp緩存是有有效期的,一般為5分鐘,這兩者是不衝突的,對吧。且arp是按需發起的,如果不需要和b主機通信,那麼沒有必要定期解析b的mac對不對,沒意義。

第二個問題,能否把掃描結果發上來,否則無法回答。


1. arp 是廣播,ping屬於單播。在ping包的時候其實是先發了個arp廣播包,尋找目的主機的地址。

2. arp表有生存時間

3. 有的主機為了防止攻擊,把ping包回復關閉了。此時會出現ping不通的現象


查看的是ARP緩存表,題主應該能理解緩存是什麼意思吧。

無線路由器相當於一個簡單的交換機+路由器+AP的集合,一個無線路由器相當於一個廣播域,當你想要訪問一台主機的時候,數據包到了無線路由器,首先要根據目的地址結合ARP表來判斷發往哪個介面,此時ARP表中只有當前這台主機的信息(是由這台主機發起的通信,會自然的把綁定信息加入ARP表),因此會發起ARP查詢(廣播),得到回應後就將該主機的MAC地址與介面綁定加入ARP表(wifi環境下對應的都是WLAN0)。因為ARP緩存是存在老化時間的,即經過一定的時間後會清除之前的綁定信息,所以造成了一開始沒ping的時候,ARP表中沒有信息。

至於你說的每次ARP表中的信息不同,我不太理解你的意思,因為在wifi環境下,任何主機的MAC地址綁定的介面都是WLAN0,如果信息不同只會是MAC地址改變,那隻能說是因為有別的設備獲取到與之前設備相同的IP地址了。


1.家用無線路由器下面的4個lan口和wifi就相當於交換機(無線交換機)

2.arp是廣播你要搞清楚過程

比如你的網路環境(先不考慮dhcp 只考慮靜態ip)

A電腦接入網路設好ip和網關ip後

A要和網關通信 查arp表發現沒有記錄

A就在交換機里各埠arp廣播哪個機器是網關啊(網關mac是多少)?

此時網關和B電腦都收到了arp廣播 B看到這個與自己沒關係 就丟棄了報文

網關收到了 就回了網關的mac是多少

此時A收到回復 於是就有了arp記錄 網關ip和mac

但是B沒有回復 所以A沒有B的mac記錄

然後你去ping B

首先也是查arp表 發現沒有記錄 然後再廣播

同理A收到B的回復 於是arp表多了一條記錄


arp -a 只是用來查看ARP高速緩存中內容的,沒通信過緩存中當然沒有


推薦閱讀:

求大神,網路出問題了,很詭異的問題?
如何判斷自己在用的無線網是802.11中的哪個協議?
TCP/IP協議中,在建立連接的時候ISN序號分配問題?
路由器wan口和lan口連接在一起 是什麼機制和原理?

TAG:區域網 | 計算機網路 |