21_路由(一),IP_
网络协议那些事儿
内容简介
- 前言
经过前几课颇多数学运算的 “熬炼”,相信你现在已经对划分 IP 地址范围了若指掌了吧。
如果还没有,快、快去给我练习去~
从这课开始,我们将用几课的篇幅来讲解本专栏中的一个很有趣的知识点,也是重头戏之一,那就是:路由。
我们将了解信息是如何从一个网络传输到另一个网络的。
特别地,我们将学习到:
-
在 OSI 第 3 层,数据是如何组织的;
-
一个网络和另一个网络通信需要用到什么硬件;
-
一个网络中的机器如何与另一个网络中的机器进行通信。
相信经过这几课的学习之后,你将深谙网络之间的通信,你会发现:“网间通信,不过尔尔;路由在手,天下我有。”
那么,就让我们一起探索路由的奇幻世界吧!
- IP 协议
学完 OSI 第 2 层之后,我们知道了如何在本地网络上进行通信,还知道了网络是什么。我们已经迫不及待地要去了解如何在网络之间进行通信了。
首先,我们再来看看 OSI 第 3 层的协议:IP 协议。
伟大的 IP 协议
我们以前说过,一个协议就好比一门语言,例如英语和中文。有了协议,机器间才能互相 “对话”,并且“理解” 对方说的是什么。
OSI 第 3 层(网络层)的最主要协议就是 IP 协议。
学习 OSI 第 2 层时,我们讲了该层传输的以太网帧的格式,以太网帧里面的信息是有序的。
同样地,对于 OSI 第 3 层,我们也得确定传输的消息单元中需要包含哪些信息,以及这些信息排列的顺序。
首先,我们应该可以断言需要用到发送方和接收方的 IP 地址。但是,除了 IP 地址,还需要不少其它信息。
我们先关注最紧要的信息,然后逐步添加其它信息到 IP 协议传输的消息单元的头部。
我们首先需要:
到目前为止,没有什么稀奇的,我们需要以上的信息来标识通信的参与者。
但是,之前的课程中,我们说过 IP 地址应该和子网掩码相关联。那么在 IP 协议传输的消息单元的头部中还要添加子网掩码吗?
首先要回答的问题是:为了向一台机器发送消息,是否需要知道它的子网掩码?
为了回答这个问题,让我们想象自己是一台希望向其它机器发送消息的机器吧。
假设,我是一台地址为 192.168.0.1/24 的机器 A(也可以称为 主机 A),我们要向地址为 192.168.1.1/24 的机器 B(也可以称为 主机 B)发送消息。
作为机器 A,我需要知道机器 B 是否在我所属的网络中。如果它和我在同一个网络中,我用 OSI 第 2 层来和它通信就够了。如果它在另一个网络中,我将不得不借助 OSI 第 3 层。
要知道机器 B 是否在我所属的网络中,这是很容易的。我只需确定我所属的网络的地址范围,然后看看机器 B 的 IP 地址是否属于该范围。
在我们这个例子中,我的地址范围是从 192.168.0.0 到 192.168.0.255。因此,机器 B 的地址(192.168.1.1)不属于我所在的网络。
因此,我推断出机器 B 不在我所属的网络中,因此我们将不得不使用 OSI 第 3 层来与其进行通信。
我们顺便注意到,其实并不需要机器 B 的子网掩码,就可以知道它是否属于我们的网络。
因此,没有必要在 IP 协议传输的消息单元的头部添加子网掩码,有 IP 地址就足够了。
因此,暂时我们只需要发送方和接收方的 IP 地址。我们将它们称为源 IP 地址(Source IP Address)和目标 IP 地址(Destination IP Address)是。source 是 “源,源头” 的意思,destination 是 “目的地,目标” 的意思,address 是 “地址” 的意思。
我们知道,OSI 第 2 层传输的消息单元被称为以太网帧,或简称帧(frame),它有固定的格式。同样地,对于 OSI 第 3 层的 IP 协议传输的消息单元,我们也需要确定它的格式。
对于 IP 协议,此消息单元被称为数据报(datagram)或数据包(packet)。
数据报
和第 2 层的以太网帧一样,IP 数据报也是排列好的 0 和 1 的二进制序列。
下面是 IP 数据报的形式:

我们看到,IP 数据报的格式有点类似以太网帧的格式,但是所包含的信息是不同的,并且信息的排列顺序不同。
上图所示的 IP 数据报的格式应该会让你感到吃惊,不是吗?
可以看到,目标 IP 地址位于源 IP 地址后面,也就是在 IP 数据报的头部的结尾处。
OSI 第 2 层的以太网帧的格式可不是这样的,帧里面目标 MAC 地址是位于帧头的最开始。这样,接收帧的机器就可以立即判断帧是不是发送给自己的。
那么,为什么 IP 数据报的格式会有所不同呢?发明 IP 协议的互联网先驱们不会是搞错了吧?
当然,他们是不会搞错的。要弄清楚这一点,我们将不得不先了解另一些概念。
封装
首先,我们必须回答一个问题。
网络上传输的是什么呢?
以太网帧?数据报?还是两者都有?为了回答这个问题,我们将不得不回顾 OSI 七层模型,如下图:

下图则更具体地演示了信息的发送(接收也是类似。在发送方信息传输的方向是从 OSI 的最上层到最下层;在接收方则正好相反):

如你所见,一条消息是从 OSI 模型的第 7 层发送的,它跨越所有层,直到抵达第 1 层,以通过网络发送。
在穿越这些层的时候,我们的原始消息会发生什么变化呢?每一层的消息单元的头部是什么格式呢?
实际上,每穿越一层,一个对应的头部就会被添加到消息单元中。因此,我们将累积不同层的对应头部,如下图所示:

上图中,没有第 6 层、第 5 层的对应信息,因为我们实际使用的是 TCP/IP 协议,它只用到 OSI 这个理论模型的第 7、4、3、2、1 层。
当穿过第 4 层时,将添加第 4 层的头部到消息单元中;穿过第 3 层时,将添加第 3 层的头部到消息单元中。以此类推。
这种机制被称为封装,英语是 encapsulation,因为我们将一条消息封装在另一条消息中,层层嵌套。
我们清楚地看到,经过层层穿越和消息封装,最终在网络上流动的是第 2 层的帧,其中包含第 3 层的数据报(第 3 层的数据报本身又包含了第 4 层的元素)。
因此,当我们在以前的课程中展示以太网帧的格式时,其实并没有对你和盘托出。我们来回顾一下以前展示的以太网帧的格式:

我们没有告诉你,在传输的消息单元中,实际上存在第 3 层的头部和第 4 层的头部,最后才是要发送的消息本身。所以,实际的以太网帧是这样的:

我们之前向你 “隐瞒” 了真相也是有所考量的,因为第 2 层无法读懂第 3 层或第 4 层的相关信息,它也无法理解要发送的数据。对于第 2 层来说,所有这些都是它无法理解的 0 和 1 的序列,它并不需要理会它们。
现在,我们知道了消息单元中会包含较高层的头部。
我们下一课将继续学习路由的相关内容,还会用 Wireshark 软件来做一些实践。
- 总结
-
OSI 第 3 层(网络层)的最主要协议是 IP 协议。对于 IP 协议,传输的消息单元被称为数据报(datagram)或数据包(packet);
-
IP 数据报的头部,包含发送方的 IP 地址和接收方的 IP 地址,而且发送方的 IP 地址位于接收方的 IP 地址之前;
-
消息在发送方传输时,需要自顶向下穿越 OSI 的各层。每穿越一层,一个对应的头部就会被添加到消息单元中,这种机制被称为封装。
一起加油吧~
}如果您想了解更多技术资源,欢迎加入点击这里钉钉群交流IT技术资源查看“IT技术交流群一”群的钉钉群号: 129605002953