一条会丢会乱的信道
本节的信道模拟: deliver(msgs, plan) plan 每个报一个字符:. 到达 x 丢 d 到两次 s 和后一个交换顺序;交回接收方看到的顺序 seq_gaps(seqs) 缺
阅读更多 →
应用层要补什么
想在 UDP 上得到「按顺序、不重复、都到」,应用层要自己做的是【0】。
阅读更多 →
为什么会乱序和重复
五个方块依次进管子,出来的却不是那五个 少了一个、多了一个、两个调了个 UDP 包可能乱序到达、甚至到两次,因为【0】。
阅读更多 →
为什么会丢
五个方块依次进管子,出来的却不是那五个 少了一个、多了一个、两个调了个 UDP 包在路上「丢了」,最常见的原因是【0】。
阅读更多 →
补全:解析 DNS 查询里的名字
本节的 DNS 小工具: encode_name("www.example.com") b"\x03www\x07example\x03com\x00"(每
阅读更多 →
补全:发现设备
(每道题开头都有同一段:上面的内存版 UDP。) 贯穿全条的内存版 UDP(判题机不联网;接口和真 socket 一字不差,真机上把 net.socket() 换成 socket.socket(AF_
阅读更多 →
补全:选协议
补全 choose(realtime, tolerate_loss, one_to_many, big):一对多 → UDP;实时且容忍丢 → UDP;数据大或者不容忍丢 → TCP;其余(小而不实时
阅读更多 →
三类场景各选什么
按三条规则给应用分类:要实时且能容忍丢 → UDP;短问短答且自己重试 → UDP;一对多 → UDP;否则 TCP: apps = [("语音通话", "实时"
阅读更多 →
一条最小的 DNS 查询
本节的 DNS 小工具: encode_name("www.example.com") b"\x03www\x07example\x03com\x00"(每
阅读更多 →
广播为什么只能用它
「给网段里所有机器发一条」(广播 / 发现设备)只能用 UDP,因为【0】。
阅读更多 →