• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于ACP的RPL路由協(xié)議設計與實現(xiàn)

      2020-05-09 09:43:58陳慈飛吳佳琪陳民華
      無線電通信技術(shù) 2020年3期
      關(guān)鍵詞:行路字段路由

      李 棟,陳慈飛,吳佳琪,陳民華

      (重慶郵電大學 通信與信息工程學院,重慶 400065)

      0 引言

      隨著互聯(lián)網(wǎng)的飛速發(fā)展,規(guī)模不斷壯大,衍生出了眾多的新場景、新業(yè)務。由于傳統(tǒng)網(wǎng)絡存在運營成本大、效率低下等缺點,已經(jīng)無法滿足當前網(wǎng)絡的發(fā)展趨勢和要求,逐漸與互聯(lián)網(wǎng)的發(fā)展相脫節(jié)。IBM公司于2001年首次提出自治網(wǎng)絡的概念[1],其基本目標是實現(xiàn)網(wǎng)絡自我管理、自我配置、自我優(yōu)化、自我修復、自我保護以及可擴展性等特點。

      自治功能需要穩(wěn)定的基礎架構(gòu)來運行,以最大程度地降低網(wǎng)絡復雜性。如今,大多數(shù)關(guān)鍵的控制平面協(xié)議和網(wǎng)絡管理協(xié)議都在使用網(wǎng)絡的數(shù)據(jù)平面。這通常導致一側(cè)的控制和管理平面與另一側(cè)的數(shù)據(jù)平面之間的不良依存關(guān)系。因此,ANIMA工作組定義自治控制平面 (Autonomic Control Plane,ACP)來為網(wǎng)絡提供獨立于數(shù)據(jù)平面的控制平面,為網(wǎng)絡的高效通信提供基礎,而ACP中通信需要滿足自治屬性的RPL路由協(xié)議來支撐。本文將從協(xié)議的設計、軟件開發(fā)以及軟件的測試和分析幾個方面來講述整個協(xié)議的原理與實現(xiàn)過程。

      1 相關(guān)研究

      2007年歐盟委員會啟動了第七框架計劃,同年該計劃推出了EFIPSANS項目[2]。該項目旨在分析當前互聯(lián)網(wǎng)中所存在的缺陷,探討未來自治管理互聯(lián)網(wǎng)的體系結(jié)構(gòu)、行為特征及實現(xiàn)方法。在IPv6基礎上探索、研究并創(chuàng)建新型的自治網(wǎng)絡。2014年IETF的ANIMA(Autonomic Network Integrated Model and Approach)工作組在GANA[3]的研究基礎上,提出了自己的自治網(wǎng)絡架構(gòu),本著設計基礎、可重用的組件與分布式的思想,定義了三個具體的部分:自治控制平面(Autonomic Control Plane,ACP)[4]、通用自治信令協(xié)議(Generic Autonomic Signaling Protocol,GRASP)[5]和安全自啟動機制(Bootstrap Key Infrastructure,BRSKI)[6]。

      自治功能需要穩(wěn)定的基礎架構(gòu)來運行,并且所有自治功能都應使用相同的基礎架構(gòu),以最大程度地降低網(wǎng)絡的復雜性。如今,大多數(shù)關(guān)鍵的控制平面協(xié)議和網(wǎng)絡管理協(xié)議都在使用網(wǎng)絡的數(shù)據(jù)平面。這通常導致一側(cè)的控制和管理平面與另一側(cè)的數(shù)據(jù)平面之間的不良依存關(guān)系,只有正確配置數(shù)據(jù)平面的轉(zhuǎn)發(fā)和控制平面,數(shù)據(jù)平面和管理平面才能正常工作。在傳統(tǒng)的網(wǎng)絡管理方法中,可以通過帶外虛擬(Out of Band)技術(shù)[7]解決這些問題,但是其過高的成本與代價很大程度上限制了該技術(shù)的進一步推廣。因此,ANIMA工作組定義了ACP自治控制平面來為自治域中的自治節(jié)點提供通信,ACP提供了強大而安全的通信覆蓋,同時實現(xiàn)了控制平面和數(shù)據(jù)平面的隔離。

      為了滿足無線傳感器網(wǎng)絡的要求,IETF(The Internet Engineering Task Force)工作組在2008年成立了ROLL小組,ROLL小組提出了基于IPv6的低功耗有損網(wǎng)絡路由協(xié)議RPL[8]。在實際中,ContikiOS和TinyOS是兩種最流行的操作系統(tǒng),而TelosB是測試平臺上最常用的硬件平臺。在開源實現(xiàn)方面,兩個最廣泛使用的開源RPL實現(xiàn)分別是ContikiOS的Contiki RPL[9]和TinyOS中的Tiny RPL[10],并且這些實現(xiàn)幾乎已經(jīng)用于涉及真實實驗的所有RPL研究活動中。

      2 路由協(xié)議設計與實現(xiàn)

      路由協(xié)議承載著自治節(jié)點的通信需求,影響著整個網(wǎng)絡的性能和存活時間。RPL協(xié)議是一個基于標準化IPv6的距離矢量路由協(xié)議,節(jié)點通過交換距離矢量構(gòu)造一個有向無環(huán)圖(Destination Oriented Directed Acyclic Graph,DODAG),DODAG可以有效防止路由環(huán)路問題。由于RPL路由協(xié)議具有自我管理、自我配置的特性,龐大的規(guī)模以及拓展性強等特點,ACP在標準實現(xiàn)中使用RPL路由協(xié)議來實現(xiàn)域內(nèi)數(shù)據(jù)多跳傳輸,但由于RPL路由協(xié)議本是應用在無線傳感網(wǎng)絡中,而自治網(wǎng)絡基于有線環(huán)境,所以本文以ANIMA工作組提出的自治控制平面為基礎,闡述自治控制平面中基于Linux操作系統(tǒng)的RPL路由協(xié)議的設計與實現(xiàn)。

      2.1 DODAG構(gòu)建流程

      在自治域中將有很多類似NOC的節(jié)點,但是只能選擇一個NOC節(jié)點作為當前自治域中的根節(jié)點,負責當前域中自治節(jié)點的維護和管理,以及跨自治域流量交互等。整個自治域就是一個DODAG,DODAG的構(gòu)建主要包含上行路由和下行路由的構(gòu)建,其中上行路由和下行路由的構(gòu)建均是由DODAG Root發(fā)起,通過DIO,DAO,DAO-ACK,DIS控制消息完成DODAG的構(gòu)建。DODAG的構(gòu)建流程如圖1所示。

      圖1 DODAG的構(gòu)建過程Fig.1 DODAG construction process

      2.2 上行路由模塊

      上行路由是指自治域中的自治節(jié)點到根節(jié)點方向的路由,當網(wǎng)絡中的其他節(jié)點無法獲得某些路由時,將數(shù)據(jù)包向上默認發(fā)給根節(jié)點,同時當兩個自治域中的節(jié)點進行交互時,也需要上行路由將其數(shù)據(jù)包送至根節(jié)點,由根節(jié)點與其他域中根節(jié)點進行轉(zhuǎn)發(fā)。模塊主要包括上行路由的構(gòu)建和維護兩部分。

      上行路由的構(gòu)建與維護主要涉及兩種消息類型,分別為DODAG信息對象信息(DODAG Information object,DIO)和DODAG信息請求消息(DODAG Information Solicitation,DIS),具體消息實現(xiàn)格式代碼如圖2和圖3所示。

      圖2 DIO消息格式Fig.2 DIO message format

      圖3 DIS消息格式Fig.3 DIS message format

      RPLInstance ID表示當前DODAG所在RPL Instances中的ID號;Version Number表示當前DODAG的版本號,主要用于保證DODAG中所有節(jié)點的網(wǎng)絡狀態(tài)同步,且其值隨著DODAG的更新而逐漸遞增;Rank的大小可以反映出當前節(jié)點相對于根節(jié)點在DODAG中的相對位置;MOP表示節(jié)點加入DODAG中的操作模式:存儲模式和非存儲模式;DTSN表示觸發(fā)DAO控制消息的序列號,主要用于維護和更新DODAG中的下行路由;DODAG ID是由DODAG Root分配的IPv6地址,表示當前DODAG的ID號,用于標識每一個DODAG的身份,且每個DODAG ID不能重復,必須唯一。Flags和Reserved 各占據(jù)1字節(jié),在發(fā)送端這兩個字段均默認初始化設置為0,在接收端直接忽略這兩個字段。

      上行路由的構(gòu)建過程由根節(jié)點廣播DIO消息請求周圍鄰居節(jié)點加入當前DODAG開始,確定加入DODAG的自治節(jié)點將發(fā)送DIO的節(jié)點添加至自己的父節(jié)點集合中,同時構(gòu)造到父節(jié)點以及根節(jié)點的上行路由,上行路由的維護過程是從構(gòu)建完上行路由后開始,接收DIO消息的節(jié)點會判斷DIO消息中的Rank字段是否為INFINITE,若是,則從父節(jié)點集合中刪除該節(jié)點;否則,會繼續(xù)判斷Version Number字段是否已經(jīng)改變了,若是,則將節(jié)點的Rank值設為INFINITE,廣播DIO狀態(tài)變?yōu)槲醇尤隓ODAG,斷開與之前節(jié)點之間的連接;否則,繼續(xù)判斷DIO消息是否來自其他的DODAG,若是,則判斷DIO中Prf字段是否大于當前根節(jié)點的Prf,當若大于當前根節(jié)點,則直接置Rank為INFINITE,廣播DIO消息斷開所有連接;否則,根據(jù)發(fā)送節(jié)點的Rank值計算自身節(jié)點的臨時Rank值;繼續(xù)判斷是否加入了新的DODAG,若是,則切換父節(jié)點更新路由信息;否則,比較Rank值,選取最優(yōu)父節(jié)點更新路由。

      節(jié)點通過遍歷節(jié)點的接口信息,創(chuàng)建與接口一一對應的RAW套接字用于廣播的DIO消息。由于節(jié)點進行廣播DIO是周期性的,所以在RPL進程中使用了單獨的線程處理DIO消息的轉(zhuǎn)發(fā)。IPv6中不再有廣播的概念,而是將其看做一種特殊的組播。在進行組播DIO消息時使用Raw套接字組播DIO消息,使用組播地址作為目的地址,其中組播地址中“FF02::1”指所有開啟了IPv6組播的主機,一般為鏈路上加入RPL多播組的所有主機。具體代碼如下:

      const uint8_t all_rpl_addr[]= {0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1a};

      memcpy(&mreq.ipv6mr_multiaddr.s6_addr[0],all_rpl_addr,sizeof(mreq.ipv6mr_multiaddr));

      if (setsockopt(sock,SOL_IPV6,IPV6_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0)

      ∥節(jié)點加入多播組

      for(int i=0;i

      {

      pa->ifname[i]=ifname[i];

      }

      for(int i=0;iif_count;i++)

      {

      if(pa->r_sock!=*(pa->s_sock+i))∥遍歷接口中繼,剔除收到消息接口

      {

      s_bytes=sendmsg(*(pa->s_sock+i),&mhdr,0);

      }

      }

      2.3 下行路由模塊

      下行路由是指自治域中的從根節(jié)點方向到其他自治節(jié)點方向的路由,根節(jié)點掌握所有子節(jié)點的路由信息,當數(shù)據(jù)包查找不到目的地時,會向上交付給父節(jié)點,由父節(jié)點查詢下行路由轉(zhuǎn)發(fā)數(shù)據(jù)包。模塊主要包括下行路由的構(gòu)建和維護兩部分。

      下行路由的構(gòu)建與維護主要涉及兩種消息類型,分別為DODAG目的地通告消息(Destination Advertisement Object,DAO)和DODAG目的地通告消息確認消息(Destination Advertisement Object Acknowledgement,DAO-ACK),具體消息格式如圖4和圖5所示。

      圖4 DAO消息格式Fig.4 DAO message format

      圖5 DAO-ACK消息格式Fig.5 DAO-ACK message format

      DAO控制消息中RPLInstanceID是從接收到的DIO控制消息中獲?。籏標志位、表示DAO控制消息發(fā)送端是否需要接收端返回DAO-ACK控制消息;D字段表示DODAG ID字段是否存在;Flags字段和Reserved字段DIO控制消息中的操作一致;DAO Sequence字段被作為一個計數(shù)器,主要用于記錄節(jié)點收到其下游節(jié)點發(fā)送的DAO控制消息的數(shù)量,即節(jié)點每收到一個攜帶路由前綴的DAO控制消息,該字段的值便增加1;DODAGID字段的“*”表示DODAGID并不總是存在,該字段僅在設置D字段時才出現(xiàn),即當使用本地RPLInstanceID時才存在,當使用全局RPLInstanceID時不存在。

      下行路由的創(chuàng)建過程由節(jié)點收到DIO消息后建立完成上行路由開始,然后向選定的父節(jié)點回復DAO消息來通告自身地址前綴,協(xié)助父節(jié)點以及根節(jié)點來建立到自身的下行路由,最后如果需要則將DAO消息送至根節(jié)點,由根節(jié)點回復確認消息DAO-ACK消息,來提高下行路由的可靠性,當節(jié)點入網(wǎng)后,將收到DIO消息中的目標函數(shù)(Objective Function,OF)中定義的一個或多個度量和約束轉(zhuǎn)換為Rank值,然后周期廣播DIO繼續(xù)協(xié)助周圍鄰居入網(wǎng)。

      節(jié)點通過遍歷節(jié)點的接口信息,結(jié)合poll函數(shù)實現(xiàn)非阻塞的RAW套接字,同時實現(xiàn)超時時間的設定與套接字的監(jiān)聽。Poll函數(shù)可以實現(xiàn)非阻塞IO的套接字,它可以通過監(jiān)視套接字描述符的變化來監(jiān)測等待事件的發(fā)生,一旦判定收到DIO消息,就確定接口信息,單播回復DAO消息。通過對若干個套接字進行輪詢,根據(jù)發(fā)生的事件來進行相應的處理。代碼示例如下:

      for(int i=0;igif_count;i++)∥輪詢加入poll監(jiān)聽池

      {

      gif6.gifaddr6[i].ifa_name=pa->ifname[i];

      fds[i].fd=pa->r_sock[i];

      fds[i].events=POLLIN;∥設置監(jiān)控觸發(fā)事件

      }

      ret=poll(fds,pa->gif_count,INFTIM);

      if(fds[i].revents==POLLIN)∥捕獲觸發(fā)的事件類型

      send_dao(r_sock,r_src,parent,relay_src,dao_seq,r_dio.instanceid,r_dio.dodagid,ip6_src_add.s6_addr,plen);∥回復DAO消息

      3 軟件測試及分析

      在軟件協(xié)議的開發(fā)中,軟件功能的實現(xiàn)是保障協(xié)議能夠正常運行的最基本要求。為了驗證RPL路由協(xié)議能否正常運行,本文編寫了相應的測試用例對RPL協(xié)議模塊功能進行測試。

      3.1 測試環(huán)境搭建

      為測試RPL路由協(xié)議功能及性能,需要首先搭建自治控制平面作為測試平臺,實際搭建的測試場景網(wǎng)絡拓撲如圖6所示。

      圖6 測試網(wǎng)絡拓撲結(jié)構(gòu)Fig.6 Network topology used for testing

      圖6中所有的節(jié)點都是在一臺臺式機上通過Vmware Workstation虛擬機軟件虛擬了多個虛擬節(jié)點,在其上運行Linux操作系統(tǒng),通過對節(jié)點進行配置多個虛擬網(wǎng)卡來構(gòu)建網(wǎng)絡拓撲,每個網(wǎng)卡分別配置了不同網(wǎng)段的IPv6的LLA地址和ULA地址,其中LLA地址為鏈路本地地址,是默認為網(wǎng)卡分配的地址,用于本地鏈路之間的通信;自治控制平面在運行路由協(xié)議前,會自動分配一個ULA地址用于當前域內(nèi)路由。

      3.2 構(gòu)建RPL路由測試

      在所有的節(jié)點上運行RPL路由協(xié)議軟件,節(jié)點首先會初始化接口信息,例如A節(jié)點有兩個接口eth0和eth1,然后創(chuàng)建Raw套接字,其中假設A是根節(jié)點,其IPv6地址為fd89::1,作為DODAGID,其他節(jié)點是普通節(jié)點,首先由A構(gòu)建DODAG,A節(jié)點組播DIO消息如圖7所示,鄰居節(jié)點B和C收到DIO消息后構(gòu)建上行路由如圖8所示,收到的DIO消息中的DODAGID字段為fd89::1,rank值為0表示是根節(jié)點,B,C節(jié)點根據(jù)DIO消息構(gòu)建到節(jié)點A的上行路由,如圖9所示。然后向節(jié)點A回復DAO消息,其中Target Prefix字段為fd89:1::10,表示B的IPv6地址,節(jié)點A構(gòu)造下行路由的測試結(jié)果如圖10所示。

      當節(jié)點B,C,D,E,F加入到DODAG后,在A節(jié)點中會聚集子節(jié)點路由信息,如圖11所示,這表示當前網(wǎng)絡已經(jīng)組網(wǎng)完成,如果節(jié)點是鄰居直連,則下一跳使用null表示,ifname表示數(shù)據(jù)包發(fā)送接口。

      路由修復以節(jié)點B脫網(wǎng)為例,如圖12所示,當節(jié)點B故障時,A節(jié)點通過發(fā)送DIO消息并等待DAO消息,若在一定時間內(nèi)沒有收到,則會檢測出節(jié)點B出現(xiàn)故障,刪除故障節(jié)點路由。

      圖7 A節(jié)點組播DIO消息測試信息Fig.7 Test information for Node A multicast DIO messages

      圖8 B,C節(jié)點接收DIO消息測試信息Fig.8 Test information for node B and node C receiving DIO messages

      圖9 B,C節(jié)點構(gòu)建上行路由測試信息Fig.9 Test information fornode B and node C to build upward routes

      圖10 A節(jié)點構(gòu)建下行路由測試信息Fig.10 Test information for node A to build downward routes

      圖11 A節(jié)點存儲的路由測試信息Fig.11 Test information of the routes stored at node A

      圖12 A節(jié)點刪除錯誤路由測試信息Fig.12 Test information of node A deleting the wrong route

      4 結(jié)束語

      自治網(wǎng)絡作為當前一個較為新穎的研究方向,在當前的學術(shù)界以及相關(guān)領域被關(guān)注的不多,研究成果也較少。因此,本文以ANIMA工作組提出的自治網(wǎng)絡基礎結(jié)架構(gòu)中的自治控制平面為參考模型,重點是實現(xiàn)其中的路由協(xié)議來打通一個虛擬帶外網(wǎng)絡,在不依賴于節(jié)點的配置與全局路由表的情況下,依舊可以維持與網(wǎng)絡中節(jié)點的連通性,實現(xiàn)對于節(jié)點的管理與維護。本實現(xiàn)開拓性地在Linux系統(tǒng)下,結(jié)合網(wǎng)絡編程相關(guān)知識,使用C語言成功地實現(xiàn)了RPL路由模塊以及相應功能。實現(xiàn)結(jié)果表明,本文所設計的軟件系統(tǒng)能夠基本滿足自治控制平面中對路由的要求。

      猜你喜歡
      行路字段路由
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      舉步有禮 行路不難
      反洗錢行路致遠
      中國外匯(2019年6期)2019-07-13 05:44:14
      探究路由與環(huán)路的問題
      行路不知難
      CNMARC304字段和314字段責任附注方式解析
      無正題名文獻著錄方法評述
      PRIME和G3-PLC路由機制對比
      西行路上(組詩)
      吐魯番(2014年2期)2014-02-28 16:54:47
      WSN中基于等高度路由的源位置隱私保護
      計算機工程(2014年6期)2014-02-28 01:25:54
      信丰县| 郓城县| 余姚市| 莎车县| 中方县| 方正县| 双城市| 宝山区| 宝鸡市| 江口县| 宁波市| 黑水县| 沂源县| 永川市| 时尚| 湖州市| 旌德县| 德化县| 塔河县| 象山县| 景谷| 平定县| 屏东市| 时尚| 罗山县| 平潭县| 多伦县| 易门县| 茂名市| 宿迁市| 昔阳县| 柯坪县| 甘孜| 民丰县| 左贡县| 石台县| 玛多县| 都江堰市| 滕州市| 广安市| 潜山县|