【雜談】沒有公網IP的電腦如何與外部通訊

貓毛·波拿巴發表於2019-02-21

前言

  前幾天突然想到的問題,自己先猜測推理了一番,最後在謝希仁版《計算機網路》找到了權威的解答。這裡記錄一下自己的思考過程。

網站是如何找到我們的?

我們知道,網際網路中的兩臺電腦要進行通訊,就必須彼此知曉對方的位置。IP地址就是對電腦地址的一種表示。其中公網IP具有全網唯一性,可以唯一標識一臺電腦,故可以依此進行定址並通訊。

但是,學生使用校園網,電腦沒有公網IP,只有區域網的IP,不具有全網唯一性,一樣可以訪問外部網路,接收網站的響應訊息。我們知道,網站肯定是有公網IP的,我們找到它沒問題,問題就在於網站是如何找到我們的?

閘道器

確實我們的電腦沒有公網IP,但是我們區域網的閘道器(有IP地址的路由器)是有的,我們所有訪問外部的請求,都是通過這個閘道器來處理的。所以,從因特網角度看,是網站伺服器、區域網閘道器,這兩個裝置在進行通訊。它們都有公網IP,找到彼此肯定沒問題。也就是說它外部網站響應請求的時候不需要找到我們,知道閘道器地址即可。

IP資料包源地址怎麼填?

底層構建IP資料包時,源地址填的是什麼,是我們電腦的IP,還是閘道器的IP。如果是我們電腦的IP,服務端反過來不就找不到我們的電腦了;如果是閘道器的IP,那服務端確實可以找到閘道器,把資料發給它,但是問題來了,閘道器收到資料後,該轉發給區域網內的哪臺電腦呢?

我猜測:閘道器內應該有一張對映表,即區域網電腦A發給網站B,就儲存一條A -> B 的記錄,後續如果收到B的資料,那就反過來發給A。

教材的解答

我依稀記得,有個NAT地址轉換的概念,可能跟這個有關。於是今天回學校翻開書本,果然就找到了答案。

工作原理圖

下面這張圖就很直觀地展示了NAT路由器的工作原理。

1.前面說到的源地址的填寫問題,也得到了解決,即主機A填寫的就是它的IP地址。但是當資料包到達NAT路由器時,它會把IP資料包中的這個源地址替換成它自己的IP地址。

2.對於主機B來說,它根本不知道主機A的存在,它只知道它在跟NAT路由器進行通訊。

3.我猜測的地址轉換表也確實存在,如表4-10。出乎我意料的是,NAT路由器可以有多個公網IP,使得可以有多個區域網主機同時接入因特網。一般,一個時刻一個公網IP只能供一臺區域網使用。如果只有一個公網IP,那情況就是,區域網主機輪流使用這個公網IP。

作為伺服器

我們知道,要讓你的電腦對外提供服務,不管是檔案服務還是網站服務。都要進行以下步驟:

1.啟動程式監聽某個埠

2.設定進站規則,開放埠

在沒有公網IP的情況下,區域網外的電腦無法通過你的IP地址定位到你,所以無法接受你提供的服務。但是對於區域網內的電腦,這個IP地址還是有效的,這些電腦可以使用你的服務,如FTP檔案服務。

參考資料

[1] 謝希仁. 計算機網路[M].第六版.北京:電子工業出版社,2013:179-181

 

相關文章