一個令人匪夷所思的NAT地址轉換
一個房間里面有兩臺電腦,今天查百度ip地址,查詢結果兩臺電腦不一樣;過兩天再百度ip地址,查詢結果變成一樣的了!這是什么情況呢?
由于全球IPv4地址的緊缺,運營商家的全球IP地址余糧也越來越捉襟見肘了。運營商為了緩解這個尷尬的局面,只有將分配給寬帶用戶的全球IP地址回收,分配給寬帶用戶的地址不再是全球IP地址,而是CGT(CarrierGrade Translation)地址,比如100.64.x.x/10。
100.64.x.x/10
這個地址段可不是全球IP地址,而是運營商級的私有IP地址,所以也無法直接進入互聯網。如果想進入互聯網,必須在運營商與互聯網的邊界NAT設備上,將這些私有IP地址轉換成可全球可路由的IP地址。
通常邊界NAT設備上匯聚了來自一個城區、一個城市的所有需要進入互聯網的流量,同時在線的session數可能會有上百萬條。而一個全球IP地址所能支持的session數取決于有多少可用的端口數。端口數量的最大值為65536,但是通常0-1024端口會系統保留。所以可用的端口數大約在64K左右。
很顯然,一個IP地址無法滿足海量NAT地址轉換的需求。所以運營商會采用多個IP地址(地址池)的方式,當一個IP地址的端口耗盡了,那么就使用其他IP地址、以及端口號來進行映射,這僅僅是一種實現方法。
還有一種方法是,多個IP地址負載均衡的方式。即沒有必要耗盡一個IP地址所有端口的情況下,才使用其他的IP地址。
通過這樣的計算:
- 當地址池有10個IP地址時,最大可以支撐 64K * 10 = 640 K session。
- 當地址池有100個IP地址時,最大可以支撐 64K * 100 = 6400 K session。
當同一個局域網的兩臺電腦,訪問互聯網時,共經歷了兩次NAT轉換操作。
第一次NAT發生在局域網與運營商的邊界設備上,通常為家庭無線路由器,需要將用戶的私有IP地址,比如10.x.x.x , 192.168.x.x, 轉化成運營商CGT地址。
第二次NAT發生在運營商與互聯網的邊界設備上,通常為高端運營商級路由器,需要將CGT地址轉化成全球可路由IP地址。
如果運氣好,兩臺電腦的IP地址最終被運營商映射為同一個全球IP地址。當然運氣不好,兩臺電腦的IP地址有可能映射為同一個地址池的不同的全球IP地址。
在瀏覽器里輸入一個網址敲回車鍵,是否瀏覽器進程只使用一個源端口與服務器的目的端口在通信?
并不是。在大多數情況下,瀏覽器會使用N個端口與同一個服務器的同一個端口在通信。造成的后果就是,運營商的一個全球IP地址可用的64K端口更快地被耗盡,所以需要更大的地址池來服務用戶。