写一个带超时的客户端

场景:本机某端口上有一个 TCP 服务,收到一行就回它的大写。 任务:写 ~/问.py,用法 python3 ~/问.py 端口 文字:连上、把文字加换行发过去、打印回信一行;连接被拒绝就打印「拒绝」;连上了但 3 秒内没回信就打印「超时」

开始练习 →

交付:一个按行回答的服务

场景:要交付一个 TCP 服务和它的启动脚本,端口在说明里。 任务:写 ~/服务/答.py(一个客户端一个客户端地接;每收到一行:ping 回 pong,「len 文字」回那段文字的 UTF-8 字节数,bye 回 bye 并关掉这个客户端

开始练习 →

谁会进 TIME-WAIT

真机上一条连接关掉之后,进 TIME-WAIT 的是【0】。

开始练习 →

四种状态各是什么

把四种现象和 ss 里的状态配对,按线索顺序打印状态名: state = { "对方关了,我这边还没 close": "CLOSE-WAIT", "我关了写,对方还没关&qu

开始练习 →

握手完了没人接

场景:本机某端口上有一个服务,它 listen 之后就再也没调 accept。后台有几个客户端连了上去。对照表列了八个数。 任务:用 ss -tln 看这个端口那一行的 Recv-Q——握手已经完成、躺在队列里等 accept 的连接有几条

开始练习 →

关了一半的连接

场景:本机某端口上的服务和一个客户端之间有一条连接,其中一头关了自己的写方向、另一头什么都没关。对照表列了八个状态名。 任务:用 ss -tan 找出这条连接服务端那一头(Local Address 是服务端口的那一行)现在处于什么状态,到

开始练习 →

谁在 TIME-WAIT

场景:~/演示.py 在本机起一个服务、再用一个客户端连上去说一句话,然后其中一头先关。两头的端口都是固定的(写在脚本里)。对照表列了八个端口号。 任务:运行 python3 ~/演示.py,然后一分钟内用 ss -tano 看哪个本地端口

开始练习 →

发了多少字节

场景:本机某端口上的服务和一个客户端之间有一条连接,服务端往上面发了一些字节,客户端连着不放、一个字节也没读。对照表列了八个数。 任务:用 ss -tani(-i 显示每条连接的内部信息)找出服务端在这条连接上一共发了多少字节且已被确认(服

开始练习 →

攒了多少 CLOSE-WAIT

场景:本机某端口上的服务写得有毛病:客户端断开之后它从不 close 自己那一头。后台已经有几个客户端连过又断了。对照表列了八个数。 任务:用 ss -tan 数出这个端口上(Local Address 是它)处于 CLOSE-WAIT 的

开始练习 →

把 CLOSE-WAIT 修掉

场景:~/服务/答.py 在后台跑着(端口在说明里),它 accept 之后把套接字存进列表、对方断开也从不 close,ss 上攒了一堆 CLOSE-WAIT。 任务:改 答.py:recv 交回空字节串(对方关了)就 close 这一头

开始练习 →