ip與mac-數據包傳輸過程學習

你管這破玩意叫網絡?

內容來源于飛天閃客,以前沒有學習過網絡的相關基礎知識,只會去瞎設置,現在終于是弄明白了。

多臺電腦之間想要通信,可以直接通過一條網線進行連接。但是隨著網線的增加,這個就會比較繁雜了。
在這里插入圖片描述
所以就有了集線器這樣的設備。
在這里插入圖片描述
集線器會將包不做任何處理的分給每個設備。這樣的話就不知道包是誰發給誰的了,但是每個設備都有自己的mac物理地址,數據中再加上從哪個mac來,發送到目標mac地址就好了。
在這里插入圖片描述
當然,這個時候,其他電腦其實還是可以看到不屬于自己的包的數據的內容,所以就有了新的需求:將包只發給一個設備就好了——更加智能的集線器:交換機。
在這里插入圖片描述
交換機內部維護著一張mac地址表,記錄了每個設備的mac地址和對應的交換機端口號。這個時候包在傳遞的時候就會根據包信息,將包數據傳輸給對應的端口。
但是最開始的時候mac表是空的,是怎么樣一點點維護起來的呢?
在這里插入圖片描述
一開始的時候交換機就是一個集線器,不過它知道學習,把流經自己的數據包攜帶的信息記錄下來了,然后就學習到對應的mac映射表:
在這里插入圖片描述
這基本就是現在常用的單交換機的形式,但是交換機的端口也不夠用了怎么辦呢?于是就有了多個交換機之間的通信。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
這個時候一個端口對應的mac地址也就會變多了,所以要維護的mac地址表也就會逐漸增加,此時應該怎么辦呢?
那這時就又有了新的設備了,在交換機與交換機之間連接一個新的設備。沒錯,就是大家非常常見的路由器了。
在這里插入圖片描述
它的功能就是作為一臺獨立的mac地址設備,將數據包作一次性轉發。路由器每個端口都是由獨立的mac地址。
左邊的端口6對應路由器的mac地址,那問題是端口6的數據怎么先發給路由器的呢(原本是要發給E,F,G,H這四個設備的)?
此時就引入了ip地址的概念了192.168.0.1。此時我們再來看完整的發布過程:
在這里插入圖片描述
一包數據帶有對應的源mac,目標mac。源ip,目標ip等信息。
a與b通信時,直接可以通過交換機獲得信息,通過源mac和目標mac就可以傳遞。
a與c通信時,a需要先把數據發給路由器,然后再轉交給c。
a要給c,過程中先給到路由器,所以數據鏈路層的目標mac要是路由器的mac地址,網絡層的ip必須時a的ip到c的ip。
先看傳給路由器的時候,數據是:
在這里插入圖片描述
由于數據先給路由器,此時的目標mac和目標ip對應如上所示。接下來路由器給到c的時候,有個神奇的過程,它會把目標mac自動變成目標ip對應的mac地址。
在這里插入圖片描述
那么問題就來了,如果a給c發送數據,怎么知道需要路由器轉發數據呢?
這里就涉及到子網的概念,如果源ip與目標ip再同一個子網,直接將包通過交換機發出去。如果源ip與目標ip不在同一個子網,就會交給路由器去處理。是否在同一個子網又是通過掩碼去判斷的,也就是說192.68.0開頭的就是同一個子網,否則就不是同一個子網。
掩碼常用255.255.255.0,將原ip與掩碼進行與運算,相等就是同一個子網。計算結果如下:
在這里插入圖片描述
第二個問題,a怎么知道哪個是路由器的呢?
有一個默認網關的概念,默認網關就是一個ip地址。當遇到不是在同一個子網的電腦時,先把包發給默認網關對應的ip地址,所以就會先給路由器的ip地址。
在這里插入圖片描述
還有一個問題,數據包在發送時是需要mac地址和ip地址的,現在雖然有了ip的相關數據了,但是沒有mac地址。

此時是一個叫ARP協議的東西,這個機制會把ip與mac地址進行對應,同樣,需要先進行一次映射。這個協議是廣泛使用的,交換機和路由器都會要通過ARP協議維護一個ip與mac的映射表。
在這里插入圖片描述
對于交換機來說,還有一個路由表,對應的是ip和端口,把目標ip范圍得到,查表得到端口。當然也是存在ARP協議的,將mac地址獲取到。
在這里插入圖片描述
最后我們來完整看一下數據包的傳輸過程。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
涉及到的三張表分別是mac地址表(交換機)-映射mac地址和端口,路由表-映射ip和端口,arp緩存表(電腦和路由器中都有)-映射ip和mac地址

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81581.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數值分析知識重構

數值分析知識重構 一 Question 請構造一下數值分析中的誤差概念以及每一個具體數值方法的誤差是如何估計的? 二 Question 已知 n 1 n1 n1個數據點 ( x i , y i ) , i 0 , 1 , ? , n (x_i,y_i),i0,1,\cdots,n (xi?,yi?),i0,1,?,n,請使用多種方法建立數據之間…

使用 Qt QGraphicsView/QGraphicsScene 繪制色輪

使用 Qt QGraphicsView/QGraphicsScene 繪制色輪 本文介紹如何在 Qt 中利用 QGraphicsView 和 QGraphicsScene 實現基礎圓形繪制,以及進階的色輪(Color Wheel)效果。 色輪是色彩選擇器的常見控件,廣泛應用于圖形設計、繪畫和 UI …

移除鏈表元素數據結構oj題(力扣題206)

目錄 題目描述: 題目解讀(分析) 解決代碼 題目描述: 給你一個鏈表的頭節點 head 和一個整數 val ,請你刪除鏈表中所有滿足 Node.val val 的節點,并返回 新的頭節點 。 題目解讀(分析&#…

GLPK(GNU線性規劃工具包)中建模語言MathProg的使用

GNU MathProg是一種用于描述線性數學規劃模型的建模語言。用GNU MathProg語言編寫的模型描述由一組語句和數據塊組成。 在MathProg中,模型以集合、參數、變量、約束和目標(sets, parameters, variables, constraints, objectives稱為模型對象)的形式進行描述。 在Ma…

《Python星球日記》 第77天:模型部署與總結

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、模型部署技術1. 模型文件導出不同模型格式對比2. 使用Flask構建RESTful API3. 使用FastAPI構建高性能API4. 部署優化與最佳實踐二、部署架構…

【JavaWeb】MySQL(準備篇)

1 MySQL安裝 1.1 解壓 下載完成后我們得到的是一個壓縮包(所有文件均在文末安裝包中),將其解壓,我們就可以得到MySQL 8.0.34 的軟件本體了(就是一個文件夾),我們可以把它放在你想安裝的位置 。 1.2 配置 1.2.1 配置…

國產數據庫工具突圍:SQLynx如何解決Navicat的三大痛點?深度體驗報告

引言:Navicat的"中國困境" 當開發者面對達夢數據庫的存儲過程調試,或是在人大金倉中處理復雜查詢時,Navicat突然變得力不從心——這不是個例。 真實痛點:某政務系統遷移至OceanBase后,開發團隊發現Navicat無…

ETL數據集成產品選型需要關注哪些方面?

ETL(Extract,Transform,Load)工具作為數據倉庫和數據分析流程中的關鍵環節,其選型對于企業的數據戰略實施有著深遠的影響。谷云科技在 ETL 領域耕耘多年,通過自身產品的實踐應用,對 ETL 產品選型…

數據結構實驗10.1:內部排序的基本運算

文章目錄 一,實驗目的二,實驗內容1. 數據生成與初始化2. 排序算法實現(1)直接插入排序(2)二分插入排序(3)希爾排序(4)冒泡排序(5)快速…

從秒開到絲滑體驗!WebAssembly助力ZKmall商城重構 B2B2C 商城性能基線

在 B2B2C 電商領域,用戶對頁面加載速度與交互流暢度的要求日益嚴苛。傳統 Web 技術在處理復雜業務邏輯、海量數據渲染時,常出現卡頓、延遲等問題,導致用戶流失。ZKmall 商城創新性地引入 WebAssembly(簡稱 Wasm)技術&a…

FD+Mysql的Insert時的字段賦值亂碼問題

方法一 FDQuery4.SQL.Text : INSERT INTO 信息表 (中心, 分組) values(:中心,:分組); FDQuery4.Params[0].DataType : ftWideString; //必須加這個數據類型的定義,否則會有亂碼 FDQuery4.Params[1].DataType : ftWideString; //ftstring就不行,必須是…

vue2.0 組件生命周期

個人簡介 👨?💻?個人主頁: 魔術師 📖學習方向: 主攻前端方向,正逐漸往全棧發展 🚴個人狀態: 研發工程師,現效力于政務服務網事業 🇨🇳人生格言&…

使用GmSSL v3.1.1實現SM2證書認證

1、首先使用gmssl命令生成根證書、客戶端公私鑰,然后使用根證書簽發客戶端證書; 2、然后編寫代碼完成認證功能,使用根證書驗證客戶端證書是否由自己簽發,然后使用客戶端證書驗證客戶端私鑰對隨機數的簽名是否正確。 第一部分生成根…

升級mysql (rpm安裝)

#備份以防萬一 備份配置文件: /etc/my.cnf.d/server.cnf 備份數據: mysqldump -u your_username -p --all-databases > all_databases.sql #停止 systemctl stop mysql #卸載舊版 yum remove mariadb #安裝新版( 通過yum安裝報錯,死活安裝不了,只能rpm安裝) 下載地址…

深入理解pip:Python包管理的核心工具與實戰指南

# 深入理解pip:Python包管理的核心工具與實戰指南 在Python開發中,第三方庫是提升效率的關鍵。而pip作為Python官方的包管理工具,承擔著安裝、卸載、升級和管理庫的重要職責。本文將全面解析pip的核心命令,結合實例演示用法&#…

Linux配置SSH密鑰認證

介紹 配置SS秘鑰認證后,可以通過shell腳本免密刪除文件或執行命令。 # 生成密鑰對(如果還沒有) ssh-keygen -t rsa# 將公鑰復制到服務器 ssh-copy-id "$remote_user$remote_host"

python打卡第30天

知識點回顧: 一,導入官方庫的三種手段。 使用 import 直接導入整個模塊 import module_name 使用 from ... import ... 導入特定功能 from module_name import function_name 使用 as 關鍵字重命名模塊或功能 import module_name as alias # 或 from mod…

Java基礎(網絡編程)

一、概述 目的:網絡通信: 1、設備和設備 2、進程和進程 1)不同設備之間 2)本地設備之間 需要解決的問題: 如何準確地發送到對方的主機 - IP地址 - 唯一的定位網絡中的一臺主機 如何準確的發送到對方主機的進程 -…

第二屆parloo杯的RSA_Quartic_Quandary

(害,還是太菜了,上去秒了一道題之后就動不了了,今晚做個記錄,一點點的往回拾起吧) # from Crypto.Util.number import getPrime, bytes_to_long # import math # # FLAG b************** # # # def gene…

RL?_ Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers

RL?: Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers 在人工智能領域,大語言模型(LLM)的推理能力提升一直是研究熱點。今天要解讀的論文提出了一種全新的強化學習框架RL?,通過融合推理與驗證能力&#xf…