UDP 構建p2p打洞過程的實現原理
雙方都在區域網內就沒有辦法TCP直連了,所以像QQ等都會盡量使用UDP直連的 IP地址轉換不需要你處理,閘道器預設就已經進行了轉換。伺服器接收到DatagramPacket中getAddress和getPort已經是閘道器的埠 UDP打洞的過程大致如此: 1、雙方都通過UDP與伺服器通訊後,閘道器預設就是做了一個外網IP和埠號 與你內網IP與埠號的對映,這個無需設定的,伺服器也不需要知道客戶的真正內網IP 2、使用者A先通過伺服器知道使用者B的外網地址與埠 3、使用者A向用戶B的外網地址與埠傳送訊息, 4、在這一次傳送中,使用者B的閘道器會拒收這條訊息,因為它的對映中並沒有這條規則。 5、但是使用者A的閘道器就會增加了一條允許規則,允許接收從B傳送過來的訊息 6、伺服器要求使用者B傳送一個訊息到使用者A的外網IP與埠號 7、使用者B傳送一條訊息,這時使用者A就可以接收到B的訊息,而且閘道器B也增加了允許規則 8、之後,由於閘道器A與閘道器B都增加了允許規則,所以A與B都可以向對方的外網IP和埠號傳送訊息
對於這個過程的瞭解,可以看以下部落格
------------------------------------------------------------------------------------------
通過UDP路由驗證實現NAT穿越是一種在處於使用了NAT的私有網路中的Internet主機之間建立雙向UDP連線的方法。由於NAT的行為是非標準化的,因此它並不能應用於所有型別的NAT。
其基本思想是這樣的:讓位於NAT後的兩臺主機都與處於公共地址空間的、眾所周知的第三臺伺服器相連,然後,一旦NAT裝置建立好UDP狀態資訊就轉為直接通訊,並寄希望於NAT裝置會在分組其實是從另外一個主機傳送過來的情況下仍然保持當前狀態。
這項技術需要一個圓錐型NAT裝置才能夠正常工作。對稱型NAT不能使用這項技術。
這項技術在P2P軟體和VoIP電話領域被廣泛採用。它是Skype用以繞過防火牆和NAT裝置的技術之一。
相同的技術有時還被用於TCP連線——儘管遠沒有UDP成功。