一種檢測nat網絡類型的方法及裝置的制造方法
【技術領域】
[0001]本發明涉及NAT檢測領域,特別涉及一種檢測NAT網絡類型的方法及裝置。
【背景技術】
[0002]在對等計算P2P網絡中由于網絡地址轉換NAT設備的存在,P2P節點一般需要先檢測NAT網絡類型。
[0003]現有技術中,國際互聯網工程任務組IETF推薦使用RFC3489中描述的STUN (Simple Traversal of UDP over NATs, NAT的UDP簡單穿越)協議來進行網絡類型檢測,在RFC3489文檔中描述了一種基于C/S結構的NAT檢測方法。這種方法能比較精確地檢測得到網絡類型,但需要為P2P網絡提供額外的STUN服務器,這樣使得P2P網絡的運行成本較高和網絡架構較為復雜。
【發明內容】
[0004]本發明實施例的目的在于提供一種檢測NAT網絡類型的方法及裝置,以避免NAT網絡類型檢測對于STUN服務器的依賴,從而降低P2P網絡的運行成本和網絡架構復雜度。具體技術方案如下:
[0005]第一方面,本發明實施例提供了一種檢測NAT網絡類型的方法,應用于第一節點,其中,所述第一節點為對等計算P2P網絡中的任意一節點,所述方法包括:
[0006]在預定網絡類型檢測時刻,通過自身第一端口向所述P2P網絡中的其他節點的相應第二端口發送第一 PING請求消息,通過自身第二端口監聽其他節點通過相應第一端口發送的第二 PING請求消息,并通過自身第二端口和自身第一端口監聽接收到第一 PING請求消息的其他節點通過相應第一端口和第二端口發送的PING應答消息,其中,所述第一PING請求消息和第二 PING請求消息均至少攜帶有作為目的者的節點的網絡地址和作為目的端口的第二端口,任意一 PING應答消息均至少攜帶有發送該PING應答消息的節點的網絡地址轉換NAT網絡類型、該PING應答消息的發送端口、以及發送相應PING請求消息的節點的網絡地址和作為目的端口的第一端口或第二端口 ;
[0007]當預設檢測時間段內通過自身第二端口監聽到其他節點發送的第二 PING請求消息時,判斷自身的NAT網絡類型是否被確定出,如果是,忽略所監聽到的該第二 PING請求消息,如果否,基于所監聽到的該第二 PING請求消息所攜帶的網絡地址,確定自身的NAT網絡類型,并且,分別通過自身第一端口和自身第二端口向相應其他節點反饋PING應答消息;
[0008]當預設PING請求響應時間段內通過第一端口和/或第二端口監聽到接收第一PING請求消息的其他節點反饋的PING應答消息時,更新發送該PING應答消息的相應其他節點的NAT網絡類型,并判斷自身的NAT網絡類型是否被確定出,如果是,忽略所監聽到的該PING應答消息,否則,繼續判斷當前是否接收到至少兩個PING應答消息,并在是的情況下,基于所接收到的至少兩個PING應答消息所攜帶的發送端口和網絡地址,確定自身的NAT網絡類型。
[0009]可選的,本發明實施例所提供的一種檢測NAT網絡類型的方法還包括:
[0010]通過自身第一端口向所述P2P網絡中的其他節點的相應第二端口發送第一 PING請求消息之后,當預設PING請求響應時間段內未通過第一端口和/或第二端口監聽到接收第一 PING請求消息的任意一其他節點反饋的PING應答消息時,重新通過自身第一端口向所述P2P網絡中的其他節點的相應第二端口發送第一 PING請求消息;
[0011]在重發發送的次數達到預定次數閾值后,如果未通過第一端口和/或第二端口監聽到接收第一 PING請求消息的任意一其他節點反饋的PING應答消息,且自身的NAT網絡類型未被確定出,則確定自身的NAT網絡類型為BLOCKED類型。
[0012]可選的,所述基于所監聽到的該第二 PING請求消息所攜帶的網絡地址,確定自身的NAT網絡類型,包括:
[0013]判斷所監聽到的第二 PING請求消息所攜帶的網絡地址是否與自身的網絡地址相同,如果是,確定自身的NAT網絡類型為PUBLIC類型,否則,確定自身的NAT網絡類型為FULLC0NE 類型。
[0014]可選的,所述基于所接收到的至少兩個PING應答消息所攜帶的發送端口和網絡地址,確定自身的NAT網絡類型,包括:
[0015]從所述至少兩個PING應答消息中篩選出兩個PING應答消息;
[0016]判斷所篩選出的兩個PING應答消息所攜帶的網絡地址和發送端口是否均相同,如果否,確定自身的NAT網絡類型為SYMMETRIC類型,如果是,則繼續判斷所述至少兩個PING應答消息中是否存在除所篩選出的兩個PING應答消息以外的發送端口為第一端口的PING應答消息,如果存在,則確定自身的NAT網絡類型為RESTRICTED類型,如果不存在,則確定自身的NAT網絡類型為PORTRESTRICTED類型。
[0017]第二方面,本發明實施例還提供了一種檢測NAT網絡類型的裝置,應用于第一節點,其中,所述第一節點為對等計算P2P網絡中的任意一節點,所述裝置包括:
[0018]消息泛洪模塊,用于在預定網絡類型檢測時刻,通過自身第一端口向所述P2P網絡中的其他節點的相應第二端口發送第一 PING請求消息,通過自身第二端口監聽其他節點通過相應第一端口發送的第二 PING請求消息,并通過自身第二端口和自身第一端口監聽接收到第一 PING請求消息的其他節點通過相應第一端口和第二端口發送的PING應答消息,其中,所述第一 PING請求消息和第二 PING請求消息均至少攜帶有作為目的者的節點的網絡地址和作為目的端口的第二端口,任意一 PING應答消息均至少攜帶有發送該PING應答消息的節點的NAT網絡類型、該PING應答消息的發送端口、以及發送相應PING請求消息的節點的網絡地址和作為目的端口的第一端口或第二端口 ;
[0019]PING請求消息分析模塊,當預設檢測時間段內通過自身第二端口監聽到其他節點發送的第二 PING請求消息時,判斷自身的NAT網絡類型是否被確定出,如果是,忽略所監聽到的該第二 PING請求消息,如果否,基于所監聽到的該第二 PING請求消息所攜帶的網絡地址,確定自身的NAT網絡類型,并且,分別通過自身第一端口和自身第二端口向相應其他節點反饋PING應答消息;
[0020]PING應答消息分析模塊,當預設PING請求響應時間段內通過第一端口和/或第二端口監聽到接收第一 PING請求消息的其他節點反饋的PING應答消息時,更新發送該PING應答消息的相應其他節點的NAT網絡類型,并判斷自身的NAT網絡類型是否被確定出,如果是,忽略所監聽到的該PING應答消息,否則,繼續判斷當前是否接收到至少兩個PING應答消息,并在是的情況下,基于所接收到的至少兩個PING應答消息所攜帶的發送端口和網絡地址,確定自身的NAT網絡類型。
[0021]可選的,本發明實施例所提供的一種檢測NAT網絡類型的裝置還包括:
[0022]PING請求消息重發模塊,通過自身第一端口向所述P2P網絡中的其他節點的相應第二端口發送第一PING請求消息之后,當預設PING請求響應時間段內未通過第一端口和/或第二端口監聽到接收第一 PING請求消息的任意一其他節點反饋的PING應答消息時,重新通過自身第一端口向所述P2P網絡中的其他節點的相應第二端口發送第一 PING請求消息;
[0023]在重發發送的次數達到預定次數閾值后,如果未通過第一端口和/或第二端口監聽到接收第一 PING請求消息的任意一其他節點反饋的PING應答消息,且自身的NAT網絡類型未被確定出,則確定自身的NAT網絡類型為BLOCKED類型。
[0024]可選的,所述PING請求消息分析模塊具體用于:
[0025]判斷所監聽到的第二 PING請求消息所攜帶的網絡地址是否與自身的網絡地址相同,如果是,確定自身的NAT網絡類型為PUBLIC類型,否則,確定自身的NAT網絡類型為FULLC0NE 類型。
[0026]可選的,所述PING應答消息分析模塊具體用于:
[0027]從所述至少兩個PING應答消息中篩選出兩個PING應答消息;
[0028]判斷所篩選出的兩個PING應答消息所攜帶的網絡地址和發送端口是否均相同,如果否,確定自身的NAT網絡類型為SYMMETRIC類型,如果是,則繼續判斷所述至少兩個PING應答消息中是否存在除所篩選出的兩個PING應答消息以外的發送端口為第一端口的PING應答消息,如果存在,則確定自身的N