前言
前幾天突然想到的問題,自己先猜測推理了一番,最后在謝希仁版《計算機網絡》找到了權威的解答。這里記錄一下自己的思考過程。
網站是如何找到我們的?
我們知道,互聯網中的兩台電腦要進行通信,就必須彼此知曉對方的位置。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
