Day33-计算机基础3

Day33-计算机基础3

  • 1.根据TCP/IP进行Linux内核参数优化
    • 1.1 例1:调整访问服务端的【客户端】的动态端口范围 ,LVS(10-50万并发),NGINX负载,SQUID缓存服务,
    • 1.2 企业案例:DOS攻击的案例:
    • 1.3 例2:#全/半连接队列
    • 1.4 TCP超时重传
    • 1.5 拥塞控制
  • 2. 内核TCP参数优化
    • 2.1 参看帮助: man tcp
    • 2.2 企业案例:TIME_WAIT过多故障,如何解决?

#抓取所有经过eth0,目的地址是10.0.0.128,端口是22的TCP数
tcpdump -i eth0 '((tcp) and (port 22) and (dst host 10.0.0.128))'
wireshark

在这里插入图片描述

在这里插入图片描述
CLOSING 状态表示:客户端发送了 FIN,但没有收到服务器的 ACK,却收到了服务器的 FIN。
这种情况发生在服务器发送的 ACK 丢包的时候,因为网络传输有时会有意外。

1.根据TCP/IP进行Linux内核参数优化

1.1 例1:调整访问服务端的【客户端】的动态端口范围 ,LVS(10-50万并发),NGINX负载,SQUID缓存服务,

[root@oldboy ~]# cat /proc/sys/net/ipv4/ip_local_port_range 
32768	60999
[root@oldboy ~]# echo 4000 65000 > /proc/sys/net/ipv4/ip_local_port_range 
[root@oldboy ~]# cat /proc/sys/net/ipv4/ip_local_port_range 
4000	65000

DOS/SYN攻击
链接: https://baike.baidu.com/item/dos%E6%94%BB%E5%87%BB/3792374?fr=aladdin

1.2 企业案例:DOS攻击的案例:

SYN洪水攻击属于DoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。、

1.3 例2:#全/半连接队列

#半连接
/proc/sys/net/ipv4/tcp_max_syn_backlog  #syn连接池队列大小
[root@oldboy ~]# echo 8192 >/proc/sys/net/ipv4/tcp_max_syn_backlog
[root@oldboy ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
8192

#全连接
/proc/sys/net/core/somaxconn #完成连接队列大小,默认值128,建议调整大小为1024以上
[root@oldboy ~]# echo 512 >/proc/sys/net/core/somaxconn
[root@oldboy ~]# cat /proc/sys/net/core/somaxconn
512

超时连接
Linux为了防止孤儿连接长时间存留在内核中的两个内核参数:

[root@oldboy ~]# cat /proc/sys/net/ipv4/tcp_max_orphans 
16384

[root@oldboy ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
[root@oldboy ~]# echo 2 > /proc/sys/net/ipv4/tcp_fin_timeout 
[root@oldboy ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout 
2

1.4 TCP超时重传

异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略。

与TCP超时重传相关的两个内核参数:

#指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
#cat /proc/sys/net/ipv4/tcp_retries1
3
#指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)
#cat /proc/sys/net/ipv4/tcp_retries2 
15

1.5 拥塞控制

网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制TCP拥塞控制的标准文档是RFC 5681,

拥塞控制的四个部分:

  • 慢启动(slow start)
  • 拥塞避免(congestion avoidance)
  • 快速重传(fast retransmit)
  • 快速恢复(fast recovery)。
    拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。
    当前所使用的拥塞控制算法
    /proc/sys/net/ipv4/tcp_congestion_control

2. 内核TCP参数优化

2.1 参看帮助: man tcp

编辑文件/etc/sysctl.conf,加入以下内容:然后执行sysctl -p让参数生效

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_local_port_range = 2000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.core.somaxconn = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.route.gc_timeout = 100
net.core.netdev_max_backlog = 16384

作用说明:

- net.ipv4.tcp_tw_reuse 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认值为0,表示关闭。
  该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse 0 

- net.ipv4.tcp_tw_recycle 表示开启TCP连接中TIME-WAIT sockets的快速回收。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0,表示关闭。
  提示:reuse和recycle这两个参数是为防止生产环境下Web、Squid等业务服务器time_wait网络状态数量过多设置的 

- net.ipv4.tcp_syncookies 表示开启SYN Cookies功能。当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击。
  该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syncookies,默认值为1 


- net.ipv4.ip_local_port_range 该选项用来设定允许系统打开的端口范围,即用于向外连接的端口范围。
  该参数对应系统路径为:/proc/sys/net/ipv4/ip_local_port_range 32768 61000 


- net.ipv4.tcp_max_syn_backlog 表示SYN队列的长度,即半连接队列长度,默认为1024。该参数为服务器端用于记录那些尚未收到客户端确认信息的连接请求最大值。该参数对象系统路径为:/proc/sys/net/ipv4/tcp_max_syn_backlog 

- net.ipv4.tcp_max_tw_buckets 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,对于Nginx等服务器来说可以将其调低一点,如改为5000~30000,不通业务的服务器也可以给大一点,比如LVS、Squid。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets 

- net.ipv4.tcp_synack_retries 参数的值决定了内核放弃连接之前发送SYN+ACK包的数量。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认值为5 

- net.ipv4.tcp_syn_retries 表示在内核放弃建立连接之前发送SYN包的数量。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries,默认值为6 

- net.ipv4.tcp_max_orphans 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数值,孤立连接将被立即被复位并打印出警告信息。这个限制只有为了防止简单的DoS攻击。不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值。该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans ,默认值8192 

- net.core.somaxconn 同时发起的TCP的最大连接数,即全连接队列长度,在高并发请求中,可能会导致链接超时或重传,一般结合并发请求数来调大此值。该参数对应系统路径为:/proc/sys/net/core/somaxconn ,默认值是128 

- net.core.netdev_max_backlog 表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包最大数。该参数对应系统路径为:/proc/sys/net/core/netdev_max_backlog,默认值为1000 

2.2 企业案例:TIME_WAIT过多故障,如何解决?

LVS、Squid、Nginx这些软件本身服务,能够承受大并发。
基础解决:

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

修改配置文件:/etc/sysctl.conf (原内容保存)

vm.swappiness = 10
##swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于 centos linux 5的默认设置,这个值等于60,建议修改为10。

net.ipv4.tcp_syncookies = 1
##表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1
#表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout = 30
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

net.ipv4.tcp_keepalive_time = 1200
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

net.ipv4.ip_local_port_range = 1024 65000
##表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.tcp_max_tw_buckets = 5000
##表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,
##TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。
##对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,
##但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

net.ipv4.tcp_mem = 786432 1048576 1572864
##有3个值,意思是:
##net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.
##net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.
##net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket

net.core.wmem_max = 873200
##最大socket写buffer,可参考的优化值:873200

net.core.rmem_max = 873200
##最大socket读buffer,可参考的优化值:873200

net.ipv4.tcp_wmem = 8192 436600 873200
##TCP写buffer,可参考的优化值: 8192 436600 873200

net.ipv4.tcp_rmem = 32768 436600 873200
##TCP读buffer,可参考的优化值: 32768 436600 873200

net.core.somaxconn = 256
##listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.
可调整到256.

net.core.netdev_max_backlog = 1000
##进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000.

net.ipv4.tcp_max_syn_backlog = 2048
##进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.
可调整到2048.

net.ipv4.tcp_retries2 = 5
##TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,以尽早释放内核资源.

net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
##意思是如果某个TCP连接在idle 30个分钟后,内核才发起probe.如果probe 3次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.

net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0
##NAT模式下的打开ARP广播响应

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/445725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工资低适合下班做的6大副业,每一个都值得尝试!

2024年是最适合发展个人副业的时候!无论你是否有全职工作,如果你的主业还不能满足你的成就感,还不能满足你的生活需求,这6个下班可以做的副业都很值得尝试! 千金宝库做简单的网络任务 近年来,随着互联网技…

算法详解——leetcode150(逆波兰表达式)

欢迎来看博主的算法讲解 博主ID:代码小豪 文章目录 逆波兰表达式逆波兰表达式的作用代码将中缀表达式转换成后缀表达式文末代码 逆波兰表达式 先来看看leetcode当中的原题 大多数人初见逆波兰表达式的时候大都一脸懵逼,因为与平时常见的表达式不同&am…

C语言学习笔记,学懂C语言,看这篇就够了!(中)

附上视频链接:X站的C语言教程 目录 第8章、函数8.1 函数是什么8.2 函数的分类8.2.1 库函数8.2.1.1 如何使用库函数 8.2.2 自定义函数 8.3 函数参数8.3.1 实际参数(实参)8.3.2 形式参数(形参) 8.4 函数调用8.4.1 传值调用8.4.2 传址调用8.4.3 练习 8.5 函数的嵌套调…

如何使用ArcGIS Pro进行坡度分析

坡度分析是地理信息系统中一种常见的空间分析方法,用于计算地表或地形的坡度,这里为大家介绍一下如何使用ArcGIS Pro进行坡度分析,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据,除了DEM数据&…

Python爬虫:http和https介绍及请求

HTTP和HTTPS 学习目标: 记忆 http、https的概念和区别记忆 浏览器发送http请求的过程记忆 http请求头的形式记忆 http响应头的形式了解 http响应状态码 1 为什么要复习http和https 在发送请求,获取响应的过程中 就是发送http或https的请求&#xff0c…

自然语言发展历程

一、基础知识 自然语言处理:能够让计算理解人类的语言。 检测计算机是否智能化的方法:图灵测试 自然语言处理相关基础点: 基础点1——词表示问题: 1、词表示:把自然语言中最基本的语言单位——词,将它转…

中国电子学会2021年9月份青少年软件编程Sc ratch图形化等级考试试卷四级真题

【 单选题 】 1.下面哪个选项程序可以交换下图列表中第2项和第3项的位置? A: B: C: D: 2.雷峰塔景区的门票价格政策是:成人40元/人;6周岁(含6周岁)以下的实行免票&#…

常用MII接口详解

开放式系统互连 (OSI) 模型 七层开放系统互连 (OSI) 模型中,以太网层 位于最底部两层 - 物理层和数据链路层。 从百兆以太网接口开始 首先是百兆以太网规定的两种接口 介质无关接口 (MII) Media Independent Interface 介质相关接口 (MDI) Medium Depen…

manjaro 安装 wps 教程

内核: Linux 6.6.16.2 wps-office版本: 11.10.11719-1 本文仅作为参考使用, 如果以上版本差别较大不建议参考 安装wps主体 yay -S wps-office 安装wps字体 (如果下载未成功看下面的方法) yay -S ttf-waps-fonts 安装wps中文语言 yay …

如何用YOLOv8实现图像分割

1. 介绍 在之前的文章中,介绍了如何使用 YOLOv8 在不同的编程语言来检测图片中的对象。然而,YOLOv8 还可以把检测到的目标图像分割出来,本篇文章将介绍如何使用YOLOv8做图片分割。 对象检测的结果是所有检测到的对象的边界框。图像分割的结果是所有检测到的对象的蒙版。它是…

一篇文章简单介绍YOLO v1到v8的演变

大家好,YOLO(You Only Look Once)是一种流行的目标检测库,它的第一个版本在2015年发布。YOLO工作速度很快,提供了良好的结果,而且预训练模型是公开可用的。该模型迅速变得流行,该项目至今仍在积…

ai学习前瞻-python环境搭建

python环境搭建 Python环境搭建1. python的安装环境2. MiniConda安装3. pycharm安装4. Jupyter 工具安装5. conda搭建虚拟环境6. 安装python模块pip安装conda安装 7. 关联虚拟环境运行项目 Python环境搭建 1. python的安装环境 ​ python环境安装有4中方式。 从上图可以了解…

python之数组,链表,栈,队列

1.数组 优点: 索引操作速度快:通过索引可以直接访问元素,因此索引操作的时间复杂度是 $O(1)$,即常数级 缺点: 插入、删除元素慢: 如果需要在中间或开始位置插入或删除元素,可能需要移动大量…

漫漫数学之旅036

文章目录 经典格言数学习题古今评注名人小传 - 爱因斯坦 经典格言 纯数学在其领域内是逻辑思想的诗歌。——阿尔伯特爱因斯坦 “纯数学在其领域内是逻辑思想的诗歌”这句话体现了爱因斯坦对数学的深刻理解和热爱。在这句话中,爱因斯坦将纯数学比作诗歌,…

mmdetection如何计算准确率、召回率、F1值

1、训练 python tools/train.py configs/fcos/fcosrdweed3.py 2、测试 这一步要加–outresult.pkl,才能计算准确率和召回率 python tools/test.py configs/fcos/fcosrddweed3.py work_dirs/fcosrddweed3/epoch_300.pth --outresultfcos.pkl3、计算准确率和召回率…

三维GIS的业务导向

的确,目前三维GIS以做特效居多,酷炫、亮眼,从二维转到三维,第一眼就给人眼前一亮的感觉,就凭这一项,很多客户就会买单,GIS的客户以政府、科研院所、特种行业为主,买过一次单后&#…

riscv简单常用汇编指令xv6

文章目录 前言entry.Smretasm volatileread csrwrite csrriscv常见csr寄存器 ecall, 系统调用指令cpu执行异常处理指令的三种事件 异常处理相关寄存器用户态trapsret指令页表切换操作用户态系统调用过程总结 内核态trap缺页异常 中断与设备驱动Locking调度文件系统操作系统拥有…

Docker完整版(一)

Docker完整版(一) 一、Docker概述1.1、Docker简介1.2、Docker的用途1.3、容器与虚拟机的区别1.4、Docker系统架构1.5、Docker仓库 二、Docker引擎2.1、Docker引擎架构2.2、Docker引擎分类2.3、Docker引擎的安装2.4、Docker镜像加速器 三、Docker镜像3.1、…

Android 完整SDK项目中添加对应的JNI与底层通信

安卓应用发消息给底层 近日需要写一个安卓app和底层发消息,这就涉及到java如何到c层的一个逻辑,app已经写好,就差发个消息了。至于如何对接底层,得和写底层的人进一步沟通,本文笔者只写从java层通信到cpp,…

视频远程监控平台EasyCVR集成后播放只有一帧画面的原因排查与解决

智慧安防视频监控平台EasyCVR能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台可支持的接入协议包括:国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议…