Iawen's Blog

我喜欢这样自由的随手涂鸦, 因为我喜欢风......

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