【C/C++】手寫 DPDK 協(xié)議棧(四):實(shí)現(xiàn) ICMP Echo Reply,讓 ping 通起來(lái)
目錄手寫 DPDK 協(xié)議棧四實(shí)現(xiàn) ICMP Echo Reply讓 ping 通起來(lái)1. Echo 報(bào)文結(jié)構(gòu)2. 接收并定位協(xié)議頭3. 原地改包與重算校驗(yàn)和4. 實(shí)驗(yàn)結(jié)果小結(jié)手寫 DPDK 協(xié)議棧四實(shí)現(xiàn) ICMP Echo Reply讓 ping 通起來(lái)標(biāo)簽DPDKICMPpingIPv4icmp/icmp.c將 ARP 之后的 IPv4 分流繼續(xù)推進(jìn)到 ICMP。Echo Request/Reply 是最適合驗(yàn)證三層收發(fā)正確性的協(xié)議不需要端口和連接狀態(tài)但要求正確交換地址并重算校驗(yàn)和。1. Echo 報(bào)文結(jié)構(gòu)ICMP Echo: | Type 1B | Code 1B | Checksum 2B | Identifier 2B | Sequence 2B | Data N字節(jié) | 字段 長(zhǎng)度 Request Reply 作用 type 1 字節(jié) 8 0 ICMP 消息類型。8 表示 ping 請(qǐng)求0 表示 ping 應(yīng)答。 code 1 字節(jié) 0 0 類型下的細(xì)分原因。Echo 類型里固定為 0。 checksum 2 字節(jié) 計(jì)算值 重新計(jì)算值 ICMP 校驗(yàn)和覆蓋 ICMP 頭 ICMP 數(shù)據(jù)不包含 IP 頭也沒(méi)有 UDP/TCP 那種偽首部。 identifier 2 字節(jié) 請(qǐng)求方設(shè)置 原樣返回 標(biāo)識(shí)一次 ping 會(huì)話常用于區(qū)分不同進(jìn)程或不同 ping 實(shí)例。 sequence 2 字節(jié) 請(qǐng)求方遞增 原樣返回 序列號(hào)用來(lái)判斷第幾個(gè) Echo 包也用于計(jì)算丟包和 RTT。 data N 字節(jié) 任意數(shù)據(jù) 原樣返回 ping 負(fù)載。Reply 必須把 Request 的數(shù)據(jù)原樣帶回去。請(qǐng)求type8應(yīng)答type0identifier、sequence和 payload 都應(yīng)原樣返回。ICMP 校驗(yàn)和覆蓋 ICMP 頭和數(shù)據(jù)不包含 IP 偽首部。2. 接收并定位協(xié)議頭structrte_ether_hdr*ethrte_pktmbuf_mtod(mbuf,structrte_ether_hdr*);structrte_ipv4_hdr*iprte_pktmbuf_mtod_offset(mbuf,structrte_ipv4_hdr*,sizeof(*eth));if(ip-next_proto_id!IPPROTO_ICMP)return;structrte_icmp_hdr*icmp(structrte_icmp_hdr*)(ip1);if(icmp-icmp_type!RTE_IP_ICMP_ECHO_REQUEST)return;示例假定 IPv4 頭為標(biāo)準(zhǔn) 20 字節(jié)。更通用的實(shí)現(xiàn)應(yīng)從version_ihl得到IHL * 4并對(duì) mbuf 長(zhǎng)度、IP 總長(zhǎng)度做邊界檢查。3. 原地改包與重算校驗(yàn)和icmp-icmp_typeRTE_IP_ICMP_ECHO_REPLY;icmp-icmp_code0;icmp-icmp_cksum0;icmp-icmp_cksumrte_raw_cksum(icmp,icmp_len);ip-hdr_checksum0;ip-hdr_checksumrte_ipv4_cksum(ip);/* 交換 Ethernet 和 IPv4 的源、目的地址后發(fā)送 */原地回包可減少一次分配但一定要在發(fā)送前同時(shí)交換二層和三層地址并在所有字段更新完成后重新計(jì)算校驗(yàn)和。4. 實(shí)驗(yàn)結(jié)果ping成功意味著主機(jī)已通過(guò) ARP 找到 DPDK 網(wǎng)卡 MACDPDK 正確解析 IPv4/ICMP且回包的以太網(wǎng)頭、IP 頭與 ICMP 校驗(yàn)和全部有效。小結(jié)ICMP 是第一個(gè)“真正穿過(guò) IPv4”的協(xié)議實(shí)驗(yàn)。它驗(yàn)證了偏移解析、網(wǎng)絡(luò)字節(jié)序、校驗(yàn)和和回包地址交換為 UDP、TCP 的組包與分發(fā)打下了同一套基礎(chǔ)。學(xué)習(xí)鏈接: https://github.com/0voice

相關(guān)新聞

LENA-R8與STM32F439ZG在物聯(lián)網(wǎng)中的高效集成方案

LENA-R8與STM32F439ZG在物聯(lián)網(wǎng)中的高效集成方案

1. LENA-R8與STM32F439ZG的黃金組合:為什么選擇它們?在物聯(lián)網(wǎng)設(shè)備開(kāi)發(fā)領(lǐng)域,全球連接和精確定位一直是兩個(gè)最核心的需求。LENA-R8作為u-blox推出的多模通信模塊,集成了LTE Cat 1和GNSS功能,而STM32F439ZG則是STMicroele…

2026/8/1 16:17:31 閱讀更多
2026年廣州5S管理咨詢機(jī)構(gòu)優(yōu)選攻略:拒絕反彈、長(zhǎng)效固化

2026年廣州5S管理咨詢機(jī)構(gòu)優(yōu)選攻略:拒絕反彈、長(zhǎng)效固化

在制造業(yè)、服務(wù)業(yè)和各類企業(yè)中,5S管理早已不是新鮮話題。然而,隨著市場(chǎng)競(jìng)爭(zhēng)日趨激烈,企業(yè)對(duì)于現(xiàn)場(chǎng)管理、效率提升和成本控制的需求日益迫切,5S管理咨詢行業(yè)也隨之蓬勃發(fā)展。據(jù)不完全統(tǒng)計(jì),僅國(guó)內(nèi)專注或涉及5S管理咨詢的…

2026/8/1 19:32:17 閱讀更多
分布式電源接入配電網(wǎng)的技術(shù)挑戰(zhàn)與MATLAB仿真實(shí)踐

分布式電源接入配電網(wǎng)的技術(shù)挑戰(zhàn)與MATLAB仿真實(shí)踐

1. 分布式電源接入配電網(wǎng)的核心挑戰(zhàn)十年前我第一次接觸分布式光伏項(xiàng)目時(shí),整個(gè)團(tuán)隊(duì)都在為5kW的屋頂光伏并網(wǎng)折騰得焦頭爛額。如今看到35kV級(jí)別的分布式能源大規(guī)模接入,不禁感慨電力系統(tǒng)正在經(jīng)歷的革命性變化。分布式電源(Distributed Generati…

2026/8/1 19:32:17 閱讀更多
【單片機(jī)畢業(yè)設(shè)計(jì)】基于嵌入式的井下氣體液位井蓋狀態(tài)監(jiān)測(cè)平臺(tái) 基于單片機(jī)的市政窨井智能檢測(cè)報(bào)警設(shè)備設(shè)計(jì)(016201)

【單片機(jī)畢業(yè)設(shè)計(jì)】基于嵌入式的井下氣體液位井蓋狀態(tài)監(jiān)測(cè)平臺(tái) 基于單片機(jī)的市政窨井智能檢測(cè)報(bào)警設(shè)備設(shè)計(jì)(016201)

博主介紹:??碼農(nóng)一枚 ,專注于大學(xué)生項(xiàng)目實(shí)戰(zhàn)開(kāi)發(fā)、講解和畢業(yè)🚢文撰寫修改等。全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于嵌入式單片機(jī),Java、小程序技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ??…

2026/8/2 6:35:01 閱讀更多
5分鐘掌握地理數(shù)據(jù)編輯:讓空間數(shù)據(jù)處理變得簡(jiǎn)單高效的終極指南

5分鐘掌握地理數(shù)據(jù)編輯:讓空間數(shù)據(jù)處理變得簡(jiǎn)單高效的終極指南

5分鐘掌握地理數(shù)據(jù)編輯:讓空間數(shù)據(jù)處理變得簡(jiǎn)單高效的終極指南 【免費(fèi)下載鏈接】geojson.io A quick, simple tool for creating, viewing, and sharing spatial data 項(xiàng)目地址: https://gitcode.com/gh_mirrors/ge/geojson.io geojson.io是一款免費(fèi)開(kāi)源的地…

2026/8/2 6:35:01 閱讀更多
運(yùn)算放大器學(xué)習(xí)筆記-虛短和虛斷

運(yùn)算放大器學(xué)習(xí)筆記-虛短和虛斷

虛斷:由于運(yùn)放的差模輸入電阻很大,一般通用型運(yùn)算放大器的輸入電阻都在1MΩ以上。因此流入運(yùn)放輸入端的電流往往不足1uA,遠(yuǎn)小于輸入端外電路的電流。故通常可把運(yùn)放的兩輸入端視為開(kāi)路,且輸入電阻越大,兩輸入端越接近開(kāi)…

2026/8/2 6:35:01 閱讀更多
Unity紋理優(yōu)化:Mipmap流技術(shù)原理與實(shí)戰(zhàn)配置指南

Unity紋理優(yōu)化:Mipmap流技術(shù)原理與實(shí)戰(zhàn)配置指南

1. 項(xiàng)目概述:紋理加載的“最后一公里”難題做Unity3D開(kāi)發(fā),尤其是做開(kāi)放世界、大場(chǎng)景或者高畫(huà)質(zhì)手游的兄弟,肯定都遇到過(guò)這個(gè)頭疼的問(wèn)題:場(chǎng)景加載時(shí),遠(yuǎn)處一個(gè)巨大的山體或者建筑模型,明明面數(shù)不高&#xff0…

2026/8/2 6:35:00 閱讀更多
PaperBanana:多智能體協(xié)作如何實(shí)現(xiàn)學(xué)術(shù)圖表自動(dòng)化生成與優(yōu)化

PaperBanana:多智能體協(xié)作如何實(shí)現(xiàn)學(xué)術(shù)圖表自動(dòng)化生成與優(yōu)化

1. 項(xiàng)目概述:當(dāng)學(xué)術(shù)配圖遇上AI智能體最近在學(xué)術(shù)圈和AI開(kāi)發(fā)社區(qū)里,一個(gè)名為PaperBanana的項(xiàng)目引起了不小的討論。這個(gè)由北京大學(xué)和谷歌的研究人員聯(lián)合開(kāi)源的工具,號(hào)稱能用5個(gè)智能體(Agent)搞定論文配圖的所有工作&#…

2026/8/2 6:25:00 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多