Simple Ping in Swift - ICMP 报文和 IP 报文

引言

ICMP 是 IP 层协议,是为了提高 IP 数据交付成功率而使用的一种协议,是因特网标准协议(RFC 792) ICMP 报文是作为 IP 层数据报的数据,加上 IP 数据报的首部,组成数据报发送出去,ICMP 是使用了 IP 协议的一种配套使用型协议

ICMP

报文类型

格式

一般格式: -w250 在 ping 的时候,使用的是 ICMP 回送请求或回答类型报文,对应的类型字段是 8 或者 0,对应的代码是 0 -w250

代码

关于 Swift 的内存操作可以戳:Simple Ping in Swift - 预备芝士 · YUI 的严肃文

定义一个 struct 用于表示 ICMP Header

IP

数据报格式

-w250

代码

IP 包 + ICMP包

将上面两个部分结合 : IP 首部 (20 字节) + 8 位类型 + 8 位代码 + 16 位校验和 + ICMP 首部其他部分 (7 字节) + 数据 -w250