实测 IPv6 邻居发现:STALE 邻居在发数据后经过 DELAY(约 5 秒)进入 PROBE,单播 NS 得到 NA 后回到 REACHABLE;解析不存在的邻居时 NS 发往被请求节点组播地址、重传 4 次;ND 报文跳数限制全是 255;en0 上没有收到过路由器通告。
本机 SLAAC 相关参数(临时地址首选 24 小时、有效 7 天、DAD 发 1 次);EUI-64 / 稳定不透明 / 临时三种接口标识符的计算与换网络后的差别;120 秒没有听到任何 RA;没有 IPv6 路由时 getaddrinfo 只返回 IPv4,connect IPv6 在 0.1 ms 失败。
IPV6_V6ONLY=0 的双栈监听同时服务 ::1 与 127.0.0.1;IPv6 一端慢(往返 800 ms)时顺序回退 801 ms,Happy Eyeballs 255 ms;真实的 IPv6 黑洞上 asyncio 关闭 Happy Eyeballs 卡死、打开 0.25 则 254 ms 连上 IPv4;延迟值就是额外等待上限。
解码 lo0 上的 UDP 头(8 字节,长度 = 8 + 载荷);UDP 保留报文边界、缓冲区太小会截断,TCP 把三次发送合并成 60 字节;一问一答 UDP 2 个包约 1 个往返、TCP 12 个包约 2 个往返;临时端口随机分配;数据报上限 65507,默认只能发 9216。
netlab 造的随机丢包(5% 实测 4.7%,独立随机、不乱序);限速管道让突发 1000 个只收到 100 个、延迟 881 ms;用户态中继造乱序重复并用序号算法检测与真实记录一致;真实互联网上公共 DNS A 丢 13.3%;停等协议在 40% 丢包下重发 332 次。
解码本机当前的 DHCP 租约(租约 1800 秒,T1 = 817 秒);实发一次 DHCPDISCOVER(伪造 MAC,不发 REQUEST)收到 114.2 ms 后的 OFFER;自己解码与 scapy 一致;30 分钟被动抓包抓到本机两次续租 REQUEST / ACK,间隔 801.0 秒;DHCP 配置与系统实际一致。
UDP 默认接收缓冲区 786,896 字节、上限 8 MiB;不读的接收方对 100 / 1000 / 8000 字节的数据报分别只能攒 4099 / 762 / 97 个;读得慢时默认缓冲区丢 80.7%、8 MiB 缓冲区不丢;发送方 sendto 全程不报错,netstat 的计数是整机共用的。
往广播地址发 UDP 必须先开 SO_BROADCAST(否则 EACCES);受限广播与定向广播在以太网上都是 ff:ff:ff:ff:ff:ff;只有绑 0.0.0.0 的套接字能收到受限广播;局域网上 30 秒有 828 个广播帧、约 99.6 Kbit/s。
加入组播组后 netstat 里多出 01:00:5e 加 IP 低 23 位的链路层地址,线上发出 IGMPv2 报告;32 个组播地址共用一个 MAC;只有加入了组的套接字收得到,默认 TTL 是 1,LOOP=0 本机接收方也收不到;成员关系按接口、按引用计数。
解码 IGMPv2:加入组发 1 个成员报告(IP 目的是组地址)、离开发 Leave 到 224.0.0.2,8 字节、校验和正确;180 秒没有听到成员查询,别的设备 27 个源地址发了 79 个 224.0.0.251 的报告;netstat 累计收到 8 万多个报告。
手工构造 IGMPv2 / v3 查询与报告并用 tcpdump 与 scapy 交叉解码(v2 报文 8 字节,v3 报告 8 字节头 + 每条记录 8 字节起);本机套接字能按源过滤(只要别的源就收不到),但 IP_BLOCK_SOURCE 对本机回送的包没生效;线上全是 v2,过滤只在内核里。
60 秒抓到 3450 个 mDNS 包(185 个源地址,约 57.5 包/秒);问 _services._dns-sd._udp.local 得到 38 个应答、20 种服务类型;PTR → SRV + TXT → A / AAAA 三步各 70~90 ms 完成;.local 没人回答要等约 5 秒才放弃;TTL 4500 占应答记录的 73%。