CS-Notes 学习笔记
Java 后端 · 计算机网络

什么是半连接队列和全连接队列?SYN Flood 怎样防御?

先自己想一想,再看参考要点

参考要点

  • 服务器收到 SYN 后,连接进入半连接队列(SYN_RCVD),握手完成后移入全连接队列,等应用调用 accept() 取走
  • listen() 的 backlog 指的是全连接队列的长度,超过 net.core.somaxconn(Linux 5.4 起默认 4096)时按它截断
  • 全连接队列满时 Linux 默认丢弃新到的 SYN,客户端超时后重传,ss -lnt 中 LISTEN 一行的 Recv-Q 是全连接队列中的连接数,Send-Q 是 backlog
  • SYN Flood 只发 SYN、不完成握手,用来占满半连接队列,Linux 默认开启 SYN Cookie:队列溢出时不保存半连接,把连接信息编码进 SYN+ACK 的序号,收到第三次握手时再还原
在学习站中自测这道题

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。