穿越NAT的UDP通訊

如果ClientA和ClientB都在不同的NAT設備後面,如果不通過配置NAT設備,TCPIP是不能直接建立連接的。而通過UDP端口反彈,可以輕鬆建立連接。

先討論ClientA和ClientB都在不同的NAT設備後面的情況。

假設:A的外部地址【A的NAT設備的外部合法地址】Anat,B的外部地址Bnat。

原理:一般的NAT設備,對於接收到的UDP數據包,只有當內部已經有發送到這個數據包的源地址和源端口的數據包時,纔會轉發給內部主機。否則會丟棄。這個原理只適應UDP協議而不適應TCPIP協議。

步驟:

1)A直接向B的NAT設備地址Bnat發送UDP包,該包一般情況下【取決於B的NAT設備類型】會被B的NAT拋棄,但是通過發送該包,A的NAT設備打開了一個可以接收來自B的NAT設備的UDP數據包的"通道";

2)A通過server向B的NAT設備地址Bnat轉發UDP包,請求B向A的NAT設備地址Anat發送UDP包。因爲B已經向server發送過UDP包,B的NAT設備會將該請求包轉發給B。

3)此時,B向A的NAT設備地址Anat發送UDP包,因爲在第1)步中,A的NAT設備已經打開了通道,該包會由A的NAT設備正確轉發給A。同時,B的NAT設備也打開了一個可以接收來自A的NAT設備的UDP包的"通道"。

4)此後,A可以和B直接通過Anat和Bnat進行UDP通訊,不需要通過server了。

5)還有一點值得提到,以後,A或者B中的任何一個,都可以作爲另外一個和第3方如C之間建立UDP連接的中轉Server(即上文中的Server)

6)另外,對於多級NAT情況,上面提到的UDP端口反彈技術,都可以自動適應。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章