舔狗网络协议 (discard protocol)
最近互联网上,“舔狗” 这个词语很火,也衍生出来很多梗(快速说出互联网 4 大舔狗!!!)。然后今天偶然间看到了一个 RFC 文档, 发现了一个有趣的网络协议, 这个协议让我立马想到了舔狗这个词,哈哈。也不卖关子了,让我们来直接看一看它吧 – Discard Protocol。这大概是最简单的RFC文档了,其他的文档基本都是长篇大论,我基本没有看完过。
这个协议的功能就是:丢弃所有接受到的消息,永远不会响应!
discard service (丢弃服务)是一个很有用的调试和测量工具。discard service 只是简单的丢弃它接收到的所有数据。
它有两种实现方式:
- 基于 TCP 的丢弃服务
一种 discard service 是建立在TCP之上的基于连接的应用。服务器在 TCP 端口 9 上 监听 TCP 连接. 一旦一个连接建立,任何接收到的数据都会被丢弃(thrown away)。不发送任何响应。这个连接会一直持续, 直到调用用户主动终止连接。 - 基于 UDP 的丢弃服务
另一种 discard service 是建立在 UPD 之上的基于数据报的应用。服务器在 UDP 端口 9 上监听 UDP 数据报。当接收到一个数据报,丢弃它。不发送任何响应。
简单的实现一个 Go 版本
package main
import (
"fmt"
"log"
"net"
)
func main() {
if listener, err := net.Listen("tcp", "0.0.0.0:8888"); err != nil {
log.Fatal(err)
} else {
fmt.Println("服务已上线!")
connection, err := listener.Accept()
if err != nil {
log.Fatal(err)
}
buf := make([]byte, 1024)
count, err := connection.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Printf("接收到消息:%v, 已丢弃!\n", string(buf[0:count]))
}
}
测试
这里我为了图省事, 直接用浏览器来测试了。除非主动关闭浏览器,不然这里浏览器会一直转圈圈 (模拟永远在等待),直到超时结束。
最后客户端会得到什么呢?当然是一无所有啦!