像交换机、三层交换机、路由器、防火墙这些最基本的网络设备应该要有些了解,尤其是它们对应的OSI层次以及作用,比如普通的二层交换机对应OSI七层模型中的数据链路层,它可以隔绝冲突域,同时可能通过虚拟局域网技术(VLAN)来隔绝广播域,二层交换机通过二层地址即MAC地址来实现数据帧的转发;再比如路由器,它对应网络层,可以提供路由寻址的功能等等
一般中小型企业网络的基本架构都是这样的:接入层–汇聚层–核心层–网络出口。
如果网络环境比较庞大,汇聚层和核心层都会有,像这里的话,一般小型网络,就直接没有汇聚层,不过思想是一样的。
下面讲的排错其实都是针对用户PC来说明的,事实上,数据中心中的网络排错也是类似的。不管网络环境多么复杂,其实简化下来跟这个都是差不多的。
网络排错,就是要判断网络哪里出了问题,因此就必须要知道数据的走向。
所以这个重要的原则是:关注数据的走向。
下面讲的网络排错思路其实就是通过追踪数据的走向来一步步缩小网络故障点的,因此,时刻记住这一点非常非常重要!这也是为什么上面需要了解中小型企业网络的基本架构了。
步骤一:检查物理链路是否有问题
步骤二:查看本机IP地址、路由、DNS的设置是否有问题
步骤三:测试网关或路由器的通畅情况。先测网关然后再测路由器,一级一级地测试IP)
步骤四:测试ping公网ip的通畅情况(平时要记几个外部公网ip)
步骤五:测试DNS的通畅情况,可以直接ping网站地址
示例图
例如网线是否连接正确,物理链路是否有问题 这一步是我个人认为在做网络排错时必须要做的第一步!
因为也许不是每个人都可以去机房查看交换机的接线情况,所以这一步,我们排查的重点范围就应该放在如下面图所示的地方:
在这一步,下面几点是需要注意排查的:
如果上面这几点排查都没有问题了,那么就是该网络环境中的其他设备问题了。这一范围的排查相对比较简单,因为只涉及到物理链路的连接问题。
查看本机配置,如ip地址和子网掩码是否设置正确 (ifconfig),默认网关是否设置正确 (route),域名服务器是否设置正确
然后要确认网卡本身是否能正常工作?利用ping工具可以确认这点。输入ping 127.0.0.1,然后看是否能正常ping通?这里的127.0.0.1被称为主机的回环接口,是TCP/IP协议栈正常工作的前提。如果ping不通,一般可以证实为本机TCP/IP协议栈有问题,自然就无法连接网络了。不过,出现这种现象的概率比较低。
要确认网卡是否出现了物理或驱动故障,使用ping本机IP地址的方式,如果能ping通则说明本地设备和驱动都正常。
如果采用的是DHCP自动获取的方法,那么这时候只需要看自己本机的设置上有没有开启自动获取IP的设置以及有没有开启相关的服务;如果用的是静态IP,那么就必须要注意IP地址的填写有没有错(一般网络管理人员给的)、IP地址的子网掩码有没有问题(这很重要,对于静态IP,很多人在这里设置错误)。
另外值得提的是,给电脑分配ip地址时,最好是绑定mac地址,避免用户私改ip地址,造成ip冲突。
一般可以用下面的命令查看:
对于服务器、PC,一般是指默认网关的设置了;对于路由器本身或三层交换机,那就是静态路由或动态路由的设置问题了。
主要是要确保所设置的DNS服务器地址到底有没有提供域名解析服务或者是否出现了故障,你得设置一个正确的DNS服务器地址或可以自动获取。
在windows上面你可以通过下面的命令查看:
要确认是否能ping通同网段的其他主机。这一步主要是确认二层网络设备(比如交换机或者HUB)工作是否正常。如果ping不通往往说明二层网络上出现了问题,可能涉及交换机的端口工作模式,vlan划分等因素
要确认是否能ping通网关ip。如果数据包能正常到达网关,则说明主机和本地网络都工作正常。
在上面的网络环境中,在网络通的情况下,我们在电脑上使用命令tracert -d命令,会得到下面的结果:
数据的走向情况:
根据这个数据走向,我们就可以得到一个重要的思路,就是根据数据走向来检测网络的通畅情况!因此,我们可以分两步:
(1) 先测试电脑到网关192.168.2.254的通畅情况
我们可以在自己的电脑上自己ping网关的地址,看是否有响应
一般这样的判断方法是比较快的,但有时候,无论怎样都ping不通,那么则可能有以下的几种情况:
对于第一种,一般很少会在这些设备在做ping的限制操作,实在是没有太大的必要这样做,当然,网络安全等要求十分严格的除外。ping通192.168.2.254网关后,再ping一下172.16.13.1以确认电脑到整个网关设备都没有问题。
对于ping不通的时候,我个人还建议在电脑上执行如下操作:arp -a :网关地址和网关的mac地址。
即查看电脑本身有没有获取到网关的MAC的地址,显然,如果没有网关的MAC地址,那也是不可能ping通网关的,在排除了前面电脑设置的问题后,你可以猜测是网关设备出了问题,这时就可以联系网络工程师对网关设备进行测试了。
(2) 测试到其它路由器的通畅情况
前面一步没有问题了,也就是电脑到网关通信正常了,再测试网关到出口路由器的通畅情况:
这里,我们使用tracert -d命令就可以了:
当然,如果发现不通,那么则可能是下面的情况:
出现上面的情况,那就是网络工程师的问题了,当然,如果你是网络工程师,应该要马上查看一下设备的状态,看是不是设备哪里出现问题了。
上面的步骤完成了,假设你的出口路由器设置是没有问题的,比如NAT与默认路由等的设置没有问题,那么我们大致可以知道,内网的一个基本通信是正常的(至少你的电脑和出口路由器的通信没问题),我们就要看看电脑到底能不能访问互联网了。
确认是否能ping通公网上的iP,如果可以则说明本地的路由设置正确,否则就要确认路由设备是否做了正确的nat或路由设置。
来到这一步的时候,就说明前面三步是没有问题的,也就是说,本地局域网络的通信是正常的,这时要做的就是判断本地局域网络与外网(公网)之间的通信有没有问题了:
这里采取的是直接ping公网地址的方法,是为了排除DNS的影响(万一你的DNS设置又有问题),至于要ping什么样的公网地址,个人建议是,可以ping一些没有禁止ping的公共DNS服务器地址,比如114.114.114.114和8.8.8.8的:
这样之后,基本上就可以确定网络是没有问题的了。能ping通外网,说明网络是没有问题的,当然,这里并没有提到出口放置防火墙的情况,实际上,思路是一致的,但是,你需要考虑的是,你的访问数据有没有被防火墙给过滤掉,是数据出去的时候过滤了,还是数据回来的时候过滤了?由于还要涉及到防火墙的设置,这里就不再提及了,只是仍要注意这一点就是了。
确认是否能ping通公网上的某个域名,如果能ping通则说明DNS部分设置正确。
工作中主要遇到的情况多是ip地址冲突或mac地址发生冲突了,一般还是多借助wireshark抓包查看。通过查看arp包所回应的mac地址是否是正确的设备地址以检测是否是ip地址发生冲突;过滤物理mac地址,查看是否存在不同ip的情况以检测是否mac地址发生冲突。
可以直接ping网站地址,看有没有回显IP地址,至于通不通是另外一回事,只要可以回显IP地址,那么DNS就没有问题了,不过这里仍然要说一下nslookup这个命令,这是一个非常好用的命令,我平常自己在网络排错时,基本上都会用到:
也可以像下面这样使用
使用nslookup命令,作用有二: