1. 程式人生 > 實用技巧 >【粉絲問答7】區域網內終端是如何訪問外網?答案在最後

【粉絲問答7】區域網內終端是如何訪問外網?答案在最後

0. 粉絲提問

粉絲提問:
我們的電腦是如何獲得路由器自動分配的ip地址,並實現上網的?

粉絲提問,一口君必須滿足!
好在一口君對網路協議還是比較熟悉的,畢竟當年也有幾篇專利,做過的網路協議模組一大堆。

【本文預設大家瞭解了IP地址,及其分類】

一、家庭網

這個問題說難不難,但是要想解釋清楚,我們還是需要一些基礎知識。

1. 家庭網路簡介

如上圖是一口君家庭網路組網環境。

  • 要連線公網,必須通過Modem撥號才能上網,撥號通過pppoe協議撥號
  • wlan路由器的wan口連結ADSL 貓,會動態獲取一個公網IP地址100.87.59.254,在廣域網內,任何一個主機,均可以訪問到該ip地址
  • 桌上型電腦、手機、ipad、筆記本等終端可以通過有線或者無線的方式通過共享無線路由器的wan口訪問公網
  • 終端通過路由器的dhcp協議自動獲取的地址是區域網地址,pc獲得地址是192.168.0.104,網段是192.168.0.0/24,但是我們無法使用該地址直接訪問公網
  • 區域網內終端通過共享WAN地址上網,所有走wlan路由器的資料包都要通過NAT協議進行源、目的IP,源、目的埠號的轉換
  • 區域網內終端之間通訊執行的是乙太網協議,網絡卡通過mac地址過濾資料幀
  • 要獲取區域網內其他網口的mac地址需要通過arp協議
  • 公網內路由器之間資料傳輸一般是ppp協議

WAN口地址:100.87.59.254

2. 本地IP地址

一口君的pc是通過無線連線的無線路由器。
PC網路資訊如下:

ipconfig /all

本機無線網絡卡資訊:

ip地址:192.168.0.104
mac地址:44-33-4C-FF-5A-22
子網掩碼:255.255.255.0
預設閘道器:192.168.0.1
DHCP伺服器:192.168.0.1

後面幾章我們普及下一些網路的基礎知識。

二、router路由器

路由器(Router)是網際網路的主要結點裝置。路由器通過路由決定資料的轉發。

轉發策略稱為路由選擇(routing),這也是路由器名稱的由來(router,轉發者)。

作為不同網路之間互相連線的樞紐,路由器系統構成了基於TCP/IP 的國際網際網路絡Internet 的主體脈絡,也可以說,路由器構成了Internet的骨架。

第一章圖中的無線路由器就是我們最常用的路由器。

通常有一個wan口,4個物理連線網口。既可以通過網線連線,也可以通過無線連線,通常頻寬100M到450M。

此外還有隻有在一些大型的機房中才能看到的大型路由器。
這些路由器效能強悍,頻寬可高達T一級。

以下是1個企業級網路的組網拓撲圖,我們通常用圖中的圖標表示路由器:

路由器的一些使用規則:

  • 路由器工作在IP(網路)層;
  • 路由器用來連線不同的網路;
  • 路由器的每一個介面都必須是不同網段的;
  • 路由器之間互聯是介面直接連線,一般用ppp協議通訊;
  • 處於不同網路中的2個裝置要想互相通訊,必須通過路由器;
  • 一個成熟穩定的網路,路由器必須知道每一個網路裝置到達另外一個網路的通路,否則會直接丟棄,路由器通過路由表來維護這些通路;
  • 路由器只解析到資料包的IP層(傳輸層和應用層不會檢視)

三、路由表

剛才我們說了,公網裡,資料包要想到達目的地,必須通過裝置路由器,那麼路由器是如何知道把資料包送到目的地的呢?

就要通過路由表。

1. ip頭

公網中的資料包都是ip資料包,ip資料包頭中有個非常重要的協議欄位:目的地址

一口君隨機抓取了一個本機網路通訊的ip資料包:

如上圖所示,
源ip地址是:192.168.0.104
目的ip地址是:140.246.147.33

很顯然,源地址是一個c類地址,就是本機地址,也是一個私網地址,
目的地址是一個公網地址。

路由器之所以能轉發資料包就是靠路由表和ip資料包的目的ip地址+源ip地址。

2. 路由表

以下是windows下的路由表

route print

路由表中包含了若干個路由條目。

PC路由條目:

名稱 說明
網路目標 表示要到達某個網段的網路,可以查詢該條路由條目
網路掩碼 點分十進位制法,配合網路目標,可得出最終的目標網路號
閘道器 資料包要傳送給哪個網口所在的路由器
介面 表示資料包要從哪個本地的介面傳送出去
躍點數 資料包在網路中最多能經過多少個路由器,放置資料包在網路中無限轉發

永久路由:

網路地址 網路掩碼 閘道器地址 躍點數
0.0.0.0 0.0.0.0 192.168.0.1 預設

該條路由其實是一條預設路由,表示如果查詢不到路由條目,就將資料包傳送給192.168.0.1這個ip地址所在的路由器。

3. 公網中路由器非常的多,路由器是如何知道到達所有的網路的通路的呢?

通常藉助ospf、rip等協議可以動態學會到達各個網路的協議。

廣域網中的裝置路由協議更加複雜,往往需要專業的網路工程師搭建網路。

此塊內容不再

四、DHCP+wlan

家用路由器也是路由器一種,只是他只能連線兩個網路,一個是區域網,一個是與運營商連線的那個網路。

無線路由器上設定撥號賬號以及設定無線ssid、密碼在此不討論。

1. PPPOE撥號

家用路由器上網通常是通過PPPoE撥號上網,賬號密碼由運營商提供。

撥號成功後悔獲得一個公網IP。

如果擁有一個固定的公網IP,那麼此處也可以設定固定ip。

一口君當年第一份工作是在ZTE,參與開發的第一個專案就是在路由器中實現PPPoE client模組,一把辛酸淚啊。

2. DHCP

DHCP(動態主機配置協議)是一個區域網的網路協議。指的是由伺服器控制一段IP地址範圍,客戶機登入伺服器時就可以自動獲得伺服器分配的IP地址和子網掩碼。

如上,地址池地址是192.168.0.100~192.168.0.199;
這就是為什麼我們的終端連線家用路由器之後,獲得地址192.168.0.104

分配動態ip地址的時候,同時也會分配DNS伺服器地址和閘道器地址。
這也就是為什麼,我們並沒有設定任何路由條目,但是我們能上網的原因。

以下是連線到無線路由器的客戶端的MAC地址和IP地址資訊:

3. 區域網

乙太網是一種區域網,但是因為現在大部分的區域網均為乙太網,因此一般提及區域網都會預設為乙太網。

乙太網是一種匯流排型區域網,它並不是一種具體網路,而是一種技術規範,由施樂公司建立,並由施樂、Intel和Dec公司聯合開發的區域網規範。

上述家用的無線網路,大多數是無線區域網,是基於IEEE802.11標準,在這個標準下的無線區域網大多使用的是2.4GHz 或5GHz的射頻。

工作原理:

採用載波監聽多點接入/碰撞檢測(CSMA/CD)機制。

乙太網中結點都可以收到在網路中傳送的所有資訊。因此,乙太網是一種廣播網路。

例項:

總線上的每一個工作的計算機都能檢測到 B 傳送的資料訊號。
由於只有計算機 D 的地址與資料幀首部寫入的地址一致,因此只有 D 才接收這個資料幀。
其他所有的計算機(A, C 和 E)都檢測到不是傳送給它們的資料幀,因此就丟棄這個資料幀而不能夠收下來。
這樣就在具有廣播特性的總線上實現了一對一的通訊。

4. Mac地址

在乙太網中,硬體地址又稱為實體地址,或 MAC 地址,6個位元組,共48 位。

IEEE 的註冊管理機構 RA 負責向廠家分配地址欄位的前三個位元組(即高位 24 位)。

介面卡從網路上每收到一個 MAC 幀就首先用硬體檢查 MAC 幀中的 MAC 地址.

如果是發往本站的幀則收下,然後再進行其他的處理,否則就將此幀丟棄,不再進行其他的處理。

5. ARP

假如我們要訪問區域網中的另外一個pc上的程序,假設我們只知道對方的IP地址,那麼如何才能知道對方的mac地址呢?

可以通過ARP協議。

ARP(地址解析)協議是一種解析協議,本來主機是完全不知道這個IP對應的是哪個主機的哪個介面,當主機要傳送一個IP包的時候,會首先查一下自己的ARP快取記憶體(就是一個IP-MAC地址對應表快取),如果查詢的IP-MAC值不存在,那麼主機就向網路傳送一個ARP協議廣播包。

這個廣播包裡面就有待查詢的IP地址,而直接收到這份廣播的包的所有主機都會查詢自己的IP地址,如果收到廣播包的某一個主機發現自己符合條件,那麼就準備好一個包含自己的MAC地址的ARP包傳送給傳送ARP廣播的主機。

而廣播主機拿到ARP包後會更新自己的ARP快取(就是存放IP-MAC對應表的地方)。傳送廣播的主機就會用新的ARP快取資料準備好資料鏈路層的的資料包傳送工作。

windows 的arp表查詢:

arp -a

如上圖所示,是PC快取的arp表。
其中192.168.0.1 80-8f-1d-c7-a6-07就是無線路由器的LAN口ip地址、MAC地址。

5. NAT

最後一個知識點是,區域網內的終端是如何共用一個wan口來上網的?

主要通過NAT(Network Address Translation,網路地址轉換)協議來實現的。

NAT是1994年提出的。當在專用網內部的一些主機本來已經分配到了本地IP地址(即僅在本專用網內使用的專用地址),但現在又想和因特網上的主機通訊(並不需要加密)時,可使用NAT方法。

這種方法需要在專用網連線到因特網的路由器上安裝NAT軟體。裝有NAT軟體的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址。這樣,所有使用本地地址的主機在和外界通訊時,都要在NAT路由器上將其本地地址轉換成全球IP地址,才能和因特網連線。

另外,這種通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助於減緩可用的IP地址空間的枯竭。在RFC 2663中有對NAT的說明。

舉例:

經過NAT轉換的資料包IP地址替換見下圖:

如上圖所示:

  1. 從區域網內部發往路由器的資料包,源ip:192.168.0.104,經過路由器之後源ip替換為WAN口地址:100.87.59.254
  2. 從伺服器返回的資料包目的ip地址:100.87.59.254,經過路由器之後又被替換成了192.168.0.104,這樣資料包就可以傳送到區域網內部的某個終端了

五、 總結

綜上,我們可知,粉絲的問題答案:

  1. 路由器的IP地址分wan口和lan口,wan口地址是PPPoE撥號時運營商的其他裝置分配的用於公網定址,lan口地址在路由器中設定, 用於和區域網內終端通訊
  2. 終端連線無線路由器時,路由器通過dhcp協議給終端分配了動態ip地址,通過DHCP的地址池可以設定分配的ip地址的範圍
  3. 分配ip地址的時候,同時終端會將無線路由器的lan口地址設定為自己的預設閘道器,所以pc訪問外網,所有的資料包都會發送給閘道器,就是無線路由器
  4. 當用戶要訪問外網的時候,需要知道閘道器的mac地址,如果arp快取中沒有對應的的arp條目,那麼就通過arp協議找到lan口的mac地址,因為閘道器地址已分配
  5. 區域網內終端通過共享WAN地址上網,所有走wlan路由器的資料包都要通過NAT協議進行源、目的IP,源、目的埠號的轉換