Docker--Docker網絡原理

虛擬網卡

==虛擬網卡(Virtual Network Interface,簡稱vNIC) 是一種在軟件層面模擬的網卡設備,不依賴于物理硬件,而是通過操作系統或虛擬化技術實現網絡通信功能。==它允許計算機在虛擬環境中模擬物理網卡的行為,用于連接虛擬網絡或與物理網絡交互。

核心特點

1.軟件模擬

  • 通過軟件算法模擬物理網卡的功能,如數據包的接收、發送、MAC地址處理等。
  • 無需物理硬件支持,可在無物理網卡的設備上運行。

2.靈活配置

  • 用戶可自由設置虛擬網卡的IP地址、MAC地址、子網掩碼等參數。
  • 支持動態調整網絡配置,適應不同場景需求。

3.跨平臺兼容

  • 可在Windows、Linux、macOS等操作系統上運行。
  • 常見于虛擬機(如VMware、VirtualBox)、容器(如Docker)、云服務(如AWS、Azure)等場景。

虛擬網卡:TUN/TAP

TUN/TAP 是 Linux 內核中提供的兩種虛擬網絡設備,用于在用戶空間程序和內核網絡棧之間傳輸數據。

1.TUN(網絡層虛擬設備)

  • 工作層次:網絡層(第三層)。
  • 處理數據:IP 數據包。
  • 特點
    模擬一個網絡層接口,允許用戶空間程序接收和發送 IP 層的數據包
    常用于 VPN 應用,將網絡流量從一個遠程網絡重定向到本地虛擬網絡接口。
    沒有 MAC 地址,僅處理 IP 層數據,無法進行二層操作(如發送 ARP 包或以太網廣播)。

2.TAP(鏈路層虛擬設備)

  • 工作層次:數據鏈路層(第二層)。
  • 處理數據:以太網幀。
  • 特點
    模擬一個以太網接口,允許用戶空間程序發送和接收以太網幀
    通常用于虛擬機網絡、橋接網絡、虛擬交換機等場景,以模擬完整的二層網絡通信。
    擁有 MAC 地址,可以處理二層數據幀,支持二層廣播和 MAC 層功能。

工作機制

數據傳輸:數據在用戶空間和內核之間通過設備文件(如 /dev/net/tun)傳輸。

  • 用戶空間 → 虛擬設備 → 內核網絡棧:用戶空間程序通過文件描述符將數據(IP 包或以太網幀)寫入 TUN/TAP 設備,內核接收到數據后,根據設備類型(TUN 或 TAP)將數據包發送到內核網絡棧的對應層。
  • 內核網絡棧 → 虛擬設備 → 用戶空間:當內核網絡棧收到外部網絡的數據包,并且這些數據包的目標是虛擬網絡設備時,內核會將這些數據包發送到 TUN 或 TAP 設備,設備接收到數據后,通過文件描述符將數據傳遞到用戶空間。

VPN應用程序例子

在這里插入圖片描述
應用程序通過tun設備對外發送數據包后,tun設備就會把數據包通過字符設備發送給VPN應用程序,VPN接收到數據包,重新封裝出新的報文;然后通過協議棧發送到物理網卡上

虛擬網卡tun實戰

1.查看當前的物理網卡,eth0就是我們的物理網卡

ifconfig

在這里插入圖片描述
通過ip link 命令 創建一個虛擬網卡

ip tuntap add dev tun0 mod tun

查看網卡信息,新添加的虛擬網卡默認是DOWN狀態.需要用-a 參數顯示

ifconfig -a

在這里插入圖片描述
激活網卡

ip link set tun0 up

再次通過ifconfig查看,可以看到網卡狀態UP了;
在這里插入圖片描述
分配ip地址

ip addr add 10.5.0.1/24 dev tun0

通過ifconfig進行查看
在這里插入圖片描述
此時說明我們的虛擬網卡已經添加好了,通過 del 可以刪除網卡

ip tuntap del dev tun0 mod tun

虛擬網卡:veth

使用 tun/tap 設備傳輸數據需要經過兩次協議棧,不可避免地會有一定的性能損耗,
所以引入了新的網卡實現方式 veth.

veth(Virtual Ethernet)是一種虛擬網卡設備,在 Linux 內核中實現,用于在兩個網絡命名空間之間創建點對點連接

  • 成對出現:veth 設備總是成對出現,例如 veth0 和 veth1,它們之間形成一個虛擬的以太網連接。
  • 網絡命名空間隔離:veth 設備的一端可以放置在一個網絡命名空間中,另一端放置在另一個網絡命名空間中,從而實現不同命名空間之間的通信。
  • 數據傳輸:從一個 veth 設備發送的數據包會直接傳輸到其對端的 veth 設備,就像在物理以太網中通過網線連接的兩臺設備一樣。

在這里插入圖片描述

工作原理

  • 內核網絡棧處理:veth 設備的數據傳輸由 Linux 內核的網絡棧處理。當一個 veth 設備接收到數據包時,內核會將數據包直接傳遞給其對端的 veth 設備,而不會經過物理網絡接口。
  • 高效通信:由于 veth 設備之間的通信在內核中完成,沒有物理網絡接口的開銷,因此通信效率非常高。

虛擬網卡veth實戰

查看當前網卡信息

ifconfig

創建兩個網絡空間

 ip netns add ns1ip netns add ns2ip netns list
ns2
ns1

創建一個虛擬網卡對

ip link add veth11 type veth peer name veth12

執行 ifconfig -a 可以看到網卡多了 2 個

將網卡挪到不同的命名空間中

sudo ip link set veth11 netns ns1
sudo ip link set veth12 netns ns2

激活我們的網卡

ip netns exec ns1 ip link set veth11 up
ip netns exec ns2 ip link set veth12 up

設置ip地址

ip netns exec ns1 ip addr add 10.5.0.1/24 dev veth11
ip netns exec ns2 ip addr add 10.5.0.2/24 dev veth12

相互ping一下

ip netns exec ns1 ping 10.5.0.2

在這里插入圖片描述

ip netns exec ns2 ping 10.5.0.1

在這里插入圖片描述
刪除網絡命名空間

ip netns del ns1
ip netns del ns2

弊端:隨著網絡設備的增多,網絡連線的復雜程度將成倍增長

虛擬交換機

在現實生活中,一臺設備往往與多臺設備進行通信,路由器很好的解決了這個問題,將設備通過路由器的二層交換,那么設備就能通過路由器IP分配來進行通信;

Linux Bridge 最主要的功能就是二層交換,是對現實的虛擬機進行模擬;

Linux Bridge ,由brctl命令創建和管理。
在這里插入圖片描述

實戰

創建三個 netns,三對 veth pair,分別一端在 netns 中,另一端連接在網橋上;
在這里插入圖片描述
新建網絡命名空間

root@VM-8-12-ubuntu:~# ip netns add ns1
root@VM-8-12-ubuntu:~# ip netns add ns2
root@VM-8-12-ubuntu:~# ip netns add ns3

創建 veth 對

root@VM-8-12-ubuntu:~# ip link add veth2-ns type veth peer name veth2-br
root@VM-8-12-ubuntu:~# ip link add veth1-ns type veth peer name veth1-br
root@VM-8-12-ubuntu:~# ip link add veth3-ns type veth peer name veth3-br

將 ns 一段的網卡移入到命名空間

root@VM-8-12-ubuntu:~# ip link set dev veth1-ns netns ns1
root@VM-8-12-ubuntu:~# ip link set dev veth2-ns netns ns2
root@VM-8-12-ubuntu:~# ip link set dev veth3-ns netns ns3

啟動網卡,并配置 ip,開啟本地回環,

root@VM-8-12-ubuntu:~# ip netns exec ns1 ip link set veth1-ns up
root@VM-8-12-ubuntu:~# ip netns exec ns2 ip link set veth2-ns up
root@VM-8-12-ubuntu:~# ip netns exec ns3 ip link set veth3-ns up
root@VM-8-12-ubuntu:~# ip netns exec ns1 ip link set lo up
root@VM-8-12-ubuntu:~# ip netns exec ns2 ip link set lo up
root@VM-8-12-ubuntu:~# ip netns exec ns3 ip link set lo up
root@VM-8-12-ubuntu:~# ip netns exec ns1 ip addr add 10.100.0.11/24 dev veth1-ns
root@VM-8-12-ubuntu:~# ip netns exec ns2 ip addr add 10.100.0.12/24 dev veth2-ns
root@VM-8-12-ubuntu:~# ip netns exec ns3 ip addr add 10.100.0.13/24 dev veth3-ns

測試網絡聯通性,此時是不通的

root@VM-8-12-ubuntu:~# ip netns exec ns3 ping 10.100.0.11
PING 10.100.0.11 (10.100.0.11) 56(84) bytes of data.
^C
--- 10.100.0.11 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2037ms

創建網橋

root@VM-8-12-ubuntu:~# brctl addbr testbr0
root@VM-8-12-ubuntu:~# ifconfig -a

在這里插入圖片描述
啟動網橋

 ip link set testbr0 up

配置ip地址

ip addr add 10.100.0.1/24 dev testbr0

將veth的另一端打開

ip link set veth1-br up
ip link set veth2-br up
ip link set veth3-br up

將veth的另一端與網橋連接上

brctl addif testbr0 veth1-br
brctl addif testbr0 veth2-br
brctl addif testbr0 veth3-br

嘗試ping一下

ip netns exec ns3 ping 10.100.0.11

在這里插入圖片描述

ip netns exec ns2 ping 10.100.0.13

在這里插入圖片描述
如果發現不能轉發,原因是 linux 加入了 bridge_netfilter。需要開啟允許通過:

iptables -A FORWARD -i testbr0 -j ACCEPT

釋放空間

ip link del veth1-br
ip link del veth2-br
ip link del veth3-br
ip link del testbr0
ip netns del ns1
ip netns del ns2
ip netns del ns3

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

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

相關文章

linux基礎14--dns和web+dns

DNS:域名系統(Domain Name System) DNS協議是用來將域名轉換為IP地址或將IP地址轉換為相應的域名 DNS使用TCP和UDP端口53,給用戶提供解析時一般使用UDP53 對于每一級域名長度的限制是63個字符,域名總長度則不能超過2…

C++抽象基類定義與使用

在 C 中,抽象基類(Abstract Base Class, ABC) 是一種特殊的類,用于定義接口規范和約束派生類的行為。它通過純虛函數(Pure Virtual Function)強制要求派生類實現特定功能,自身不能被實例化。以下…

用selenium4 webdriver + java 搭建并完成第一個自動化測試腳本

自動化測試任務: 百度搜索自己的姓名。點擊第一個鏈接(或者第二個),在新的頁面上,添加斷言,驗證你的名字是否存在。 實驗資料百度網盤下載路徑: 鏈接: https://pan.baidu.com/s/1nVlHX_ivres…

LLM大模型中的基礎數學工具—— 約束優化

Q26: 推導拉格朗日乘子法 的 KKT 條件 拉格朗日乘子法與 KKT 條件是啥? 拉格朗日乘子法是解決約束優化問題的利器。比如,想最小化函數 ,同時滿足約束 ,就構造拉格朗日函數 ( 是乘子)。KKT 條件是解這類問…

net+MySQL中小民營企業安全生產管理系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 近些年來,隨著科技的飛速發展,互聯網的普及逐漸延伸到各行各業中,給人們生活帶來了十分的便利,中小民營企業安全生產管理系統利用計算機網絡實現信息化管理,使企業的中小民營企業安全生產管理發展和服務水平有顯…

論文閱讀:2024 arxiv AI Safety in Generative AI Large Language Models: A Survey

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Safety in Generative AI Large Language Models: A Survey 生成式人工智能大型語言模型中的人工智能安全性:一項調查 https://arxiv.org/pdf/2407.18369 https://www.doubao.com…

【MySQL數據庫】表的約束

目錄 1,空屬性 2,默認值 3,列描述 4,zerofill 5,主鍵primary key 6,自增長auto_increment 7,唯一鍵unique 8,外鍵foreign key 在MySQL中,表的約束是指用于插入的…

基于javaweb的SpringBoot校園失物招領系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

多模態大語言模型arxiv論文略讀(二十六)

Holistic Autonomous Driving Understanding by Bird’s-Eye-View Injected Multi-Modal Large Models ?? 論文標題:Holistic Autonomous Driving Understanding by Bird’s-Eye-View Injected Multi-Modal Large Models ?? 論文作者:Xinpeng Ding,…

“星睿O6” AI PC開發套件評測 - 部署PVE搭建All in One NAS服務器

Radxa O6平臺上部署PVE搭建All in One NAS服務器 Radxa O6是一款性能卓越的單板計算機,其強勁的硬件配置和多樣化的接口設計,使其成為家庭和小型企業理想的All in One服務器解決方案。值得一提的是,O6原生配備了兩個5G網口,便于直…

C++ linux打包運行方案(cmake)

文章目錄 背景動態庫打包方案動態庫轉靜態庫動態庫打到軟件包中 運行 背景 使用C編寫的一個小項目,需要打包成ubuntu下的可執行文件,方便分發給其他ubuntu執行,因為docker鏡像方案過于臃腫,所以需要把項目的動態庫都打在軟件包中…

Linux內核編譯(Ubuntu)

實驗內容:在系統中下載統一發行版本的版本號較高的內核,編譯之后運行自己編譯的內核,并使用uname-r命令查看是否運行成功。 實驗步驟: 1.查看實驗環境和內核版本 圖1 實驗環境 VMware中虛擬機Ubuntu(24.04&#xff…

EdgeGPT - 新版Bing聊天功能逆向工程

本文翻譯整理自:https://github.com/acheong08/EdgeGPT 文章目錄 一、關于 EdgeGPT相關鏈接資源關鍵功能特性 二、安裝系統要求安裝命令 三、認證配置獲取Cookie步驟代碼中使用Cookie 四、使用方法1、命令行方式2、Python API方式使用Chatbot類使用Query輔助類 3、…

三網通電玩城平臺系統結構與源碼工程詳解(四):子游戲集成與服務器調度機制全解

本篇將深入講解三網通電玩城平臺中子游戲接入、前后端資源組織方式、服務器調度邏輯、并發接入方案等核心內容,重點覆蓋“李逵劈魚”、“水果瑪麗”、“瘋狂瑪麗”等熱門組件,輔以完整代碼框架與部署邏輯。 一、子游戲資源目錄結構與加載機制 平臺采用標…

1.1 AI大模型與Agent的興起及其對企業數字化轉型的推動作用

隨著人工智能技術的飛速發展,AI大模型和智能代理(Agent)的興起正成為推動企業數字化轉型的重要力量。從2017年GPT-1的首次亮相到2025年GPT-4和Qwen 2.5等多模態模型的成熟,AI大模型經歷了顯著的技術演進;與此同時&…

位運算練習:起床困難綜合征(貪心,位運算)(算法競賽進階指南學習筆記)

目錄 前情提要起床困難綜合征(貪心,位運算) 前情提要 一些基礎運算操作用法看看上一篇; 起床困難綜合征(貪心,位運算) 題目原文 [P2114 NOI2014] 起床困難綜合癥 - 洛谷 思路分析 題目很長…

PowerBi中REMOVEFILTERS怎么使用?

在 Power BI 的 DAX 中,REMOVEFILTERS() 是一個非常重要的函數,常用于取消某個字段或表的篩選上下文(Filter Context),從而讓你的計算不受切片器(Slicer)、篩選器或視覺對象的限制。 ? 一、REM…

Vue3 實戰:打造多功能旅游攻略選項卡頁面

在旅游類應用開發中,為用戶提供全面、直觀的信息展示界面至關重要。本文將分享如何基于 Vue3 Axios 技術棧,實現一個包含攻略、游記、問答三大板塊的旅游攻略選項卡頁面,從樣式設計到交互邏輯,帶你深入了解整個開發過程。 項目背…

JavaScript性能優化實戰(1):性能優化基礎與性能分析工具

性能優化的重要性與業務價值 在當今競爭激烈的互聯網環境中,網站和應用的性能已成為用戶體驗和業務成功的關鍵因素。研究表明,頁面加載時間每增加1秒,轉化率可能下降7%,而53%的用戶會在頁面加載時間超過3秒后放棄訪問。這些數據直接揭示了性能優化對業務的巨大影響: 用戶…

Unity 腳本使用(二)——UnityEngine.AI——NavMesh

描述 Singleton class 用于訪問被烘培好的 NavMesh. 使用NavMesh類可以執行空間查詢(spatial queries),例如路徑查找和可步行性測試。此類還允許您設置特定區域類型的尋路成本,并調整尋路和避免的全局行為。 靜態屬性&#xff0…