Claude 充当用户空间 IP 栈Ping 响应速度竟达 45 秒慢在哪[Adam Dunkels](/adam/index.html)- [主页](/adam/index.html)- [关于](/adam/about.html)- [咨询服务](/adam/consulting.html)- [出版物](/adam/publications.html)- [联系我们](/adam/contact.html)[人工智能](/adam/categories.html#ai)[编程](/adam/categories.html#programming)[纯属娱乐](/adam/categories.html#just for fun)Adam Dunkels 博士2026 年 5 月 11 日 · 阅读时长 7 分钟这里有个有趣的想法让 Claude Code 充当用户空间 IP 栈它对 Ping 请求的响应速度会怎样具体而言就是指示 Claude 逐字节读取 IP 数据包像普通 IP 栈那样处理。最终目标是向 Claude 发送 Ping 请求它能以格式正确的 Ping 回复响应。这想法看似荒谬又浪费令牌但十分有趣探究“Markdown 即代码大语言模型LLM是执行该代码的处理器”这一理念能走多远也颇具意义。此例涉及相当底层的代码。我让 Claude 开发名为 ping-respond.md 的命令使其充当原生 LLM IP 栈以下是其给出的内容ping-respond.md点击展开# Ping 响应 —— 处理来自 tun0 的一个 ICMP 回显请求要充当用户空间 IP 栈。TUN 辅助程序已以 FIFO 模式运行sudo python3 scripts/tun_helper.py --fifo。任务是读取一个数据包解析它构建有效的 ICMP 回显回复并将其写回。所有 IP 逻辑在推理中完成不使用库或脚本。## 步骤 1读取数据包运行以下 bash 命令从 TUN 设备读取一个数据包echo READ /tmp/tun_cmd timeout 35 cat /tmp/tun_resp会得到一个十六进制字符串或 TIMEOUT。若为 TIMEOUT则报告并停止。保存这个十六进制字符串即原始的 IPv4 数据包。## 步骤 2解析 IPv4 报头数据包是一系列十六进制字节2 个十六进制字符 1 个字节。解析以下字段偏移量字节长度字段01版本高半字节 IHL低半字节以 32 位字为单位11DSCP/ECN2 - 32总长度4 - 52标识6 - 72标志3 位 片偏移13 位81TTL91协议必须为 0x01 ICMP10 - 112报头校验和12 - 154源 IP16 - 194目的 IPIHL 表示报头长度IHL × 4 字节。标准的 IHL 5即 20 字节。若协议不是 0x01报告 not ICMP, ignoring 并停止。## 步骤 3解析 ICMP 报头ICMP 报头从 IP 报头之后开始字节偏移量为 IHL × 4偏移量从 ICMP 起始处长度字段01类型必须为 0x08 回显请求11代码必须为 0x002 - 32ICMP 校验和4 - 52标识符6 - 72序列号8可变有效负载原样复制若类型不是 0x08报告 not echo request, ignoring 并停止。## 步骤 4构建回显回复通过修改特定字段构建回复数据包全程用十六进制操作。### 4a回复的 IP 报头从原始 IP 报头字节开始做以下更改-第 8 字节TTL设置为 40十进制 64-第 10 - 11 字节报头校验和暂时设置为 0000-第 12 - 15 字节源 IP设置为原始的目的IP-第 16 - 19 字节目的 IP设置为原始的源IP现在计算 IP 报头校验和1. 取校验和字段为 0000 的 IP 报头IHL × 4 字节2. 拆分为 16 位字每个 2 字节3. 将所有字作为无符号整数求和4. 当和超过 0xFFFF 时将进位sum 16加到低 16 位sum 0xFFFF5. 取反码结果 0xFFFF - 折叠后的和6. 将此值写入第 10 - 11 字节大端序### 4b回复的 ICMP 有效负载从原始 ICMP 数据从 ICMP 起始处到数据包末尾开始做以下更改-第 0 字节类型设置为 00回显回复-第 1 字节代码保持 00-第 2 - 3 字节ICMP 校验和暂时设置为 0000-第 4 字节及以后标识符、序列号、有效负载保持不变现在用与 IP 校验和相同的算法计算 ICMP 校验和1. 取整个 ICMP 消息从类型到有效负载末尾校验和字段为 00002. 拆分为 16 位字。若字节数为奇数仅在校验和计算时在末尾填充一个零字节3. 将所有字作为无符号整数求和4. 折叠进位当和 0xFFFF 时执行 sum (sum 16) (sum 0xFFFF)5. 取反码结果 0xFFFF - 折叠后的和6. 若结果为 0x0000则用 0xFFFF 代替7. 将其写入 ICMP 的第 2 - 3 字节大端序### 4c组装回复连接IP 报头带有正确的校验和 ICMP 消息带有正确的校验和## 步骤 5写入回复使用组装好的十六进制字符串运行以下 bash 命令echo WRITE /tmp/tun_cmd timeout 5 cat /tmp/tun_resp应会得到 OK 回复。## 步骤 6报告打印摘要- 源 IP → 目的 IP- ICMP 回显请求序列号- 数据包大小请求和回复- Reply sent successfully 或任何错误## 重要规则- 所有算术运算都要手动完成。不要使用 Python、bc 或任何计算器工具。- 展示校验和计算过程以便调试错误。- 生成的每个十六进制值都必须有正确的位数用前导零填充。- 若有任何看起来不对劲的地方版本错误、意外协议报告并停止而不是发送格式错误的数据包。该命令从 /dev/tun0 设备读取字节借助轻量级 Python 辅助程序正确设置所有 stty 选项然后计算 IP 校验和。若检测到 ICMP 回显消息会以正确计算校验和的 ICMP 回显回复消息响应。运行此命令Claude 产生如下输出Received packet: 45000054812840004001615dac100001ac100002080054f5000d0001a1fb006a0000000041c4000000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637Parsing the IP header (first 40 hex chars 20 bytes):- 45 → version4, IHL5 (20 bytes)- 0054 → total length 84- TTL40 (64), Protocol01 (ICMP)- Source: ac100001 172.16.0.1- Dest: ac100002 172.16.0.2ICMP: type08 (echo request), code00, id000d, seq0001Now constructing the reply. IP header: swap src/dst, TTL64, recompute checksum. ICMP: type00 (echo reply), recompute checksum.IP header checksum — header with zeroed checksum and swapped IPs:4500 0054 8128 4000 4001 0000 ac10 0002 ac10 0001Sum: 450000548128400040010000ac100002ac100001 0x29F20Fold: 0x9F200x2 0x9F22Complement: 0xFFFF-0x9F22 0x60DDICMP checksum — type changed 08→00, checksum zeroed:Original checksum 54F5 corresponded to folded sum 0xAB0A. Changing type 08→00 reduces sum by 0x0800: 0xAB0A-0x0800 0xA30A.Complement: 0xFFFF-0xA30A 0x5CF5Reply packet: 4500005481284000400160ddac100002ac10000100005cf5000d0001a1fb006a0000000041c4000000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637得到结果$ ping -W 300 -c 1 172.16.0.2PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.64 bytes from 172.16.0.2: icmp_seq1 ttl64 time42593 ms--- 172.16.0.2 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev 42592.723/42592.723/42592.723/0.000 ms这是使用 Haiku 4.5 模型运行的结果该模型速度相当快。但往返时间达 45 秒Ping 响应速度很慢。不过还没 [这些](https://blug.linux.no/rfc1149/writeup/) 慢。[特色文章](/adam/tags.html#featured)为企业提供软硬件结合的复杂产品开发服务[服务内容](https://dunkels.com/adam/consulting.html)[不是破折号的问题 —— 是用词的问题写作看起来像 AI 生成的 32 种表现](/adam/signs-your-text-was-written-by-an-ai/)