主頁 >  其他 > RoCE多網卡時,報文可以過去,但是回不來

RoCE多網卡時,報文可以過去,但是回不來

2023-05-28 07:56:15 其他

摘要:雖然網卡是接入RoCE網路,但其實問題本身是單純路由相關的,所以看的時候,不用關注RoCE,只當做一個獨立子網就行了

本文分享自華為云社區《<跟唐老師學習云網路> - RoCE多網卡時,報文可以過去,但是回不來》,作者: tsjsdbd ,

一、網路概要

一臺機子,接入2個子網,一個普通通信的,一個高速通信的,并且接入高速通信子網,有8張網卡,如下圖:

本文描述的問題,只關注高速子網這一部分,為幫助理解問題,網路可以簡化為:

每個網卡,都有分配該子網的一個IP,如下:

二、問題現象

A只能通B里面的一個IP,其余7個IP都不通,下圖為A--->B 的結果:

圖示:只有1個IP能通

反過來也一樣,后面只講一個方向的(A-->B),

三、問題定位

1.先看報文有沒有到達B,

如果都不能到B,說明網路接的有問題,如果到了B,但是不回來,說明路由配置可能有問題,

Ping不通的ip(228)時,在主機B上面進行抓包分析(228對應的網卡名是enp80s0f0,所以這里監聽這個網卡):

tcpdump -i enp80s0f0 -n arp
listening on enp80s0f0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:02:23.720556 ARP, Request who-has 29.28.195.228 tell 29.28.204.80, length 46
17:02:24.758954 ARP, Request who-has 29.28.195.228 tell 29.28.204.80, length 46
17:02:25.782954 ARP, Request who-has 29.28.195.228 tell 29.28.204.80, length 46
17:02:26.807063 ARP, Request who-has 29.28.195.228 tell 29.28.204.80, length 46
^C

可以看到,報文能到B,

2.但是為什么B不給A回訊息呢?

于是我們來看看,當B要給A回訊息時,路由怎么走的?

查看路由表:

ip route
default via 192.168.0.1 dev enp218s0 proto dhcp metric 104
29.28.192.0/20 dev enp137s0f1 proto kernel scope link src 29.28.201.211 metric 105
29.28.192.0/20 dev enp137s0f0 proto kernel scope link src 29.28.193.28 metric 106
29.28.192.0/20 dev enp80s0f1 proto kernel scope link src 29.28.204.230 metric 107
29.28.192.0/20 dev enp106s0f0 proto kernel scope link src 29.28.194.199 metric 108
29.28.192.0/20 dev enp106s0f1 proto kernel scope link src 29.28.195.31 metric 109
29.28.192.0/20 dev enp80s0f0 proto kernel scope link src 29.28.195.228 metric 110
29.28.192.0/20 dev enp234s0f1 proto kernel scope link src 29.28.197.165 metric 111
29.28.192.0/20 dev enp234s0f0 proto kernel scope link src 29.28.195.75 metric 112

根據以前學的router知識,可以看到,(排除default路由外)應該是會匹配到 第1條(標紅)規則,

注:metric表示路由代價,目的子網都匹配的情況下,會選代價最低的那一條,

即 B-->A給A回訊息時,報文要從 網卡enp137s0f1 發出去,并且發出去的報文源地址要設為29.28.201.211,

難怪不通,因為答非所問了嘛(回arp報文,內容對不上),

再看為什么211這個ip能通?

因為 211 是該子網路由選擇,所對應的IP,所以剛好能通,

這就解釋了為什么剛好1個IP能通,另外7個不通,

3.如何讓報文從哪個口收到,就從哪個口回去?

往外發報文,根據源地址來選擇網卡(注意這里的源是指 主機B,因為回報文是往外發),這種場景可以稱之為「源地址路由」,而要實作源地址路由,就需要用到「ip rule 路由策略」這種高級路由配置,

四、ip rule 路由策略

在配置「源地址路由」規則前,我們需要先補充一點基礎知識,

1. 路由表“副本”

以前我們學的 route -n 路由表,其實屬于“新手村”,即系統默認使用這張路由規則表,但就像《劍來》里面說的那樣,在新手村外還有很多其他“境界”,Linux新版本(2.x之后)為實作更復雜的路由能力,將原來的“新手村”,復制了很多的“副本”,

Ps:這種增加“副本”的思路,在咱們IT領域非常常見,比如我們之前學到的各種namespace,

當前系統總的“副本”數量,在 /etc/iproute2/rt_tables 這個檔案中,

255 local
254 main
253 default
0   unspec

我們之前學的 route -n 新手村表,就是其中的 254 這個副本號,名字叫做 main,

要增加副本,可以如下這么操作:

echo "$id $table" >> /etc/iproute2/rt_tables

就行了,

2. 如何決定使用哪個“副本”

為了確認使用哪個“副本”,在前面補了一個 rule 規則,

條件基本就是:源IP,目的地址,收到網口這些,

具體見:https://www.computerhope.com/unix/ip.htm

所以現在流程變成了:

  1. 新增一個副本
  2. 設定rule規則,指向這個新增的副本
  3. 往副本里面增加以前學會的route記錄

比如,我們希望某個源IP為 29.28.201.211 的報文,走獨立的“路由副本”策略:

  • 新建“路由副本”
echo "200 table0" >> /etc/iproute2/rt_tables
  • 增加規則,使這種報文,走該獨立副本,(from表示源ip)
ip rule add from 29.28.201.211 table table0
  • 然后我們往這個“路由表副本”里面,放入以前學到的普通的路由規則:
ip route add 29.28.192.0/20 dev eth0 table table0
  • 可以確認下副本中路由是否正確
ip route show table table0
29.28.192.0/20 dev eth0 scope link

這樣,我們就可以控制更復雜的路由規則了,

3. 再看“新手村”路由表

在知道路由表可以有很多“副本”之后,我們再回頭看看原來那個“新手村”,

從 /etc/iproute2/rt_tables 檔案內容可以知道,咱們“新手村”對應的那個路標表名字叫做main,

所以查詢這個表的內容:

root@tsjsdbd:/# ip route show table main
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2

這個和我們平時看到的路由,是一樣的:

root@tsjsdbd:/# ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2

也就是,我們平時敲的 route -n 看到的串列,其實就是 main 這張表里面的內容,

其余表(0-local,253-default,255-local)的內容,一般不用關注,

4. rule規則匹配優先級

在rule規則表里面,很多記錄的時候,匹配優先級是怎么定的?答案是每一條記錄,它有個優先級的欄位,如下:

[root@tsjsdbd]# ip rule
0:      from all lookup local
32766:     from all lookup main
32767:     from all lookup default

最前面的數字,就是優先級,數字越小,優先級越高,也就是會先進行匹配,同時也代表這條規則可以排的更靠前,

在 rule add 添加規則的時候,是可以指定“優先級的”,如:

ip rule add from 192.168.1.0/24 table table0 pri 333

就可以指定

在不指定優先級的情況下,會默認加到當前最小值前面(即,不指定優先值時,會加一條優先級較高的rule),

如下:

[root@tsjsdbd]# ip rule add from 192.168.1.0/24 table table0 pri 333

上面這潭訓加一條333優先級的rule

[root@tsjsdbd]# ip rule add from 192.168.2.0/24 table table0

這條沒指定優先級,就會加一條優先級332的(因為當前rule里面最小的是333),

可以查詢確認:

[root@tsjsdbd]# ip rule
0:  from all lookup local
332:       from 192.168.2.0/24 lookup table0
333:       from 192.168.1.0/24 lookup table0
32766:     from all lookup main
32767:     from all lookup default

洗掉rule的話,有幾種便捷的指定方式:(優先級、條件、table)

ip rule del pri 333
ip rule del from 192.168.2.0/24
ip rule del table table0

最后注意,添加或修改了rule規則后,不會立即生效,需要 ip route flush cache 后才生效(官方檔案是這么說的,自己驗證的時候注意下就行),

五、源地址路由

再回到問題上來,8個網卡,哪個口收到,要求使用該口的ip回去,可以通過8個路由table實作(因為大家的目標網段是一樣的,所以在同一個table表里面話,不好寫規則),

于是,可以把8個路由規則,分散到8個“世界”中,然后通過 rule 分散后,各自進行匹配,

事實上,「源地址路由」的實作,一般都是這種套路:

  • 添加一條“源地址”的rule
ip rule add from 192.168.1.2 table 100
  • 在目標table里面,設定路由規則
ip route add 172.25.2.0/24 via 192.168.1.5 table 100

最終解決8個RoCE網卡可以互通的路由設定如下:

  • table表(8個)
/root # cat /etc/iproute2/rt_tables
200 table0
201 table1
202 table2
203 table3
204 table4
205 table5
206 table6
207 table7
  • rule表(8個)
/root # ip rule
0:     from all lookup local
32758: from 29.28.197.165 lookup table7
32759: from 29.28.195.75 lookup table6
32760: from 29.28.201.211 lookup table5
32761: from 29.28.193.28 lookup table4
32762: from 29.28.195.31 lookup table3
32763: from 29.28.194.199 lookup table2
32764: from 29.28.204.230 lookup table1
32765: from 29.28.195.228 lookup table0
32766: from all lookup main
32767: from all lookup default
  • 每個table表里面,1條路由規則
/root # ip route show table table5
29.28.192.0/20 dev enp137s0f1 scope link src 29.28.201.211

以上3步行為,通過一個腳本來完成,

六、最后

最后我們來看看,網路有問題的時候,與設定完「源地址路由」后的區別:

查詢“以xx為源ip,以yy為目的ip,路由選擇結果是什么”方式,

可以使用ip route get 命令,

設定前:

# ip route get 29.28.204.80 from 29.28.201.211
29.28.204.80 from 29.28.201.211 dev enp137s0f0 uid 0

設定后:

# ip route get 29.28.204.80 from 29.28.201.211
29.28.204.80 from 29.28.201.211 dev enp137s0f1 table table5 uid 0

可以看到,是按照我們的目標“哪個口來,哪個口回去”的方式運行的,

注:雖然網卡是接入RoCE網路,但其實問題本身是單純路由相關的,所以看的時候,不用關注RoCE,只當做一個獨立子網就行了,

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/553577.html

標籤:其他

上一篇:Java基本語法

下一篇:返回列表

標籤雲
其他(159822) Python(38173) JavaScript(25458) Java(18138) C(15231) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7213) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5343) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4576) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1948) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • RoCE多網卡時,報文可以過去,但是回不來

    摘要:雖然網卡是接入RoCE網路,但其實問題本身是單純路由相關的,所以看的時候,不用關注RoCE,只當做一個獨立子網就行了 本文分享自華為云社區《<跟唐老師學習云網路> - RoCE多網卡時,報文可以過去,但是回不來》,作者: tsjsdbd 。 一、網路概要 一臺機子,接入2個子網,一個普通通信的 ......

    uj5u.com 2023-05-28 07:56:15 more
  • Java基本語法

    1. **類與檔案名** 在Java中,每個程式都是以類為基礎進行撰寫的。一個簡單的Java程式通常包含一個類,類名應該以大寫字母開頭。Java源代碼檔案的檔案名必須與類名相同,并以`.java`作為檔案擴展名。 例如,下面是一個名為`HelloWorld`的簡單Java程式: ```java pu ......

    uj5u.com 2023-05-28 07:55:50 more
  • 自動化測驗-基礎知識—Bash基礎

    # Bash 在 Bash 中,美元符號 `$` 可以用于參考變數或者運算式的值。Bash 中的變數并不需要事先宣告,而是在第一次賦值時自動創建。基于這個特性,我們可以通過給變數名加上 `$` 的方式來參考它的值,比如 `$var` 表示參考變數 var 的值。 在 Bash 中,使用 `$` 還有 ......

    uj5u.com 2023-05-28 07:55:44 more
  • ChatGPT之后,AIGC如何革新數字內容創作

    內容生產,特別是創意作業,一向被認為是人類的專屬和智能的體現。牛津大學計算機學院院長邁克爾·伍爾德里奇 2019 年寫作的《人工智能全傳》一書中,“撰寫有趣的故事”被列為人工智能“遠未實作”的任務之一。

    如今,AI 正大步邁入數字內容生產領域。AIGC(AI Generated Content)不... ......

    uj5u.com 2023-05-27 08:20:31 more
  • ChatGPT之后,AIGC如何革新數字內容創作

    內容生產,特別是創意作業,一向被認為是人類的專屬和智能的體現。牛津大學計算機學院院長邁克爾·伍爾德里奇 2019 年寫作的《人工智能全傳》一書中,“撰寫有趣的故事”被列為人工智能“遠未實作”的任務之一。

    如今,AI 正大步邁入數字內容生產領域。AIGC(AI Generated Content)不... ......

    uj5u.com 2023-05-27 08:14:35 more
  • 【模型部署 01】C++實作GoogLeNet在OpenCV DNN、ONNXRuntime、Te

    深度學習領域常用的基于CPU/GPU的推理方式有OpenCV DNN、ONNXRuntime、TensorRT以及OpenVINO。這幾種方式的推理程序可以統一用下圖來概述。整體可分為模型初始化部分和推理部分,后者包括步驟2-5。 以GoogLeNet模型為例,測得幾種推理方式在推理部分的耗時如下: ......

    uj5u.com 2023-05-27 07:28:17 more
  • 串列list

    # 串列list ## 前言 list作為python里面的一個重要的資料結構, 本文僅介紹幾個常用的方法 ## 串列的創造 串列用[]生成,里面的元素可以是不同型別,長度不固定 生成空串列: ```jupyter l = [] l = list() ``` | 方法 | 作用 | 例子 | | | ......

    uj5u.com 2023-05-26 22:41:03 more
  • 安全可信 | 增強級認定!天翼云政務云通過云計算服務安全評估

    近日,天翼云與中國電信安徽分公司聯合承建的安徽省省級政務云平臺順利通過云計算服務安全評估(增強級)認證。這標志著天翼云的政務云安全水平和成熟度已經通過國家權威機構認證,能夠滿足政府政務應用上云的高安全要求。 ......

    uj5u.com 2023-05-26 22:28:20 more
  • 云服務器虛擬化超分與虛機性能關系分析

    虛擬化技術是云計算商業模式的基礎,它也是推動云計算經濟的核心技術。虛擬化是指使用虛擬化軟體在計算機硬體上創建抽象層,將單個計算機的硬體元素(包括處理器、記憶體、存盤器等)分成多個虛擬計算機 (VM), 每個 VM 都運行自己的作業系統 (OS) ,類似于獨立的計算機。這樣虛擬化技術能讓一臺服務器變成幾... ......

    uj5u.com 2023-05-26 22:04:07 more
  • 不愧是自媒體新貴!用ChatGPT賺錢,從此打開人工智能時代

    ## 前言 自媒體行業是一個具有無限發展潛力的領域,但是要想在這個競爭激烈的市場中脫穎而出并不容易。在如今資訊爆炸的時代,更需要高效率、高質量的內容來吸引讀者的注意力。那么,如何才能使自己的創作更加優秀呢?ChatGPT就是您所需要的工具。 ## ChatGPT的使用方法 ### 1. 打開網頁并注 ......

    uj5u.com 2023-05-26 21:58:51 more