【C/C++】手寫 DPDK 協(xié)議棧(四):實(shí)現(xiàn) ICMP Echo Reply,讓 ping 通起來
目錄手寫 DPDK 協(xié)議棧四實(shí)現(xiàn) ICMP Echo Reply讓 ping 通起來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 通起來標(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é) | 字段 長度 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 頭也沒有 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)用來判斷第幾個(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 長度、IP 總長度做邊界檢查。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ī)已通過 ARP 找到 DPDK 網(wǎng)卡 MACDPDK 正確解析 IPv4/ICMP且回包的以太網(wǎng)頭、IP 頭與 ICMP 校驗(yàn)和全部有效。小結(jié)ICMP 是第一個(gè)“真正穿過 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è)備開發(fā)領(lǐng)域,全球連接和精確定位一直是兩個(gè)最核心的需求。LENA-R8作為u-blox推出的多模通信模塊,集成了LTE Cat 1和GNSS功能,而STM32F439ZG則是STMicroele…

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

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

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

2026/7/29 7:16:08 閱讀更多
分布式電源接入配電網(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/7/29 7:16:08 閱讀更多
基于金稅四期的財(cái)稅風(fēng)控規(guī)則引擎與業(yè)財(cái)一體化架構(gòu)實(shí)戰(zhàn)

基于金稅四期的財(cái)稅風(fēng)控規(guī)則引擎與業(yè)財(cái)一體化架構(gòu)實(shí)戰(zhàn)

隨著金稅四期全面上線,傳統(tǒng)財(cái)稅系統(tǒng)在面對(duì)海量高頻風(fēng)險(xiǎn)預(yù)警指標(biāo)時(shí),常因數(shù)據(jù)孤島和規(guī)則硬編碼導(dǎo)致合規(guī)響應(yīng)滯后。企業(yè)在進(jìn)行IPO財(cái)務(wù)規(guī)范或高企申報(bào)時(shí),業(yè)財(cái)數(shù)據(jù)不一致往往成為致命瓶頸。本文將結(jié)合高頓咨詢在B端財(cái)稅數(shù)字化領(lǐng)域的工程實(shí)踐&#…

2026/7/29 9:26:11 閱讀更多
Flexx桌面應(yīng)用安全加固實(shí)戰(zhàn):從代碼到部署的全面防護(hù)指南

Flexx桌面應(yīng)用安全加固實(shí)戰(zhàn):從代碼到部署的全面防護(hù)指南

1. 項(xiàng)目概述:為什么Flexx應(yīng)用需要特別的安全關(guān)注? 最近在社區(qū)里看到不少朋友開始用Flexx來開發(fā)桌面應(yīng)用,尤其是那些想把Web應(yīng)用打包成獨(dú)立桌面程序的項(xiàng)目。Flexx這個(gè)框架確實(shí)挺有意思,它讓你能用純Python寫前端界面,然…

2026/7/29 9:26:11 閱讀更多
Go與C語言面向?qū)ο缶幊虒?duì)比:結(jié)構(gòu)體、方法接收者與函數(shù)指針模擬類

Go與C語言面向?qū)ο缶幊虒?duì)比:結(jié)構(gòu)體、方法接收者與函數(shù)指針模擬類

1. 項(xiàng)目概述:當(dāng)Go遇上C,兩種“類”思維的碰撞在編程語言的演進(jìn)長河中,面向?qū)ο缶幊?amp;#xff08;OOP)無疑是一座重要的里程碑。當(dāng)我們談?wù)摗邦悺睍r(shí),腦海中首先浮現(xiàn)的可能是Java、C這類以類為第一公民的語言。但今天&…

2026/7/29 9:26:11 閱讀更多
Arduino模擬信號(hào)與PWM控制:從電位器到LED亮度調(diào)節(jié)的完整實(shí)現(xiàn)

Arduino模擬信號(hào)與PWM控制:從電位器到LED亮度調(diào)節(jié)的完整實(shí)現(xiàn)

1. 從旋鈕到光暈:一個(gè)燈光調(diào)節(jié)器的誕生 最近在整理工作室的舊物,翻出來一塊吃灰已久的Arduino Edison開發(fā)板??粗?amp;#xff0c;我忽然想起很多朋友,包括當(dāng)年的我自己,在入門嵌入式開發(fā)時(shí),常常會(huì)卡在一個(gè)看似簡單卻至…

2026/7/29 9:26:11 閱讀更多
國內(nèi)專業(yè)網(wǎng)站建設(shè)公司盤點(diǎn),2026 精選十家高口碑網(wǎng)站設(shè)計(jì)公司全方位梳理

國內(nèi)專業(yè)網(wǎng)站建設(shè)公司盤點(diǎn),2026 精選十家高口碑網(wǎng)站設(shè)計(jì)公司全方位梳理

一、2026 網(wǎng)站建設(shè)行業(yè)現(xiàn)狀深度解析生成式 AI、GEO 搜索優(yōu)化、llms 協(xié)議規(guī)范、多系統(tǒng)數(shù)據(jù)互通等新技術(shù)落地,市場對(duì)網(wǎng)站建設(shè)服務(wù)商的能力要求發(fā)生根本性分層。中大型企業(yè)、上市公司、出海品牌更青睞兼具行業(yè)深耕、定制開發(fā)、AI 營銷配套、長期運(yùn)維迭代能力的綜合服務(wù)…

2026/7/29 9:26:11 閱讀更多
Agent 平臺(tái)化思考:從定制化開發(fā)到通用 Agent 平臺(tái)的架構(gòu)演進(jìn)

Agent 平臺(tái)化思考:從定制化開發(fā)到通用 Agent 平臺(tái)的架構(gòu)演進(jìn)

Agent 平臺(tái)化思考:從定制化開發(fā)到通用 Agent 平臺(tái)的架構(gòu)演進(jìn) 一、從"一個(gè) Agent 一個(gè)項(xiàng)目"到"Agent 平臺(tái)":工程化必經(jīng)之路 2026 年初,某 SaaS 公司面臨一個(gè)困境:過去一年,他們?yōu)椴煌蛻粜枨箝_發(fā)了…

2026/7/29 9:16:11 閱讀更多
面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,不比 1 個(gè)快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個(gè)月,我在重構(gòu) AlgoMooc 網(wǎng)站過程中,發(fā)現(xiàn)一個(gè)問題:在 Claude Code 里把一個(gè)任務(wù)拆給 5 個(gè) Subagent 并行跑,結(jié)果可能比 1 個(gè) agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過來的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號(hào)與動(dòng)畫渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實(shí)戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號(hào)與動(dòng)畫渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂應(yīng)用,模擬了真實(shí)擲骰子的過程。應(yīng)用投擲兩個(gè)骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號(hào)直觀展示每個(gè)骰子的點(diǎn)數(shù),并伴有快速滾動(dòng)的動(dòng)畫效果。…

2026/7/29 0:15:24 閱讀更多