P2P技術詳解 : NAT详解——详细原理、P2P简介 - killelder/cryptocurrency GitHub Wiki
IPv4
IPv4地址其實早在20年前就即將耗盡了, 但是NAT的出現延後了IPv4的浩劫
NAT(Network Address Translation) 網路地址轉換
NAT出現以後人們幾乎忘了Ipv4的地址即將耗盡, 撐了20年之久, 足見NAT技術之成功
NAT的概念模型
NAT就是網路地址轉換, 通常部屬在一個組織的網路出口位置
通過將內部網路IP地址替換為出口的IP地址提供公網可達姓和上層協議的連結能力
RFC1918規定了三個保留地指段落: 10.0.0.0-10.255.255.255; 172.16.0.0-172.31.255.255; 192.168.0.0-192.168.255.255
這三個IP不能向特定的用戶分配, 被IANA作為私有地址保留
所以這些地址不能作為全球路由地址
僅可以在組織或企業內部使用, 而不會與外部Internet打架
然而當內部的網路想要訪問外面的Internet, 就要在組織的出口部屬NAT網關
在離開私網進入Internet時, 將IP替換為公網地址
出口網關再將資料傳回內部地址
NAT有幾個特點 :
- 雙向流量都必須通過NAT網關
- 公網無法主動訪問私網主機
- NAT在兩個訪問方向上完成兩次地址的轉換或翻譯
- NAT網關的存在對通信雙方是保持透明的
- NAT網關為了實現雙向翻譯功能, 需要維護一張關聯表, 把繪畫的信息保存下來
其中第二點打破了IP協議價購中, 所有節點在通訊中的對等地位, 為對等通訊帶來了許多問題
一對多的NAT
如果NAT址進行IPD地址的簡單替換時, 就會產生一個問題
當有多個內部主機去訪問同一個服務器時, 從返回的信息不足以區分應該轉發到哪個內部主機
NAT設備必須根據傳輸層信息或其他上層協議去區分不同的對話
並且可能要對上層協議的標示進行轉換, 比如TCP或UDP端口號
NAT的限制與解決方案
IP點到點服務模型
IP協議定義了每個節點都是平等的, 可以當Client, 也可以當Server
然而NAT卻破壞了IP端到端的通信能力
因為公網不能夠主動對內網訪問
NAT的弊端
NAT在解決IPv4問題上, 其實存在很多問題
首先, NAT使IP對話的保持時效變短, 因為NAT資源有限, 所以必須要做資源回收的功能
所以如果需要維持連接的時間大於NAT設置的時間, 通信就會中斷
解決這個問題的方法就是, 主動發送一個NAT能感知道又沒有實際數據的保持通話消息, 讓NAT一直活著
其次, 因為多個內部主機發出的連接到一個IP上, 使得依賴IP進行主機追蹤機制都失效了
此外, 因為NAT工作機制依賴於修改IP包頭的信息, 會妨礙一些安全協議的工作
然而認證協議就是要保證信息在傳遞過程中沒有變化
NAT穿越技術
前面講了NAT的弊端, 然而沒有一種完美的方法能夠解決
下面每一種方法都還需要在內部主機, 應用程序或者NAT網關上增加額外的處理
應用層網關 (ALG)
應用層網關是解決NAT不感知應用協議的最常用方法, 額外為每個應用協議訂製協議分析功能
這樣NAT網關就能理解並支持特定的協議
然而應用協議的數量不斷發展變化, 網路維護人員不可能隨時更新
所以ALG只能解決用戶最常用的需求
另外安全性的關係, 有些應用類型從源端發出就已經加密, 這種ALG無法進行分析
探針技術STUN和TURN
通過在所有參與通信的實體上安裝探測插件, 檢測網路中是否存在NAT網關
中間件技術
也是一種通過開發通用方法解決NAT穿越問題的努力, 與前者不同的是
NAT網關是這一解決方案的餐與者
與ALG不同在於, 客戶端會參與網關公網映射信息的維護
中繼代理技術
這準確地說應該是NAT旁路技術, 就是在NAT網關所在的位置旁邊放一個應用伺服器
與ALG有很大的相似性
特定協議的字穿越技術
最可靠也最複雜的就是自己解決自己的問題
下一篇整理NAT穿越
後IPv4時代的NAT
NAT已經出色的完成了自己的歷史使命, IPv4比預期走得更遠
但是IPv6無法平滑的取代IPv4, 導致IP升級步伐緩慢
以上沒有詳述, 可以參考P2P技術詳解: NAT詳解