网络排错需要具备的基础
1. 了解网络通信的基础设备和常用协议
像交换机、三层交换机、路由器、防火墙这些最基本的网络设备应该要有些了解,尤其是它们对应的OSI层次以及作用,比如普通的二层交换机对应OSI七层模型中的数据链路层,它可以隔绝冲突域,同时可能通过虚拟局域网技术(VLAN)来隔绝广播域,二层交换机通过二层地址即MAC地址来实现数据帧的转发;再比如路由器,它对应网络层,可以提供路由寻址的功能等等。
TCP/IP协议栈里面的协议,比如DNS、TCP、UDP、IP、ICMP、ARP,这些最基本的应该得知道。不需要事无巨细,但至少对于这些协议的基本功能是必须得要知道的。
2.了解网络的基本架构
一般企业网络的基本架构都是这样的:接入层–汇聚层–核心层–网络出口。
如果网络环境比较庞大,汇聚层和核心层都会有,而我们这个张图,就没有汇聚层。但是排错的底层逻辑都是一样。
3.掌握常用网络排错命令
ping:用来测试网络间的连通性和连接速度信息
ifconfig:查看主机的网络配置
route:查看或修改主机和网络的路由信息
nslookup:查询DNS的记录,查看域名解析是否正常
traceroute:定位到目标主机之间的路由信息
ethtool:查询和设置网卡参数
4.网络排错原则:关注数据走向
网络排错,就是要判断网络哪里出了问题,因此,你就必须要知道数据的走向。网络排错思路,其实就是通过追踪数据的走向来一步步缩小网络故障点的。这也是为什么需要了解网络基本架构的原因。
网络排错基本思路
基本思路如下:
步骤一:检查物理链路是否有问题
步骤二:查看本机IP地址、路由、DNS的设置是否有问题
步骤三:测试网关或路由器的通畅情况。先测网关然后再测路由器,一级一级地测试IP)
步骤四:测试ping公网ip的通畅情况(平时要记几个外部公网ip)
步骤五:测试DNS的通畅情况,可以直接ping网站地址
举例一
为了更好的讲述网络排错的过程和思路,假设我们有下面的一个网络环境:
下面,我们就以上面这个网络环境为例子,详细介绍我们的网络排错思路,每一步要怎么做,每一步为什么要这样做以及这样做之后我们可以得到什么信息,都会做一个说明。
1.检查物理链路是否有问题
这一步是在做网络排错时必须要做的第一步!
不是每个人都可以去机房查看交换机的接线情况,所以这一步,我们排查的重点范围就应该放在如下面图所示的地方:
在这一步,下面几点是需要注意排查的:
网卡识别不到
网卡驱动加载失败
比如:光模块驱动加载失败:执行lspci |grep Eth能看到网卡在pci设备中,但是使用ifconfig -a命令,却找不到网卡,使用demsg可以看到以下出错信息:
ixgbe 0000:06:00.0: failed to load because an unsupported SFP+ module type was detected
光模块识别问题、光纤线接入问题
网线问题(水晶头、网线连接)
如果上面这几点排查都没有问题了,那么就是该网络环境中的其他设备问题了。这一范围的排查相对比较简单,因为只涉及到物理链路的连接问题。
2. 查看本机IP地址、路由、DNS的设置是否有问题
上面第一步,物理链路的排查没有问题了,也就是说,电脑接上网线之后,电脑有反应了,可以识别,但是网络还是不通,来到这一步,就应该先把注意的范围放在电脑的设置上面了。
这一步,我们关注的重点是:
(1) IP地址设置
如果采用的是DHCP自动获取的方法,那么这时候只需要看自己本机的设置上有没有开启自动获取IP的设置以及有没有开启相关的服务;如果用的是静态IP,那么就必须要注意IP地址的填写有没有错、IP地址的子网掩码有没有问题。
另外值得提的是,给电脑分配ip地址时,最好是绑定mac地址,避免用户私改ip地址,造成ip冲突。
一般可以用下面的命令查看:
(2) 路由设置
对于服务器、PC,一般是指默认网关的设置了;对于路由器本身或三层交换机,那就是静态路由或动态路由的设置问题了。
(3) DNS设置
主要是要确保所设置的DNS服务器地址到底有没有提供域名解析服务或者是否出现了故障,你得设置一个正确的DNS服务器地址或可以自动获取。
在windows上面你可以通过下面的命令查看:
3. 测试网关或路由器的通畅情况
先测网关然后再测路由器,一级一级地测试。
在上面的网络环境中,在网络通的情况下,我们在电脑上使用命令tracert -d命令,会得到下面的结果:
通过这个测试结果,我们可以清楚地知道电脑在访问互联网时,数据的走向情况:
根据这个数据走向,我们就可以得到一个重要的思路,就是根据数据走向来检测网络的通畅情况!因此,我们可以分两步:
(1) 先测试电脑到网关192.168.2.254的通畅情况
我们可以在自己的电脑上自己ping网关的地址,看是否有响应
一般这样的判断方法是比较快的,但有时候,无论怎样都ping不通,那么则可能有以下的几种情况:
- 网关设备做了禁止ping的设置
- 网关接口或网关设备出现故障
对于a,一般很少会在这些设备在做ping的限制操作,实在是没有太大的必要这样做,当然,网络安全等要求十分严格的除外。ping通192.168.2.254网关后,再ping一下172.16.13.1以确认电脑到整个网关设备都没有问题。
对于ping不通的时候,我个人还建议在电脑上执行如下操作:arp -a :网关地址和网关的mac地址。
即查看电脑本身有没有获取到网关的MAC的地址,显然,如果没有网关的MAC地址,那也是不可能ping通网关的,在排除了前面电脑设置的问题后,你可以猜测是网关设备出了问题,这时就可以联系网络工程师对网关设备进行测试了。
(2) 测试到其它路由器的通畅情况
前面一步没有问题了,也就是电脑到网关通信正常了,再测试网关到出口路由器的通畅情况:
这里,我们使用tracert -d命令就可以了:
当然,如果发现不通,那么则可能是下面的情况:
· 网关设备与路由器之间的物理链路问题
· 网关设备与路由器之间的设置问题,比如路由协议、接口配置之类的
出现上面的情况,那就是网络工程师的问题了,当然,如果你是网络工程师,应该要马上查看一下设备的状态,看是不是设备哪里出现问题了。
上面的步骤完成了,假设你的出口路由器设置是没有问题的,比如NAT与默认路由等的设置没有问题,那么我们大致可以知道,内网的一个基本通信是正常的(至少你的电脑和出口路由器的通信没问题),我们就要看看电脑到底能不能访问互联网了。
测试ping公网ip的通畅情况
来到这一步的时候,就说明前面三步是没有问题的,也就是说,本地局域网络的通信是正常的,这时要做的就是判断本地局域网络与外网(公网)之间的通信有没有问题了:
这里采取的是直接ping公网地址的方法,是为了排除DNS的影响(万一你的DNS设置又有问题),至于要ping什么样的公网地址,个人建议是,可以ping一些没有禁止ping的公共DNS服务器地址,比如114.114.114.114和8.8.8.8的:
这样之后,基本上就可以确定网络是没有问题的了。能ping通外网,说明网络是没有问题的,当然,这里并没有提到出口放置防火墙的情况,实际上,思路是一致的,但是,你需要考虑的是,你的访问数据有没有被防火墙给过滤掉,是数据出去的时候过滤了,还是数据回来的时候过滤了?由于还要涉及到防火墙的设置,这里就不再提及了,只是仍要注意这一点就是了。
测试DNS的通畅情况
如题,可以直接ping网站地址,看有没有回显IP地址,至于通不通是另外一回事,只要可以回显IP地址,那么DNS就没有问题了,不过这里仍然要说一下nslookup这个命令,这是一个非常好用的命令,
举例二:实际遇到的一些网络问题分析
1、缺少配置文件:Linux虚拟机上配置新增2个网口后,使用ifconfig只查到eth0
2、DNS设置问题:虚拟机无法访问github.local
3、代理设置问题:同网段地址无法访问
4、主机地址配置错误导致交换机环路
5、交换机静态路由配置:静态路由具有单向性,它仅为数据提供沿着下一跳的方向进行路由,不提供反向路由。所以如果想要使源节点与目标节点或网络进行双向通信,必须同时配置回程静态路由
6、防火墙设置问题:邮件服务器注册不上
7、交换机划分vlan,没把交换机网口划入vlan
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」