y報文,則xTR4檢測到虛擬機(jī)VMC迀出。xTR4檢測到虛擬機(jī)VMC迀出后,會發(fā)送組播Map Notify通知本數(shù)據(jù)中心其它xTR虛擬機(jī)VMC迀出,該組播Map Notify報文也是重傳3次。因此,在該組播Map Notify重傳結(jié)束后,如果DC2再新上線一臺XTR5,xTR5也感知不到VMC的迀出。當(dāng)xTR3與VMC通信的流量,走老的路由發(fā)送到xTR5時,匹配到直連路由,從而觸發(fā)ARP學(xué)習(xí),由于VMC已經(jīng)從DC2迀出到DCl 了,顯然無法學(xué)習(xí)VMC的ARP,因此也會導(dǎo)致流量不通,且始終無法切換新的正確路徑。
[0039]基于上述分析,本發(fā)明實施例提供了一種在LISP網(wǎng)絡(luò)中的虛擬機(jī)迀移信息處理方法,以解決虛擬機(jī)迀移后,新上線xTR感知不到虛擬機(jī)迀移,從而導(dǎo)致的流量不通問題。
[0040]通過對圖1所示處理過程進(jìn)行分析發(fā)現(xiàn),新上線的xTR無法感知到虛擬機(jī)的迀入或者迀出是因為收不到組播Map Notify報文。為了使新上線xTR能感知到虛擬機(jī)的迀移;需要解決下面幾個問題:
[0041]問題1,如何讓在線xTR感知到有新上線的xTR。
[0042]問題2,如何決定由哪些在線xTR將哪些虛擬機(jī)迀移信息通知給新上線xTR。
[0043]下面結(jié)合圖2和圖3,對本發(fā)明實施例提供的在LISP網(wǎng)絡(luò)中的虛擬機(jī)迀移信息處理方法進(jìn)行詳細(xì)說明。
[0044]圖2是本發(fā)明實施例提供的在LISP網(wǎng)絡(luò)中新上線的xTR處理虛擬機(jī)迀移信息的流程圖。
[0045]如圖2所示,該流程包括:
[0046]步驟201,xTR在上線時,發(fā)送上線通知消息。
[0047]本步驟中,xTR在上線時,發(fā)送上線通知消息,使得其他在線xTR能夠感知該新上線的xTR,并且,所述在線xTR在接收到所述上線通知消息后,查詢虛擬機(jī)迀移路由表,根據(jù)查詢結(jié)果反饋上線通知應(yīng)答消息。
[0048]步驟202,該新上線的xTR接收上線通知應(yīng)答消息,解析所述上線通知應(yīng)答消息,得到所述上線通知應(yīng)答消息中攜帶的虛擬機(jī)迀移信息。
[0049]由圖2可見,本發(fā)明實施例通過由新上線的xTR向在線xTR發(fā)送上線通知消息,使得在線xTR能夠感知到新上線的xTR,從而解決了上述問題I。
[0050]新上線xTR如何知道向哪些xTR發(fā)送上線通知消息呢? 一種方法是廣播所述上線通知消息,但是廣播會導(dǎo)致該廣播域內(nèi)的所有xTR都收到該上線通知消息,導(dǎo)致資源浪費。新上線xTR有本數(shù)據(jù)中心同組所有其它xTR的RLOC地址,為了避免資源浪費,合理的方法是遍歷這些本數(shù)據(jù)中心同組的RLOC地址,向遍歷到的每個RLOC地址對應(yīng)的xTR單播發(fā)送該上線通知消息。
[0051]具體地,xTR在上線時,遍歷該xTR自身所在的數(shù)據(jù)中心中與該隧道路由器同組的所有在線xTR,向遍歷到的每個xTR單播發(fā)送上線通知消息,以使得在線xTR感知到該新上線的xTR。
[0052]進(jìn)一步地,為了避免由于消息丟失等原因?qū)е峦ㄖ?,本發(fā)明實施例可以設(shè)計重傳機(jī)制,在上線通知消息發(fā)出后預(yù)設(shè)時長未收到相應(yīng)的上線通知應(yīng)答消息時,重傳所述上線通知消息。
[0053]在一種實施方式中,可以對Map Request報文和Map Reply報文進(jìn)行擴(kuò)展,并對擴(kuò)展后的Map Request報文和Map Reply報文的處理流程進(jìn)行改進(jìn),來實現(xiàn)圖2所示的方法。
[0054]具體地,對Map Request報文和Map Reply報文的選項字段進(jìn)行擴(kuò)展,擴(kuò)展一個新的比特位用來表示該Map Request報文是xTR的上線通知消息,該Map Reply報文應(yīng)答報文為上線通知應(yīng)答消息。該擴(kuò)展比特位可以稱為在線(On Line, 0L)位。新上線的xTR通過發(fā)送帶OL比特位的Map Request報文來通知本數(shù)據(jù)中心其它xTR有新xTR上線,在線xTR通過發(fā)送帶OL比特位的Map Reply報文應(yīng)答所述上線通知消息。
[0055]在該實施方式中,為了防止帶OL比特位的Map Request報文丟失,需要設(shè)-H個重傳機(jī)制。新上線xTR發(fā)送上線通知消息后,將Map Request報文加入重傳鏈表。如果沒有收到帶OL標(biāo)記的MapReply應(yīng)答報文,則每隔預(yù)定時間(比如40秒)重傳一次,如果收到應(yīng)答報文則停止重傳。
[0056]在線xTR在收到Map Request報文后,通過OL比特位判斷該Map Request報文為新xTR的上線通知消息。然后在線xTR對這種報文做特殊處理:不去請求Map Cache表項,而是通過Map Reply報文來把虛擬機(jī)迀移的信息通知給新上線xTR。
[0057]為了使Map Reply報文能攜帶虛擬機(jī)迀移信息,還需要對Map Reply報文進(jìn)行進(jìn)一步的改動。
[0058]在一種實施方式中,在線xTR可以通過如下方式在Map Reply報文中攜帶虛擬機(jī)迀移信息:在攜帶虛擬機(jī)迀入信息時,將Map Reply消息的Record字段中預(yù)設(shè)比特位的取值設(shè)置為第一取值,在攜帶虛擬機(jī)迀出信息時,將所述Record字段中預(yù)設(shè)比特位的取值設(shè)置為第二取值,將需要攜帶的發(fā)生虛擬機(jī)迀移的主機(jī)的EID地址寫入所述Record字段,在沒有需要攜帶的虛擬機(jī)迀移信息時,將所述Record字段中預(yù)設(shè)比特位的取值設(shè)置為第三取值。比如,可以將Map R印Iy報文的Record字段中的預(yù)設(shè)比特位設(shè)置為迀移類型標(biāo)志(MoveFlag)位,在該MoveFlag位的取值為第一取值時表示虛擬機(jī)迀入、為第二取值時表示虛擬機(jī)迀出、為第三取值時表示不存在虛擬機(jī)迀移信息,比如,用值I表示迀入,值2表示迀出,值3表示沒有迀移信息。其中,所述MoveFlag位可以是Map Reply報文的Record字段中已有的保留位,也可以是新擴(kuò)展的保留位,比如,對Map Reply報文的Record保留位進(jìn)行擴(kuò)展,得到MoveFlag位。
[0059]新上線的xTR收到該帶OL位的Map Reply報文后,通過解析Map Reply報文,得到虛擬機(jī)迀移信息。具體地,新上線的xTR收到該帶OL位的Map Reply報文后,解析所述MapReply消息得到所述Map Reply消息的預(yù)設(shè)比特位的取值,在所述預(yù)設(shè)比特位為第一取值時表示虛擬機(jī)迀入、為第二取值時表示虛擬機(jī)迀出、為第三取值時表示不存在虛擬機(jī)迀移信息,在所述預(yù)設(shè)比特位為第一取值或第二取值時,將解析得到的Record字段中的EID地址確定為發(fā)生虛擬機(jī)迀移的主機(jī)的EID地址。新上線的xTR根據(jù)得到的虛擬機(jī)迀移信息,進(jìn)行相應(yīng)的迀入、迀出處理。
[0060]圖3是本發(fā)明實施例提供的在LISP網(wǎng)絡(luò)中在線xTR處理虛擬機(jī)迀移信息的流程圖。
[0061 ] 如圖3所示,該流程包括:
[0062]步驟301,在線隧道路由器在檢測到虛擬機(jī)迀移時,判斷該在線隧道路由器是否是首先獲知該虛擬機(jī)迀移的信息,在虛擬機(jī)迀移路由表中設(shè)置標(biāo)識信息用于記錄所述判斷結(jié)果O
[0063]本步驟中,在線隧道路由器對虛擬機(jī)迀移路由表進(jìn)行特殊處理,從而為后續(xù)反饋虛擬機(jī)迀移信息做準(zhǔn)備。
[0064]步驟302,所述在線隧道路由器接收上線通知消息,所述上線通知消息由其他隧道路由器在上線時發(fā)送。
[0065]本步驟中,在線隧道路由器通過所述上行通知消息,能夠感知到新上線的隧道路由器。
[0066]步驟303,所述在線隧道路由器查詢所述虛擬機(jī)迀移路由表,根據(jù)所述虛擬機(jī)迀移路由表中的標(biāo)識信息篩選出首先獲知的虛擬機(jī)迀移信息,將所述首先獲知的虛擬機(jī)迀移信息攜帶在上線通知應(yīng)答消息中,反饋所述上線通知應(yīng)答消息。
[0067]本步驟中,在線隧道路由器基于預(yù)先經(jīng)過特殊處理的虛擬機(jī)迀移路由表,篩選出首先獲知的虛擬機(jī)迀移信息并反饋給新上線的隧道路由器。
[0068]可見,新上線的隧道路由器通過接收各個在線隧道路由器反饋的虛擬機(jī)迀移信息,不僅能夠獲得全部的虛擬機(jī)迀移信息,而且,各個在線隧道路由器反饋的虛擬機(jī)迀移信息相互不重復(fù),也能夠避免資源浪費。
[0069]關(guān)于上述問題2,由于新上線xTR會遍歷本數(shù)據(jù)中心的與該新上線xTR同組的所有在線xTR發(fā)送帶OL比特的Map Request報文,因此,一種方式是所有收到該上線通知消息的xTR都將自己的虛擬機(jī)迀移信息發(fā)給新上線的xTR,顯然這種方式會造成大量的浪費。為了避免這種情況,本發(fā)明實施例提供了一種對執(zhí)行反饋迀移信息的xTR進(jìn)行選擇、以及對反饋的迀移信息選擇的方法,即選擇由哪些在線xTR來發(fā)送哪些迀移信息。
[0070]具體地,在本發(fā)明實施例中,在線xTR在收到上線通知消息后,查詢虛擬機(jī)迀移路由表,判斷虛擬機(jī)迀移路由表中的虛擬機(jī)迀移信息是否是由該隧道路由器首先獲知,如果是,將該條首先獲知的虛擬機(jī)迀移信息攜帶在上線通知應(yīng)答消息中,否則,在上線通知應(yīng)答消息不攜帶該條虛擬機(jī)迀移信息,其中,xTR在檢測到虛擬機(jī)迀移信息時,判斷該xTR是否是第一個檢測到該條虛擬機(jī)迀移信息,并在虛擬機(jī)迀移路由表中記錄判斷結(jié)果。換言之,在線xTR僅在存在第一個由該xTR得知的虛擬機(jī)迀移信息時,才反饋上線通知應(yīng)答消息,并且,在上線通知應(yīng)答消息中僅攜帶由該xTR第一個得知的虛擬機(jī)迀移信息,從而避免大量的xTR重復(fù)反饋攜帶相同虛擬機(jī)迀移信息的上線通知應(yīng)答消息,避免了資源浪費。
[0071]關(guān)于具體如何判斷xTR是否是第一個檢測到某條虛擬機(jī)迀移信息,本發(fā)明實施例提出:
[0072]對于虛擬機(jī)迀入信息,當(dāng)xTR通過虛擬機(jī)的報文檢測到所述虛擬機(jī)迀入時,確定該xTR是第一個檢測到該虛擬機(jī)迀入,因此該xTR在下發(fā)的該虛擬機(jī)的迀入路由信息中攜帶首先獲知的標(biāo)志信息,當(dāng)xTR通過組播通知例如組播Map Notify消息檢測到虛擬機(jī)迀入時,確定該xTR不是第