26_路由(六),你电脑上的_OSI_第_3_层和路 ## 网络协议那些事儿

53 阅读11分钟

26_路由(六),你电脑上的_OSI_第_3_层和路

网络协议那些事儿

内容简介


  1. 前言

上一课,我们通过一个复杂的网络图,来进一步巩固了我们对路由表的理解,也帮助我们更加熟练地掌握了路由表的编写。

这一课开始,我们将对路由进行一些实践。

  1. 路由的实践(一)

环境

Linux vs Windows

我们将在 Linux 中进行我们的实践。在此我们无意去比较 Windows 和 Linux 这两个操作系统,它们各有优劣。而是选择最适合我们想要做的事情(也就是学习网络方面的知识)的操作系统。

Linux 的优势在于,我们能够非常具体地看到自己在做什么。访问配置文件,设置高级功能,等等。

如果你是在 macOS 操作系统下,那么基本操作和在 Linux 中是差不多的,因为 macOS 是基于修改过的 Unix 系统。而 Linux 最初是借鉴了一个类 Unix 系统(Minix)。所以 macOS 和 Linux 的命令行的大多数命令是一样的。

如果你还不习惯使用 Linux,第一步将是入门 Linux 系统。别担心,这不是很难的事情。Linux 应该算是目前程序员必备的一个技能点了吧。

在本专栏中,我们感兴趣的不是操作系统,而是网络。因此,你可以自行安装必要的工具和系统。

其实,你完全可以安装 VirtualBoxVMware(VMware 是收费的。不过 VMware Player 是免费的)这样的虚拟机软件来安装你想要的操作系统,可以是 Windows、Linux、macOS,Android,Unix,等等。

要入门 Linux,顺带学习到虚拟机相关的知识点,你可以选择学习我在慕课网的两门 Linux 课程:

架构

在网络领域,我们经常会提到架构(architecture),一般是指机器之间如何相互连接。

例如,在之前的路由练习中,我们已经见过两种网络架构,一个很简单,一个略微复杂。我们回顾一下上一课的略微复杂的网络图:

这种架构使我们的电脑,路由器,交换机和互联网之间建立了连接。

你也许会问:“交换机?为什么我在上图中没有看到交换机呢?”

实际上,这种网络架构图,我们一般称之为逻辑架构图,因为它表述了网络之间的连接逻辑。

因此,交换机这种归属于某个特定网络的设备并没有真正在图中被表示出来。不过,上图中的横线或多或少地 “蕴含” 了交换机的存在,也正是这些横线标识了每个网络。

第一步:你电脑上的 OSI 第三层和路由信息

在研究复杂的架构之前,我们首先来探究一下,在我们的电脑上,关于 OSI 第 3 层和路由,我们可以看到什么。

我们会分别在 windows 和 linux 中演示,之前的课程( 对 osi 前两层的一些实践(上) )中,我们已经使用 windows、linux 和 macos 来做过一些实践了。如果你忘了如何打开终端,或某些窗口,可以复习那一课。

在 Windows 中

相信本专栏的读者中大部分人使用的操作系统是 Windows,因此我们有必要来看看在 Windows 中可以做什么。

我将在 Win 10 上演示。事实上,不管你是在哪个版本的 Windows 中,Win7,Win 10 的其他版本,甚至老旧的 Win XP,基本的操作是类似的。

有些信息,我们将在命令行(例如 Windows 中的 CMD 程序)中看到,而有些信息我们将在图形界面中看到。

让我们从命令行开始。经过我们以前那门课的实践,你应该已经知道 Windows 中如何调出命令行窗口了吧。

首先,调出搜索框或者运行窗口,输入 cmd,然后按下回车键,即可打开 CMD 程序,如下图所示:

我们将使用 ipconfig 命令来查看网络配置,以前的课程中已经使用过了。

对我来说,网络配置信息很简单,因为我只有一张网卡(参见下图):

上图中,我们看到三个有趣的信息:

  • 我的 IP 地址为 192.168.0.102;

  • 我的 IP 地址与子网掩码 255.255.255.0 相关联;

  • 我的默认网关是 192.168.0.1。

现在,让我们看一下用 route print 命令可以显示的路由表 (请参见下图):

上图中,可以看到我们的路由表有 5 列,分别是 “网络目标”(也就是 “目标网络”),“网络掩码”(也就是 “子网掩码”),“网关”,“接口”,“跃点数”。

可以看到有不少行的网关的 IP 地址显示 “在链路上”。“在链路上”,英语是 “On-Link”,是指网关的 IP 地址和 IF(Interface 的简称,表示 “接口”)那列的接口的 IP 地址是一样的情况。

可以看到我的默认路由的网络是由 0.0.0.0/0 标识的(我们之前说过默认路由到底显示 default 还是 0.0.0.0/0,是由操作系统决定的。这两个意思是一样的)。默认路由的网关的 IP 地址是 192.168.0.1。

我们还看到了我本机所属的网络是 192.168.0.0/24,该地址以我本机的 IP 地址 192.168.0.102 作为网关。

既然我已经知道我的网关的 IP 地址了,那么我可以与它进行通信吗?

当然可以。我们可以使用 ping 命令,此命令可以让我们知道是否可以连接到某个机器,后接我们要连接的机器的 IP 地址或域名(请参见下图):

我们看到一个请求已发送到主机 192.168.0.1(实际上,发送了 4 个请求)。192.168.0.1 的主机也回复了我们 4 次。

很好,我们正在与机器 192.168.0.1 通信!

那我们能否走得更远,离开我们本地的网络呢?例如访问百度(baidu.com)?

如上图所示,离开本地网络去访问外部网络(例如访问百度的主机)也是可以的!我们甚至看到了百度的 IP 地址是 39.156.69.79(当然这个 IP 地址不一定一直是这样的)。

如果你还记得的话,我们可以用 traceroute 命令来查看经过哪些路由器才连接到目标主机。不过 traceroute 命令是在 Linux 或 macOS 下的,在 Windows 中要使用 tracert 命令。如下图所示:

上图中,我用 tracert 命令来连接到百度的主机,可以看到中转的那些路由器。

因此,可以看到我们的电脑具有 OSI 第 3 层正常运行所必需的所有元素。

如果在 Windows 的命令行中不容易修改其网络配置,则可以通过图形界面来轻松完成。

我们以前的课程已经演示过如何打开 Windows 中的 “控制面板” 了。进入 “控制面板”,点击“网络和 Internet” 菜单下的“查看网络状态和任务”,如下图所示:

进去之后,会看到如下图的界面:

点击你想要设置的网络连接,比如我这里是 “以太网”,就点击“以太网” 那个蓝字。就会打开一个网络状态的窗口:

点击 “属性”,会打开一个新的窗口:

在列表的选项里,先点击 “Internet 协议版本 4(TCP/IPv4)”,然后再点击 “属性”,会打开一个新的窗口:

可以看到,选中的是 “自动获得 IP 地址”,表明我的 IP 地址是自动获得的(使用了 DHCP 协议。DHCP 是 Dynamic Host Configuration Protocol 的缩写,表示 “动态主机配置协议”。我们以后的课程会讲解 DHCP)。实际上,是我家里上网的盒子(也是路由器)向我提供了这个 IP 地址。

你可以自己配置 IP 地址的信息,就是我们所说的设置静态 IP。先选中 “使用下面的 IP 地址”,然后,在里面填入信息。例如可以填入如下的信息,然后点击 “确定”:

上面的 “默认网关”,“首选 DNS 服务器”,“备用 DNS 服务器”,可以通过查看你主机的网络信息来获知。

现在,我们知道在 Windows 中如何找到 IP 相关的信息以及如何进行更改了。

接下来,让我们看一下在 Linux 中可以做什么。

在 Linux 中

我推荐你安装不带图形界面的 Linux 发行版,就是只有命令行界面的。

通过安装没有图形环境的基本 Linux 发行版,你的电脑将消耗很少的资源。由于我们之后的课程进行网络实验时,还将创建多个虚拟机,所以每一个虚拟机不要在你的计算机中占用太多资源才好。

当然你安装图形界面的版本也没有关系。

在 Linux 中,要显示本机的 IP 地址,可以用 ifconfig 命令,我们之前的课程中也使用过了:

可以看到我的机器有两个网络接口。

第一个是 enp0s3 接口(现在新的 Linux 发行版中,是这个名字了。以前的 Linux 中一般是 eth0,其中 eth 是 Ethernet 的头几个字母,表示 “以太网”。而现在的 enp0s3 中的 en 也是表示 Ethernet;p0s3 则有其他意思,暂时不需要理解),这是我的网卡。

在网络配置中,我们感兴趣的行主要是:


inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255

  
  


inet 是 Internet 的缩写,表示 “IP 地址”。netmask 是 subnet mask 的缩写,表示 “子网掩码”。broadcast 表示 “广播”。

可以看到我本机的 IP 地址是 10.0.2.15,子网掩码是 255.255.255.0,广播地址是 10.0.2.255。

此外,我们还有一个叫作 lo 的网络接口(是 Loopback 的缩写,表示 “本地回环”),这是一个虚拟网络接口,其 IP 地址就是指向本机,localhost。向 lo 这个接口发送的信息就是发送给本机自己。在所有电脑上,本地回环接口的 IP 地址是不变的,始终为 127.0.0.1。你可以用 cat /etc/hosts 文件来查看这个地址:

要查看本机的路由表,可以用 route -n 命令:

可以看到第一行是默认路由,网络是由 0.0.0.0/0 表示的,网关是 10.0.2.2。

第二行是我们本机所属的网络,是 10.0.2.0/24,但是对应的网关的 IP 地址不是我们本机的 IP 地址(10.0.2.15),而是用 0.0.0.0 来表示的,这是 Linux 的特殊性。

现在,我们已经显示了 IP 地址相关的信息以及路由表的信息,让我们看看如何更改这些信息吧。

在 Linux 中,我们可以用命令行来修改所有内容。这也是 Linux 的一大魅力所在。

例如,可以使用 ifconfig 命令加上选项参数来修改本机的 IP 地址,例如将其改为 10.0.2.16/24。

请注意,如果你在连接的远程电脑上更改 IP 地址或路由信息,你将会失去和远程电脑的连接!仅在你具有物理访问的电脑上执行此操作。

修改 IP 地址相关的操作,需要有 root 权限,所以在命令最前面加上 sudo:


sudo ifconfig enp0s3 10.0.2.16 netmask 255.255.255.0

  
  


再次使用 ifconfig命令,可以看到,我的 IP 地址变了,变成了 10.0.2.16:

不过这样修改之后,也许你的电脑就不能联网了(我的 Linux 是安装在 虚拟机当中的,用 DHCP 来分配 IP 地址的,用 NAT 方式来连接主机)。

在我的情况,可以用以下命令先将 IP 地址信息改回原来的:


sudo ifconfig enp0s3 10.0.2.15 netmask 255.255.255.0

  
  


然后,重启网络服务。在 CentOS 中,可以用 sudo systemctl restart network。在 Ubuntu 中,如果 sudo systemctl restart network 不管用,可以用 sudo /etc/init.d/networking restart 命令。

不过,重启网络服务后,也许还是不能联网。那么可以尝试重启系统,用 sudo reboot 命令。

现在,我们再来尝试修改路由表。仍然使用 route 命令,需要配合选项参数。

例如,我们可以尝试删除默认路由,并将其网关更改为 10.0.2.254。修改路由表,需要有 root 权限,所以在命令最前面加上 sudo:

上面的命令用于删除默认路由:

可以看到,删除了默认路由之后,路由表里就没有默认路由的那一行了。

我们再添加默认路由,例如把默认路由的网关设置为 10.0.2.254:


sudo route add default gw 10.0.2.254

  
  


我们甚至可以添加特定的路由,例如我们希望通过网关 10.0.2.253 进入 192.168.0.0/24 网络,就可以用以下的命令:


sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.0.2.253

  
  


然后,再用 route -n 来查看路由表,可以发现成功添加了一条路由。

当然了,在 Linux 中,你也可以用 ping 命令和 traceroute 等命令来做一些测试。

今天的内容还是颇有难度的,特别是 Linux 中的操作。如果你没有 Linux 和命令行的基础,需要去网上搜索不少知识点。

好的,现在你已经知道如何修改 Linux 机器的 IP 地址和路由表,我们就可以进行第一个小实验咯!

一起加油吧~

}如果您想了解更多技术资源,欢迎加入点击这里钉钉群交流IT技术资源查看“IT技术交流群一”群的钉钉群号: 129605002953