教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

內(nèi)網(wǎng)和外網(wǎng)之間的通信

更新時(shí)間:2016年03月29日17時(shí)17分 來(lái)源:傳智播客 瀏覽次數(shù):

  對(duì)于初學(xué)者而已,我們學(xué)習(xí)的網(wǎng)絡(luò)編程(如TCP,UDP編程),我們通常都是在局域網(wǎng)內(nèi)進(jìn)行通信測(cè)試,有時(shí)候我們或者會(huì)想,我們現(xiàn)在寫(xiě)的內(nèi)網(wǎng)網(wǎng)絡(luò)數(shù)據(jù)和外網(wǎng)的網(wǎng)絡(luò)數(shù)據(jù)有什么不同,我們內(nèi)網(wǎng)的數(shù)據(jù)是如何走出外網(wǎng)的呢?

  再者,我們大多人都是使用寬帶上網(wǎng),結(jié)果發(fā)現(xiàn),A 和 B 的局域網(wǎng) IP 都是192.168.31.11,當(dāng)他們都訪問(wèn)百度瀏覽網(wǎng)頁(yè)時(shí),百度服務(wù)器回復(fù)數(shù)據(jù)時(shí),如何區(qū)分是給 A 還是給 B 呢?

  

  公有 IP 和私有 IP 的區(qū)別

  首先,我們需要了解一下什么是公有 IP 和私有 IP ?

  公有地址(Public address):由 Inter NIC(Internet Network Information Center 因特網(wǎng)信息中心)負(fù)責(zé)。這些 IP 地址分配給注冊(cè)并向Inter NIC提出申請(qǐng)的組織機(jī)構(gòu),公有 IP 全球唯一,通過(guò)它直接訪問(wèn)因特網(wǎng)(直接能上網(wǎng))。

  私有地址(Private address):屬于非注冊(cè)地址,專(zhuān)門(mén)為組織機(jī)構(gòu)內(nèi)部使用,說(shuō)白了,私有 IP 不能直接上網(wǎng)。

  而我們平時(shí)通過(guò)運(yùn)營(yíng)商(電信、移動(dòng)、聯(lián)通寬帶等)上網(wǎng),家里面通過(guò)路由器分出來(lái)的 IP 都是私有 IP(局域網(wǎng) IP),大家可能會(huì)疑問(wèn),我們可以上網(wǎng)啊,怎么會(huì)是私有 IP 呢?租用(申請(qǐng))公有 IP 是需要錢(qián)的。 運(yùn)營(yíng)商買(mǎi)了一些公有 IP,然后通過(guò)這些公有 IP 分出來(lái),再分給一個(gè)一個(gè)的用戶使用。這個(gè)過(guò)程有點(diǎn)類(lèi)似于,我們?nèi)グ惭b了寬度,通過(guò)路由器分出幾個(gè) IP,讓好幾個(gè)人都能上網(wǎng),當(dāng)然運(yùn)營(yíng)商通過(guò)公有 IP 分出來(lái)的過(guò)程肯定比這個(gè)復(fù)雜多了。所以,我們平時(shí)上網(wǎng)用的 IP 是私有 IP,真正擁有公有 IP 的是運(yùn)營(yíng)商(當(dāng)然,我們可以租用一個(gè)公有 IP )。所以,A 家庭的局域網(wǎng) IP 和 B 家庭的局域網(wǎng) IP 相同很正常,但是,最終 A 和 B 能上網(wǎng)(數(shù)據(jù)走出去)還是通過(guò)運(yùn)營(yíng)商的公有 IP,畢竟,公有 IP 的資源有限,這一片區(qū)域的用戶使用的很有可能(實(shí)際上就是這樣的)是同一個(gè)公有 IP,這樣的話,又回到前面的問(wèn)題,假如 A 和 B 的局域網(wǎng) IP 相同(192.168.31.11),當(dāng)他們同時(shí)訪問(wèn)百度服務(wù)器的時(shí)候,百度服務(wù)器如何區(qū)分哪個(gè)是 A,哪個(gè)是 B 呢?

  

  端口映射

  接下來(lái),給大家介紹一下什么是端口映射?

  端口映射是 NAT 的一種,它將外網(wǎng)主機(jī)的 IP 地址的一個(gè)端口映射到內(nèi)網(wǎng)中一臺(tái)機(jī)器,提供相應(yīng)的服務(wù)。當(dāng)用戶訪問(wèn)該 IP 的這個(gè)端口時(shí),服務(wù)器自動(dòng)將請(qǐng)求映射到對(duì)應(yīng)局域網(wǎng)內(nèi)部的機(jī)器上。

  現(xiàn)在市場(chǎng)上的家庭路由器都具備 NAT 功能,也可以實(shí)現(xiàn)端口映射。下圖為小米路由器的端口映射設(shè)置圖:

  

  我們平時(shí)經(jīng)過(guò)路由器,通過(guò)寬帶,最終去到運(yùn)營(yíng)商那邊,數(shù)據(jù)是從運(yùn)營(yíng)商出去,最終數(shù)據(jù)是回到運(yùn)營(yíng)商那邊,運(yùn)營(yíng)商再把數(shù)據(jù)發(fā)送到用戶的電腦。

  路由器,至少有兩個(gè)端口:WAN 口和 LAN 口。

  WAN:接外部 IP 地址用,通常指的是出口,轉(zhuǎn)發(fā)來(lái)自內(nèi)部 LAN 接口的 IP 數(shù)據(jù)包,這個(gè)口的 IP 是唯一的。

  LAN:接內(nèi)部 IP 地址用,LAN 內(nèi)部是交換機(jī)。

  這里,我們簡(jiǎn)化這個(gè)過(guò)程,我們把運(yùn)營(yíng)商當(dāng)做一個(gè) NAT 設(shè)備。

  

  為了方便大家理解,我們把 IP 的轉(zhuǎn)化方向反過(guò)來(lái)分析(準(zhǔn)確來(lái)說(shuō),公網(wǎng)轉(zhuǎn)局域網(wǎng))。

  A 電腦的 IP 是局域網(wǎng) IP(192.168.31.11),這個(gè) IP(192.168.31.11)是從路由器的 lan口分配的。

  當(dāng)我們上百度的時(shí)候,經(jīng)過(guò)路由器的 wan口,進(jìn)行相應(yīng)的IP、端口轉(zhuǎn)化:192.168.31.11:80 -> 10.221.0.24:8080,所以,從 wan口出去的地址為:10.221.0.24:8080。

  

  最后,經(jīng)過(guò)運(yùn)營(yíng)商,運(yùn)營(yíng)商那邊會(huì)做相應(yīng)的端口映射(而且是動(dòng)態(tài)端口映射),子網(wǎng) IP(10.221.0.24:8080)轉(zhuǎn)化為公網(wǎng) IP(128.0.0.1:8888),通過(guò)這個(gè)公網(wǎng) IP 去訪問(wèn)百度服務(wù)器。

  

  同理,B 的過(guò)程也是一樣。通過(guò)這樣的層層端口映射,最終保證地址(IP + 端口)的唯一性。A 和 B 訪問(wèn)百度服務(wù)器,盡管它們的局域網(wǎng) IP 是一樣的,但是最終它們?cè)L問(wèn)百度的地址(IP + 端口)是唯一的,所以,百度服務(wù)器回復(fù)時(shí),原路返回時(shí)能夠區(qū)分到底給誰(shuí)回。

  如何讓外網(wǎng)能夠訪問(wèn)自己寫(xiě)的網(wǎng)絡(luò)程序(服務(wù)器)

  首先,我們需要在運(yùn)營(yíng)商那邊申請(qǐng)(租用)一個(gè)公有 IP (長(zhǎng)城寬帶一年需要 2000 元左右),假如這個(gè)公有 IP 為:128.0.0.123。

  假如,我們寫(xiě)的服務(wù)器如下:

  

  接著,找個(gè) NAT 設(shè)備進(jìn)行相應(yīng)的端口映射,家庭路由器都有這個(gè)功能。這里以小米路由器為例:

  

  映射關(guān)系如下:

  

  最后,其他人寫(xiě)客戶端程序時(shí)(電腦能上外網(wǎng)),只要指定目的 IP 地址為 128.0.0.123,端口為 8888,通過(guò)這個(gè)地址,就能找到192.168.31.248:8080,因?yàn)檫@兩者已經(jīng)建立好映射,如上圖,這樣,我們的服務(wù)器就能收到數(shù)據(jù)。

0 分享到:
和我們?cè)诰€交談!