ARP協議實現及其數據結構_第1頁
ARP協議實現及其數據結構_第2頁
ARP協議實現及其數據結構_第3頁
ARP協議實現及其數據結構_第4頁
ARP協議實現及其數據結構_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、ARP協議實現及其數據結構1、背景與常規的變電站相比,通信是變電站自動化系統的關鍵問題。最初是用RS485總線將 間隔層設備連接在一起,后來各種現場總線技術被引入到國內,但是隨著變電站自動化技術 自身的發展,它們的一些局限性逐漸表現出來,而嵌入式以太網的出現為變電站自動化系統 的設計者提供了實現站內通信網絡的新途徑。目前,國內外一些著名的大公司已經利用嵌入 式技術將以太網用于它們推出的變電站自動化系統,新建的超高壓大型變電站自動化系統一 般都采用嵌入式以太網進行組網。以太網技術用于變電站自動化系統是技術發展的趨勢,但是中低壓變電站自動化系統的 間隔層設備和超高壓變電站自動化系統的間隔層設備相比

2、,硬件平臺較低,很多的設備沒有 引入嵌入式操作系統以及實現了的以太網通信協議棧。在考慮到產品的成本問題、兼容性問 題以及開發周期等問題,很多從事中低壓變電站自動化系統研發的公司在原有硬件平臺的基 礎上外擴以太網硬件芯片,軟件上實現通信協議棧。2、問題的提出應用于中低壓變電站自動化系統的嵌入式以太網的通信程序的層次結構如圖1所示,通 信模塊由插口層、協議層、接口層和以太網硬件驅動程序組成,插口層主要是實現Socket 接口相關的操作,協議層實現UDP、IP、ICMP、IGMP和ARP協議,接口層實現對以太網 幀頭的操作,底層的驅動程序完成和以太網硬件的通信。插口層對不同的應用層程序提供了 公共的

3、接口,接口層對不同的以太網芯片提供公共的接口。應用層以太網圖1嵌入式以太網層次結構IP報文要傳送到目的主機的IP協議層,需要把IP報文發送到本機的接口層封裝成以太 網幀,并利用以太網硬件驅動程序把以太網幀寫入到以太網硬件芯片的片上緩存,然后以太 網硬件芯片把數據發送到以太網上。目的主機的以太網硬件芯片接受以太網上的數據,并根 據接受的以太網幀頭的以太網地址(MAC地址)接受到達目的主機的報文。在與某主機進行通信時,需要知道對方的MAC地址,并把MAC地址保存起來,維護 目的IP地址和目的MAC地址的映射。在實現通信協議棧時,需要設計維護IP地址到相應 以太網地址的映射表,一般這個映射表和路由表

4、緊密相連,但是變電站內部通信網一般采用 hub或者交換機相連,不需要IP級的路由,且變電站自動化系統內部的網絡接口一般較多, 這樣使建立的路由表占用的內存資源比較大,并且增加了報文發送的復雜程度,加重了單片 機的處理負擔。ARP請求報文以廣播的方式發送到以太網中,當ARP請求報文發送的頻率遠遠大于相 應的ARP回答報文發送的頻率時,則快速發送的ARP請求報文會造成網絡阻塞,使主機不 能接收到相應的ARP回答報文,這樣使網絡中不斷的充斥著ARP請求報文,出現ARP洪 泛現象,極大的耗費了系統有效的處理能力。網絡上的主機在運行過程中,都有突然出故障的幾率,如果某主機的IP地址和對應的 端口的以太網

5、硬件地址的映射關系發送變化后而其他主機不能實時的更新關于這一地址對 的信息,就會造成對IP地址的錯誤的以太網硬件地址的解析,從而導致數據的丟失。本文針對這些問題提出用于中低壓變電站自動化系統的嵌入式以太網不實現維護IP地 址到相應以太網地址的映射以及IP地址路由的Radix樹路由表,而是建立一個僅維護IP地 址到相應以太網地址的映射的ARP (Address Reasolve Protocol)信息表,并在實現ARP協 議時,采用了防止出現ARP洪泛的算法,且建立了實時的更新ARP信息表中結點的功能, 保證網絡具有好的容錯性能。如果變電站內部的間隔層設備需要與調度或者其他變電站內的設備直接通信

6、時,可以設 置變電站與外界聯系的具有報文轉發功能的設備具有ARP代理功能,使需要被轉發到外網 的報文先被發送到這個具有ARP代理能力的接口設備,此設備對到達的報文選擇合適的下 一跳IP地址完成對報文的轉發。3、ARP信息表ARP信息表采用鏈表形式,當需要和某IP地址的相對應的MAC地址時,程序需要根 據IP地址查看對應的ARP信息表結點。如果ARP信息表是順序表,則查找成功時的平均 查找長度和表的長度成線性關系。在變電站內部,間隔層設備較多,則需要縮短鏈表的長度。 為了合理的縮短鏈表的長度,可以把ARP信息表分成若干個鏈表,先根據IP地址尋找對應 的鏈表頭,然后再對找到的鏈表進行順序查找,這樣

7、整個ARP信息表就是哈希表,如圖2 所示。圖2 ARP信息表示意圖在圖2中,所有關鍵字為同義詞的結點存儲在同一線性鏈表中,鏈表的頭指針存放到指 針數組中,哈希地址就是指針數組的下標,圖中的四個鏈表對應的哈希地址分別為0、1、2 和3,關鍵字為IP地址。哈希函數如下式所示:H (IP地址)=(IP地址0+IP地址1 +IP地址+IP地址3) mod 4 (式1) 式1中的IP地址0、IP地址1、IP地址2、IP地址3為IP地址的字,H (IP地址)為哈 希地址。哈希函數有很好的均勻性,IP地址的每個字節的值都對哈希地址有影響,使哈希 地址均勻分布在整個地址區間。ARP信息結構體的數據結構如表1所

8、示,arp_infor為結構體名,ai_expired變量設定ARP 信息表結點實效的時間,具體值如表2所示,ai_flags變量的比特位標識此ARP信息表結點的狀態,相關的比特位的定義如表3所示。在發送arp請求報文時,ai_asked、ai_count、 ai_expired和ai_flags四個變量結合在一起可以防止arp風暴,ai_rfcnts記錄了正在訪問此結 點的進程的個數。表1 ARP信息結構體的數據結構名稱屬性類型含義arp_infor結構體名structarp信息表結構體ai_mac6arp_infor結構體成員變量無符號短整形數組以太網MAC地址ai_ip4arp_info

9、r結構體成員變量無符號短整形數組ip地址ai_nextarp_infor結構體成員變量arp_infor結構體指 針指向arp_infor結構,用于形成鏈表ai_holdarp_infor結構體成員變量報文的數據結構的 指針指向等待發送的幀ai_askedarp_infor結構體成員變量無符號短整形arp報文發送的次數ai_countarp_infor結構體成員變量無符號短整形arp報文失效計數,系統可以根 據起大小來判斷網絡是否失效ai_expiredarp_infor結構體成員變量無符號整形數arp信息表結點失效的時間,節 點永久有效時值為0,單位為秒ai_flagsarp_infor結構

10、體成員變量無符號短整形數arp信息表的狀態ai_rfcntsarp_infor結構體成員變量無符號短整形數引用計數,當某個量持有這個節 點指針時,引用計數增加表2 ARP信息表結點失效時間的定義名稱類型參考值(單位:秒)含義arp_keeptime宏定義20連續發送詢問某MAC地址的ARP請求報文組之間的最短間隔arp_time_lag宏定義1連續發送詢問某MAC地址的ARP請求報文之間的最 短間隔arp_keep_life宏定義240非永久性arp信息表結點的生命周期表3 ai_flags變量的比特位含義定義名稱類型比特位參考值含義RT_REJECT宏定義0 x01狀態標志位。置1時拒絕往這

11、個ip地址發 送報文RT_VALID宏定義0 x02狀態標志位。置1標識需要更新RT_DOWN宏定義0 x04狀態標志位。置1標識arp_infor節點永久有效RT_PERMONENT宏定義0 x08狀態標志位。置1標識有效,mac地址不為空4、ARP信息表的操作ARP信息表的操作有創建操作、插入操作、更新操作和查詢操作。創建操作是根據目標 IP地址創建新的ARP信息表結點操作,插入操作是把新創建的ARP信息表結點插入到相應 的線性表的頭部的操作。更新操作是系統在運行中,周期性的更新ARP信息表結點的MAC 地址的操作。查詢操作是以需要解析以太網MAC地址的IP地址為關鍵字查找ARP信息表 的

12、操作。插入操作創建的結點分為兩種:永久性結點和臨時結點。永久性結點是在系統初始化過 程中創建的,其MAC地址是經調試人員通過人機接口或者其他的方式設立的,而臨時結點 是系統在運行過程中創建的,其MAC地址是主機利用ARP協議從網上獲取的。永久性結 點在創建時,結點的ai_mac6變量由輸入的MAC地址初始化,并設標志位為永久結點。 臨時結點的MAC地址在創建時,結點的ai_mac6變量初始化為空,然后利用ARP協議得 到MAC地址值填充對應的變量,創建時置結點的標志位變量為臨時結點,置結點的成員變 量ai_expired的值為當前的時鐘值加上arp_keep_life的和。臨時結點是通過網上的

13、ARP協議發送ARP詢問與回答報文完成的,MAC地址有可能 會變化,所以可以應該實時的更新對應的ARP信息表結點的MAC地址值,使整個網絡有 很好的擴展性,同時使網絡能實時的進行自我診斷。更新操作是針對ARP信息表的臨時結點進行的定時的進行的操作,一旦有臨時結點創 建,則同時要產生一個軟定時器,當定時器超時后,就啟動定時器超時函數,依次查看臨時 結點是否失效,如果失效則發送ARP請求報文,并把結點的ai_count變量加1,標識結點 連續失效的次數,如果ai_count變量超過某約定值,則表明該網絡端口出現故障,在執行更 新操作時不啟動防ARP洪泛算法。查詢操作是以目標IP地址為關鍵字,利用哈

14、希函數得到ARP信息表中的鏈表頭數組的 下標,根據下標找到指向鏈表頭得指針變量,然后從表頭開始順序的以IP地址為關鍵字查 找對應的結點,如果沒有找到則要創建相應的結點,并把結點插入到ARP信息表中。當系統運行時,主機常常向同一目的地址連續的發送報文,如果對連續發往同一目的主 機的每個報文都通過對ARP信息表執行查詢操作來解析地址,則大大的浪費了系統的處理 能力。為了加快地址的解析速度,在程序中創建一個記錄變量,記錄上次通過查詢ARP信 息表找到的結點。當要解析IP地址時,先查看記錄變量指向的結點是否為目標小地址對應 的信息表結點,如果記錄變量指向的結點和目標IP地址不匹配,則再以目標IP地址為

15、關鍵 字對ARP信息表執行查詢操作,并把記錄變量指向查詢到的目標結點。5、ARP協議地址解析協議(ARP)用于實現目的IP地址到網絡接口硬件地址(MAC地址)的映射, 如果目的IP地址和本終端系統在一個以太局域網,則對應的MAC地址是目的主機本身的 網卡的MAC地址,如果目的IP地址和本終端系統進行通信要經過網關,則本系統把它映 射到網關的MAC地址,即把數據包發送到網關,網關在進行路由轉發ARP請求報文是廣 播發送的,但是ARP回答報文是單播的。以太網目的地址以太網源地址幀 類型硬件類型協議類型硬件地址長度協議地址長度選 項發送者硬 件地址發送者IP地址目標硬 件地址目標IP地址66以太網首

16、部222112 6464rARP自部叱以太網ARP字段-圖3在以太網上使用的ARP請求或者回答的格式圖3是以太網上使用的ARP報文格式,ARP首部由硬件類型、協議類型、硬件地址長 度、協議地址長度和選項組成,其中硬件類型、協議類型和選項是網絡字節序。當封裝的 ARP報文在以太網上傳輸時,硬件類型字段賦值為0 x0100,標識硬件為以太網硬件;協議 類型字段賦值為0 x0800,標識上次協議為IP協議;由于以太網的MAC地址為48比特位, IP地址為32比特位,則硬件地址長度字段賦值為6,協議地址長度字段賦值為4 ;選項字 段標識ARP報文的類型,當為請求報文時,賦值為0 x0100,當為回答報

17、文時,賦值為0 x0200o6、ARP協議的實現ARP協議的實現主要由地址解析函數和ARP報文處理函數兩部分組成,在發送ARP 請求報文時,要防止出現ARP洪泛,在發送IP報文時,對MAC地址為空的arp信息表結 點應該保存待發送的IP報文,等待MAC地址不為空時,立即發送出去。ARP洪泛是指主機在收到ARP回答之前以過高的速度對一個以太網地址重復ARP請求, 使網絡瞬時出現大量的廣播報文。防止出現ARP洪泛的措施有:1)相鄰的發往一個以太網地址的arp請求報文之間的時間間隔不能太短,表2中的宏定義 arp_time_lag說明了此間隔的大小,給出的參考值是1秒;2)如果發送若干個arp請求報

18、文后還沒有收到回答報文,則應該設置拒絕發送標志,阻止 新的IP報文的發送,時限設為arp_keeptime,它的參考值為20秒;3)arp_keeptime后,再啟動新一輪的arp請求。數據報文1234567891059時間74 |75 T76| 77* 7879 *8099牛ARPARPARPARPARPARP請求請求請求請求請求請求圖4避免ARP洪泛采用的方法圖4給出了一個例子,進一步說明了避免ARP洪泛的方法,在圖中共顯示了 25秒的時 間,從74到99。假定某進程每隔0.5秒等間隔的發送IP數據報,數據報依次被標號為1 59,arp_time_lag被定為1秒,arp_keeptime

19、被定為20秒,4個ARP請求報文為一組,假定 目的主機已經關閉,所以收不到ARP回答報文,ARP實現采取的措施如下:1)假定進程寫數據報文1時,還沒有創建相應的arp信息表結點,此時創建新的arp信息 表結點,初始化arp信息表結點結構體成員變量ai_ip4為目的IP地址,ai_asked的值 為0, ai_hold指向報文1,ai_expired值為75 (時鐘當前值74加上arp_time_lag),然后發送ARP請求報文,置ai_asked的值為1。2)進程寫報文2時,丟棄報文1, ai_hold指向報文2。由于ai_expired的當前值為75,所 以不發送ARP請求報文。3)進程寫報

20、文3時,丟棄報文2, ai_hold指向報文3。由于當前的時鐘值為75,則發送ARP 請求報文,且置ai_asked的值為2, ai_expired的值為76。4)對于報文49,情況一樣的。在數據報文9到達后,ai_asked的值為5,此時賦ai_asked 的值為1,置RT_REJECT標志位有效,ai_expired的置賦值為99 (時鐘當前值79加上 arp_keeptime),此時ai_asked的值不再大于5小于0,然后發送這一組的最后一個ARP 請求報文。5)當報文11到達時,丟棄報文10,由于RT_REJECT標志位有效,則不發送ARP報文, 此時ai_asked的值為1。6)當

21、報文59到達時,丟棄報文58,此時時鐘值不小于ai_expired的值,則啟動新一輪的 ARP請求,隨后進行的請求中ai_asked的值從14周期性的變化,每一組的ARP請 求報文數為4。當有IP報文發送時,調用地址解析函數解析IP地址對應的MAC地址,地址解析函數 把IP地址分為單播地址、多播地址和廣播地址分別進行處理,具體的處理如下:1)如果IP地址為廣播地址,則其MAC地址為0 xFFFFFFFFFFFF。2)如果IP地址為多播地址,則利用此IP地址按多播IP地址到多播的MAC地址之間的映 射構造多播MAC地址,以太網多播地址的前3個字節是0 x01,0 x00和0 x5e,后面跟著 0

22、比特,然后是IP多播地址的932比特位。3)如果IP地址為單播地址,則對ARP信息表進行查找操作,解析IP地址對應的MAC 地址。如果對應的ARP信息表結點的MAC地址為空,則在對應的ARP信息表結點中 緩存待發送的報文,并結合防止ARP洪泛算法向網絡廣播ARP請求報文。在緩存報文 時,如果ARP信息表結點中已經有待發送的報文,應該釋放上次沒有發送的報文,然 后把本次要求發送的報文緩存在ARP信息表結點中。6.3處理接收到的ARP請求/回答局部網內的任何主機都會接受到ARP請求報文,處理接收到的ARP請求/回答程序解 析報文的內容,程序處理過程如下:1)解讀ARP請求/回答報文的以太網ARP字

23、段,如果報文中的發送者IP地址字段的值和 本機IP地址相同,那么肯定有一個主機配置錯誤,則在報告出錯并釋放報文占用的內 存后,程序執行結束,否則轉到2)。2)以報文中的發送者IP地址字段的值為關鍵字在ARP信息表中查找對應的ARP信息表 結點。如果對應的ARP信息表結點已經存在,則轉3),否則轉4)。3)把發送者硬件地址值賦值到ARP信息表結點中更新ARP信息表結點,這樣可以使主機 不至于因其他主機重啟后導致的ARP信息表結點失效而不能通信。程序在完成ARP 信息表的MAC地址的更新操作后,把結點的ai_count變量置為零,ai_expired變量的 值賦為當前時鐘值加上arp_keep_life的值,然后程序轉到5)。4)創建新的結點并把結點的MAC地址值賦值為發送者硬件地址字段的值,然后把新的結 點插入到ARP信息表中,這樣可以優化其后與改主機的通信。在完成添加新的完整的 ARP信息表結點后程序轉到5)。5)檢查和報文中發送者IP地址字段對應的ARP信息表結點中是否有IP報文等待發送, 如果有則

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論