linux全连接队列溢出,全连接和半连接

本文详细介绍了Linux系统中TCP连接的全连接队列和半连接队列,包括它们的工作原理、队列大小配置以及如何查看队列状态。同时,讨论了SYN Flood攻击和SYN Cookies技术,并分析了全连接队列满对半连接队列的影响,以及当全连接队列满时可能出现的问题和解决思路。
摘要由CSDN通过智能技术生成

[TOC]

参考

1. TCP的全连接和半连接队列

当服务端调用listen函数监听端口的时候,内核会为每个监听的socket创建两个队列:半连接队列和全连接队列。

6a0fcb1008d6

示意图

如上图所示,这里有两个队列:syns queue(半连接队列);accept queue(全连接队列)

三次握手,两个队列如下工作:

第一步,server收到client的syn后,把相关信息放到半连接队列中

第二步,回复syn+ack给client;

第三步,server收到client的ack,如果这时全连接队列没满,那么从半连接队列拿出相关信息放入到全连接队列中,否则按tcp_abort_on_overflow指示的执行。全连接队列满了并且tcp_abort_on_overflow是0的话,server过一段时间再次发送syn+ack给client(也就是重新走握手的第二步),如果client超时等待比较短,就很容易异常了。后文会再度分析。

1.1. 半连接队列

半连接队列的大小由/proc/sys/net/ipv4/tcp_max_syn_backlog控制,Linux的默认是1024。

当服务端发送SYN_ACK后将会开启一个定时器,如果超时没有收到客户端的ACK,将会重发SYN_ACK包。重传的次数由/proc/sys/net/ipv4/tcp_synack_retries控制,默认是5次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值