日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文原創作者:原理君(cpp軟件架構獅)

頭條號:底層軟件架構(cpp軟件架構獅)

公眾號:技術原理君

對于我們網絡開發的人員來說,經常會用到TCP,UDP協議,但是通常情況下,是在局域網內的協議交互通信??赡銈冇邢脒^嗎?如果是涉及到內網和外網的交互呢?也就是說局域網和公網是怎么 交互呢?

假設有兩臺主機A和B,他們分別處于不同的局域網下,他們的局域網IP都是192.168.1.2。在同一個時刻,他們都訪問百度服務器,那作為百度服務器是怎么分別回復這兩臺主機的呢?或者是服務器怎么區分A和B呢?

一篇文章搞懂,內網和外網到底怎么通信?

 

 

公網 IP 和私有 IP 的區別

我們先來了解一下公網IP和私有IP的概念。

公有地址(Public address):由 Inter NIC(因特網信息中心)負責。這些 IP 地址分配給注冊并向Inter NIC提出申請的組織機構,公有 IP 全球唯一,通過它直接訪問因特網(直接能上網)。主要有A、B、C、D、E五類地址:

  1. A類:地址范圍是1.0.0.0 到 127.255.255.255,主要分配 給大量主機而局域網網絡數量較少的大型網絡;
  2. B類:地址范圍是128.0.0.0 到191.255.255.255,一般用于國際性大公司和政府機構;
  3. C類:地址范圍是192.0.0.0 到223.255.255.255,用于一般小公司校園網研究機構等;
  4. D類:地址范圍是224.0.0.0 到 239.255.255.255,用于特殊用途,又稱做廣播地址;
  5. E類:地址范圍是240.0.0.0 到255.255.255.255,暫時保留。

私有地址(Private address):屬于非注冊地址,專門為組織機構內部使用,說白了,私有 IP 不能直接上網。主要有A、B、C三類,A類地址范圍是10.0.0.0-10.255.255.255 ,B類地址范圍是172.16.0.0-172.31.255.255,C類地址范圍是192.168.0.0-192.168.255.255。

127.0.0.0 到127.255.255.255 為系統環回地址。

而我們平時通過運營商(主要是電信、移動、聯通寬帶等)上網,通過家用路由器之后,就會變成私有IP,大家可能會疑問,我們可以上網啊,怎么會是私有 IP 呢?

其實我們不是通過私有IP上網的,是通過公有IP。通俗的講,運營商有公有IP,但是IPV4下IP資源有限,所以這些IP不能每個人分配單獨分配一個IP,所以需要動態給上網的用戶。 這個過程有點類似于,我們買了一些筆,然后將這些筆分給全班學生使用,當然運行商動態分配公有IP的過程比這個復雜多了。

所以A和B的IP相同是很正常的一件事情,但是對于百度服務器來說,它并不關心對方的私有IP是什么,它也不知道,它只知道訪問它的肯定是公有IP。

那問題來了,還是老問題,既然最終訪問百度服務器是公有IP,那A和B私有IP到公有IP的轉換怎么完成的呢?當他們同時訪問百度服務器的時候,百度服務器如何區分哪個是 A,哪個是 B 呢?

一篇文章搞懂,內網和外網到底怎么通信?

 

 

端口映射

在講原理之前我們先了解一個概念,端口映射?

  • 端口映射是將一臺主機的內網(LAN)IP地址映射成一個公網(WAN)IP地址,當用戶訪問提供映射端口主機的某個端口時,服務器將請求轉移到本地局域網內部提供這種特定服務的主機;
  • 利用端口映射功能還可以將一臺外網IP地址機器的多個端口映射到內網不同機器上的不同端口。
  • 端口映射功能還可以完成一些特定代理功能,比如代理POP,SMTP,TELNET等協議。理論上可以提供65535(總端口數)-1024(保留端口數)=64511個端口的映射。

思路:既然端口映射可以將一臺外網 IP 地址機器多個端口映射到內網中不同機器上的不同端口。那當用戶訪問外網 IP 的這個端口時,服務器自動將請求映射到對應局域網內部的機器上。

比如,我們在內網中有一臺主機,但是外網中的用戶是沒有辦法直接訪問該服務器的。于是我們可以在路由器上設置一個端口映射,只要外網用戶訪問路由器ip的80端口,那么路由器會把自動把流量轉到內網主機的80端口上。并且,在路由器上還存在一個Session,當內網服務器返回數據給路由器時,路由器能準確的將消息發送給外網請求用戶的主機。在這過程中,路由器充當了一個反向代理的作用,他保護了內網中主機的安全。

一篇文章搞懂,內網和外網到底怎么通信?

 

我們平時上網的過程就是先經過路由器,然后通過寬帶,最終通過運營商的轉換最終到web服務器的,返回的數據先到運營商那邊,然后再把數據發送到用戶的主機上。

我們都知道路由器有兩個端口: LAN 口,WAN 口。

WAN:接外部 IP 地址用,通常指的是出口,轉發來自內部 LAN 接口的 IP 數據包。

LAN:接內部 IP 地址用,LAN 內部是交換機。我們可以不連接 WAN 口,把路由器當做普通交換機來使用。

下面我們來看看到底怎么通信的。為了便于理解,我們把運營商當做一個 NAT 設備。

一篇文章搞懂,內網和外網到底怎么通信?

 

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

A 主機IP 是私有 IP(192.168.1.2),該IP是從路由器的 LAN口分配的。暫不討論是如何獲取的,這涉及到自動獲取還是手動分配的。

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

一篇文章搞懂,內網和外網到底怎么通信?

 

 

通過10.221.0.24:8080能訪問外網嗎?顯然不行,因為還是私有IP。還需要一個步驟:轉換為公網IP。

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

一篇文章搞懂,內網和外網到底怎么通信?

 

 

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

分享到:
標簽:內網
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定