基本介紹
簡介,算法,套用,
簡介
其基本思想是這樣的:讓位於NAT後的兩台主機都與處於公共地址空間的、眾所周知的第三台伺服器相連,然後,一旦NAT設備建立好UDP狀態信息就轉為直接通信,並寄希望於NAT設備會在分組其實是從另外一個主機傳送過來的情況下仍然保持當前狀態。
這項技術需要一個圓錐型NAT設備才能夠正常工作。對稱型NAT不能使用這項技術。
相同的技術有時還被用於TCP連線——儘管遠沒有UDP成功。
算法
假設有兩台分別處於各自的私有網路中的主機:A和B;N1和N2是兩個網路的NAT設備,分別擁有IP位址P1和P2;S是一個使用了一個眾所周知的、從全球任何地方都能訪問得到的IP位址的公共伺服器。
步驟一:A和B分別和S建立UDP連線;NAT設備N1和N2創建UDP轉換狀態並分配臨時的外部連線埠號。
步驟二:S檢查UDP包,看A和B的連線埠是否是正在被使用的(否則的話N1和N2應該是套用了連線埠隨機分配,這會讓路由驗證變得更麻煩)。
步驟三:如果連線埠不是隨機化的,那么A和B各自選擇連線埠X和Y,並告知S。S會讓A傳送UDP包到P2:Y,讓B傳送UDP包到P1:X。
步驟四:A和B通過轉換好的IP位址和連線埠直接聯繫到對方的NAT設備。
套用
對於大型公司網路中常見的對稱NAT設備(也稱為雙向NAT),UDP打洞不起作用。在對稱NAT中,與著名STUN伺服器的連線關聯的NAT映射受限於從知名伺服器接收數據,因此眾所周知的伺服器看到的NAT映射對端點來說並不是有用的信息。