最近在研究 QUIC 协议,协议里面的代码里面我看到有这样一段注释
// kClientHelloMinimumSize is the minimum size of a client hello. Client hellos
// will have PAD tags added in order to ensure this minimum is met and client
// hellos smaller than this will be an error. This minimum size reduces the
// amplification factor of any mirror DoS attack.
//
// A client may pad an inchoate client hello to a size larger than
// kClientHelloMinimumSize to make it more likely to receive a complete
// rejection message.
const size_t kClientHelloMinimumSize = 1024;
背景是这样子的,这个是一个保证传输的通讯协议,当然要有一个握手的过程。
ClientHello 消息,是客户端第一个发送给服务端的数据,以进行一些版本、初始化数据,加密密钥等的通讯。
然后 kClientHelloMinimumSize 这个变量是这样的,客户端在组装好各种 ClientHello 需要的参数,再序列化成二进制报文后,若发现报文的长度小于 kClientHelloMinimumSize 就在报文中增加一个 padding 。
然后注释是说这个增加 padding 的机制可以在一定程度上减缓 DDoS 。原理是怎么样的呢?我大概想了一下,如果服务端收到的报文长度小于这个值,可以直接拒绝连接,这样可以减少 CPU 资源,但还有没有其他原理呢?欢迎大家补充。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.