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

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

2023-05-28 08:11:07 其他

摘要:雖然網卡是接入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/553592.html

標籤:其他

上一篇:23 Windows Sever 201服務器系統的安裝以及遠程控制的設定與使用

下一篇:返回列表

標籤雲
其他(159837) 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 08:11:07 more
  • 23 Windows Sever 201服務器系統的安裝以及遠程控制的設定與使用

    # 老陳很久沒有寫個博客了,最近忽然用到了服務器,安裝WindowsSever2019系統以及遠程控制的設定條目挺多,想著記錄一下,給有需要的人,寫完了沒保存,裂開,又重新寫了一遍 ==介紹共分為以下幾步:== 一、安裝Windows2019Sever系統到電腦(or服務器); 二、WindowsS ......

    uj5u.com 2023-05-28 08:10:38 more
  • 軟體測驗職業生涯需要撰寫的全套檔案模板,收藏這一篇就夠了(附檔

    作為一名測驗工程師,在整個的職業生涯中,會涉及到各種不同型別的檔案撰寫,大體包括如下: 對應檔案模板及檔案撰寫視頻如下: 一、測驗崗位必備的檔案 在一個常規的軟體測驗流程中,會涉及到測驗計劃、測驗方案、測驗用例、測驗報告的撰寫,這些檔案也是軟體測驗崗位必須掌握的檔案型別。 1、測驗計劃 測驗計劃是組 ......

    uj5u.com 2023-05-28 08:10:14 more
  • Java基本語法

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

    uj5u.com 2023-05-28 08:10:04 more
  • 自動化測驗-基礎知識—Bash基礎

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

    uj5u.com 2023-05-28 08:09:58 more
  • Ubuntu22.04 安裝單機版kubernetes

    # 前言 上期講到要實作.net 6框架下的EF Core操作資料庫基本增刪改查,沒有及時兌現。沒有兌現的原因就是因為安裝kubernetes。安裝kubernetes的程序是災難性的,也是十分順利的。災難性是因為在安裝kubernetes程序中誤操作,在/etc下執行了一個重置的命令導致我的作業站 ......

    uj5u.com 2023-05-28 08:09:47 more
  • 控制結構

    ```plaintext # 控制結構 ## 判斷陳述句 基于一定的條件判斷是否要執行代碼 一般結構: ```jupyter if : elif : else: ``` 例如: ```jupyter x = 0 if x > 0: print "x is positive" elif x == 0: ......

    uj5u.com 2023-05-28 08:09:18 more
  • 如何讓ChatGPT生成Midjourney提示詞

    ? 導讀:最近AI繪畫非常的火,今天我們看ChatGPT如何生成Midjourney提示詞,讓AI教AI做事。 本文字數:900,閱讀時長大約:3分鐘 正如 Midjourney 的官方網站報道的那樣,提供作業提示(Prompt)是一項碰運氣的業務。從單個表情符號或單詞都可以生成影像,但自然地結果可 ......

    uj5u.com 2023-05-28 08:09:07 more
  • 人工智能導論——機器人自動走迷宮&強化學習

    # 一、問題重述 強化學習是機器學習中重要的學習方法之一,與監督學習和非監督學習不同,強化學習并不依賴于資料,并不是資料驅動的學習方法,其旨在與發揮智能體(Agent)的主觀能動性,在當前的狀態(state)下,通過與環境的互動,通過對應的策略,采用對應的行動(action),獲得一定的獎賞(rew ......

    uj5u.com 2023-05-28 08:08:41 more
  • 索引與分片

    # 索引與切片 ## 索引 在許多編程語言中,都有可以通過索引訪問值的資料結構。 比如說c++的陣列,字串。 在python中,也有許多資料結構可以通過索引訪問值。 ***訪問字串中某一個字符***: ```jupyter s = 'sadas' s[1] ``` ***訪問串列中某一個元素** ......

    uj5u.com 2023-05-28 08:08:25 more