網路協議 2 - IP 地址和 MAC 地址

来源:https://www.cnblogs.com/cool2feel/archive/2019/08/27/11418075.html
-Advertisement-
Play Games

瞭解完網路協議,我們會發現,網路通信的五層模型里,有兩個很重要的概念:IP 地址和 MAC 地址。 那麼 IP 地址是怎麼來的,又是怎麼沒的?MAC 地址與 IP 地址又有什麼區別? 這回答上面問題前,先熱下身,大家知道如何查看本機的 IP 嗎?這個問題,即便是沒有專業學過電腦的人,只要折騰過電腦 ...


瞭解完網路協議,我們會發現,網路通信的五層模型里,有兩個很重要的概念:IP 地址和 MAC 地址。

那麼 IP 地址是怎麼來的,又是怎麼沒的?MAC 地址與 IP 地址又有什麼區別?

這回答上面問題前,先熱下身,大家知道如何查看本機的 IP 嗎?這個問題,即便是沒有專業學過電腦的人,只要折騰過電腦,重裝過系統,大多都會知道答案:在 Windows 下是 ipconfig,在 linux 下是 ifconfig。

在 Windows 下輸入 ipconfig,我們會看到這個界面:

在 linux 下輸入 ifconfig,我們會看到這個界面:

IP 地址

可以看到,無論是在 Windows 還是在 linux 下,輸入相關命令都能顯示出這台機器上所有的網卡。大部分的網卡都會有一個 IP 地址。就像 192.168.1.73 ,就是我本機乙太網的 IP 地址。

IP 地址是一個網卡在網路世界中的通訊地址,相當於我們現實世界的門牌號碼。

註意,IP 地址是網卡的通訊地址,不是一臺機器的通訊地址。很多時候,我們會說一個電腦只有一個 IP 地址,這種說法實質上並不正確,準確的來說,應該是:

一個網卡在同一時段只能有一個 IP 地址,一臺機器可以有多個 IP 地址。

就像我們的筆記本,一般都會有線網卡和無線網卡,則有線網卡有一個 IP 地址,無線網卡也有一個 IP 地址。

一臺機器有多個 IP 地址,那 IP 地址會不會重覆呢?其實我們應該會碰到 IP 地址重覆的情況。有時候我們電腦彈出網路地址衝突,出現無法上網的情況,那多半就是 IP 地址衝突了。

格式

就像上面輸出的結果,192.168.1.73 就是一個 IP 地址。這個地址被點(.)分割為四個部分,每個部分有 8 個 bit,所以 IP 地址總共是 32 位。顯然,32 位產生的 IP 地址在當今這個互聯網社會,很明顯就是"狼多肉少"。於是就有了 IPv6,也就是上面結果中的 fe80::515d:5483:ff4d:6db9/64。這個有 128 位,能滿足我們現在的需求了。至於後面會不會出現 IPv8 ,那就看後面互聯網世界的發展了。

分類

我們應該都聽說過,IP 地址分為 A、B、C、D、E 五類。對於 A、B、C 類,主要分兩部分,前面一部分是網路號,後面一部分是主機號。

下圖是 A、B、C 三類地址所能包含的主機數量。

這裡面有個問題,C 類地址包含的主機數量太少,而 B 類地址包含的主機數量又太多,於是就有了一個折中的方式叫做無類型域間選路

無類型域間選路

顧名思義,無類型域間選路(CIDR)基本思想是取消地址的分類結構,取而代之的是允許以可變長分界的方式分配網路數。192.168.1.73/24 就是無類型域間選路格式的 IP 地址。這種格式的 IP 地址,將 32 位的 IP 地址一分為二,前面是網路號,後面是主機號。從哪裡分呢?如果註意觀察的話可以看到,上面地址中有一個斜杠,斜杠後一個數字 24。這個 24 的含義就是,前24 位是網路號,後 8 位是主機號。

公有 IP 地址和私有 IP 地址

繼續看上面的表格。表格最右列是私有 IP 地址段。平時我們在一個區域網內,看到的 IP 地址都是私有 IP 地址。因為這些地址允許組織內部的 IT 人員自己管理和分配,而且還可以重覆。所以會出現你區域網的私有 IP 地址段和我區域網的是一樣的。

就像我們上面說的,小明在自己家裡給同單元的小伙伴說自己是五單元 101 號,小伙伴能理解,但是他如果這樣和小紅說,小紅就會問,你是哪個小區的?這裡的小區實際上就是公有 IP 地址,而五單元 101 號就是私有 IP 地址。

表格中的 192.168.0.x 是最常見的私有 IP 地址段。就像我們家裡的路由器地址一般是 192.168.0.1 一樣。

IP 分配與釋放

IP 分配我們平時應該接觸比較少。還記得在大學的時候,剛入學第一件事就是趕緊交網費。交網費時會有一個步驟,網管會讓你提供 MAC 地址,然後把 IP 地址和 MAC 地址綁定,這也就是博主在隔壁宿舍無法通過網線上網的原因。

其實,如果你有相關的知識積累,可以用命令行自己配置 IP 地址。當然,能不能通信就看你的知識儲備量了。

除了命令行配置外,我們平時應該對於 IP 分配應該都是用的 "拿來主義"。無論是在學校還是在辦公室,都會有網路管理員把分配好的 IP 給你,直接使用就可以了。但是有時候也會好奇,網管是怎麼分配 IP 的呢?難不成通過命令行一個個配置?這時候就要用到動態主機配置協議(DHCP)

動態主機配置協議

這個協議的工作原理是怎樣的呢?我們就拿一臺機器新加入一個網路為例,來走一遍 DHCP 的工作流程。

當一臺機器新加入一個網路時,肯定一臉懵逼,啥情況也不知道,只知道自己的 MAC 地址。沒人理你怎麼辦?那不管三七二十一,先吼一聲,告訴所有人,我來了,有人嗎?這時候的溝通基本靠"吼"。這一步,我們稱為 DHCP Discover。

新來的機器使用 IP 地址 0.0.0.0 發送了一個廣播包,目的 IP 地址是 255.255.255.255。廣播包封裝在 UDP 裡面,UDP 封裝在 BOOTP 裡面。在這個廣播包里,新人大喊:我是新來的(Boot Request),我的 MAC 地址是 xxx,我還沒有 IP,誰能給我個 IP 地址?格式就像下麵這樣:

這時候,網路里的 DHCP Server 就相當於這個區域網的管理員。他知道來了一個"新人",需要給它分配一個 IP 地址,這個過程就是 DHCP Offer。同時,DHCP Server 保留為此機器提供的 IP 地址,從而不會再將相同的 IP 地址分配給其它的機器。而 DHCP Offer 的格式就像下圖,裡面有給新人分配的地址。

DHCP Server 仍然使用廣播地址作為目的地址,因為,此時請求分配的新人還沒有自己的 IP 地址。如果一個區域網中有多個 DHCP Server,這台新機器會收到多個 DHCP Offer。

它會選擇其中一個 DHCP Offer,一般是最先到達的那個,並且會向網路發送一個 DHCP Request 廣播數據表,包中包含客戶端的 MAC 地址、接受分配的 IP 地址、提供此 IP 的 DHCP 伺服器地址等,並告訴所有的 DHCP Server 它將接受哪一臺伺服器提供的 IP 地址,告訴其他 DHCP 伺服器撤銷它們提供的 IP 地址,以便提供給下一個 IP 請求分配者。新人廣播包格式如下:

此時,由於還沒有得到 DHCP Server 的最後確認,新機器仍然使用 0.0.0.0 為源 IP 地址、255.255.255.255 為目標地址進行廣播。

當 DHCP Server 接收到新機器的 DHCP Request 之後,會廣播返回給新機器一個 DHCP ACK 消息包,表明已經接受新機器的選擇,並將這一 IP 地址分配信息和其他配置信息都放入該廣播包,發給新機器。DHCP ACK 格式如下:

新機器收到 DHCP ACK 後,會檢測分配的 IP 地址是否能夠適應,如果不能使用,它就會給 DHCP Server 發出 DHCP Decline 消息,通知 DHCP Server 禁用這個 IP 地址,然後新機器就開始新的地址申請過程。

在新機器使用 IP 租期超過 50% 時,DHCP Client 會以單播形式向 DHCP Server 發送 DHCP Request 報文來續租 IP 地址。如果 DHCP Client 成功收到 DHCP Server 發送的 DHCP ACK 報文,則按相應時間延長 IP 地址租期;如果沒有收到 DHCP Server 發送的 DHCP ACK 報文,則 DHCP Client 繼續使用這個 IP 地址。

在新機器使用 IP 租期超過 87.5% 時,DHCP Client 會以廣播形式向 DHCP Server 發送 DHCPRequest 報文來續租 IP 地址。如果 DHCP Client 成功收到 DHCP Server 發送的 DHCP ACK 報文,則按相應時間延長 IP 地址租期;如果沒有收到 DHCP Server 發送的 DHCP ACK 報文,則 DHCP Client 繼續使用這個IP地址,直到 IP 地址使用租期到期時,DHCP Client 才會向 DHCP Server 發送 DHCP Release 報文來釋放這個 IP 地址,並開始新的 IP 地址申請過程。

MAC 地址

在我們查詢 IP 地址的輸出結果中,有一行:

Link encap:Ethernet HWaddr 28:d2:44:ce:77:51

這個被稱為 MAC 地址,是一個網卡的物理地址,用十六進位,6 個 byte 表示。

MAC 地址是一個很容易讓人誤解的地址。因為 MAC 地址號稱全球唯一,不會存在有相同 MAC 地址的網卡。這就很容易讓我們想,既然全球唯一,那網路通信直接用 MAC 地址不行嗎?為什麼要加個 IP 地址,多封裝一層,再去通信呢?

當然是不行的。我們想把一個網路包從一個地方傳到另一個地方,除了有確定的地址外,還需要有定位功能。就像你去廣州找博主一樣,我只告訴你我的身份證號,你能在廣州找到我嗎?這種尋找無異於大海撈針。但是如果我告訴你我的詳細地址,你就可以直接通過導航找到對應的地址,然後再找到我。

IP 地址在一定程度上就承擔了詳細地址這種遠程地位的功能。MAC 地址更像是身份證號,是一個唯一的標識。它的唯一性設計是為了組網的時候,不同的網卡放在一個網路裡面,不用擔心衝突。

當然,MAC 地址也有一定的定位功能。就像你來到了博主所在的辦公室,你可以在辦公室喊身份證號是 XXX 的是哪位?博主聽到了,就會站起來回答你。但是如果你在博主聽不到的地方喊,那肯定不會有人應你。這就說明,MAC 地址的通信範圍比較小,僅僅局限在一個子網內。

 

歡迎添加個人微信號:Like若所思。

歡迎關註我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等著你!一起學習共同進步!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • if語句 語法: if (expression1) { } else if (expression2) { } else { } 執行機制: 先對expression1做判定,如果為真,執行對應的代碼塊中的代碼執行完畢,分支結束 如果expression1為假,再根據這種機制往下對其它的表達式做判定 ...
  • Juqery插件編寫 基礎說明 ...
  • DOM簡介: 1、DOM:Document Object Model(簡稱文檔對象模型),是專門用於操作網頁內容API一套標準!網頁內容:字元、圖片等各種資源 2、核心DOM:操作一切結構化文檔的API標準!特點:強大,萬能;缺點:操作繁瑣。 3、HTML DOM:專門操作HTML網頁的API標準- ...
  • 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title></title ...
  • 1.前端框架一般依賴node.js,我們首先要安裝node.js.請參考: http://www.cnblogs.com/wuac/p/6381819.html to:安裝好node.js後npm也安裝OK了 , 自己在設置一下環境變數路徑配置 自行百度。。 查看node版本命令:node -v 查 ...
  • 08.27自我總結 Vue的介紹及安裝和導入 一Vue的介紹 進式 JavaScript 框架 三大主流框架之一:Angular React Vue 先進的前端設計模式:MVVM 這個我們可以和之前的 設置模式結合其實他相當於mvcmc他將其中的邏輯控制又進行劃分劃分成視圖的邏輯,數據的邏輯. 可以 ...
  • 來,講故事: 單體架構(1): 小藍創辦了一家公司,由於資金緊張,招聘了小白負責行政,小紅負責財務,小黑負責技術,小黃負責運營,5個人擼起袖子就是乾,準備向市場推一個 “××寶” 的產品。 實際上每個人職責界限都不那麼明確,小白忙了小紅幫,小紅忙了小黑幫,小黑忙了沒人幫,小黃不忙到處幫,小藍組織幫幫 ...
  • 在上一篇博文中,我們見證了 IP 地址的誕生,機器一旦有了 IP,就可以在網路的環境里和其他的機器展開溝通了。 今天,我們來認識下 物理層 和 MAC 層。 日常生活中,身為 90 後的我們,如果不是通信相關專業出身的,應該從來沒有接觸過物理層和 MAC 層的設備。我們接觸最多的,可能就是路由器了。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...