NAT(網絡地址轉換)
NAT(Network Address Translation)網絡地址轉換
NAT
- 網絡被分為私網和公網兩個部分,NAT網關設置在私網到公網的路由出口位置,雙向流量必須都要經過NAT網關;
- 網絡訪問只能先由私網側發起,公網無法主動訪問私網主機;
- NAT網關在兩個訪問方向上完成兩次地址的轉換或翻譯,出方向做源信息替換,入方向做目的信息替換;
- NAT網關的存在對通信雙方是保持透明的;
- NAT網關為了實現雙向翻譯的功能,需要維護一張關聯表,把會話的信息保存下來。
4種典型NAT類型
按照NAT設備在進行地址映射時行為的不同,NAT可以分為以下四種:
1.Full-cone NAT, also known as one-to-one NAT 全錐形NAT
一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。任意外部主機都能通過給eAddr:port2發包到達iAddr:port1
2.Address-restricted-cone NAT 限制錐形NAT
一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。任意外部主機(hostAddr:any)都能通過給eAddr:port2發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:any. "any"也就是說端口不受限制(其實就是內部必須發送過包的IP地址,才能向這個eAddr:port2發送包)
3.Port-restricted cone NAT 端口限制錐形NAT
一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。一個外部主機(hostAddr:port3)能夠發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:port3.(在上一條的基礎上增加了發送過包的IP地址+端口)
4.Symmetric NAT 對稱型NAT
來自相同內部ip和port發送到相同目的地ip和port的請求被映射到唯一的外部ip和port地址;如果相同的內部主機采用相同的ip和port地址發送到不同的目的地,那么重新分配映射地址。
只有先前收到內部主機發送的包的外部主機才能夠發送返回包到內部主機。
各種網絡環境下的P2P通信解決方法:
- 雙方在一個局域網內,直接通過內網地址通信;
- 雙方都有公網地址,直接通過公網地址通信;
- 一方有公網地址,一方在NAT后,由NAT后的一方主動發起通信;
- 如果通信雙方都位於NAT后面,且雙方的NAT類型都是cone NAT,那么可以通過一個STUN服務器發現自己的NAT類型以及內網和外網傳輸地址映射信息,然后通過Signaling(信令服務器,實現了SIP協議的主機)交換彼此的NAT類型及內網和外網傳輸地址映射信息,然后通過UDP打洞的方式建立通信連接;
- 如果通信雙方有一方的NAT類型是Symmetric NAT,則無法直接建立P2P連接,這個時候就需要借助TURN(Traversal Using Relay NAT)即轉發服務器來實現間接通信;