之間建立第一通信連接。
[0122]代理節(jié)點接收到連接建立請求后,對該連接建立請求中攜帶的參數(shù)進行驗證,并在驗證通過的情況下與發(fā)起該連接建立請求的內(nèi)網(wǎng)節(jié)點之間建立第一通信連接。
[0123]可選地,本步驟可以包括如下幾個子步驟:
[0124]第一,代理節(jié)點檢測節(jié)點信息庫中是否存在節(jié)點標識。
[0125]第二,若節(jié)點信息庫中存在節(jié)點標識,則代理節(jié)點與內(nèi)網(wǎng)節(jié)點之間建立第一通信連接,并存儲節(jié)點標識、IP地址和端口號之間的對應關系。
[0126]其中,節(jié)點信息庫用于存儲已成功向節(jié)點發(fā)現(xiàn)服務器注冊的節(jié)點的節(jié)點信息,節(jié)點信息至少包括節(jié)點標識。在本實施例中,NAT組網(wǎng)中還包括位于公網(wǎng)中的節(jié)點發(fā)現(xiàn)服務器。節(jié)點發(fā)現(xiàn)服務器用于向各個節(jié)點(包括內(nèi)網(wǎng)節(jié)點和公網(wǎng)節(jié)點)提供注冊服務,完成注冊的節(jié)點才能與該網(wǎng)絡架構中的其它節(jié)點進行通信。節(jié)點發(fā)現(xiàn)服務器會將注冊成功的節(jié)點對應的節(jié)點信息提供給代理節(jié)點;相應地,代理節(jié)點將上述節(jié)點信息存儲于節(jié)點信息庫中。代理節(jié)點接收到內(nèi)網(wǎng)節(jié)點發(fā)起的連接建立請求后,從該連接建立請求中讀取請求連接的內(nèi)網(wǎng)節(jié)點的節(jié)點標識,并檢測該節(jié)點標識是否存在于節(jié)點信息庫中,也即檢測該請求連接的內(nèi)網(wǎng)節(jié)點是否已成功向節(jié)點發(fā)現(xiàn)服務器注冊;若該節(jié)點標識存在于節(jié)點信息庫中,則表明該請求連接的內(nèi)網(wǎng)節(jié)點已成功注冊,在這種情況下,代理節(jié)點響應該連接建立請求,與請求連接的內(nèi)網(wǎng)節(jié)點之間建立第一通信連接。另外,代理節(jié)點將該內(nèi)網(wǎng)節(jié)點的節(jié)點標識、IP地址和端口號對應存儲,以便后續(xù)轉(zhuǎn)發(fā)過程中使用。
[0127]在一種可能的實施方式中,如圖3B所示,內(nèi)網(wǎng)節(jié)點向節(jié)點發(fā)現(xiàn)服務器進行注冊的過程可包括如下幾個步驟:
[0128]步驟31,內(nèi)網(wǎng)節(jié)點經(jīng)NAT網(wǎng)關向節(jié)點發(fā)現(xiàn)服務器發(fā)送注冊請求。
[0129]由于節(jié)點發(fā)現(xiàn)服務器部署于公網(wǎng)中,因此內(nèi)網(wǎng)節(jié)點經(jīng)NAT網(wǎng)關向節(jié)點發(fā)現(xiàn)服務器發(fā)送注冊請求??蛇x地,注冊請求中包括該請求注冊的內(nèi)網(wǎng)節(jié)點的節(jié)點標識和端口號。
[0130]其中,內(nèi)網(wǎng)節(jié)點可通過如下兩種可能的方式確定其端口號:
[0131]在第一種可能的方式中,內(nèi)網(wǎng)節(jié)點隨機確定端口號。例如,內(nèi)網(wǎng)節(jié)點從1024-65535的端口號區(qū)間中隨機選取一個端口號作為其注冊時使用的端口號。采用隨機選取的方式確定端口號可以盡可能地減少請求注冊的節(jié)點之間發(fā)生地址端口沖突,提高注冊成功率。
[0132]在第二種可能的方式中,內(nèi)網(wǎng)節(jié)點從其對應的指定端口號區(qū)間內(nèi)選取端口號。例如,預先為不同的內(nèi)網(wǎng)節(jié)點分配不同的指定端口號區(qū)間,內(nèi)網(wǎng)節(jié)點從其對應的指定端口號區(qū)間內(nèi)選取端口號,可以完全避免地址端口沖突的情況發(fā)生,進一步提高注冊成功率。
[0133]步驟32,節(jié)點發(fā)現(xiàn)服務器從NAT網(wǎng)關接收注冊請求,并獲取NAT網(wǎng)關對應的公網(wǎng)IP地址。
[0134]步驟33,節(jié)點發(fā)現(xiàn)服務器根據(jù)公網(wǎng)IP地址和內(nèi)網(wǎng)節(jié)點的端口號,檢測內(nèi)網(wǎng)節(jié)點是否符合注冊條件。
[0135]其中,注冊條件是指已成功注冊的其它節(jié)點中不存在使用相同的公網(wǎng)IP地址和端口號的節(jié)點。當請求注冊的節(jié)點與已成功注冊的其它節(jié)點使用了相同的IP地址和端口號時,即會發(fā)生地址端口沖突,請求注冊的節(jié)點無法完成注冊。由于內(nèi)網(wǎng)中的多個內(nèi)網(wǎng)節(jié)點對應的公網(wǎng)IP地址相同,因此為了減少或避免地址端口沖突的情況發(fā)生,需要確保各個內(nèi)網(wǎng)節(jié)點使用不同的端口號進行注冊,采用上述步驟31中介紹的兩種方式確定端口號,可以充分減少或完全避免地址端口沖突的情況發(fā)生,充分提高注冊成功率。
[0136]步驟34,若內(nèi)網(wǎng)節(jié)點符合注冊條件,則節(jié)點發(fā)現(xiàn)服務器確定內(nèi)網(wǎng)節(jié)點注冊成功,并向代理節(jié)點發(fā)送對應于內(nèi)網(wǎng)節(jié)點的節(jié)點信息。
[0137]在確定請求注冊的內(nèi)網(wǎng)節(jié)點注冊成功的情況下,節(jié)點發(fā)現(xiàn)服務器向代理節(jié)點發(fā)送對應于該內(nèi)網(wǎng)節(jié)點的節(jié)點信息。其中,節(jié)點信息中至少包括該內(nèi)網(wǎng)節(jié)點的節(jié)點標識。可選地,節(jié)點信息中還可包括該內(nèi)網(wǎng)節(jié)點對應的公網(wǎng)IP地址和/或該內(nèi)網(wǎng)節(jié)點的端口號。
[0138]步驟35,代理節(jié)點接收節(jié)點信息,并將節(jié)點信息存儲于節(jié)點信息庫中。
[0139]代理節(jié)點將接收到的節(jié)點信息存儲于節(jié)點信息庫中,以便后續(xù)對請求連接的內(nèi)網(wǎng)節(jié)點進行驗證。
[0140]可選地,節(jié)點發(fā)現(xiàn)服務器還向各個其它節(jié)點(包括公網(wǎng)節(jié)點和內(nèi)網(wǎng)節(jié)點)廣播成功注冊的內(nèi)網(wǎng)節(jié)點對應的節(jié)點信息,以便其它節(jié)點獲取內(nèi)網(wǎng)中可通信的內(nèi)網(wǎng)節(jié)點的相關信息,如節(jié)點標識、IP地址和端口號等相關信息。
[0141]另外,公網(wǎng)節(jié)點向節(jié)點發(fā)現(xiàn)服務器進行注冊的過程與內(nèi)網(wǎng)節(jié)點的注冊過程類似,本實施例對此不再贅述。在公網(wǎng)節(jié)點注冊成功后,節(jié)點發(fā)現(xiàn)服務器向代理節(jié)點、各個內(nèi)網(wǎng)節(jié)點以及各個公網(wǎng)節(jié)點廣播該成功注冊的公網(wǎng)節(jié)點對應的節(jié)點信息。
[0142]步驟303,公網(wǎng)節(jié)點通過與代理節(jié)點之間建立的第二通信連接向代理節(jié)點發(fā)送第一消息報文,該第一消息報文中攜帶有第一目標節(jié)點標識。
[0143]結合參考圖1所示網(wǎng)絡架構,各個公網(wǎng)節(jié)點與代理節(jié)點之間建立有第二通信連接,該第二通信連接同樣為TCP連接。當公網(wǎng)節(jié)點需要向內(nèi)網(wǎng)中的任一內(nèi)網(wǎng)節(jié)點發(fā)送消息報文時,公網(wǎng)節(jié)點通過與代理節(jié)點之間建立的第二通信連接將該消息報文發(fā)送給代理節(jié)點,由代理節(jié)點進行轉(zhuǎn)發(fā)。
[0144]例如,當公網(wǎng)節(jié)點需要向某一目標內(nèi)網(wǎng)節(jié)點發(fā)送第一消息報文時,公網(wǎng)節(jié)點首先將該第一消息報文發(fā)送給代理節(jié)點,該第一消息報文中攜帶有上述目標內(nèi)網(wǎng)節(jié)點的節(jié)點標識。其中,公網(wǎng)節(jié)點可從節(jié)點發(fā)現(xiàn)服務器端獲取內(nèi)網(wǎng)中可通信的內(nèi)網(wǎng)節(jié)點的節(jié)點標識。
[0145]相應地,代理節(jié)點接收第一消息報文,并獲取第一目標節(jié)點標識。
[0146]步驟304,當?shù)谝荒繕斯?jié)點標識對應的第一目標節(jié)點屬于內(nèi)網(wǎng)節(jié)點時,代理節(jié)點通過與第一目標節(jié)點之間建立的第一通信連接向第一目標節(jié)點轉(zhuǎn)發(fā)第一消息報文。
[0147]在內(nèi)網(wǎng)中的第一目標節(jié)點通過上述步驟301和步驟302與代理節(jié)點之間已成功建立第一通信連接的情況下,代理節(jié)點通過該第一通信連接向第一目標節(jié)點轉(zhuǎn)發(fā)第一消息報文,從而實現(xiàn)公網(wǎng)節(jié)點與內(nèi)網(wǎng)節(jié)點間的通信。
[0148]需要補充說明的一點是:當公網(wǎng)節(jié)點需要向公網(wǎng)中的另一公網(wǎng)節(jié)點發(fā)送消息報文時,結合參考圖1所示網(wǎng)絡架構,由于各個公網(wǎng)節(jié)點之間直接建立有通信連接(如TCP連接),因此公網(wǎng)節(jié)點可通過與另一公網(wǎng)節(jié)點之間建立的通信連接直接向該另一公網(wǎng)節(jié)點發(fā)送消息報文。
[0149]還需要補充說明的一點是,內(nèi)網(wǎng)節(jié)點在與代理節(jié)點之間成功建立第一通信連接之后,為了保持該第一通信連接不被斷開,內(nèi)網(wǎng)節(jié)點可每隔預定時間間隔經(jīng)NAT網(wǎng)關向代理節(jié)點發(fā)送連接維護請求,該連接維護請求中包括內(nèi)網(wǎng)節(jié)點的節(jié)點標識。相應地,代理節(jié)點從NAT網(wǎng)關接收連接維護請求;檢測與該請求中攜帶的節(jié)點標識對應的內(nèi)網(wǎng)節(jié)點之間是否已經(jīng)建立有第一通信連接;若是,則代理節(jié)點繼續(xù)保持與內(nèi)網(wǎng)節(jié)點之間建立的第一通信連接。內(nèi)網(wǎng)節(jié)點通過主動維護與代理節(jié)點之間建立的第一通信連接,可確保該第一通信連接不被斷開,進而確保公網(wǎng)節(jié)點能夠順利地與自身進行通信。
[0150]上文介紹了公網(wǎng)節(jié)點向內(nèi)網(wǎng)節(jié)點以及公網(wǎng)節(jié)點向另一公網(wǎng)節(jié)點發(fā)送消息報文的過程,下面將介紹內(nèi)網(wǎng)節(jié)點向公網(wǎng)節(jié)點以及內(nèi)網(wǎng)節(jié)點向另一內(nèi)網(wǎng)節(jié)點發(fā)送消息報文的過程??蛇x地,步驟302之后還可包括如下步驟305至步驟307:
[0151]步驟305,內(nèi)網(wǎng)節(jié)點通過第一通信連接向代理節(jié)點發(fā)送第二消息報文,該第二消息報文中攜帶有第二目標節(jié)點標識。
[0152]當內(nèi)網(wǎng)節(jié)點需要向某一目標公網(wǎng)節(jié)點發(fā)送第二消息報文時,內(nèi)網(wǎng)節(jié)點首先通過與代理節(jié)點之間建立的第一通信連接將該第二消息報文發(fā)送給代理節(jié)點,該第二消息報文中攜帶有上述目標公網(wǎng)節(jié)點的節(jié)點標識。其中,內(nèi)網(wǎng)節(jié)點可從節(jié)點發(fā)現(xiàn)服務器端獲取公網(wǎng)中可通信的公網(wǎng)節(jié)點的節(jié)點標識。
[0153]當內(nèi)網(wǎng)節(jié)點需要向某一目標內(nèi)網(wǎng)節(jié)點發(fā)送第二消息報文時,內(nèi)網(wǎng)節(jié)點仍然通過與代理節(jié)點之間建立的第一通信連接將該第二消息報文發(fā)送給代理節(jié)點,該第二消息報文中攜帶有上述目標內(nèi)網(wǎng)節(jié)點的節(jié)點標識。其中,內(nèi)網(wǎng)節(jié)點可從節(jié)點發(fā)現(xiàn)服務器端獲取內(nèi)網(wǎng)中可通信的其它內(nèi)網(wǎng)節(jié)點的節(jié)點標識。
[0154]相應地,代理節(jié)點接收第二消息報文,并獲取第二目標節(jié)點標識。
[0155]步驟306,當?shù)诙繕斯?jié)點標識對應的第二目標節(jié)點屬于內(nèi)網(wǎng)節(jié)點時,代理節(jié)點通過與第二目標節(jié)點之間建立的第一通信連接向第二目標節(jié)點轉(zhuǎn)發(fā)第二消息報文。
[0156]步驟307,當?shù)诙繕斯?jié)點標識對應的第二目標節(jié)點屬于公網(wǎng)節(jié)點時,代理節(jié)點通過與第二目標節(jié)點之間建立的第二通信連接向第二目標節(jié)點轉(zhuǎn)發(fā)第二消息報文。
[0157]代理節(jié)點接收到第二消息報文后,從中獲取第二目標節(jié)點標識,并判斷該第二目標節(jié)點標識對應的第二目標節(jié)點屬于內(nèi)網(wǎng)節(jié)點還是屬于公網(wǎng)節(jié)點。當判斷出第二目標節(jié)點屬于內(nèi)網(wǎng)節(jié)點時,通過與該第二目標節(jié)點之間建立的第一通信連接向該第二目標節(jié)點轉(zhuǎn)發(fā)第二消息報文;而當判斷出第二目標節(jié)點屬于公網(wǎng)節(jié)點時,通過與該第二目標節(jié)點之間建立的第二通信連接向第二目標節(jié)點轉(zhuǎn)發(fā)第二消息報文。
[0158]需要補充說明的一點是:為了使得節(jié)點(包括內(nèi)網(wǎng)節(jié)點和公網(wǎng)節(jié)點)在內(nèi)網(wǎng)和公網(wǎng)中發(fā)生迀移時,能夠快速地確定自身的操作流程,確保節(jié)點間的正常通信,可預先為各個節(jié)點配置兩種不同的工作模式,如內(nèi)網(wǎng)模式和公網(wǎng)模式,并設定對應的開關參數(shù)。當需要將節(jié)點部署于內(nèi)網(wǎng)時,開啟內(nèi)網(wǎng)模式并關閉公網(wǎng)模式,使得節(jié)點執(zhí)行上述實施例中的內(nèi)網(wǎng)節(jié)點的操作流程;當需要將節(jié)點部署于公網(wǎng)時,開啟公網(wǎng)模式并關閉內(nèi)網(wǎng)模式,使得節(jié)點執(zhí)行上述實施例中的公網(wǎng)節(jié)點的操作流程。相應地,節(jié)點在啟動后,可檢查配置中的開關參數(shù)以確定自身的工作模式,并按照所確定的工作模式執(zhí)行對應的操作流程。通過上述方式,當需要將節(jié)點從內(nèi)網(wǎng)環(huán)境迀移至公網(wǎng)環(huán)境時,僅需簡單調(diào)整相關的開關參數(shù)即可,充分提高節(jié)點工作效率,同時具有很大的靈活性。
[0159]綜上所述,本實施例提供的方法,通過在公網(wǎng)中增加部署代理節(jié)點,由內(nèi)網(wǎng)節(jié)點主動向代理節(jié)點發(fā)起連接建立請求以建立第一通信連接,使得代理節(jié)點通過該第一通信連接轉(zhuǎn)發(fā)公網(wǎng)節(jié)點向內(nèi)網(wǎng)節(jié)點發(fā)送的第一消息報文;解決了相關技術中因公網(wǎng)節(jié)點無法主動與內(nèi)網(wǎng)節(jié)點之間建立通信連接,而導致公網(wǎng)節(jié)點與內(nèi)網(wǎng)節(jié)點之間的通信存在問題的問題;利用NAT網(wǎng)關不會限制內(nèi)網(wǎng)節(jié)點主動發(fā)起的連接這一特性,實現(xiàn)代理節(jié)點,由代理節(jié)點代理各個內(nèi)網(wǎng)節(jié)點的身份,各個公網(wǎng)節(jié)點需要發(fā)送給內(nèi)網(wǎng)節(jié)點的消息報文均發(fā)送給代理節(jié)點,并由代理節(jié)點將該消息報文轉(zhuǎn)發(fā)至目標內(nèi)網(wǎng)節(jié)點,實現(xiàn)了公網(wǎng)節(jié)點與內(nèi)網(wǎng)節(jié)點間的通信。
[0160]另外,還通過內(nèi)網(wǎng)節(jié)點隨機確定端口號或者從其對應的指定端口號區(qū)間內(nèi)選取端口號,充分減少或完全避免了地址端口沖突的情況發(fā)生,充分提高了注冊成功率。
[0161]特別地,當上述方法應用于提供互聯(lián)網(wǎng)服務的