您现在的位置是:首页 > 正文

【杂谈】网络修复杂谈

2024-01-30 21:22:09阅读 0

前言

断网,是仅次于断水、断电的危机,对于部分依赖于网络的人来说,可能重要性更加突出。这里主要谈一谈网络修复的方法与一些常见的故障。

正题

首先要知道怎么修复网络,就需要大致了解网络的运作方式,正如一个能够装机的人要会拆机、能够做网络防御的人要懂得网络攻击的原理。这里主要通过对几个名词的解析来大致描述网络的运作方式。

由于这里只打算大致讲一下网络的工作方式,过多的说明可能比不上形象的比喻。这里,我们把网络比作一个小区,假设这个小区每个房子都被编上了号码,可以通过这个号码快速、方便的找到对应的房间,然后每个房间都有一个名字,譬如说“花果山小区水帘栋王者之户”,这里我们特地不包含数字进去(现实中都是有编号的),是为了说明根据这个名字我们难以进行快速、准确的查找到指定的房间。如果这个房子主人没有换那么我们就能找到正确的要找的人,然而如果换了呢?那么我们可以通过房间主人的身份证进行确认,只要身份证不是伪造的或者别人的,那么找到的就是正确的。

这里,类比到网络中,我们的房间名“花果山xxx”就是一个主机名,房间的编号就是一个IP地址,而身份证则是对应的物理地址。

物理地址是有硬件自身因素决定的,一般不会变而且唯一,就像身份证一样,国家发行的,发了以后身份证号就不会变了。而ip地址则是电脑动态或者静态注册的,需要通过局域网相关服务器(DHCP服务器)的认证,就像你拿着身份证去办房产证一样,动态就是问业务员给我随便来一套舒服的房间,房间号由业务员“智能”分配,而静态则是“业务员,我就要着一个号码,铁了心了,别的都不要”。这实际上是ip的两种获得的途径,同时也引入DHCP服务器的概念(干什么吃的?管理分配ip的)。如果对自己的房间号不满意可以要求退了这个房间(退房无条件成立),然后换一个,因此这里可以看到,ip地址来确定一台电脑是暂时性的,譬如说一个满载的wifi上一个客户端断线,另外一个马上连上补上空缺,那么那个ip就更换了主人,就像你退房了,然后别人住进了这个房间,房间“易主”了。而主机名呢,则是你给自己的主机起的一个“独一无二”的名字(或者说在当前局域范围内保证不会与其他可达主机同名),为了确保独一无二,需要进行“注册”,譬如说服务器的域名注册,比如说www.baidu.com。

但是我们又知道,去访问一个网站是可以通过域名直接访问的,就像通过房间的名字可以找到房间,但是这个过程是怎么实现的呢?为了保证能高效查找,我们可以建立一个映射表,一个房间号对应一个房间编号(事实上就是这么做的),一个域名则是对应一个ip,通过域名可以直接找到ip,有了ip就可以方便快速的找到主机建立连接了。但是要不要每个计算机都用一个超大的表去存储“域名——ip”这个键值对呢?这样显然会造成巨大的浪费,而且在映射更新时(有的ip换域名了或者域名绑定了新的ip之类的)要发送大量的数据包,因为存在许多公共的键值对,只要存储在一个公共的地方就好了,这个地方对于所有计算机公开可访问,好的,于是DNS服务器就这样诞生了:我们使用一台dns服务器负责一片区域的主机的“域名——ip”映射关系,只要丢域名进去查询,就会返回对应的ip地址,这个过程有个专业的术语(DNS解析)。另一方面,我们有一些非公用的域名和ip对,或者想要获得与DNS服务器不同的映射关系,因此,我们需要一个文件(就是之前说的超级大的文件,这里因为只要存储几个特殊的映射就行了,所以很小)来存储它们,于是hosts文件就诞生了。还有一方面,如果我的电脑长期访问一个网站或者几个网站,那么我要每次访问都去DNS服务器查一下吗?服务器肯定会有意见,我们可以先把这些常用的网站的解析结果缓存起来,过一段时间失效了再去查,于是DNS缓存又诞生了。值得补充的是,DNS服务器本身也是一台电脑,而且存储量有限,实际上有很多DNS服务器,分为多级,上一级向下一级服务器提供DNS解析,也就是说,当下一级的DNS服务器解决不了了(自己也找不到这个域名的键值对),就向上级服务器请求支援,这样递归下去,直到顶级DNS服务器都解决不了,则返回域名不存在错误提示。总结一下,DNS查询的优先级:hosts文件>DNS缓存>DNS下级服务器>DNS上级服务器。

代理和VPN:代理简而言之就是一个中间人,譬如说我要买到北美的东西,自己又无法飞跃过去,那么需要无数的中间商人为我运过来,然后我如果要往那边投递什么多西也可以仍中间人的快递商为我寄送过去,实现通信。原来的直接通信是一种方式,通过中间人又是一种方式。两种方式选择一种,如果选择了一种方式,但是这种方式又不可达(譬如说中间人罢工了,代理服务器崩掉了),就会出现使用选择使用代理的都网络中断的情况。而VPN则是相当于私人隧道的东西,譬如说通过网络连接大洋彼岸,然后使用网络来通信,同样如果选择了不可用的VPN那么也会出现网络中断的情况。

通过对以上几个名词的解析,我们大概了解了联网以及上网是怎么回事了,首先我需要加入这个网络(连WIFI或者接有线),其次我需要获得一个合法的ip,然后才能建立通信。在上网时,我们在浏览器输入一个域名,首先通过一系列DNS解析获得对应主机的ip,然后两个ip之间建立通信,网络连通。

OK,原理了解了这里以后,就可以针对中间的环节进行分析了,网络故障的原因就是这条链出现了断路。

断路各层分析:

联网过程:

未加入网络:网线没插、网络不可用(譬如说把一个没开通网络的网线插进去)、网卡炸了、驱动炸了等,都直接导致无”已连接“字样出现等。

未正确获取ip:ip冲突(静态ip设置为已分配出去的ip或者动态分配出现差错,一个网段中不允许相同的ip,所以对方使用正常而你无法使用,特点为显示为“受限”)等。

已获取ip但是ip被ban:譬如说登录校园网wifi、宽带才能上网(可以简单的理解为没有登录被防火墙ban了,登录后放行)、某些绑定mac的路由认证等。

上网过程:

DNS解析出错:DNS解析的各个环节都可能出错。

浏览器或者系统代理、VPN设置出错:设置了不可用的代理或者VPN。

防火墙设置出错:被防火墙拦截。

正常工作需要使用的端口被禁:闭关锁国怎样对外交流?

服务禁用或者服务、应用程序出错:软件自身原因导致不能联网之类、winsock配置出错(winsock是windows为应用提供的网络访问操作的接口,一旦出错可能一大批应用都无法联网)。

原因分析完毕,开始寻求解决措施:

要修复一个故障,有以下几种思路:

1.还原到出问题之前的时候,变回你原来的样子!(时光倒流)

2.直接卸载重装,用新的可用的替换原来不可用的。(从头来过)

3.锁定问题的引起源头,实施定点修复。(真×修复)

其中第一点是完全看用户有没有这个备份的好习惯,如果有近期备份将会很方便,以极小的代价快速解决问题;

第二点则是万金油,不管你的旧(软件、系统)怎么样,换成新的,保证新的能用就呆胶布(不过对用户的影响最大);

第三点则是对用户比较友好的,但是对技术人员则是不那么友好,要求技术人员有较强的查找和解决问题的能力,不过这才是所谓“技术人员”,在“技术人员”中,有一类是工具boy,另一类是真×技术人员,工具boy只要知道怎么用工具(譬如说360断网急救箱之类的)就ok了,甚至原理可以完全小白,缺点就是只能处理工具所能处理的问题,整个人就是几件工具的集合;而真×技术人员则是真正处理问题的人,工具boy的工具也是真×技术人员的作品,所以这类人是真正伟大的人。

这里前两点我们就直接跳过了,没有什么技术含量,直接对第三点进行分析。

可以看到网络出现故障存在诸多原因和影响因素,但是经过分析,可以划分为不同层次的问题。同样,要解决问题,首先要锁定问题的根源出在哪个层次上。这里有一个经常被提起的ping检测法,可以进行不同层次的诊断检测,可以自上层向下层诊断,也可自下层向上层诊断,这里讲自下向上诊断。

ping命令这里我们不需要使用任何附加参数,仅仅诊断网络连通直接ping ip/域名即可。

1. ping 127.0.0.1,127.0.0.1是本机的回路地址,即localhost,是无论是否联网只要机器网络协议栈运作正常都可以ping通,该操作可以诊断电脑的tcp/ip协议栈是否正常运作,如果不正常卸载重装即可,还有可能是网卡出现松动、网卡损坏等物理因素问题。

2. ping 本机ip,本机ip可以用ipconfig查看,也可以在“网络连接与共享”中查看,该操作可以查看本机ip是否分配正确,如果ping不通,那么ip不可用或者ip冲突,首先查看ip使用的是动态ip还是静态ip,静态ip需要手动更改为可用的ip地址;动态ip则只需要运行ipconfig /release & ipconfig /renew释放并重新请求ip,通过将网卡禁用后启用也可以达到同样的效果;另一方面,如果网卡驱动出现问题也会导致该问题或者直接ipconfig显示没有ip,这时需要去设备管理器查看驱动运行情况,如果有x或者!号则需要启用或者卸载重装。

3. ping 网关ip,网关是在局域网与广域网之间的关口,譬如说某个学校内部可以存在局域网,学生可以方便访问校内资源,但是如果要访问百度等不在学校内的网站就需要一个具有路由功能的设备去转发它,这个就是网关。网关ip一般是路由器的LAN口ip,譬如说192.168.1.1就是家里路由的ip,也是网关ip。该操作可以诊断机器与网关的网络连通情况,如果ping不通,可能是网关ip设置出现错误,重新设置为正确的即可,还有一种情况是通过该ip找到的不是网关主机(ip与物理地址的映射出错,这里有个专业术语叫arp表,简而言之arp表就是存储在我的电脑里面某个ip对应的是哪一台电脑),还有可能是被网关禁止ping了。

4. ping 外部网络, 首先直接ping 114.114.114.114等确保能够在正常情况下ping通的ip地址,该操作检测与外网的连通情况,如果前面都能ping通,而这里ping不通,说明

a.故障有可能发生在网关到外网的区段内。

b.VPN设置出错,VPN与代理往往一起提及,但是这里有必要分开来,因为代理一般用于TCP协议,而ping采用的是ICMP协议,代理对ping一般不会造成影响,而VPN则会产生影响,如果设置了不可用的VPN,那么网络将会彻底瘫痪,而设置了不可用的代理则只会导致TCP协议的应用访问网络瘫痪,而其他协议的则正常不受影响(如QQ聊天采用的UDP协议)。

      然后ping www.baidu.com等确保能够ping通的网址,如果直接ping ip可以ping通,而ping 网址出错,说明很可能是DNS解析出错,也就是www.baidu.com可能被解析为了错误的ip,解决方法:重新设置dns服务器ip,确保dns服务器设置正确(这里114.114.114.114和8.8.8.8是确保可用的DNS服务器—>通过ipconfig /flushdns清空DNS缓存—>查看本机hosts文件是否出现异常字段,该问题往往只会导致hosts文件中少数几个网站无法ping通,不会对于所有网站都无法ping通。


通过以上操作,我们可以诊断系统层的网络故障问题,其中前3项都可能与驱动和网卡相关,因此确保网卡驱动正常工作十分重要。以上操作都没有问题,那么可以保证主机是可以访问网络的,接下来进入服务和应用层的分析:


5.检测端口问题:有些网络端口(如80端口)关闭,通过netstat -ano命令可以查看端口开放情况。

6.winsock配置错误:winsock配置错误会导致使用winsock应用无法访问网络,通过netsh winsock reset可以重置winsock配置。

7. 防火墙问题:防火墙的设置不当可能造成网络被拦截,这里通过在防火墙设置中找到错误的规则或者直接恢复防火墙即可,netsh advfirewall reset也可以直接重置防火墙设置。

8.应用本身的问题:应用相关系统文件丢失、配置错误都有可能导致这个问题,最有效、省事的措施就是恢复至默认设置,如果还不行就彻底卸载然后重装。由于用户与浏览器的交互比较多,浏览器可能只是因为设置了不可用的代理(在高级设置里面可以找到代理设置选项),在这种情况下只要把代理设置正确或者取消代理即可。


以上即是排查网络问题的大致路线,前提是已经连上网(显示“已连接或受限“),当然,有些情况下是网络连接不了、返回错误数字,这时的措施为:

1.检测驱动,驱动出问题网络无法连接

2.检测网线、接口正常

3.检测网卡正常

4.检测网络相关服务已经开启(有些服务是连网所需的,如wlansvr服务,这些服务没有开启会出现问题,在任务管理器—服务中可以找到)。

5.返回错误数字直接搜索错误数字寻找解决措施即可。

9.还有一些问题,如网络连接图标消失、wlan连接显示不见了等,图标消失可以在个性化->任务栏中找到设置,连接消失则可能是在”网络适配器设置"中禁用了。


总结

总而言之,引起网络故障的因素很多,但是总的来看,都主要集中在硬件、驱动、协议、ip获取、dns解析、服务、代理和vpn上,其中驱动是问题的一大宗,很多网络问题都是驱动出错引起的,因此可以作为重点排查对象,然后ip和dns设置不当、dns缓存错误也是常见的问题,代理设置错误往往只局限在某个设置了代理的浏览器上,可以很快排查解决。用到的命令汇总:

ipconfig /all 查看ip、dns等

ipconfig /release 释放ip

ipconfig /renew 申请新的ip

ipconfig /flushdns 刷新dns缓存

netsh interface ipv4 reset 重置ip配置(一个顶楼上release和renew两个命令)

netsh advfirewall reset 重置防火墙设置

netsh winsock reset 重置winsock

ping ip或域名 检测网络连通

(还有部分通过命令设置ip和dns的可以在GUI下很方便的解决,这里不做多说)


ps.其中涉及到了部分网络协议的知识,博主对于这方面了解的还不深入,以上可能存在部分不准确或者谬误的地方,如果大家发现了也请批评指正。

网站文章

  • Linux与Windows共享文件、互传文件

    Linux与Windows共享文件、互传文件

    1.设置共享目录通过虚拟机,把一个windows目录共享,让linux可以访问这个目录2.复制文件夹

    2024-01-30 21:22:02
  • MySQL 事务

    在数据修改之前结果就可以被其他事务查看,不可以解决任何问题。

    2024-01-30 21:21:35
  • android后台如何获取客户端传来的值,Android:使用OkHttp框架与后台通讯、获取数据...

    android后台如何获取客户端传来的值,Android:使用OkHttp框架与后台通讯、获取数据...

    摘要:本文介绍了Android应用如何与服务器通讯的一些机制,并分享了笔者的一些开发经验与技巧,经过具体的代码描述OkHttp框架的使用,适合初学者。前端对于初学者来讲,先后端一手抓很常见,若是你想要...

    2024-01-30 21:21:16
  • 计算机主机板开机原理与维修,主机板损坏电脑会出现什么现象

    计算机主机板开机原理与维修,主机板损坏电脑会出现什么现象

    主机板损坏电脑会出现什么现象以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!主机板损坏电脑会出现什么现象音效卡坏了不造成开...

    2024-01-30 21:21:08
  • Android 平滑和立体翻页效果2

    Android 平滑和立体翻页效果2

    http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt2/Android launcher 的平滑和立体翻页效果我们这里把 Android launcher 程序的 Workspace 相关的代码抽取出来,以一个比较简单的代码来展示 launcher 程序是如何实现多页以及不同页面之间的切换效果。本示例代

    2024-01-30 21:20:40
  • 配置zabbix邮件报警

    配置zabbix邮件报警

    管理–>报警媒介类型–>Email进行配置,点击更新其中密码不是登录密码,是授权码点击测试查看邮箱修改默认报警模板。

    2024-01-30 21:20:33
  • Java中4大基本加密算法解析

    简单的java加密算法有:BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码)1. BASE64Base64是网络上最常见的用于传输8Bit字节代...

    2024-01-30 21:20:25
  • Jmeter+ SeureCRT + Pinpoint

    1、环境配置[相关操作]下载jdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html配置java环境变量#配置javaJAVA_HOME=/Library/Java/JavaVirtualMa...

    2024-01-30 21:20:18
  • 程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结

    程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结

    程序员面试、算法研究、编程艺术、红黑树、机器学习5大经典原创系列集锦与总结 (七月在线:https://www.julyedu.com/,面试 & 算法 & 机器学习在线课程)作者:J...

    2024-01-30 21:19:48
  • ES6中如何求两个数组的交集

    ES6中如何求两个数组的交集

    这两种方法都可以求解两个数组的交集,具体选择哪种方法取决于个人偏好和具体的应用场景。求两个数组的交集是指找出两个数组中共同存在的元素。在ES6中,我们可以使用一些数组方法和语言特性来实现这个功能。是一...

    2024-01-30 21:19:42