本文主要是介绍网络故障排查和tcpdump抓包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网络故障排查:
- ping一台服务器不通,你如何排查
- 检查本机ip地址设置 网关和dns服务器是否设置正确 或者ip地址冲突
- 能否上网 看路由器是否有问题 ping
- 服务器是否运行
- 服务器禁止ping 防火墙设置 iptables -A INPUT -P ICMP -j DROP
- iptables -D INPUT -P ICMP -j DROP
- 用户不能访问服务器 怎么排查
-
- 检查用户网络连接
- 检查服务器是否运行(数据库 端口nc)
- app是否运行 数据库运行等 防火墙
- 机房 运营商
-
- 如何知道服务器开启了哪些端口
- nc nmap nerstat ss lsof
- #!/bin/bash
- for i in {0..65535}
- do
- (if ping -c 1 -w 1 192.168.205.141 $i &>/dev/null ;then
- echo $i is used |tee -a ip_use.txt
- else
- echo $i is not used|tee -a ip_nouse.txt
- fi)&(在后台启动一个子进程)
- wait(父进程执行完代码等待子进程也执行在退出)
- done
- tee: command |tee 文件名 将输出写入到文件
- -a 追加到末尾 不覆盖内容 不写a会覆盖
- [root@k8s-master-1 kernel]# lsof -i:22
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- sshd 988 root 3u IPv4 27937 0t0 TCP *:ssh (LISTEN)
- sshd 988 root 4u IPv6 27939 0t0 TCP *:ssh (LISTEN)
- nc nmap nerstat ss lsof
- 如何知道一个局域网里有哪些ip地址在使用
- 遍历ping -c -w 1
- fping -g 192.168.1.1-254
- 或者for循环
- #!/bin/bash
- for i in {1..254}
- do
- (if ping -c 1 -w 1 192.168.205.$i &>/dev/null ;then
- echo 192.168.205.$i is used |tee -a ip_use.txt
- else
- echo 192.168.205.$i is not used|tee -a ip_nouse.txt
- fi)&(在后台启动一个子进程)
- wait(父进程执行完代码等待子进程也执行在退出)
- done
5.如何知道基于王里某个ip是否有冲突
查看输出结果中是否出现了该IP地址,如果有多个条目对应同一个IP地址,则可能存在IP地址冲突。
[root@k8s-master-1 add]# arping -I ens33 192.168.159.136
ARPING 192.168.159.136 from 192.168.159.144 ens33
Unicast reply from 192.168.159.136 [00:0C:29:51:46:32] 1.601ms
Unicast reply from 192.168.159.136 [00:0C:29:51:46:32] 0.957ms
Unicast reply from 192.168.159.136 [00:0C:29:51:46:32] 1.011ms
Unicast reply from 192.168.159.136 [00:0C:29:51:46:32] 1.022ms
Unicast reply from 192.168.159.136 [00:0C:29:51:46:32] 0.986ms
Unicast reply from 192.168.159.136 [00:0C:29:51:46:32] 0.991ms
Unicast reply from 192.168.159.136 [00:0C:29:51:46:32] 1.020ms
^CSent 7 probes (1 broadcast(s))
Received 7 response(s)
如何知道目前的网络是否稳定或者速度是否快
ping www.baidu.com 观察ping命令的响应时间和丢包率
[root@k8s-master-1 add]# ping www.baidu.com
PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=128 time=23.7 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=128 time=24.6 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=128 time=28.3 ms
服务器的性能问题
如何知道目前的服务器各种指标的情况?服务器是否繁忙(load average)?
cpu 网络io 磁盘io(df 挂载 lsblk几块磁盘 iostat) 内存
top htop 默认基于cpu使用率排序
P(processor处理器) M (基于内存排序)
[root@k8s-master-1 ~]# top
top - 15:09:18 up 5:37, 2 users, load average: 0.84, 1.34, 1.51
Tasks: 166 total, 1 running, 165 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.4 us, 3.4 sy, 0.0 ni, 89.7 id, 0.0 wa, 0.0 hi, 3.4 si, 0.0 st
KiB Mem : 3861300 total, 395440 free, 1161244 used, 2304616 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2447520 avail Mem
PR 进程的优先级 20- -19 默认都为20
NI -》nice 值 可通过修改ni 修改PR 默认0 值越小优先级越高
us --》user processes 用户态进程消耗的cpu的资源的比例
sy --》system processes(内核态的进程消耗的cpu的资源的比例)
id -->idle 空闲
hi --》hard interrupt --》硬件导致的程序中断
si --》soft interrupt --》软件导致的程序中断
shift+> top命令翻页
nice -n -10 vim feng.txt 启动新进程设置nice
renice -5 -p(进程号) 1234 每次拿20加减数字 重新调整以运行的进程的优先级
CFS 完全公平调度算法 2516
时间片cd /proc/sys/kernel/sched_rr_timeslice_ms 100ms
按f可以调出可供选择的字段(列)field
有*会显示出来 上下方向键选中后 敲空格就会加上* 然后可top看到
P last used cpu
h 获得帮助 help k 杀进程 r 重定义nice值
load average:0.25 1.64 2.35
过去一分钟 五分钟 十五分钟 系统平均负载 有多少进程在cpu run
系统平均负载是处于可运行状态或不可中断状态的 正在等待的进程的平均数量
是按照1个cpu核心算的 一般一到五 都还不是很忙 最大值 核心数*5
cache : disk—cache-memory 读
buffer:memory-buffer-disk 写
util:繁忙度 一秒中有多少百分比的时间用于I/O操作。
[root@k8s-master-1 kernel]# iostat -x 监控系统 I/O 设备负载以及 CPU 使用情况
- -c: 显示CPU使用情况。
- -d: 显示磁盘I/O统计信息。
- -x: 显示详细的磁盘I/O统计信息。
- -k: 以KB为单位显示I/O信息。
- -m: 以MB为单位显示I/O信息。
- -t: 显示系统负载平均值。
Linux 3.10.0-1160.119.1.el7.x86_64 (k8s-master-1) 2024年09月07日 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
4.03 0.00 5.44 0.06 0.00 90.48
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
scd0 0.00 0.00 0.00 0.00 0.20 0.00 114.22 0.00 2.22 2.22 0.00 1.83 0.00
sda 0.01 0.09 18.94 7.29 1000.90 104.88 84.30 0.05 2.12 2.66 0.72 0.33 0.86
dm-0 0.00 0.00 18.67 7.38 994.28 104.08 84.33 0.06 2.14 2.69 0.74 0.33 0.85
dm-1 0.00 0.00 0.02 0.00 0.41 0.00 48.19 0.00 0.31 0.31 0.00 0.19 0.00
dm-2 0.00 0.00 0.03 0.00 0.22 0.40 45.66 0.00 0.41 0.28 4.75 0.29 0.00
qps 每秒钟的查询次数
tps 每秒钟传输次数
rrqm/s wrqm/s 每秒合并的读写请求数量
r/s w/s 每秒完成的读写操作数
glances 全能查看各项指标
看机器内存 free -h
[root@k8s-master-1 kernel]# nc -z(端口扫描 只发送请求不发送给数据) -w(超时时间s) 1 120.24.223.108 443
Connection to 120.24.223.108 443 port [tcp/https] succeeded!
-p 指定监听端口
- 如何禁止别人访问我们的web服务或者数据库服务?
- iptables
- 如何禁止某个ip地址或者某个网段的ip访问服务器
如何抓包分析?
tcpdump
tcpdump -i ens33 -nn host 192.168.159.144 and port 22
tcpdump -i ens33 -nn src host 192.168.159.144 and dst port 22
tcpdump -i ens33 -nn src host 192.168.159.144 and \(dst port 22 or sst port 80 \) -vv
tcpdump -i ens33 tcp and dst port 22 and src net 192.168.159.0/24
tcpdump -i ens33 -p icmp -nn
-I interface指定抓包的接口
-n 以数字形式显示 不显示域名 number 不进行dns解析
-nn 不进行任何形式的名称解析
-vv显示更加详细信息
-F 清除规则 默认规则不会改
-v 显示匹配
-s 指定源ip -d 指定目的ip
host <hostname_or_ip>: 捕获与指定主机名或IP地址相关的数据包。
net <network>: 捕获与指定网络相关的数据包。
port <portnum>: 捕获与指定端口相关的数据包。
src <hostname_or_ip>: 捕获源地址是指定主机名或IP地址的数据包。
dst <hostname_or_ip>: 捕获目的地址是指定主机名或IP地址的数据包。
-i 数据进入的接口 -o 数据出去的接口
ipvs有规则链chain(对数据包进行过滤处理): input,output,forward(处理转发数据包),postrouting(在进行路由选择后处理数据包),prerouting 不指定的话默认所有链
filter表的INPUT、OUTPUT、FORWARD链;
nat表的PREROUTING、POSTROUTING链
如果转发数据(充当路由器),路径为prerouting->forword->postrouting
规则表:raw表,mangle表,nat表(网络地址转换),filter表(数据过滤 默认) 表存放链,链放规则
哈希函数:任意个字符的输入经过哈希函数处理后得到固定长度长度字符串的输出
输出的字符串称呼hash值(摘要值),ipvs采用了所以支持大规模,查找速度快
iptables [-t 表名默认filter] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转] -A INPUT
[root@localhost ~]# iptables -t filter -A(在末尾加apppend) INPUT -p(协议) tcp -j(jump跳转) ACCEPT (放行)DROP(丢弃数据包)REJECT(拒绝)LOG
[root@localhost ~]# iptables -I(insert在第一条插入) INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
[root@localhost ~]# iptables -P(policy指定规则链默认策略) INPUT DROP
iptables -L -n -v 看全部详细
-N 创建自定义链 -X 删除自定义链
[root@localhost ~]# iptables -L(list) INPUT --line-numbers(--line显示编号)-v
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT tcp -- anywhere anywhere
-F 清除filter表所有规则
-i(在开始insert) INPUT --dport --sport
[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
端口匹配
使用“--sport 源端口”、“--dport 目标端口”的形式
采用“端口1:端口2”的形式可以指定一个范围的端口
只允许访问本机80 443 22 3306端口 其他的禁止访问
[root@web-3 ~]# cat sc.sh
#!/bin/bas
/usr/sbin/iptables -F -t filter
/usr/sbin/iptables -A INPUT -p icmp -j SANCHUANG
/usr/sbin/iptables -A INPUT -p tcp -j SANCHUANG
#在SANCHUANG自定义链里添加规则
/usr/sbin/iptables -A SANCHUANG -p icmp -j LOG
/usr/sbin/iptables -A SANCHUANG -p icmp -j DROP
/usr/sbin/iptables -A SANCHUANG -p tcp --dport 80 -j ACCEPT
/usr/sbin/iptables -A SANCHUANG -p tcp --dport 443 -j ACCEPT
/usr/sbin/iptables -A SANCHUANG -p tcp --dport 3306 -j ACCEPT
/usr/sbin/iptables -A SANCHUANG -p tcp --dport 22 -j ACCEPT
/usr/sbin/iptables -A SANCHUANG -p tcp --dport 6443 -j ACCEPT
/usr/sbin/iptables -P INPUT DROP
自定义链是如何使用的:docker和k8s的时候 背后都会自动取创建相关的自定义和规则
[root@web-1 ~]# iptables -A INPUT -p icmp -j SANCHUANG
[root@web-1 ~]# iptables -A INPUT -p tcp -j SANCHUANG
这篇关于网络故障排查和tcpdump抓包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!