半连接队列 全连接队列??

参考链接

半连接队列

服务器接收到第一个SYN之后,处于SYN_RCVD状态,此时双方还没有建立连接,

这种状态下的请求连接会被放到一个队列里,也叫半连接队列

长度为 max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog) ,在机器的tcp_max_syn_backlog值在/proc/sys/net/ipv4/tcp_max_syn_backlog下配置。

Linux下默认会进行5次重发SYN-ACK包,重试的间隔时间从1s开始,下次的重试间隔时间是前一次的双倍,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以,总共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 63s,TCP才会把断开这个连接。

 

全连接队列

当server接收到ACK 之后, 会进入一个新的叫 accept 的队列

min(backlog(处于完全连接的socket的数量上限), somaxconn) (somaxconn默认是128吧)

 

SYN攻击的防范

linux提供了几个TCP参数来避免syn攻击

tcp_syncookies

tcp_synack_retries  内核放弃连接之前syn + ack包的数量

tcp_max_syn_backlog  内核放弃连接前接受的syn包的数量

 

tcp syn_cookie的计算方法

  • t为一个缓慢递增的时间戳(通常为time()>>6,提供 64 秒的分辨率);

  • m为服务器会在 SYN 队列条目中存储的最大分段大小(Maximum segment size);

  • s为一个加密散列函数对服务器和客户端各自的 IP 地址和端口号以及t进行运算的结果。返回得到的数值s必须是一个24位值。

初始 TCP 序号,也就是所谓的SYN cookie,按照如下算法得到:

  • 头五位:tmod32;

  • 中三位:m编码后的数值;

  • 末24位:s本身;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值