SYN Flood攻击又称DOS(Denial Of Service),一般是指伪造客户端ip发送大量的syn包,服务端收到syn包后响应syn+ack根本无法到达客户端,服务端重发syn+ack,这个过程中socket处于半链接状态SYN_RECV,并占用一个半链接队列单元。半链接状态的socket足够多时,会将半连接队列耗光,导致后续syn包直接丢弃。
即使没有攻击,网络状态很差情况,服务端处发送syn+ack后到收到ack间隔时间过长,同样会积累大量的SYN_RECV的链路,导致半链接状态耗尽,同样会导致丢弃syn请求。
解决这个问题的方法:
方法1:修改参数,扩大实际的半链接队列,修改后需要重启服务进程。
listen(backlog)
{
somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn;