网络连接中的舔狗协议

舔狗网络协议 (discard protocol)

最近互联网上,“舔狗” 这个词语很火,也衍生出来很多梗(快速说出互联网 4 大舔狗!!!)。然后今天偶然间看到了一个 RFC 文档, 发现了一个有趣的网络协议, 这个协议让我立马想到了舔狗这个词,哈哈。也不卖关子了,让我们来直接看一看它吧 – Discard Protocol。这大概是最简单的RFC文档了,其他的文档基本都是长篇大论,我基本没有看完过。

这个协议的功能就是:丢弃所有接受到的消息,永远不会响应!

网络连接中的舔狗协议_第1张图片

网络连接中的舔狗协议_第2张图片

discard service (丢弃服务)是一个很有用的调试和测量工具。discard service 只是简单的丢弃它接收到的所有数据。
它有两种实现方式:

  1. 基于 TCP 的丢弃服务
    一种 discard service 是建立在TCP之上的基于连接的应用。服务器在 TCP 端口 9 上 监听 TCP 连接. 一旦一个连接建立,任何接收到的数据都会被丢弃(thrown away)。不发送任何响应。这个连接会一直持续, 直到调用用户主动终止连接。
  2. 基于 UDP 的丢弃服务
    另一种 discard service 是建立在 UPD 之上的基于数据报的应用。服务器在 UDP 端口 9 上监听 UDP 数据报。当接收到一个数据报,丢弃它。不发送任何响应。

网络连接中的舔狗协议_第3张图片

简单的实现一个 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]))
	}
}

测试

这里我为了图省事, 直接用浏览器来测试了。除非主动关闭浏览器,不然这里浏览器会一直转圈圈 (模拟永远在等待),直到超时结束。

最后客户端会得到什么呢?当然是一无所有啦!

你可能感兴趣的:(网络,tcp/ip,udp)