自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

五分鐘搞懂內網(wǎng)和外網(wǎng)之間的通信的原理

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

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

[[244818]]

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

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

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

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

私有地址(Private address):屬于非注冊地址,專門為組織機構內部使用,說白了,私有 IP 不能直接上網(wǎng)。

而我們平時通過運營商(電信、移動、聯(lián)通寬帶等)上網(wǎng),家里面通過路由器分出來的 IP 都是私有 IP(局域網(wǎng) IP),大家可能會疑問,我們可以上網(wǎng)啊,怎么會是私有 IP 呢?

租用(申請)公有 IP 是需要錢的。 運營商買了一些公有 IP,然后通過這些公有 IP 分出來,再分給一個一個的用戶使用。這個過程有點類似于,我們去安裝了寬度,通過路由器分出幾個 IP,讓好幾個人都能上網(wǎng),當然運營商通過公有 IP 分出來的過程肯定比這個復雜多了。所以,我們平時上網(wǎng)用的 IP 是私有 IP,真正擁有公有 IP 的是運營商(當然,我們可以租用一個公有 IP )。所以,A 家庭的局域網(wǎng) IP 和 B 家庭的局域網(wǎng) IP 相同很正常,但是,最終 A 和 B 能上網(wǎng)(數(shù)據(jù)走出去)還是通過運營商的公有 IP,畢竟,公有 IP 的資源有限,這一片區(qū)域的用戶使用的很有可能(實際上就是這樣的)是同一個公有 IP,這樣的話,又回到前面的問題,假如 A 和 B 的局域網(wǎng) IP 相同(192.168.31.11),當他們同時訪問百度服務器的時候,百度服務器如何區(qū)分哪個是 A,哪個是 B 呢?

端口映射

接下來,給大家介紹一下什么是端口映射?

端口映射是 NAT 的一種,它將外網(wǎng)主機的 IP 地址的一個端口映射到內網(wǎng)中一臺機器,提供相應的服務。當用戶訪問該 IP 的這個端口時,服務器自動將請求映射到對應局域網(wǎng)內部的機器上。

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

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

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

  • WAN:接外部 IP 地址用,通常指的是出口,轉發(fā)來自內部 LAN 接口的 IP 數(shù)據(jù)包,這個口的 IP 是唯一的。
  • LAN:接內部 IP 地址用,LAN 內部是交換機。

這里,我們簡化這個過程,我們把運營商當做一個 NAT 設備。

NAT 設備

為了方便大家理解,我們把 IP 的轉化方向反過來分析(準確來說,公網(wǎng)轉局域網(wǎng))。

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

當我們上百度的時候,經過路由器的 wan口,進行相應的IP、端口轉化:192.168.31.11:80 -> 10.221.0.24:8080,所以,從 wan口出去的地址為:10.221.0.24:8080。

***,經過運營商,運營商那邊會做相應的端口映射(而且是動態(tài)端口映射),子網(wǎng) IP(10.221.0.24:8080)轉化為公網(wǎng) IP(128.0.0.1:8888),通過這個公網(wǎng) IP 去訪問百度服務器。

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

如何讓外網(wǎng)能夠訪問自己寫的網(wǎng)絡程序(服務器)

首先,我們需要在運營商那邊申請(租用)一個公有 IP (長城寬帶一年需要 2000 元左右),假如這個公有 IP 為:128.0.0.123。

假如,我們寫的服務器如下:

接著,找個 NAT 設備進行相應的端口映射,家庭路由器都有這個功能。這里以小米路由器為例:

映射關系如下:

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

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2024-12-11 07:00:00

面向對象代碼

2025-03-13 06:22:59

2023-09-18 15:49:40

Ingress云原生Kubernetes

2019-08-09 10:33:36

開發(fā)技能代碼

2025-01-20 08:50:00

2025-01-21 07:39:04

Linux堆內存Golang

2021-01-27 08:03:53

項目Web外網(wǎng)

2021-03-03 16:33:24

web項目外網(wǎng)

2021-12-01 06:50:50

Docker底層原理

2023-12-06 08:48:36

Kubernetes組件

2023-09-11 07:31:58

2023-09-21 11:28:28

Kubernetes云原生

2024-04-29 07:57:46

分布式流控算法

2022-05-23 09:10:00

分布式工具算法

2021-11-08 18:37:45

MySQL解碼測試

2019-08-13 09:00:01

內網(wǎng)外網(wǎng)通信

2023-12-05 15:24:46

2024-01-12 07:38:38

AQS原理JUC

2024-09-23 17:05:44

2019-06-14 09:34:59

Linux 系統(tǒng) 數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號