㈠ 計算機網路名詞解釋知識點簡答題整理
基帶傳輸:比特流直接向電纜發送,無需調制到不同頻段;
基帶信號:信源發出的沒有經過調制的原始電信號;
URL :統一資源定位符,標識萬維網上的各種文檔,全網范圍唯一;
傳輸時延:將分組的所有比特推向鏈路所需要的時間;
協議:協議是通信設備通信前約定好的必須遵守的規則與約定,包括語法、語義、定時等。
網路協議:對等層中對等實體間制定的規則和約定的集合;
MODEM :數據機;
起始(原始)伺服器:對象最初存放並始終保持其拷貝的伺服器;
計算機網路:是用通信設備和線路將分散在不同地點的有獨立功能的多個計算機系統互相連接起來,並通過網路協議進行數據通信,實現資源共享的計算機集合;
解調:將模擬信號轉換成數字信號;
多路復用:在一條傳輸鏈路上同時建立多條連接,分別傳輸數據;
默認路由器:與主機直接相連的一台路由器;
LAN :區域網,是一個地理范圍小的計算機網路;
DNS :域名系統,完成主機名與 IP 地址的轉換;
ATM :非同步傳輸模式,是建立在電路交換和分組交換基礎上的一種面向連接的快速分組交換技術;
Torrent :洪流,參與一個特定文件分發的所有對等方的集合;
Cookie :為了辨別用戶、用於 session 跟蹤等而儲存在用戶本地終端的數據;
SAP :服務訪問點;
n PDU : PDU 為協議數據單元,指對等層之間的數據傳輸單位;第 n 層的協議數據單元;
PPP :點對點傳輸協議;
Web caching :網頁緩存技術;
Web 緩存:代替起始伺服器來滿足 HTTP 請求的網路實體。
Proxy server :代理伺服器;
Go-back-n :回退 n 流水線協議;允許發送方連續發送分組,無需等待確認,若出錯,從出錯的分組開始重發;接收方接收數據分組,若正確,發 ACK ,若出錯,丟棄出錯分組及其後面的分組,不發任何應答;
Packet switching :分組交換技術;
CDMA :碼分多路復用技術;各站點使用不同的編碼,然後可以混合發送,接收方可正確提取所需信息;
TDM :時分多路復用,將鏈路的傳輸時間劃分為若干時隙,每個連接輪流使用不同時隙進行傳輸;
FDM :頻分多路復用,將鏈路傳輸頻段分成多個小的頻段,分別用於不同連接信息的傳送;
OSI :開放系統互連模型,是計算機廣域網體系結構的國際標准,把網路分為 7 層;
CRC :循環冗餘檢測法,事先雙方約定好生成多項式,發送節點在發送數據後附上冗餘碼,使得整個數據可以整除生成多項式,接收節點收到後,若能整除,則認為數據正確,否則,認為數據錯誤;
RIP :路由信息協議;
Socket (套接字):同一台主機內應用層和運輸層的介面;
轉發表:交換設備內,從入埠到出埠建立起來的對應表,主要用來轉發數據幀或 IP 分組;
路由表:路由設備內,從源地址到目的地址建立起來的最佳路徑表,主要用來轉發 IP 分組;
存儲轉發:分組先接收存儲後,再轉發出去;
虛電路網路:能支持實現虛電路通信的網路;
數據報網路:能支持實現數據報通信的網路;
虛電路:源和目的主機之間建立的一條邏輯連接,創建這條邏輯連接時,將指派一個虛電路標識符 VC.ID ,相關設備為它運行中的連接維護狀態信息;
毒性逆轉技術: DV 演算法中,解決計數到無窮的技術,即告知從相鄰路由器獲得最短路徑信息的相鄰路由器到目的網路的距離為無窮大;
加權公平排隊 WFQ :排隊策略為根據權值大小不同,將超出隊列的數據包丟棄;
服務原語:服務的實現形式,在相鄰層通過服務原語建立交互關系,完服務與被服務的過程;
透明傳輸:在無需用戶干涉的情況下,可以傳輸任何數據的技術;
自治系統 AS :由一組通常在相同管理者控制下的路由器組成,在相同的 AS 中,路由器可全部選用同樣的選路演算法,且擁有相互之間的信息;
分組丟失:分組在傳輸過程中因為種種原因未能到達接收方的現象;
隧道技術:在鏈路層或網路層通過對等協議建立起來的邏輯通信信道;
移動接入:也稱無線接入,是指那些常常是移動的端系統與網路的連接;
面向連接服務:客戶機程序和伺服器程序發送實際數據的分組前,要彼此發送控制分組建立連接;
無連接服務:客戶機程序和伺服器程序發送實際數據的分組前,無需彼此發送控制分組建立連接;
MAC 地址:網卡或網路設備埠的物理地址;
擁塞控制:當網路發生擁塞時,用響應的演算法使網路恢復到正常工作的狀態;
流量控制:控制發送方發送數據的速率,使收發雙方協調一致;
Ad Hoc 網路:自主網路,無基站;
往返時延:發送方發送數據分組到收到接收方應答所需要的時間;
電路交換:通信節點之間採用面向連接方式,使用專用電路進行傳輸;
ADSL :非同步數字用戶專線,採用不對稱的上行與下行傳輸速率,常用於用戶寬頻接入。
多播:組播,一對多通信;
路由器的組成包括:輸入埠、輸出埠、交換結構、選路處理器;
網路應用程序體系結構:客戶機 / 伺服器結構、對等共享、混合;
集線器是物理層設備,交換機是數據鏈路層設備,網卡是數據鏈路層設備,路由器是網路層設備;
雙絞線連接設備的兩種方法:直連線和交叉線,同種設備相連和計算機與路由器相連都使用交叉線;不同設備相連用直連線;
MAC 地址 6 位元組, IPv4 地址 4 位元組, IPv6 地址 16 位元組;
有多種方法對載波波形進行調制,調頻,調幅,調相;
IEEE802.3 乙太網採用的多路訪問協議是 CSMA/CD ;
自治系統 AS 內部的選路協議是 RIP 、 OSPF ;自治系統間的選路協議是 BGP ;
多路訪問協議:分三大類:信道劃分協議、隨機訪問協議、輪流協議;
信道劃分協議包括:頻分 FDM 、時分 TDM 、碼分 CDMA ;
隨機訪問協議包括: ALOHA 、 CSMA 、 CSMA/CD(802.3) 、 CSMA/CA(802.11) ;
輪流協議包括:輪詢協議、令牌傳遞協議
ISO 和 OSI 分別是什麼單詞的縮寫,中文意思是什麼?用自己的理解寫出 OSI 分成哪七層?每層要解決的問題和主要功能是什麼?
答:ISO:international standard organization 國際標准化組織;OSI:open system interconnection reference model 開放系統互連模型;
OSI分為 應用層、表示層、會話層、傳輸層、網路層、數據鏈路層、物理層;
層名稱解決的問題主要功能
應用層實現特定應用選擇特定協議;針對特定應用規定協議、時序、表示等,進行封裝。在端系統中用軟體來實現,如HTTP;
表示層壓縮、加密等表示問題;規定數據的格式化表示,數據格式的轉換等;
會話層會話關系建立,會話時序控制等問題;規定通信的時序;數據交換的定界、同步、建立檢查點等;
傳輸層源埠到目的埠的傳輸問題;所有傳輸遺留問題:復用、流量、可靠;
網路層路由、擁塞控制等網路問題;IP定址,擁塞控制;
數據鏈路層相鄰節點無差錯傳輸問題;實現檢錯與糾錯,多路訪問,定址;
物理層物理上可達;定義機械特性,電氣特性,功能特性等;
網際網路協議棧分層模型及每層的功能。
分層的優點:使復雜系統簡化,易於維護和更新;
分層的缺點:有些功能可能在不同層重復出現;
假設一個用戶 ( 郵箱為: [email protected]) 使用 outlook 軟體發送郵件到另一個用戶 ( 郵箱為: [email protected]) ,且接收用戶使用 IMAP 協議收取郵件,請給出此郵件的三個傳輸階段,並給出每個階段可能使用的應用層協議。
用戶 [email protected] 使用outlook軟體發送郵件到 163 郵件伺服器
163郵件伺服器將郵件發送給用戶 [email protected] 的yahoo郵件伺服器
用戶 [email protected] 使用IMAP協議從yahoo郵件伺服器上拉取郵件
第1、2階段可以使用SMTP協議或者擴展的SMTP協議:MIME協議,第3階段可以使用IMAP、POP3、HTTP協議
三次握手的目的是什麼?為什麼要三次(二次為什麼不行)?
為了實現可靠數據傳輸,TCP協議的通信雙方,都必須維護一個序列號,以標識發送出去的數據包中,哪些是已經被對方收到的。三次握手的過程即是通信雙方相互告知序列號起始值,並確認對方已經收到了序列號起始值的必經步驟。
如果只是兩次握手,至多隻有連接發起方的起始序列號能被確認,另一方選擇的序列號則得不到確認。
選擇性重傳 (SR) 協議中發送方窗口和接收方窗口何時移動?分別如何移動?
發送方:當收到ACK確認分組後,若該分組的序號等於發送基序號時窗口發生移動;向前移動到未確認的最小序號的分組處;
接收方:當收到分組的序號等於接收基序號時窗口移動;窗口按交付的分組數量向前移動;
簡述可靠傳輸協議 rdt1.0, rdt2.0, rdt2.1, rdt2.2 和 rdt3.0 在功能上的區別。
rdt1.0:經可靠信道上的可靠數據傳輸,數據傳送不出錯不丟失,不需要反饋。
rdt2.0(停等協議):比特差錯信道上的可靠數據傳輸,認為信道傳輸的數據可能有比特差錯,但不會丟包。接收方能進行差錯檢驗,若數據出錯,發送方接收到NAK之後進行重傳。
rdt2.1:在rdt2.0的基礎上增加了處理重復分組的功能,收到重復分組後,再次發送ACK;
rdt2.2:實現無NAK的可靠數據傳輸,接收方回發帶確認號的ACK0/1,
收到出錯分組時,不發NAK,發送接收到的上一個分組的ACK;
rdt3.0:實現了超時重發功能,由發送方檢測丟包和恢復;
電路交換和虛電路交換的區別?哪些網路使用電路交換、報文交換、虛電路交換和數據報交換?請各舉一個例子。
電路交換時整個物理線路由通訊雙方獨占;
虛電路交換是在電路交換的基礎上增加了分組機制,在一條物理線路上虛擬出多條通訊線路。
電路交換:電話通信網
報文交換:公用電報網
虛電路交換:ATM
數據報交換:Internet
電路交換:面向連接,線路由通信雙方獨占;
虛電路交換:面向連接,分組交換,各分組走統一路徑,非獨占鏈路;
數據報交換:無連接,分組交換,各分組走不同路徑;
交換機逆向擴散式路徑學習法的基本原理:
交換表初始為空;
當收到一個幀的目的地址不在交換表中時,將該幀發送到所有其他介面(除接收介面),並在表中記錄下發送節點的信息,包括源MAC地址、發送到的介面,當前時間;
如果每個節點都發送了一幀,每個節點的地址都會記錄在表中;
收到一個目的地址在表中的幀,將該幀發送到對應的介面;
表自動更新:一段時間後,沒有收到以表中某個地址為源地址的幀,從表中刪除該地址;
非持久 HTTP 連接和持久 HTTP 連接的不同:
非持久HTTP連接:每個TCP連接只傳輸一個web對象,只傳送一個請求/響應對,HTTP1.0使用;
持久HTTP連接:每個TCP連接可以傳送多個web對象,傳送多個請求/響應對,HTTP1.1使用;
Web 緩存的作用是什麼?簡述其工作過程:
作用:代理原始伺服器滿足HTTP請求的網路實體;
工作過程:
瀏覽器:與web緩存建立一個TCP連接,向緩存發送一個該對象的HTTP請求;
Web緩存:檢查本地是否有該對象的拷貝;
若有,就用HTTP響應報文向瀏覽器轉發該對象;
若沒有,緩存與原始伺服器建立TCP連接,向原始伺服器發送一個該對象的HTTP請求,原始伺服器收到請求後,用HTTP響應報文向web緩存發送該對象,web緩存收到響應,在本地存儲一份,並通過HTTP響應報文向瀏覽器發送該對象;
簡要說明無線網路為什麼要用 CSMA/CA 而不用 CSMA/CD ?
無線網路用無線信號實施傳輸,現在的技術還無法檢測沖突,因此無法使用帶沖突檢測的載波偵聽多路訪問協議CSMA/CD,而使用沖突避免的載波偵聽多路訪問協議CSMA/CA;
簡述各種交換結構優缺點,並解釋線頭 HOL 阻塞現象。
內存交換結構:以內存為交換中心;
優點:實現簡單,成本低;
缺點:不能並行,速度慢;
匯流排交換結構:以共享匯流排為交換中心;
優點:實現相對簡單,成本低;
缺點:不能並行,速度慢,不過比memory快;
縱橫制:以交叉陣列為交換中心;
優點:能並行,速度快,比memory和匯流排都快;
缺點:實現復雜,成本高;
線頭HOL阻塞:輸入隊列中後面的分組被位於線頭的一個分組阻塞(即使輸出埠是空閑的),等待交換結構發送;
CSMA/CD 協議的中文全稱,簡述其工作原理。
帶沖突檢測的載波偵聽多路訪問協議;
在共享信道網路中,發送節點發送數據之前,先偵聽鏈路是否空閑,若空閑,立即發送,否則隨機推遲一段時間再偵聽,在傳輸過程中,邊傳輸邊偵聽,若發生沖突,以最快速度結束發送,並隨機推遲一段時間再偵聽;
奇偶校驗、二維奇偶校驗、 CRC 校驗三者比較:
奇偶校驗能檢測出奇數個差錯;
二維奇偶校驗能夠檢測出兩個比特的錯誤,能夠糾正一個比特的差錯;
CRC校驗能檢測小於等於r位的差錯和任何奇數個差錯;
GBN 方法和 SR 方法的差異:
GBN:一個定時器,超時,重發所有已發送未確認接收的分組,發送窗口不超過2的k次方-1,接收窗口大小為1,採用累計確認,接收方返回最後一個正確接受的分組的ACK;
SR:多個定時器,超時,只重發超時定時器對應的分組,發送窗口和接收窗口大小都不超過2的k-1次方,非累計確認,接收方收到當前窗口或前一窗口內正確分組時返回對應的ACK;
㈡ 計算機網路-k8s網路
K8S網路模型設計:扁平的可連通的網路
K8S的網路是一個極其復雜的網路,如果想要用兩個簡單的詞來描述K8S網路,那麼我覺得扁平和可連通是K8S網路最大的特點(不懂隔離性)。
何為連通呢?
二層網路的連通:如果能夠直接通過MAC幀直接通信的網路便是二層連通的網路,LAN就是這種網路
比如無限WIFI網路,比如乙太網
三層網路的連通:如果能夠通過IP報直接通信的網路便是三層連通的網路,便是三層連通
三層網路的連通分為兩個部分,第一個部分是三層網路中的每一個LAN都是二層連通的,其次需要存在能夠連通的路由來保證;這里可以簡單回顧下三層網路通信的流程
通過路由表確定目標ip是否在鏈路上
如果在鏈路上,通過arp協議獲取對應主機的mac地址,發送mac幀到鏈路上;
如果不在同一個鏈路上,通過本地路由表發送mac幀給下一跳,然後下一跳解析mac幀,分析ip報,繼續路由直到最終跳到目標網路再次通過mac幀發送到目標主機或者到達ttl消失。
假如其中任何一個步驟不滿足或者出問題,三層網路就無法連通
何為扁平呢?
就是希望可以在pod內直接通過IP進行互相通信而不需要在pod內部使用vpn之類的東西來連接其他pod(基礎架構化),具體的可以看下k8s對網路的設計與要求。
k8s在設計其網路時,就希望網路對運行在其中的pod是透明的,因此提出了以下的一些要求與原則
k8s組網要求
所有的Pods之間可以在不使用 NAT網路地址轉換 的情況下相互通信
所有的Nodes之間可以在不使用NAT網路地址轉換的情況下相互通信
每個Pod自己看到的自己的ip和其他Pod看到的一致
k8s網路模型設計原則
每個Pod都擁有一個獨立的 IP地址,而且 假定所有 Pod 都在一個可以直接連通的、扁平的網路空間中 。
不管它們是否運行在同 一 個 Node (宿主機)中,都要求它們可以直接通過對方的 IP 進行訪問。
設計這個原則的原因 是,用戶不需要額外考慮如何建立 Pod 之間的連接,也不需要考慮將容器埠映射到主機埠等問題。
而要想深入了解K8S的網路,就不得不去了解Linux操作系統中的網路以及計算機網路協議棧和一些網路技術
其中關於計算機網路協議棧道部分上次分享已經分享過了,所以本次的主題更多是Linux操作系統的網路以及一些網路技術
Linux操作系統中的網路
首先,我們來看下基本的linux網路,如下圖所示
一個APP生成socket數據,然後經過網路協議棧包裝IP報文,然後封裝成MAC幀,在經過網路協議棧的過程中,會存在netfilters對數據進行一定的處理,同時也會存在路由的過程,
如果在同一個物理鏈路內,將直接通過ARP協議獲取目標IP地址的MAC地址最終發送出去;
如果不在同一個物理鏈路則通過路由表確定下一跳的MAC地址,封裝成MAC幀發送到目標地址。
在這個過程中,會根據路由表選擇對應的埠,如果是lo埠,則會將幀原封不動的返回計算機網路協議棧,然後回到監聽對應埠的SOCKET里。
如果是乙太網埠則走乙太網埠,如果是藍牙或者無線網埠同理。
iptables與netfilters
iptables是一個用戶空間的應用程序,通過該程序可以修改一些配置文件,這些文件定義了防火牆的一些行為,netfilters是操作系統內核的一部分,netfilters里有5個回調鉤子會觸發iptables里的規則;iptables只是Linux防火牆的管理工具而已,位於/sbin/iptables。真正實現防火牆功能的是
netfilter,它是Linux內核中實現包過濾的內部結構。
這里不具體講述其實現的原理,僅僅列出netfilters的一些功能:
1)filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數據包 內核模塊:iptables_filter.
2)Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用於網路地址轉換(IP、埠) 內核模塊:iptable_nat
3)Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數據包的服務類型、TTL、並且可以配置路由實現QOS內核模塊:iptable_mangle(別看這個表這么麻煩,咱們設置策略時幾乎都不會用到它)
4)Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數據包是否被狀態跟蹤機制處理 內核模塊:iptable_raw
虛擬網路設備 tap/tun
TUN 和 TAP 設備是 Linux 內核虛擬網路設備,純軟體實現。TUN(TUNnel)設備模擬網路層設備,處理三層報文如 IP
報文。TAP 設備模擬鏈路層設備,處理二層報文,比如乙太網幀。TUN 用於路由,而 TAP 用於創建網橋。OS 向連接到 TUN/TAP
設備的用戶空間程序發送報文;用戶空間程序可像往物理口發送報文那樣向 TUN/TAP 口發送報文,在這種情況下,TUN/TAP
設備發送(或注入)報文到 OS 協議棧,就像報文是從物理口收到一樣。
虛擬網路設備 veth-pairs
虛擬乙太網電纜。使用雙向有名管道實現。常用於不同 namespace 之間的通信,即 namespace 數據穿越或容器數據穿越。
虛擬網路設備 bridge
bridge是linux自帶的虛擬交換機(網橋),其可以連接多個乙太網設備,擁有智能處理MAC幀的能力,流向交換機的MAC幀將智能的被傳輸到相應的二層鏈路
網路命名空間
在 Linux 中,網路名字空間可以被認為是隔離的擁有單獨網路棧(網卡、路由轉發表、iptables)的環境。網路名字空間經常用來隔離網路設備和服務,只有擁有同樣網路名字空間的設備,才能看到彼此。
從邏輯上說,網路命名空間是網路棧的副本,有自己的網路設備、路由選擇表、鄰接表、Netfilter表、網路套接字、網路procfs條目、網路sysfs條目和其他網路資源。
從系統的角度來看,當通過clone()系統調用創建新進程時,傳遞標志CLONE_NEWNET將在新進程中創建一個全新的網路命名空間。
從用戶的角度來看,我們只需使用工具ip(package is iproute2)來創建一個新的持久網路命名空間。
從系統實現來說,就是原本一個數據結構是static公共的,後來變成進程私有的,在PCB里存在一個命名空間的結構,命名空間里有著網路命名空間,網路命名空間擁有著所有跟網路相關的配置數據
默認空的網路命名空間可能只有一個未啟動的lo回環網卡。
兩個網路命名空間可以通過乙太網攬直接連著兩個網路命名空間的網卡,也可以通過乙太網網橋連接。
通過乙太網網橋或者乙太網攬連接的兩個網路命名空間只能說是在二層連通的,如果希望在三層連通,還需要給每個網路命名空間配置相應的路由表規則以及分配IP地址。
如何使用虛擬網路設備聯通網路命名空間
SingleHost容器網路
none模式
本質上就是創建一個網路命名空間,裡面沒有路由表,也沒有通過veths-pair連接任何鏈路,外部無法訪問這個容器,容器也無法訪問外部
host模式
本質上就是使用宿主機的默認網路命名空間
container模式
本質上就是將當前容器部署在另一個容器所在的網路命名空間,這樣發給本地的報文最終通過回環網卡回到了本機,這是同一個網路命名空間可以互通的原因
bridge模式
橋接模式就是在這些網路命名空間通過veth-pairs連接到同一個虛擬交換機上(二層連通),同時在對應的命名空間配置對應的路由表規則,但是從圖片中可以看到交換機另一端連的上網路協議棧。
也就是那些MAC幀都會被宿主機接收,但是宿主機接收並不一定會處理,比如並沒有開啟ip轉發功能(工作於路由器模式還是主機模式),那麼不是本地ip的報文都會被丟棄;或者說netfilters拒絕處理
這些奇怪的報文。
理論上,這些容器發送給其他容器的mac報文是會被虛擬交換機智能轉發到對應的容器的,這是同一主機不同容器互相連通的原因
假如宿主機配備了相應的路由規則和防火牆規則,那麼容器的報文說能夠通過路由最終轉發出去的,這也是容器訪問互聯網的原理
但是這種模式是沒法運用在多主機的情況下,因為宿主機不知道其他宿主機里的虛擬網路的路由,當相關ip報到達宿主機時,這些ip報將會被宿主機交給默認路由(下一跳:路由器)
最終路由器會把相關的ip報丟失或者到達ttl最終丟失
MultiHost容器網路
路由方案
回顧docker的單機網路模型,我們發現多主機不能通行的原因就在於你只能給當前主機配置路由規則和防火牆規則,而其他主機並不知道這些ip在你的虛擬網路中,假如能夠將這些路由信息同步到其他
宿主機,那麼網路便會打通。比較直接的想法就是給每台宿主機配置路由規則。而路由規則要求下一跳必須在當前網路,所以假如宿主機是二層互聯的,那麼通過給這些宿主機同步這些路由規則便能夠
實現一個扁平的連通的網路。
其中布置在每一台宿主機可以通過k8s的daemonSet實現,而這種數據的管理可以交給etcd來實現。
這類方案便是基於路由,基於這個方案的實現有基於靜態路由的flannel的host-gateway,以及基於動態路由的calico(使用邊際路由協議以及一堆深奧的名詞的實現)。
下面來看看Flannel的host-gateway原理(每一台宿主機都相當於本機容器網路的路由器):
通過路由方案構建的網路,宿主機也能訪問這些虛擬網路里的Pod
詢問基德大佬得知國際化sit環境的k8s網路介面實現就是Flannel的Host-gateway,而我們的辦公網路和集群網路之間的路由是搭建好的,所以我們應該可以直接通過podId訪問pod里的服務
下面是sit環境的兩個服務
跟蹤路由發現符合猜想
其中10.1.9.56和10.1.1.24就是宿主機的ip,這些宿主機在一個LAN里,這些宿主機相當於虛擬網路中的路由器;
猜測我們辦公網和qunhe集群在一個VLAN里(二層可達)
隧道方案
隧道方案比較典型的就是UDP和XVLAN,兩者都是使用Overlay網路(覆蓋網路,所謂的大二層技術);其實用隧道技術最多的是VPN應用
其中UDP是XVLAN的替代品(早期Linux沒有支持XVLAN協議,通過tun/tap技術將流量引到用戶空間然後解包生成包再發,因為發生在用戶空間而且多次導致性能較差,所以一般不推薦,除非你的linux版本比較低沒法用xvlan)
下面就簡單介紹下XVLAN技術的大概原理,下圖是XVLAN的報文格式,可以發現就是在高層協議的報文里塞了二層報文
其中XVLAN頭里有一個關鍵的欄位,VNID這是個24位的欄位,每個虛擬的網路主機都有一個自身的VNID作為標識,理論上支持2的24次方個虛擬網路。
在docker的橋接網路里,是使用docker0網橋,在Flannel的xvlan方案里則是使用cni0作為網橋(和docker0沒啥區別),主要的不同是cni網橋後面連接的是flannel.1這個網路設備,應該是一個虛擬網卡
這個網卡將原始報文包裝成XVLAN報文(linux高版本支持xvlan報文)
這時需要的信息有 源nodeId,目標nodeId,源vnid,源macId,目標macId,源podId,目標podId
其中目標nodeId,目標macId這兩個信息是不存在的;因此需要有個方式根據目標podId獲取目標nodeId以及目標macId
因此需要記錄如何根據目標podId獲取目標macId以及目標nodeId即可
這些數據是可以託管在某個地方的,Flannel就是將這些信息記錄在etcd上
在每個node上的flannel.1網路設備通過etcd來通過對方的podId獲取nodeId和macId
這樣最終報文就變成了一個源ip是源nodeIp,目標ip是目標nodeIp的IP報文了(兩台宿主機三層可達)
原本經過虛擬網橋是直接連接網路協議棧,但在xvlan模式下,則改為連接一個flannel1,在flannel1中將對原始報文封裝成overlay報文轉發
udp模式類似,只是udp轉發報文說通過tap連通到用戶空間,用戶空間對報文進行處理然後發送(因為多次內核態用戶態切換且數據問題,性能較差,僅在不支持xvlan的低版本linux中使用)
當然xvlan是一個技術,上面只是簡單介紹最簡單的形式
參考:
開發內功修煉之網路篇: https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5Njg5NDgwNA==&action=getalbum&album_id=1532487451997454337&scene=173&from_msgid=2247485270&from_itemidx=1&count=3&nolastread=1#wechat_redirect
K8S知識圖譜: https://zhaohuabing.com/post/2020-02-22-k8s-mindmap/
VXLAN協議原理簡介: https://cizixs.com/2017/09/25/vxlan-protocol-introction/