Day33-计算机基础3

2024-03-10 22:44
文章标签 基础 计算机 day33

本文主要是介绍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拒绝分配socketnet.core.wmem_max = 873200
##最大socket写buffer,可参考的优化值:873200net.core.rmem_max = 873200
##最大socket读buffer,可参考的优化值:873200net.ipv4.tcp_wmem = 8192 436600 873200
##TCP写buffer,可参考的优化值: 8192 436600 873200net.ipv4.tcp_rmem = 32768 436600 873200
##TCP读buffer,可参考的优化值: 32768 436600 873200net.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广播响应

这篇关于Day33-计算机基础3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/795761

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.