明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

TCP/IP基礎(chǔ):ARP 協(xié)議_ARP原理

[摘要]嚴(yán)格來(lái)說(shuō), TCP/IP 協(xié)定家族并沒(méi)有定義 "TCP/IP 專(zhuān)屬的" 網(wǎng)路硬體規(guī)格。 硬體的范圍實(shí)在太過(guò)廣泛了﹐標(biāo)準(zhǔn)非常多﹐當(dāng)今大部份的低層網(wǎng)路硬體標(biāo)準(zhǔn)都是由 IEEE 制定...

嚴(yán)格來(lái)說(shuō), TCP/IP 協(xié)定家族并沒(méi)有定義 "TCP/IP 專(zhuān)屬的" 網(wǎng)路硬體規(guī)格。 硬體的范圍實(shí)在太過(guò)廣泛了﹐標(biāo)準(zhǔn)非常多﹐當(dāng)今大部份的低層網(wǎng)路硬體標(biāo)準(zhǔn)都是由 IEEE 制定的, 但也有許多標(biāo)準(zhǔn)是廠商專(zhuān)屬的。

 

要讓 TCP/IP 協(xié)定能夠順利與不同類(lèi)型的硬體進(jìn)行溝通﹐那么就需要建立起一些標(biāo)準(zhǔn)協(xié)定來(lái)讓大家共同參考。 以我們最常用的乙太網(wǎng)(Ethernet)為例﹐我們無(wú)需理會(huì)廠商如何設(shè)計(jì)網(wǎng)路界面的驅(qū)動(dòng)程式﹐一旦它能夠被系統(tǒng)接納﹐網(wǎng)路儲(chǔ)存層(Datalink)就能使用網(wǎng)路界面在實(shí)體網(wǎng)路上傳送和接收資料了。

  IP 位址和實(shí)體位址對(duì)應(yīng)之困擾

  在「網(wǎng)路基礎(chǔ)」課程中﹐我們知道乙太網(wǎng)上面使用的傳送方式叫 CSMA/CD (Carrier-Sensing Multiple Access with Collision Detection)﹕雖然訊框會(huì)在整個(gè)網(wǎng)段(segment)中用廣播的方式傳遞﹐而且所有節(jié)點(diǎn)都會(huì)收到訊框﹐然而﹐只有目的位址符合自己實(shí)體位址的訊框才會(huì)被接收下來(lái)。 因此, 不管上層協(xié)定是哪一種(可以是 TCP/IP 也可以是其它), 在底層的傳送若是使用 Ethernet 的話, 就得使用 MAC (Media Access Control) 實(shí)體位址。 若要查詢(xún)到當(dāng)前系統(tǒng)目前所有界面的實(shí)體位址, 我們可在 Linux 系統(tǒng)里面輸入 ifconfig 命令﹕

  eth0  Link encap:Ethernet HWaddr 00:A0:0C:11:EA:11    inet addr:203.30.35.134 Bcast:203.30.35.159 Mask:255.255.255.224    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1    RX packets:0 errors:0 dropped:0 overruns:0 frame:0    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0    collisions:0 txqueuelen:100    Interrupt:3 Base address:0x300eth1  Link encap:Ethernet HWaddr 00:80:C7:47:8C:9A    inet addr:192.168.0.17 Bcast:192.168.0.255 Mask:255.255.255.0    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1    RX packets:12303 errors:0 dropped:0 overruns:0 frame:0    TX packets:12694 errors:0 dropped:0 overruns:0 carrier:0    collisions:0 txqueuelen:100    Interrupt:10 Base address:0x2e0

  從上面的命令結(jié)果中可發(fā)現(xiàn):關(guān)于每一個(gè)界面的第一行資訊﹐最后的部份就是該界面的實(shí)體位址。 訊框在實(shí)體網(wǎng)路上面?zhèn)魉偷倪^(guò)程中﹐IP 位址(或曰羅輯位址)一點(diǎn)都派不上用場(chǎng)。 但問(wèn)題是:當(dāng)我們使用 TCP/IP 的時(shí)侯, 上層的協(xié)定都是以 IP 位址為傳送依據(jù)的。 那么﹐這時(shí)候我們就必須有一套方法來(lái)對(duì)應(yīng) IP 位址和實(shí)體位址了。

  在此一過(guò)程中﹐關(guān)鍵點(diǎn)是如果將 IP 位址對(duì)與實(shí)體位址做對(duì)應(yīng)。 有些使用簡(jiǎn)單實(shí)體位址的網(wǎng)路(如 proNET-10 )﹐其實(shí)體位址只占一個(gè) byte 的長(zhǎng)度﹐而且允許使用者在配置網(wǎng)路卡的是選擇自己的實(shí)體位址。 在這樣的網(wǎng)路上進(jìn)行 IP 位址和實(shí)體位址的對(duì)應(yīng)﹐是比較簡(jiǎn)單的﹐我們可以把實(shí)體位址設(shè)為和 IP 位址設(shè)為一樣。 例如﹐假設(shè)某一個(gè)節(jié)點(diǎn)的 IP 位址為 192.168.1.17﹐那么我們可以將該實(shí)體位址設(shè)為 17。 這樣﹐在 proNET 就可以輕易的根據(jù) IP 位址來(lái)得到實(shí)體位址。 這樣的對(duì)應(yīng)非常簡(jiǎn)單﹐而且要維護(hù)起來(lái)也很容易﹐在新機(jī)器假如網(wǎng)路的時(shí)候﹐并不需要修改或重編已存的資料。

  然而﹐我們知道在乙太網(wǎng)上﹐每一個(gè)實(shí)體界面都有一個(gè) 48bit(6byte) 的 MAC 位址﹐而 IP (v4)使用的位址則為 32bit(4byte)﹔每各位址格式都只提供相應(yīng)的層級(jí)協(xié)定使用﹐彼此是不能互換使用的。 這時(shí)候我們就無(wú)法用簡(jiǎn)單的數(shù)學(xué)關(guān)系來(lái)做 IP 位址和實(shí)體位址的對(duì)應(yīng)了。

  IP 位址和實(shí)體位址的對(duì)應(yīng)方法

  建立表格

  首先﹐我們想到的最簡(jiǎn)單方法是在每一臺(tái)機(jī)器上建立一個(gè) IP 位址和實(shí)體位址的對(duì)應(yīng)表格( table )。 不過(guò)這個(gè)方法還是沒(méi)辦法解決如下的情形﹕

  · 網(wǎng)路上的節(jié)點(diǎn)數(shù)量多如恒河沙數(shù)﹐要想將全部節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系列入表格之中幾近不可能任務(wù)。

  · 如果某一個(gè)節(jié)點(diǎn)產(chǎn)生異動(dòng)情形(例如更換網(wǎng)卡)﹐那么如果讓所有表格正確做出相應(yīng)修改﹐也是個(gè)頭痛的問(wèn)題。

  · 對(duì)某無(wú)磁碟工作站來(lái)說(shuō)﹐因?yàn)闆](méi)有本機(jī)的儲(chǔ)存設(shè)備﹐將無(wú)非建立表格。

  寫(xiě)入高階程式

  除了建立表格﹐我們還可以將實(shí)際的網(wǎng)路位址寫(xiě)死在高階網(wǎng)路程式里面。 不過(guò)﹐和前一個(gè)方法一樣﹐如果遇到硬體位址變更等異動(dòng)動(dòng)情形﹐那么﹐程式也需要重新編譯過(guò)才行。

  顯然﹐上述兩個(gè)方法都不怎么高明。

  ARP 協(xié)定

  這里我們要介紹的是 Address Resolution Protocol (ARP)。 ARP 是 TCP/IP 設(shè)計(jì)者利用乙太網(wǎng)的廣播性質(zhì)﹐設(shè)計(jì)出來(lái)的位址解釋協(xié)定。 它的主要特性和優(yōu)點(diǎn)是它的位址對(duì)應(yīng)關(guān)系是動(dòng)態(tài)的﹐它以查詢(xún)的方式來(lái)獲得 IP 位址和實(shí)體位址的對(duì)應(yīng)。 它的工作原理非常簡(jiǎn)單﹕

  1. 首先﹐每一臺(tái)主機(jī)都會(huì)在 ARP 快取緩沖區(qū) (ARP Cache)中建立一個(gè) ARP 表格﹐用來(lái)記錄 IP 位址和實(shí)體位址的對(duì)應(yīng)關(guān)系。 這個(gè) Table 的每一筆資料會(huì)根據(jù)自身的存活時(shí)間遞減而最終消失﹐以確保資料的真實(shí)性。

  2. 當(dāng)發(fā)送主機(jī)有一個(gè)封包要傳送給目的主機(jī)的時(shí)候﹐并且獲得目的主機(jī)的 IP 位址﹔那發(fā)送主機(jī)會(huì)先檢查自己的 ARP 表格中有沒(méi)有該 IP 位址的實(shí)體位址對(duì)應(yīng)。 如果有﹐就直接使用此位址來(lái)傳送框包﹔如果沒(méi)有﹐則向網(wǎng)路發(fā)出一個(gè) ARP Request 廣播封包﹐查詢(xún)目的主機(jī)的實(shí)體位址。 這個(gè)封包會(huì)包含發(fā)送端的 IP 位址和實(shí)體位址資料。

  3. 這時(shí)﹐網(wǎng)路上所有的主機(jī)都會(huì)收到這個(gè)廣播封包﹐會(huì)檢查封包的 IP 欄位是否和自己的 IP 位址一致。 如果不是則忽略﹔如果是則會(huì)先將發(fā)送端的實(shí)體位址和 IP 資料更新到自己的 ARP 表格去﹐如果已經(jīng)有該 IP 的對(duì)應(yīng)﹐則用新資料覆蓋原來(lái)的﹔然后再回應(yīng)一個(gè) ARP Reply 封包給對(duì)方﹐告知發(fā)送主機(jī)關(guān)于自己的實(shí)體位址﹔

  4. 當(dāng)發(fā)送端接到 ARP Reply 之后﹐也會(huì)更新自己的 ARP 表格﹔然后就可以用此紀(jì)錄進(jìn)行傳送了。

  5. 如果發(fā)送端沒(méi)有得到 ARP Reply ﹐則宣告查詢(xún)失敗。

  ARP 的查詢(xún)過(guò)程可參考下圖﹕

   TCP/IP基礎(chǔ):ARP 協(xié)議TCP/IP基礎(chǔ):ARP 協(xié)議(圖一)

  ARP 的查詢(xún)過(guò)程

  前面說(shuō)的 ARP 表格﹐只有在 TCP/IP 協(xié)定被載入核心之后才會(huì)建立﹐如果 TCP/IP 協(xié)定被卸載或關(guān)閉機(jī)器﹐那么表格就會(huì)被清空﹔到下次協(xié)定載入或開(kāi)機(jī)的時(shí)候再重新建立﹐而同時(shí)會(huì)向網(wǎng)路發(fā)出一個(gè) ARP 廣播﹐告訴其它機(jī)器它的目前位址是什么﹐以便所有機(jī)器都能保持最正確的資料。

  然而﹐ARP cache 的大小是有所限制的﹐如果超過(guò)了界限﹐那么越長(zhǎng)時(shí)間沒(méi)被使用過(guò)渡資料就必須清理掉﹐以騰出空間來(lái)儲(chǔ)存更新的資料。 所以﹐當(dāng)機(jī)器收到 ARP equest 封包時(shí)﹐如果查詢(xún)對(duì)象不是自己﹐則不會(huì)根據(jù)發(fā)送端位址資料來(lái)更新自己的 ARP 表格﹐而是完全忽略該封包。 同時(shí)﹐每筆存在 cache 中的資料﹐都不是永久保存的﹕每筆資料再更新的時(shí)候﹐都會(huì)被賦予一個(gè)存活倒數(shù)計(jì)時(shí)值﹐如果在倒數(shù)時(shí)間到達(dá)的時(shí)候﹐該資料就會(huì)被清掉。 然而﹐如果該資料在倒數(shù)時(shí)間到達(dá)之前被使用過(guò)﹐則計(jì)時(shí)值會(huì)被重新賦予。

  當(dāng)然了﹐ARP 尚有一套機(jī)制來(lái)處理當(dāng) ARP 表格資料不符合實(shí)際位址資料的狀況(例如﹐在當(dāng)前連線尚未結(jié)束前﹐收到目的端的位址資料更新訊息)﹔或是目的主機(jī)太忙碌而未能回答 ARP 請(qǐng)求等狀況。

  RARP 協(xié)定

  剛才介紹的 ARP 協(xié)定是透過(guò)向網(wǎng)路查詢(xún)而找出實(shí)體位址﹐那我們接下來(lái)探討的 RARP 協(xié)定則相反﹕它是籍由查詢(xún)網(wǎng)路上其它主機(jī)而得到自己的 IP 位址。

  通常﹐我們使用的乙太網(wǎng)卡﹐在出廠的時(shí)候就有生產(chǎn)廠家把網(wǎng)卡的實(shí)體位址燒在 ROM 里面﹐這個(gè)位址是不能改變的(某些型號(hào)的網(wǎng)路卡﹐或是透過(guò)其它技術(shù)手段﹐是允許您修改實(shí)體位址的)。 不管系統(tǒng)是否起來(lái)﹐這個(gè)位址都會(huì)存在﹐而且要讓系統(tǒng)獲得它也很容易。 然而, 在一些無(wú)磁碟(diskless)工作站上面﹐系統(tǒng)檔案都存放在遠(yuǎn)端的伺服器﹐當(dāng)它在啟動(dòng)的時(shí)候﹐因?yàn)楸旧頉](méi)有 IP 位址﹐也就無(wú)法和伺服器溝通﹐更不能將系統(tǒng)檔案載入。 那么﹐我們就必須要有一個(gè)辦法﹐讓這樣的無(wú)磁碟工作站在和伺服器溝通之前獲得自己的 IP 位址。 RAPR 協(xié)定就是為解決此問(wèn)題而設(shè)計(jì)出來(lái)的。

  和 ARP 協(xié)定一樣﹐RARP 也是用廣播的形式來(lái)進(jìn)行查詢(xún)﹐只不過(guò)這時(shí)候問(wèn)的 IP 位址不是別人﹐而是自己的 IP 位址而已。 我們可以從下圖看出 RARP 的運(yùn)作﹐其實(shí)和 ARP 是極其相似的﹕

   TCP/IP基礎(chǔ):ARP 協(xié)議TCP/IP基礎(chǔ):ARP 協(xié)議(圖二)

  RARP 的查詢(xún)過(guò)程

  首先是查詢(xún)主機(jī)向網(wǎng)路送出一個(gè) RARP Request 廣播封包﹐向別的主機(jī)查詢(xún)自己的 IP。 在時(shí)候﹐網(wǎng)路上的 RARP 伺服器就會(huì)將發(fā)送端的 IP 位址用 RARP Reply 封包回應(yīng)給查詢(xún)者。 這樣查詢(xún)主機(jī)就獲得自己的 IP 位址了。

  然而不像 ARP﹐查詢(xún)主機(jī)將 RARP Request 封包丟出去之后﹐可能得到的 RARP Reply 會(huì)不止一個(gè) (在 ARP 查詢(xún)中﹐我們可以確定只會(huì)獲得一個(gè)回應(yīng)而已)。 因?yàn)榫W(wǎng)路上可能存在不止一臺(tái) RARP 伺服器(基于備份和分擔(dān)考量﹐極有可能如此設(shè)計(jì))﹐那么﹐所有收到 RARP 請(qǐng)求的伺服器都會(huì)嘗試向查詢(xún)主機(jī)作出 RARP Reply 回應(yīng)。 如果這樣的話﹐網(wǎng)路上將充斥這種 RARP 回應(yīng)﹐做成額外的負(fù)荷。 這時(shí)候﹐我們有兩種方法來(lái)解決RARP 的回應(yīng)問(wèn)題。

  第一種方法﹐為每一個(gè)做 RARP 請(qǐng)求的主機(jī)分配一主伺服器﹐正常來(lái)說(shuō)﹐只有主伺服器才回做出 RARP 回應(yīng)﹐其它主機(jī)只是記錄下接收到 RARP 請(qǐng)求的時(shí)間而已。 假如主伺服器不能順利作出回應(yīng)﹐那么查詢(xún)主機(jī)在等待逾時(shí)再次用廣播方式發(fā)送 RARP 請(qǐng)求﹐其它非主伺服器假如在接到第一個(gè)請(qǐng)求后很短時(shí)間內(nèi)再收到相同請(qǐng)求的話﹐才會(huì)作出回應(yīng)動(dòng)作。

  第二種方法也很類(lèi)似﹕正常來(lái)說(shuō)﹐主伺服器當(dāng)收到 RARP 請(qǐng)求之后﹐會(huì)直接作出回應(yīng)﹔為避免所有非主伺服器同時(shí)傳回 RARP 回應(yīng)﹐每臺(tái)非主伺服器都會(huì)隨機(jī)等待一段時(shí)間再作出回應(yīng)。 如果主伺服器未能作出回應(yīng)的話﹐查詢(xún)主機(jī)會(huì)延遲一段時(shí)間才會(huì)進(jìn)行第二次請(qǐng)求﹐以確保這段時(shí)間內(nèi)獲得非主伺服器的回應(yīng)。 當(dāng)然﹐設(shè)計(jì)者可以精心的設(shè)計(jì)延遲時(shí)間至一個(gè)合理的間隔。

  PROXY ARP

  代理 (Proxy) ARP 通常用來(lái)在路由器上代為回答在通


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識(shí),學(xué)習(xí)了安全知識(shí),幾乎可以讓你免費(fèi)電腦中毒的煩擾。