对面关了不收手
场景:~/服务/答.py 的连接处理循环没判 recv 是不是 b"":客户端一断开,它就疯狂空转(CPU 打满)或攒下 CLOSE-WAIT。~/复现.sh 能看到现象。 任务:在处理循环里加上「recv 得到 b&q
重启报端口占用
场景:~/服务/答.py 收到 bye 就先 close(服务端先关)。这个端口上正有一条上次运行(设了 SO_REUSEADDR)留下的 TIME-WAIT;而 答.py 没设 SO_REUSEADDR,直接起会撞 [Errno 98]
客户端少发了换行
场景:服务端按行读(读到换行才算一条),可 ~/客户端.py 发请求时忘了在末尾加换行,于是发完就一直等回信、卡住不动。~/复现.sh 能看到它卡住。 任务:改 ~/客户端.py,让它发的那一行末尾带上换行(\n),跑出「收到: pong」
交付:一个健壮的服务
场景:要交付一个不出上面这些毛病的 TCP 服务,端口在说明里。 任务:写 ~/服务/答.py(SO_REUSEADDR + bind + listen + 循环 accept;每条连接按行读,ping 回 pong、bye 回 bye 并
DNS 是做什么的
我们平时在浏览器里敲的是 www.example.com 这样的域名,可网络实际要用的是 IP 地址。DNS 主要做的是【0】。
为什么不直接记 IP
既然最后都要用 IP,之所以还要域名和 DNS、不让大家直接记 IP,是因为【0】。
一个域名对几个 IP
一个域名和 IP 地址之间的对应关系是【0】。
没有 DNS 会怎样
假如完全没有 DNS,我们上网会变成【0】。
DNS 像生活里的什么
要打个比方,DNS 最像生活里的【0】。
查出这个域名的 IP
按贯穿全条的委派树,解析 www.example.com。 贯穿本节的委派树(本地 resolver 迭代式逐级问;判题机不联网,这是它的确定模型):根 知道每个顶级域(TLD,如 com)交给哪台服务器,TLD 服务器知道每个域(如 ex