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

參考文章:linux

22張圖詳解瀏覽器請求數據包如何到達web服務器(搞懂網絡能夠畢業了)web

0. 粉絲提問

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

粉絲提問,一口君必須知足!好在一口君對網絡協議仍是比較熟悉的,畢竟當年也有幾篇專利,作過的網絡協議模塊一大堆。瀏覽器

【本文默認你們瞭解了IP地址,及其分類】緩存

粉絲提問

1、家庭網

這個問題說難不難,可是要想解釋清楚,咱們仍是須要一些基礎知識。服務器

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

本機無線網卡信息:app

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」

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

2、router路由器

路由器(Router)是互聯網的主要結點設備。路由器經過路由決定數據的轉發。

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

做爲不一樣網絡之間互相鏈接的樞紐,路由器系統構成了基於TCP/IP 的國際互聯網絡Internet 的主體脈絡,也能夠說,路由器構成了Internet的骨架。

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

一般有一個wan口,4個物理鏈接網口。既能夠經過網線鏈接,也能夠經過無線鏈接,一般帶寬100M到450M。

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

路由器

如下是1個企業級網絡的組網拓撲圖,咱們一般用圖中的圖標表示路由器:

企業級網絡拓撲結構

路由器的一些使用規則:

  • 路由器工做在IP(網絡)層;
  • 路由器用來鏈接不一樣的網絡;
  • 路由器的每個接口都必須是不一樣網段的;
  • 路由器之間互聯是接口直接鏈接,通常用ppp協議通訊;
  • 處於不一樣網絡中的2個設備要想互相通訊,必須經過路由器;
  • 一個成熟穩定的網絡,路由器必須知道每個網絡設備到達另一個網絡的通路,不然會直接丟棄,路由器經過路由表來維護這些通路;
  • 路由器只解析到數據包的IP層(傳輸層和應用層不會查看)

3、路由表

剛纔咱們說了,公網裏,數據包要想到達目的地,必須經過設備路由器,那麼路由器是如何知道把數據包送到目的地的呢?

就要經過路由表。

1. 「ip頭」

公網中的數據包都是ip數據包,ip數據包頭中有個很是重要的協議字段:「目的地址」

一口君隨機抓取了一個本機網絡通訊的ip數據包:

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

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

路由器之因此能轉發數據包就是靠路由表和ip數據包的目的ip地址+源ip地址。

2. 路由表

如下是windows下的路由表

route print
windows路由表

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

「PC路由條目:」

名稱 說明
網絡目標 表示要到達某個網段的網絡,能夠查詢該條路由條目
網絡掩碼 點分十進制法,配合網絡目標,可得出最終的目標網絡號
網關 數據包要發送給哪一個網口所在的路由器
接口 表示數據包要從哪一個本地的接口發送出去
躍點數 數據包在網絡中最多能通過多少個路由器,放置數據包在網絡中無限轉發

永久路由:

網絡地址 網絡掩碼 網關地址 躍點數
0.0.0.0 0.0.0.0 192.168.0.1 默認

該條路由實際上是一條默認路由,表示若是查找不到路由條目,就將數據包發送給192.168.0.1這個ip地址所在的路由器。

3. 公網中路由器很是的多,路由器是如何知道到達全部的網絡的通路的呢?

一般藉助ospf、rip等協議能夠動態學會到達各個網絡的協議。

廣域網中的設備路由協議更加複雜,每每須要專業的網絡工程師搭建網絡。

此塊內容再也不

4、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地址替換見下圖:

NAT

如上圖所示:

  1. 從局域網內部發往路由器的數據包,源ip:192.168.0.104,通過路由器以後源ip替換爲WAN口地址:100.87.59.254
  2. 從服務器返回的數據包目的ip地址:100.87.59.254,通過路由器以後又被替換成了192.168.0.104,這樣數據包就能夠發送到局域網內部的某個終端了

5、 總結

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

  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,源、目的端口號的轉換



 


其餘網友提問彙總


 1. 兩個線程,兩個互斥鎖,怎麼造成一個死循環?


 2. 一個端口號能夠同時被兩個進程綁定嗎?


 3. 一個多線程的簡單例子讓你看清線程調度的隨機性

4. 粉絲提問|c語言:如何定義一個和庫函數名同樣的函數,並在函數中調用該庫函數

5.  [網友問答5]i2c的設備樹和驅動是如何匹配以及什麼時候調用probe的?

6. [粉絲問答6]子進程進程的父進程關係




推薦閱讀


【1】嵌入式工程師到底要不要學習ARM彙編指令?必讀
【2】 Modbus協議概念最詳細介紹 必讀
【3】 嵌入式工程師到底要不要學習ARM彙編指令?
【4】【從0學ARM】你不瞭解的ARM處理異常之道
【5】 4. 從0開始學ARM-ARM彙編指令其實很簡單

 

進羣,請加一口君我的微信,帶你嵌入式入門進階。

 



點擊「閱讀原文」查看更多分享,歡迎點分享、收藏、點贊、在看


本文分享自微信公衆號 - 一口Linux(yikoulinux)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索