1. 手动设置本地网络连接:
1.1 CentOS
配置IPADDR、子网掩码NETMASK、网关GATEWAY、DNS1…, 如:
# /etc/sysconfig/network-scripts/ifcfg-enoxxxx
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.137.3
NETMASK=255.255.255.0
GATEWAY=192.168.137.2
DNS1=202.96.134.133
DNS2=8.8.8.8
DNS3=114.114.114.114
DNS4=8.8.4.4
1.2 Ubuntu 18
ubuntu 18设置静态ip, 下面以设置固定Ip:192.168.1.134为例; 在/etc/netplan目录下有个.yaml文件, 当前环境的文件名为50-cloud-init.yaml, 以修改后的内容替换原来的部分(如果当前用户无权限修改该文件, 请更换操作账户)
note:如果不设置静态Ip, 重启后Ip有变动的话, 就需要登录每个zookeeper的机器更改hosts文件, 修改ip,机器名的映射
# 原来文件内容
network:
ethernets:
ens18:
dhcp4: true
version: 2
# 修改后的文件内容
network:
ethernets:
ens18: #配置的网卡名称 , 该节点使用你环境的配置即可, 不一定是这个名称
dhcp4: no #dhcp4关闭
addresses: [192.168.1.134/24] #设置当前机器IP及掩码
gateway4: 192.168.1.253 #设置网关, 改为测试环境所在的网关
version: 2
执行以下命令
cd /etc/netplan
vim 50-cloud-init.yaml
sudo netplan apply
# 刷新DNS
/etc/init.d/nscd restart # apt-get install nscd
2. 常用配置命令
# 重启一下网络服务:
service network restart
# 设置IP和掩码
ifconfig eth0 192.168.137.3 netmask 255.255.255.0
# 设置网关
route add default gw 192.168.137.2
# 启动对应的网卡:
sudo ifconfig eth1 up
#重启一下网络服务:
service network restart
# 要查看网卡细节, 输入以下命令:
ip addr
# 要查看网络接口统计数据, 输入命令
ip link
# 修改主机名
hostnamectl set-hostname jiaolun.top
3. 常用的内核参数
3.1 常用的内核参数
# 解决time_wait连接数大量问题
# vim /etc/sysctl.conf
# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
kernel.sysrq=1
# tcp
# 第一个值是为你们的TCP连接所需分配的最少字节数。该值默认是4K, 最大的话8MB之多。也就是说你们有数据发送的时候我需要至少为对应的socket再分配4K内存, 甚至可能更大。
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.rmem_default = 212992
net.core.rmem_max = 8388608
# 第一个值是发送缓存区的最小值, 默认也是4K。当然了如果数据很大的话, 该缓存区实际分配的也会比默认值大。
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.wmem_default = 212992
net.core.wmem_max = 8388608
3.2 参数详解
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 修改系靳默认的 timeout 时间
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_syn_backlog = 8192 #表示SYN队列的长度, 默认为1024, 加大队列长度为8192, 可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT套接字的最大数量, 如果超过这个数字, TIME_WAIT套接字将立刻被清除并打印警告信息。
# 默认为180000, 改为5000。
# 对于Apache、Nginx等服务器, 上几行的参数可以很好地减少TIME_WAIT套接字数量, 但是对于 Squid, 效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量, 避免Squid服务器被大量的TIME_WAIT套接字拖死。
4. 网络协议
4.1 安装sctp协议
使用命令yum list lksctp* 查看需要安装列表
5. 网络检测
5.1 lsof
lsof -i:端口号
5.2 netstat
netstat -tunlp|grep 端口号
netstat -antup | grep ftp
# 查看网络连接数:
netstat -an |wc -l
# 查看不同状态的连接数数量
netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
# 查看每个ip跟服务器建立的连接数
netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
# 查看每个ip建立的ESTABLISHED/TIME_OUT状态的连接数
netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
# 常用的三个状态是: ESTABLISHED 表示正在通信, TIME_WAIT 表示主动关闭, CLOSE_WAIT 表示被动关闭。
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
5.3 slabtop命令
可以查看到densty、flip、sock_inode_cache、TCP四个内核对象
Active / Total Objects (% used) : 453512 / 464623 (97.6%)
Active / Total Slabs (% used) : 9031 / 9031 (100.0%)
Active / Total Caches (% used) : 94 / 121 (77.7%)
Active / Total Size (% used) : 114250.87K / 118810.99K (96.2%)
Minimum / Average / Maximum Object : 0.01K / 0.25K / 8.00K
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
51120 51120 100% 0.13K 852 60 6816K kernfs_node_cache
45780 42981 93% 0.19K 1090 42 8720K dentry
42900 41833 97% 0.10K 1100 39 4400K buffer_head
30888 30888 100% 0.20K 792 39 6336K vm_area_struct
25728 25728 100% 0.06K 402 64 1608K anon_vma_chain
24732 24467 98% 0.59K 458 54 14656K inode_cache
24448 24448 100% 0.03K 191 128 764K kmalloc-32
23680 21298 89% 0.25K 370 64 5920K filp
15040 14893 99% 0.50K 235 64 7520K kmalloc-512
14076 14076 100% 0.09K 306 46 1224K anon_vma
13632 13488 98% 0.06K 213 64 852K kmalloc-64
12800 12800 100% 0.02K 50 256 200K kmalloc-16
10752 10752 100% 0.07K 192 56 768K Acpi-Operand
9216 9216 100% 0.01K 18 512 72K kmalloc-8
8624 6904 80% 0.57K 154 56 4928K radix_tree_node
8568 8568 100% 0.04K 84 102 336K Acpi-Namespace
8280 7242 87% 1.05K 276 30 8832K ext4_inode_cache
7424 7168 96% 0.25K 116 64 1856K skbuff_head_cache
7344 6853 93% 0.66K 153 48 4896K proc_inode_cache
7224 7009 97% 0.19K 172 42 1376K cred_jar
5504 5504 100% 0.12K 86 64 688K pid
5304 5304 100% 0.04K 52 102 208K ext4_extent_status
4620 4548 98% 0.09K 110 42 440K kmalloc-96
4536 4536 100% 0.19K 108 42 864K kmalloc-192
4048 4048 100% 0.69K 88 46 2816K sock_inode_cache
3552 3496 98% 1.00K 111 32 3552K kmalloc-1024
3400 3400 100% 0.05K 40 85 160K ftrace_event_field
5.4 ip
ip 命令可以告诉你很多网络连接配置和状态的信息:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
inet 192.168.0.24/24 brd 192.168.0.255 scope global dynamic enp0s25
valid_lft 57295sec preferred_lft 57295sec
inet6 fe80::2c8e:1de0:a862:14fd/64 scope link
valid_lft forever preferred_lft forever
这个系统上的两个接口 - 环回(lo)和网络(enp0s25)——显示了很多统计数据。 lo接口显然是环回地址loolback。 我们可以在列表中看到环回 IPv4 地址(127.0.0.1)和环回 IPv6(::1)。
而普通的网络接口更有趣, 为什么是 enp0s25 而不是 eth0!
新的命名方案被称为“可预测的网络接口Predictable Network Interface”。 它已经在基于systemd 的 Linux 系统上使用了一段时间了。 接口名称取决于硬件的物理位置。 en 仅仅就是 “ethernet” 的意思, 就像 “eth” 用于对应 eth0, 一样。 p 是以太网卡的总线编号, s 是插槽编号。 所以 enp0s25 告诉我们很多我们正在使用的硬件的信息。
<BROADCAST,MULTICAST,UP,LOWER_UP> 这个配置串告诉我们:
说明 | |
---|---|
BROADCAST | 该接口支持广播 |
MULTICAST | 该接口支持多播 |
UP | 网络接口已启用 |
LOWER_UP | 网络电缆已插入, 设备已连接至网络 |
列出的其他值也告诉了我们很多关于接口的知识, 但我们需要知道 brd 和 qlen 这些词代表什么意思。 所以, 这里显示的是上面展示的 ip 信息的其余部分的翻译。
说明 | |
---|---|
mtu 1500 | 最大传输单位(数据包大小)为1,500字节 |
qdisc pfifo_fast | 用于数据包排队 |
state UP | 网络接口已启用 |
group default | 接口组 |
qlen 1000 | 传输队列长度 |
link/ether 00:1e:4f:c8:43:fc | 接口的 MAC(硬件)地址 |
brd ff:ff:ff:ff:ff:ff | 广播地址 |
inet 192.168.0.24/24 | IPv4 地址 |
brd 192.168.0.255 | 广播地址 |
scope global | 全局有效 |
dynamic enp0s25 | 地址是动态分配的 |
valid_lft 80866sec IPv4 | 地址的有效使用期限 |
preferred_lft 80866sec IPv4 | 地址的首选生存期 |
inet6 fe80::2c8e:1de0:a862:14fd/64 | IPv6 地址 |
scope link | 仅在此设备上有效 |
valid_lft forever IPv6 | 地址的有效使用期限 |
preferred_lft forever IPv6 | 地址的首选生存期 |
您可能已经注意到, ifconfig 命令提供的一些信息未包含在 ip a 命令的输出中 —— 例如传输数据包的统计信息。 如果您想查看发送和接收的数据包数量以及冲突数量的列表, 可以使用以下 ip 命令:
$ ip -s link show enp0s25
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
224258568 418718 0 0 0 84376
TX: bytes packets errors dropped carrier collsns
6131373 78152 0 0 0 0
另一个 ip 命令提供有关系统路由表的信息。
ip route show
default via 192.168.0.1 dev enp0s25 proto static metric 100
169.254.0.0/16 dev enp0s25 scope link metric 1000
192.168.0.0/24 dev enp0s25 proto kernel scope link src 192.168.0.24 metric 100
ip 命令是非常通用的。 您可以从 ip 命令及其来自Red Hat[1]的选项获得有用的备忘单。
via: https://www.networkworld.com/article/3262045/linux/checking-your-network-connections-on-linux.html