iptables 之 REJECT与DROP

DROP是直接丢弃建立连接的SYN包,客户端会不断重试,直到次数达到设定值,这时候会显示超时,重试次数是由tcp_syn_retries参数决定。在抓包的时候抓到的SYN报文的个数是这个值+1,例如我的Linux配置的是6次,这里抓到的SYN报文的个数是7,其中两个报文之间的时差按照1、2、4…这样的指数型增长的。所以如果是配置重试6次的话,总共从请求到显示超时耗时大概63秒钟。通常这个参数也是我们在做网络优化的时候要调整的一个值。如果是一个反向代理负载均衡器例如nginx,在做网络优化的时候,我一般会调小这个值,因为上游服务器和nginx通常在企业内网中,两者之间的网络环境通常较好。正常情况下无需重试这么多次。所以调小这个值在上游服务器出现问题的时候,尽快将问题暴露出来。以释放nginx服务器的资源。

客户端tcpdump抓包,配置重试6次,抓到7个SYN包

REJECT是拒绝,那么客户端是能收到响应的,就不用傻乎乎的在那重试了。这个时候服务端会发送ICMP包回应,其中ICMP包中的type和code都是3,表示主机不可达和端口不可达。

在服务器上配置REJECT
抓到的包导入wireshark,可以看到ICMP type和code都是3

留下评论