-
什么是全、半连接队列
服务端接收syn请求后,内核会把该连接放入到半连接队列,服务端对syn+ack返回ack后,会把连接从半连接队列移除,创建新的全连接,并把新的连接放入全连接队列 -
查看全连接队列的命令
-
全连接队列满了,会怎么样
默认会进行丢弃
-
如何提高全连接队列的大小
-
全连接队列满时的处理策略
-
增加全连接容量
全连接容量=min(somaxconn,backlog) 积压 ,somaxconn是linux内核参数,可以通过命令修改 -
查看半连接的数量
wws@wws-virtual-machine:~/桌面$ sudo netstat -natp | grep SYN_RECV | wc -l
0
-
什么是syn攻击
客户端一直向服务器发送syn包而不发送第三次握手包,使服务端半连接队列快速溢出的攻击方式 -
什么时候丢弃半连接
- 半连接队列满
- 半连接队列没满,但是全连接队列满了
- 全连接队列也没满,但是 max_syn_backlog(积压)-当前半连接队列长度< max_syn_backlog>>2
-
半连接队列的大小如何确定
半连接队列的大小由 max_syn_backlog 与 全连接容量=min(somaxconn,backlog) 共同决定
在图解网络给的案例中,全连接队列大小为128,max_syn_backlog为512,最终版连接队列的大小为 128*2=256 -
理论半连接队列最大值能够达到吗
当不满足条件1,但是满足条件3,不会到达最大值,即
当前半连接队列长度>3/4 max_syn_backlog时会丢弃新的半连接
如果让半连接队列到达最大值,max_syn_backlog>8/3 全连接队列大小
-
syn cookie原理
SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。
-
如何预防syn攻击
-
增加半连接队列的值
半连接队列=2*min(max_syn_backlog,全连接队列长度=min(somaxconn,backlog)),所以需要同时增加这三个值
-
开启syn_cookie =1
-
3)减少syn_ack的重传次数