[TCP/IP] TCP在listen时的参数backlog的意义
2023-02-18 15:47:03 时间
linux内核中会维护两个队列:
1)未完成队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态
2)已完成队列:已完成TCP三次握手过程,处于ESTABLISHED状态
3)当有一个SYN到来请求建立连接时,就在未完成队列中新建一项。当三次握手过程完成后,就将套接口从未完成队列移动到已完成队列。
4)backlog曾被定义为两个队列的总和的最大值,Berkely实现中的backlog值为上面两队列之和再乘以1.5。
5)如果当客户端SYN到达的时候队列已满,TCP将会忽略后续到达的SYN,但是不会给客户端发送RST信息,因为此时允许客户端重传SYN分节。如果启用syncookies (net.ipv4.tcp_syncookies = 1),新的连接不进入未完成队列,不受影响
6)backlog 即上述已完成队列的大小, 这个设置是个参考值,不是精确值. 内核会做些调整
SYN 洪水攻击(syn flood attack)
通过伪造IP向服务器发送SYN包,塞满服务器的未完成队列,服务器发送SYN+ACK包 没回复,反复SYN+ACK包,使服务器不可用.
启用syncookies 是简单有效的抵御措施.
启用syncookies,仅未完成队列满后才生效.
相关文章
- kubernetes数据持久化StorageClass动态供给(二)
- kubernetes数据持久化PV-PVC详解(一)
- kubernetes之Ingress发布应用实现rewrite重写并配置HTTPS;(二)
- kubernetes之基于ServiceAccount拉取私有镜像
- Knative部署应用以及应用的更新、应用的分流(三)
- Jenkins配置下载插件源;
- kubernetes之一文详解Ingress;(一)
- Centos7安装Jenkins详解;
- kubernetes之镜像拉取策略ImagePullSecrets;
- kubernetes之镜像拉取策略ImagePullPolicy;
- kubernetes之Endpoint引入外部资源实践;
- 一文搞懂什么是kubernetes Service
- Serverless之Knative部署应用示例(二)
- Serverless之knative1.6安装(一)
- Nginx篇之Ubuntu18.04.3编译安装Nginx
- kubernetes之DaemonSet以及滚动更新 (三)
- kubernetes之资源限制及QOS服务质量
- 一文搞懂kubernetes Deployment之滚动更新、回滚应用及策略;(二)
- kubernetes之Deployment控制器(一)
- kubernetes之ReplicaSet