命令arp是來做什么的
仍舊褐鸥, pi@raspberrypi:~ $ man arp
摘錄一些,得
NAME
arp - manipulate the system ARP cache
DESCRIPTION
Arp manipulates or displays the kernel's IPv4 network neighbour cache. It can add entries to the table, delete one or display the current content.
ARP stands for Address Resolution Protocol, which is used to find the media access control address of a network neighbour for a given IPv4 Address.
MODES
arp with no mode specifier will print the current content of the table.
arp,該命令用于操縱系統(tǒng)的ARP緩存(ARP cache)又憨。當沒有參數(shù)時打佣Ф帧(到屏幕上)當前表中的內(nèi)容。
試一下:
原來系統(tǒng)的ARP緩存中保存著這些零如,什么是ARP呢,ARP緩存中放的這些又是什么意思考蕾,干什么的呢?上面的 pi@raspberrypi:~ $ man arp
的輸出中有介紹:
ARP stands for Address Resolution Protocol, which is used to find the media access control address of a network neighbour for a given IPv4 Address.
ARP(注意肖卧,大寫)表示Address Resolution Protocol(地址解析協(xié)議)蚯窥,用于在網(wǎng)絡鄰居中(network neighbour)查找給定IPv4地址對應的媒體訪問控制地址(media access control address)塞帐。
上面這句話什么意思呢拦赠?ARP是個協(xié)議,對于遵守這個協(xié)議開發(fā)出的軟件葵姥,當你給這個軟件一個IPv4的地址的時候荷鼠,它能幫你在你的網(wǎng)絡鄰居中查找這個IPv4地址對應的媒體訪問控制地址。
IPv4的地址我知道榔幸,就是IP地址允乐,但還有兩個問題:
- 這里的網(wǎng)絡鄰居是指?
- 什么是媒體訪問控制地址削咆?
網(wǎng)絡鄰居是指牍疏?
網(wǎng)絡鄰居,就是指和你處于同一局域網(wǎng)中的主機拨齐。
什么是媒體訪問控制地址鳞陨?
以太網(wǎng)規(guī)定,同一局域網(wǎng)中的一臺主機要和另一臺主機進行直接通信奏黑,必須要知道目標主機的媒體訪問控制地址(MAC地址)炊邦。
MAC地址共48位(6字節(jié)),前24位由IEEE決定分配給某一網(wǎng)絡設備廠商熟史,后24位由實際生產(chǎn)該網(wǎng)絡設備的廠商自行指定馁害。通俗地講,在生產(chǎn)一塊網(wǎng)卡時蹂匹,該網(wǎng)絡設備的廠商就會給這塊網(wǎng)卡一個MAC地址碘菜。從這里可看出,實際上MAC地址在世界范圍內(nèi)都是唯一的。
總結(jié)一下忍啸,通過MAC地址仰坦,我們可以辨別局域網(wǎng)中的主機,從而可以與指定的MAC地址的主機通信计雌。
MAC地址有什么用悄晃?
疑惑了吧,上面不是說了么凿滤,用來辨別局域網(wǎng)的主機來通信啊妈橄,還取這個小標題干嘛?
實際上翁脆,我們并不是用MAC地址來辨別主機眷蚓,而是用MAC地址來辨別以太網(wǎng)上的主機。想想反番,如果說辨別沙热,IP地址也同樣可以辨別主機罢缸,為什么這里還要再加一個MAC地址來辨別祖能?
因為以太網(wǎng)是一種共享型的網(wǎng)絡蛾洛,它采用的是一種稱為CSMA/CD的媒體接入方法轧膘。
詳情請見:什么叫帶沖突檢測的載波偵聽多路接入(CSMA/CD)
我這里直接放結(jié)論谎碍,當一個主機通過共享式的以太網(wǎng)的線路發(fā)送數(shù)據(jù)的時候,連接在這條線路上的所有主機都會收到那個發(fā)送主機發(fā)出的數(shù)據(jù)拯啦。
問:既然網(wǎng)絡鄰居上的所有主機都能收到我的主機發(fā)出的報文褒链,那他們?nèi)绾未_定我的主機發(fā)送的數(shù)據(jù)就是給他們的呢甫匹?
答:他們會查看你發(fā)送的數(shù)據(jù)的“目的地”地址欄上填的是不是自己的地址兵迅,如果是恍箭,就接收你發(fā)的數(shù)據(jù)扯夭,如果不是,就直接丟棄這個數(shù)據(jù)贾漏。(這種簡單的處理方式讓以太網(wǎng)卡變得便宜纵散,側(cè)面促進了以太網(wǎng)的流行)
而這個填在發(fā)送的數(shù)據(jù)的“目的地”地址欄上的地址就是用來分辨以太網(wǎng)上主機的媒體訪問控制地址(Media Access Control address)伍掀,你更常聽到的是它的英文縮寫MAC地址或者是它的通俗名硬件地址蜜笤。
放圖...
圖中的目的地址和原地址兩個地址欄上填寫的就是MAC地址谍倦〖粮看到它們下方標的數(shù)字“6”了嗎,它代表著這個地址是6個字節(jié)的地址鳍置,6字節(jié)=48位税产,和上面講到的MAC地址有48位對上了辟拷。
實際上一些非共享型的網(wǎng)絡確實是不需要MAC地址的阐斜,比如SLIP,比如PPP隅俘,如下圖:
圖中顯示的是一個PPP接口的圖蒙畴,英文全稱圖的注釋里有膳凝,就是點對點協(xié)議董朝,顧名思義,不需要和別人共享,這個接口出去哥捕,下個接口一定是那個接口遥赚,就不需要分辨用的MAC地址了阐肤。
你可以看圖中的第一個接口讲坎,eth0以太接口晨炕,它在鏈路封包方式的后面就明確寫了HWaddr(HardWare address)硬件地址(就是MAC地址)瓮栗。而下面那個接口w1g1接口费奸,它后面就沒有MAC地址进陡。
同樣趾疚,在w1g1接口的第二行,那幾個大寫的單詞的最后一個戈二,NOARP觉吭,明白了嗎仆邓,不支持ARP节值。很簡單啊搞疗,它MAC地址都沒有,拿什么支持你ARP桩皿?
回過頭來再看ARP
OK泄隔,現(xiàn)在可以回過來看這句話了
ARP(注意佛嬉,大寫)表示Address Resolution Protocol(地址解析協(xié)議),用于在網(wǎng)絡鄰居中查找給定IPv4地址對應的媒體訪問控制地址暖呕。
上面這句話什么意思呢缰揪?ARP是個協(xié)議钝腺,對于遵守這個協(xié)議開發(fā)出的軟件,當你給這個軟件一個IPv4的地址的時候艳狐,它能幫你在你的網(wǎng)絡鄰居(network neighbour)中查找這個IPv4地址對應的媒體訪問控制地址(media access control address)毫目。
首先,你給的這個IP地址要是你的網(wǎng)絡鄰居的某個主機的IP地址箱蟆,然后根據(jù)你給的這個IP地址空猜,我這個軟件辈毯,是遵守ARP協(xié)議的谆沃,我就能給你這個IP地址對應的MAC地址唁影。
那這里的ARP緩存(ARP cache)意思也很明顯了桌硫,就是用來保存我查詢到的結(jié)果(網(wǎng)絡鄰居的IP地址對應MAC地址)的地方铆隘,這樣就能在要用的時候以最快地速度告訴你掏湾。
在現(xiàn)實情況中肿嘲,ARP的工作方式就是雳窟,先在ARP緩存中找封救,找不到了再在局域網(wǎng)上“發(fā)帖求助”誉结。
這里輸入arp命令的顯示內(nèi)容也就明白了惩坑,大意為:
由我自己的接口wlan0,連接出去的網(wǎng)絡鄰居中趾痘,IP地址為192.168.253.1的主機永票,主機名是奋刽?肚吏,網(wǎng)卡的硬件類型為以太網(wǎng)類型狭魂,對應的MAC地址(HardWare address:硬件地址)為b0:d5:9d:37:5d:2e
至于ARP如何根據(jù)IP查詢網(wǎng)絡鄰居對應的MAC地址雌澄,等下次再說吧镐牺。
有趣小試驗
手機先連上和樹莓派一致的無線局域網(wǎng)炫掐,查看手機的本地IP地址為192.168.253.6,然后斷開睬涧。
在樹莓派上用ssh連接手機IP地址募胃,因為手機斷開了旗唁,當然肯定是連不上的,那這時候ARP緩存中會變成什么樣呢痹束?
- ssh顯示的結(jié)果:No route to host 沒有到達192.168.253.6這一地址的路徑检疫。
- arp顯示的結(jié)果:(incomplete)沒完成...
OK,這時候我把手機連上去...
有趣的事情發(fā)生了
- ssh顯示的結(jié)果由原來的No route to host 沒有到達192.168.253.6這一地址的路徑變?yōu)榱薈onnection refused祷嘶,這當然了屎媳,我手機上又沒有開ssh準備和樹莓派連,自然樹莓派就被拒絕了论巍。
- arp顯示的結(jié)果則從(incomplete)沒完成變成了成功拿到物理地址晒来。
那如果不是本地的IP會怎么樣?我猜ARP緩存里不會更新數(shù)據(jù),你想看薄扁?就自己試試唄日缨,比如...ssh一下簡書...