前言#

作为一名软件工程师,Linux相关的知识是一个不可或缺的技能点,而网络问题往往是初学者接触Linux时最先碰到的一只拦路虎,本篇博客将系统的讲解一个解决Linux网络问题的通用方法论,一个科学的方法论往往能达到事半功倍的效果。

本篇博客侧重点不是讲解计算机网络的相关知识,所以假定你有一定的网络基础,如果没有的话,可以先看看我文末的推荐书单。

本篇博客是基于Ubuntu 18.04来写的,使用 cat /etc/issue 可查看版本,对于其他版本的Linux发行版,部分命令可能会有所不同,但本质都是一样的。

整体图景#

首先,要解决网络问题,哪么你必须要了解网络的分层结构和拓扑结构,这会让你对整个网络有一个宏观的认知,对你定位问题有极大的帮助。

网络分层

网络分层和拓扑结构

  1. 对于网络的分层结构,你需要知道每一层都有哪些常用的协议,并了解协议的相关原理,因为后面我们提到的工具都是利用相应的协议来工作的。
  2. 对于网络的拓扑结构,你需要知道一个数据包在内网公网中是怎么流动的,还有交换机路由器的区别是什么。

问题定位#

网络出了问题,无非就是硬件问题和软件问题。

硬件问题#

这个问题涉及的面比较广,比如网线没插好,路由器坏了,等等。其实这个属于小概率事件,一般出了问题可能得相关专业的维修人员来解决,作为软件工程师,我们关注的点是软件问题。

软件问题#

对于一般的电脑使用者,上不了网了,大概率就指的是上不了百度等网站。但是作为软件工程师,我们得明确为什么上不了网了,到底是网络的那一层出现了问题?

一般排查问题的思路有两种,自底向上自顶向下,这两种思路本质都是一样的,本篇文章就自底向上来排查网络问题。

网卡是否正常工作?(链路层)#

这个问题严格来说是属于硬件问题,但是我们可以使用命令来操作网卡,在软件行业,重启可能会解决一大部分问题。

如下图所示,使用 ifconfig 查看网卡信息,显示的结果应该会有多条,有虚拟机创建的虚拟网卡,还有你电脑的真实网卡,我们关注的网卡一般叫ens33,或者eth0,这个不重要,只是一个名称。

ifconfig查看网络信息

然后我们使用 ifdown ens33 来关掉它,再使用 ifup ens33 来启动它(ens33是你的网卡名称),大多数情况下,重启网卡后网络就能正常访问。

网卡配置是否正确?(网络层)#

在网卡没有损坏的情况下,重启后还是无法访问网络,哪我们就应该排查网络层的问题,也就是网卡的配置信息是否正常?主要有以下4点:

  1. IP地址

    我们都知道IP地址是用来标识你的计算机在互联网上的地址,目前我们大多数情况下使用的是IPv4地址,不过在不久的将来,IPv6会普及。(32位的IPv4地址现在已经远远不够用了)

    如上图所示的 inet 192.168.81.129 就是我的IP地址。

  2. 子网掩码

    子网掩码和IP地址相与可以得到网络号,就是你所在的网段。

  3. 网关

    网关就是你的数据包要从内网发送到公网所必须经过的,一般情况下是本网段的第一个或者最后一个地址。

    如下图所示,我们可以使用 route -n 来查看相关的信息。

    route

  4. DNS服务器

    DNS服务器是用来解析域名然后给你返回对应的IP地址,比如 www.baidu.com ,所对应的就是182.61.200.7,常见的DNS服务器有1.1.1.1,8.8.8.8,114.114.114.114

    如下图所示,我们可以使用