0XFF-96 / golang-snippet

My practice code repo
3 stars 0 forks source link

Linux-网络优化相关2 #9

Closed 0XFF-96 closed 4 years ago

0XFF-96 commented 4 years ago

相关参考

Iptables

0XFF-96 commented 4 years ago

怎么缓解 DDoS (Distributed Denial of Service )

DDos 的危害

Op

sar -n DEV  1
# -i eth0 只抓取eth0网卡,-n不解析协议名和主机名# t
tcp port 80表示只抓取tcp协议并且端口号为80的网络帧
tcpdump -i eth0 -n tcp port 80
-n: 不解析名字。 
-p: 表示显示连接所属进程。

netstat -n -p | grep SYN_REC 
netstat -n -p | grep SYN_REC | wc -l 

解决办法2


# 限制syn并发数为每秒1次
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

# 限制单个IP在60秒新建立的连接数为10
iptables -I INPUT -p tcp --dport 80 --syn -m recent --name SYN_FLOOD --update --seconds 60 --hitcount 10 -j REJECT

解决办法2 :

image

0XFF-96 commented 4 years ago

网络请求延迟变大了,该怎么办?

可能的原因有:

OP

ICMP 通常会被服务器禁用。

hping3 -c 3 -S -p 80 baidu.com
traceroute --tcp -p 80 -n baidu.com

wrk --latency -c 100 -t 2 --timeout 2 http://localhost:80


- ? 为什么抓不了包?

tcpdump -nn tcp port 8080 -w nginx.pcap


- 为了确认 wrk 的行为, 可以用 strace 来观察 wrk 为套接字设置 TCP 选项。 

strace -f wrk --latency -c 100 -t 2 --timeout 2 http://192.168.0.30:8080/ ... setsockopt(52, SOL_TCP, TCP_NODELAY, [1], 4) = 0 ...



### 排查

- 使用 hping3 以及 wrk 等工具🔧, 确认单词请求和并发请求情况的网络延迟是否正常
- 使用 traceroute 确认路由是否正确,并查看路由中每一跳网关的延迟
- tcpdump 和 wireshark 确认网络包的收发是否正常
- 使用 strace 等,观察应用程序对网络套接的调用情况是否正常。 

> 第一次见到了 Nagle 算法。也知道了服务端关闭icmp时怎么用tcp/udp测试网络延迟
0XFF-96 commented 4 years ago

如何优化 NAT 性能(上)

0XFF-96 commented 4 years ago

如何优化 NAT 性能(下)

Linux 中的 NAT, 基于捏合的连接跟踪模块实现。 它维护每个连接状态的同时,对网络性能有一定影响。

SystemTap 是 Linux 的一种动态追踪框架,它把用户提供的脚本,转换为内核模块来执行,用来监测和跟踪内核的行为

精彩评论

https://mp.weixin.qq.com/s/VYBs8iqf0HsNg9WAxktzYQ:(多个容器snat时因为搜索本地可用端口(都从1025开始,到找到可用端口并插入到conntrack表是一个非事务并且有时延--第二个插入会失败,进而导致第一个syn包被扔掉的错误,扔掉后重传找到新的可用端口,表现就是时延偶尔为1秒或者3秒)
0XFF-96 commented 4 years ago

网络性能优化的思路

image

image

image

Linux 系统网络协议栈和网络收发流程辅助

image

应用程序的网络优化方案。

套接字优化

每个套接字都收一个读写缓存取。

image

套接字配置选项,修改网络连接的行为:

精彩评论

 cat /proc/sys/net/ipv4/tcp_mem 查看配置
cat /proc/net/sockstat 查看当前tcp的统计

然后可以通过 sysctl -w net.ipv4.tcp_mem=新配置 来增大
0XFF-96 commented 4 years ago

网络优化思路(下)

image

TCP 有三个需要优化的场景:

UDP 三个需要优化的场景

网络层优化

网络层,负责网络包的封装、寻址和路由,包括 IP、ICMP 等常见协议。在网络层,最主要的优化,其实就是对路由、 IP 分片以及 ICMP 等进行调优

链路层优化

链路层负责网络包在物理网络中的传输,比如 MAC 寻址、错误侦测以及通过网卡传输网络帧等。自然,链路层的优化

0XFF-96 commented 4 years ago

如何优化 NAT 性能

NAT 网络地址转换。 NAT 可以冲写 IP 数据包的源 IP 或者目的 IP

NAT 的分类

iptables 与 NAT

image

NAT 技术能够重写 IP 数据包的源 IP 或目的 IP,所以普遍用来解决公网 IP 地址短缺的问题。它可以让网络中的多台主机,通过共享同一个公网 IP 地址,来访问外网资源。同时,由于 NAT 屏蔽了内网网络,也为局域网中机器起到安全隔离的作用

精彩评论

1)iptalbes的三个表

filter 这个表主要用于过滤包的,是系统预设的表,这个表也是阿铭用的最多的。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。

nat 主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。该表阿铭用的不多,但有时候会用到。

mangle 这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面

0XFF-96 commented 4 years ago

Linux 网络的收发流程涉及缓冲区

这些缓冲区和之前的 Buffer 和 Cache 的关系?

sk_buff、套接字缓冲、连接跟踪等,都通过 slab 分配器来管理。你可以直接通过 /proc/slabinfo,来查看它们占用的内存大小

最大连接数是不是受限于 65535 个端口

Linux 协议栈,通过五元组来标志一个连接(即协议,源 IP、源端口、目的 IP、目的端口) 上面这些因素,哪个是变的,哪个是不变的.....

socket连接是通过五元组唯一确定的,但实际写服务端程序时,还是会根据经验限定到65530。

服务器端单进程同时打开的文件数限制,平常限制的也是65535(可以继续调大)。一个进程默认还会打开2个文件,stdout stderr,所以需要再减2,如果有监听一个端口,还需要再减1。 有一次在生产环境中,同时连接数限制的是65535,结果到65533个连接时,把监听的端口给关闭了。(可能是所用框架导致的)虽然已有的连接未受影响,但之后就无法再接受新连接了。