IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> TCP异常连接 -> 正文阅读

[系统运维]TCP异常连接

目录

connect

第一次握手

第三次握手

调优

端口不足

握手情况下

全队列和半队列查询

全连接队列

半连接队列


????????TCP异常连接分为connect,第一次握手,第三次握手源码逻辑介绍,给出优化方案以及查看全连接与半连接的方法。

connect

在连接失败后,大量的端口范围查找,会调用自旋锁等操作与hash查找,引起系统态CPU开销上涨。

第一次握手

客户端

  • 1)半队列满,且tcp_syncookies为0

2)全队列满,且有未完成的半连接请求;

3)没有收到synack客户端发起重试,时间要1s以后,对系统有影响;

4)重传时间 1 2 4 8 16 32 翻倍;次数是tcp_syn_retries

int tcp_conn_request(struct request_sock_ops *rsk_ops,
? ? ? ? ? ? ?const struct tcp_request_sock_ops *af_ops,
? ? ? ? ? ? ?struct sock *sk, struct sk_buff *skb)
{

? ? //查看半连接队列是否满

? ? if ((net->ipv4.sysctl_tcp_syncookies == 2 ||
? ? ? ? ?inet_csk_reqsk_queue_is_full(sk)) && !isn) {
? ? ? ? //检查是否开启内核参数tcp_syncookies,一般打开,半连接队列满了仍然可以保证正常握手
? ? ? ? want_cookie = tcp_syn_flood_action(sk, rsk_ops->slab_name);//syn攻击 耗光服务端的半连接队列使用户请求无法响应

? ? ? ? if (!want_cookie)
? ? ? ? ? ? goto drop;
? ? }

? ? //查看全连接队列是否满
? ? if (sk_acceptq_is_full(sk)) {
? ? ? ? NET_INC_STATS(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS);
? ? ? ? goto drop;
? ? }
}

第三次握手

服务端

1)全连接队列满了则丢弃,客户端不知道,服务器发起syn+ack

2)次数由tcp_synack_retries 控制

(现象制造,不进行accept,让客户端占满连接队列资源)

调优

端口不足

1)调整端口?Ip_local_port_range增大端口范围

2)使用复用连接

3)使用长链接

4)开启tcp_tw_reuse和tcp_tw_recycle

握手情况下

1)打开syncookies

????? 防止过多的请求打满半连接队列;SYN攻击;解决服务端因为半连接队列满而发生的丢包。

2)增加全连接队列长度

????? 全队列:Min(backlog,net.core.somaxconn)

3)尽快调用accept

????? 从全队列中取出连接

4)减少TCP连接次数,尽早拒绝;

????????内核参数tcp_abort_on_overflow发现满了直接发送rst给客户端,客户端收到的是 connection reset by peer

????????用长链接代替短连接;

????????重试的次数不宜加大;

全队列和半队列查询

全连接队列

#netstat -s | grep overflowed

前面数字有变化代表有溢出

半连接队列

?????? netstat –s | grep SYNs 这种方法是不对的,无法说明问题因为全连接溢出也会增加

? ? ? ? 1)want_cookie参数是不是1,如果是真,则不会发生半连接溢出丢包。

????????2)want_cookie,没有打开,除了netstat –antp,建议查看listen端口上的SYN_RECV的数量

#watch 'netstat -s | grep "SYNs"'

#netstat –antp | grep SYN_RECV | wc -l

?参考
https://course.0voice.com/v1/course/intro?courseId=2&agentId=0


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:26:09  更:2022-06-25 18:28:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 16:43:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码