NAT端口映射: napt,upnp以及nat-pmp

我喜歡用很簡單的話來概括:


natp是內部機器通過路由器也就是網(wǎng)關向外部發(fā)送網(wǎng)絡請求時,路由器記住內部機器的ip和端口,同時跟真正發(fā)送數(shù)據(jù)的外網(wǎng)端口綁定,產生一個臨時映射表,當收到外網(wǎng)數(shù)據(jù)以后通過這個映射表將數(shù)據(jù)轉發(fā)給內部機器。nat的多種映射類型以后再說。

upnp和nat-pmp差不多,就是在路由器和內部機器提供一個中間服務,內部機器請求upnp將其使用到的端口跟某個外網(wǎng)端口綁定,這樣當路由器收到外網(wǎng)請求時先去upnp里查找是否此外網(wǎng)端口已經(jīng)被upnp映射,如果被映射則將數(shù)據(jù)轉發(fā)到內部機器對應的端口。

napt是路由器肯定帶的功能,其產生的nat映射表有多種類型,但都有時效,也就是超過一段時間原來的nat映射就無效,然后新建新的nat映射。nat映射必須先由內部機器向外部網(wǎng)絡發(fā)起請求才會產生。

upnp是把映射關系長期保存下來,外部機器可以主動向內部機器請求網(wǎng)絡連接。 所以首先要路由器開啟upnp功能(一般由用戶去路由器設置里手動開啟upnp),然后內部機器的程序要自己實現(xiàn)upnp客戶端功能:主動查找upnp服務,主動增加映射、刪除映射等。

客戶端無法控制natp的映射,可以主動控制upnp映射。


從我目前對go-ethereum源碼中p2p的研究來看,以太坊只做了upnpt和nat-pmp的端口映射,而且實現(xiàn)是調用了第三方開源庫,但是沒有做NATP udp打洞。
比特幣源碼還沒看,不過應該也沒有做udp打洞穿越NAT.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容