Linux网络问题排错

前言

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

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

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

整体图景

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

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

问题定位

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

硬件问题

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

软件问题

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

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

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

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

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

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

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

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

  1. IP地址

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

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

  2. 子网掩码

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

  3. 网关

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

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

  4. DNS服务器

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

    如下图所示,我们可以使用 cat /etc/resolv.conf 命令来查看本机设置的DNS服务器地址。

注意!!!

你的IP地址子网掩码网关DNS服务器都正常才是网络正常工作的必要条件。

一般情况下,你的DHCP服务器会自动地给你分配IP,以及相关的设置。如果DHCP服务器没有正常工作,这时候就需要你自己手动分配正确的IP,并且确保相关配置都正确。

(鉴于篇幅的原因,而且本文主要是讲述一个科学的方法论,所以如何手动配置这些信息,请大家查阅别的资料)

检验!!!

在这些配置都正确后,我们可以使用 ping 命令,来测试网络层是否正常工作。(注意,有些局域网的路由器被设置为禁止ping,这对我们排查网络问题造成了极大的困扰)

  • 首先我们可以ping网关的IP地址,或者局域网内的别的IP地址,如果正常工作,哪么即可确认在局域网内我们是正常的。

(注意:Windows系统的防火墙默认是不通过ICMP协议(ping命令使用就是ICMP协议)的,所以你ping一台Windows系统的电脑可能会失败)

  • 其次,我们可以ping百度,如果正常工作,哪么说明在公网上我们也是正常的。

服务是否监听端口?(传输层)

对一般使用者来说,能够ping通百度,就足够满足他的日常需求了,但是对于我们软件工程师来说,我们还会搭建自己的服务站点,提供自己的应用服务,或者我们会配置VPS来实现访问谷歌。

当你按照教程配置好一台VPS后,发现使用不了,而且采用了前两步的方法,发现VPS可以正常上网,这时候大概率就是你VPS服务的问题。

服务端

  • 首先查看VPS进程是否正常工作?使用 ps -aux|grep docker (插一句哈,使用docker来部署我们的应用程序简直太爽了)

  • 查看VPS是否正常监听端口?

客户端

如果以上的两步都没有问题,但是在你的客户端上还是无法访问谷歌的话,哪么你需要来测试以下端口是否真的通了,即客服端和服务端是否能建立会话。

如下图所示,我们可以使用telnet ip地址 端口 来测试。

如果连接失败,就表示端口是不通的,此时很可能是VPS的配置文件有问题,需要做别的排查,如下图所示。

防火墙,安全组

如果以上的测试都没有问题,哪么问题大概率是防火墙或者安全策略组(买过阿里云或者腾讯云的同学应该知道),大多数情况下,我们所使用的协议和监听的端口不会被防火墙所阻挡,所以碰到这种情况的时候不多,鉴于篇幅原因,本文就不讲了。

服务是否正常工作?(应用层)

这种情况一般很明显,比如大家常见的 404 NOT FOUND ,这种要么是被墙了,要么是服务端发生了错误。一般错误信息比较明显。

总结

初学计算机网络的时候,感觉知识又多又杂,而且单纯的看书,效果比较差,而且容易犯困。其实,在我们刚开始学习一门知识的时候,首先要做的就是建立整个宏观知识体系,然后学习工作中经常使用的部分,比如应用层,传输层,网络层的基本概念。等基本的和常用的知识都学完后,结合自己的兴趣再去深入的学习原理。要知道28原理,即20%的知识可以解决80%的问题。

推荐资料

《计算机网络》谢希仁 编著(配合B站的韩立刚老师的视频课程效果更佳)

原文地址:https://www.cnblogs.com/yahuian/p/11407090.html

时间: 2024-10-17 20:35:48

Linux网络问题排错的相关文章

linux网络配置及排错的一般流程

linux网络配置及排错的一般流程 发表于2017年3月10日 首先# ping www.baidu.com发现报错未知此域名 # ping www.baidu.comping: unknown host www.baidu.com 之后# ping 8.8.8.8 -c 3 如果不通,则  查看域名服务器cat /etc/resolv.conf发现里面设置了谷歌的公共DNS服务(如果没有则需设置) #cat /etc/resolv.conf# Generated by NetworkManag

网络包排错指南-类linux 平台

网络包排错指南-类linux 平台 背景信息 最近一直在测试k8s,如果你了解或者解接触过docker,那你一定知道docker 相关的网络很大部分在桥接.路由.Iptables 上做文章.如果你凑巧接触过k8s,并且了解其后面的原理,那你一定知道kube-proxy 把iptables 玩的简直要飞起来.当然你可能会想到一些排错工具,比如我之前常用的抓包工具,或者路由跟踪工具,但这些工具在目前这样复杂的环境下,是不太趁手的,特别是包在本机的多个网卡或者虚拟网卡里转来转去,还有很多个iptabl

linux网络基础设置 以及 软件安装

一. linux网络基础设置 网络设置基本可以分为:网卡设置.网关设置.DNS设置三部分 ifconfig命令 ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数.用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在.要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了. 参数 add<地址>:设置网络设备IPv6的ip地址: del<地址>:删除网络设备IPv6的IP地址: down:关闭指定的网络设备: up:启动指定的网络

Linux网络服务05——DNS域名解析服务(一)

Linux网络服务05--DNS域名解析服务(一) 一.DNS系统的作用 1.DNS服务器概述 整个Internet大家庭中连接了数以亿计的服务器.个人主机,其中大部的网站.邮件服务等服务器都使用了域名形式的地址,如crushlinux.google.com.mail.163.com等.很显然这种地址形式要比使用64.233.189.147.202.108.33.74的IP地址形式更加直观,更加容易被用户记住. FQDN格式(完整域名格式):在常见域名后添加"."(根域).例如:cru

Linux网络管理——Linux网络命令

3. Linux网络命令 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","STHeiti","Microsoft YaHei","WenQuanYi Micro Hei",SimSun,Song,sans-serif;} .note-content h2 {line-height: 1.6; color: #0AA

Linux网络编程必看书籍推荐

首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. <计算机网络(第5版)>是国内外使用最广泛.最权威的计算机网络经典教材. 目前已经是第五版,本书作者80年代就开发出MINIX,是一个用于操作系统教学的类UNIX(的小型操作系统.而linux就是受其影响.... 第五版是2012年出的,也比较新. 作 者: (美)特南鲍姆,(美)韦瑟罗尔 著 严伟,

Linux网络编程&amp;内核学习

c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: (美)Greg Perry    [作译者介绍] 译者: 谢晓钢 刘艳娟 丛书名: 图灵程序设计丛书 C/C++系列 出版社:人民邮电出版社 ISBN:9787115216359上架时间:2009-12-10出版日期:2010 年1月开本:16开页码:308 说明:这本是入门最好的,最简单,最好懂 2.<

Linux网络服务02——DHCP原理与配置

Linux网络服务02--DHCP原理与配置 一.DHCP服务概述 1.DHCP(Dynamic Host Configuration Protocol)动态主机配置协议 DHCP是由Internet工作任务小组设计开发的,专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议. 使用DHCP可以减少管理员的工作量,避免IP地址冲突,当网络更改IP地址网段时不需要再重新配置每个用户的IP地址,提高了IP地址的利用率,方便客户端的配置. 2.可分配的地址信息主要包括: 网卡的IP地址.

Linux网络编程书籍推荐

首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. <计算机网络(第5版)>是国内外使用最广泛.最权威的计算机网络经典教材. 目前已经是第五版,本书作者80年代就开发出MINIX,是一个用于操作系统教学的类UNIX(的小型操作系统.而linux就是受其影响.... 第五版是2012年出的,也比较新. 作 者: (美)特南鲍姆,(美)韦瑟罗尔 著 严伟,