补全:先查缓存,没有再广播
(每道题开头都有同一段:to_int 把点分十进制变成 32 位整数,to_str 变回去,mask(前缀长度) 给出掩码的整数——高位连续的 1,低位 0。) (这一节还多了四个函数:network 网络地址、broadcast 广播地址
补全:帧头写谁
(每道题开头都有同一段:to_int 把点分十进制变成 32 位整数,to_str 变回去,mask(前缀长度) 给出掩码的整数——高位连续的 1,低位 0。) (这一节还多了四个函数:network 网络地址、broadcast 广播地址
为什么要 IPv6
IPv4 用得好好的,为什么还要 IPv6?最直接的原因是【0】。
IPv6 怎么写
一个 IPv6 地址长这样:2001:db8::1。它的写法规则是【0】。
把 :: 展开
expand 把缩写的 IPv6 展开成八组、每组四位: def expand(addr): if "::" in addr: head, tail = addr.split("::&q
多了多少
IPv6 有 2 的 128 次方个地址。看这个数有几位、是 IPv4 总数的多少倍: v4 = 2 ** 32 v6 = 2 ** 128 print(str(len(str(v6))) + "/" + str(v6
补全:展开
补全 expand(addr):按 :: 切成两边,中间补零组凑够八组,每组 zfill(4)。
补全:缩写
compress 把展开的地址缩回去:每组去前导零,最长的一串(至少两组)全零缩成 ::。补全「找最长零串」那一段。
补全:前 64 位是哪个网
IPv6 常用 /64:前四组是网络、后四组是接口。补全 net64(addr):展开后取前四组。
补全:认出 IPv6 的特殊地址
补全 kind6(addr):::1 交回「回环」,fe80 开头交回「链路本地」,2001:0db8 开头交回「文档」,其余交回「全球」。先 expand 再判。