网络协议(三)-OSI七层模型网络层

OSI第三层及其作用

网络层的作用是使各个网络互相连接(区别第二层数据链路层是局域网内通信,网络层是网间通信)。

当我们访问github时,我们不是直接就抵达了github所在的网络,我们可能给经过了很多其他的网络最终到达github所在的网络。类似这样:
在这里插入图片描述
在windows上,我们可以通过 tracert 命令查看我们访问某个网站经过的网络。下面拿百度举例:
在这里插入图片描述
除开请求超时的行,总共有8行,并且最后一行是百度的 IP 地址,意味着我们经过了8个网络,最终到达了百度所在的主机。
有时候会出现一个序号下有很多行的情况,比如这样:
在这里插入图片描述
意思是同一网络下的多台主机,都被这次访问经过。

IP地址

IP地址实际上包含了两个地址,一个是网络地址,一个是机器地址
IPv4中,IP地址是4个字节32比特位组成 。 例如:192.168.0.1
如何知道哪部分表示网络地址,哪部分表示机器地址?
引入一个新的概念帮助定位,叫做子网掩码,类似这样:255.255.255.0

子网掩码定位 IP 地址中网络地址和机器地址的原理:
将IP地址和子网掩码都翻译成2进制,两者都是32个比特位,子网掩码为1的,对应的 IP 位置代表网络地址;为0的,对应的 IP 位置代表机器地址。
在这里插入图片描述
上面一行是子网掩码,下面一行是 IP 地址,子网掩码是 1 的位,对应 IP 地址中同样的位置代表网络地址,因此,图中绿色部分代表网络地址,后面的黑色部分代表机器地址。

子网掩码中,1 应当全部在左边,0全部在右边,所以子网掩码只能是以下二进制数字:

00000000 -> 0
10000000 -> 128
11000000 -> 192
11100000 -> 224
11110000 -> 240
11111000 -> 248
11111100 -> 252
11111110 -> 254
11111111 -> 255

并且,255.255.255.254是允许的,255.255.254.252这样的子网掩码是不被允许的,因为0不是全在右边。

一个网络中,可能有多台主机,比如上面用路由命令查找到的,如何精确找到我想通信的那一台主机?子网掩码和 IP 地址综合作用,帮助我们定位特定的主机。通过网络地址查找到网络,在通过机器地址查找到该网络中的特定机器。

IP地址范围的计算

IP地址192.168.0.1 和子网掩码 255.255.240.0 ,这样的组合如何知道该网络下总共有多少可用的IP地址?
翻译一下问题其实就是:同一网络地址下,有多少不同的机器地址。
在这里插入图片描述
绿色部分代表网络地址,固定不动。红色部分代表机器地址,有多少种可能的数字,即有多少个机器地址。总共12个红色位,每个位置不是0就是1,共有2的12次方个机器地址。

网络地址和广播地址

实际上,每个网络中固定有两个地址是不可以使用的,一个是最小的IP地址,一个是最大的IP地址。
最小的IP地址代表了这个网络本身,是这个网络的网络地址。最大的IP地址是这个网络的广播地址,代表了这个网络中所有的机器,向该地址发送信息意味着向该网络的所有机器发送数据。

上述例子中,网络地址是?
机器地址位,全部置为0,其 IP 地址为192.168.0.0

上述例子中,广播地址是?
机器地址位,全部置为1,其 IP 地址为192.168.15.255。

所以,一个网络中实际可用的地址是:(2的 次方 该网络中机器地址位数 )- 2

私有地址和公有地址

公有地址通过注册使用,别的网络通过该地址可以直接访问该网络,比如百度的IP地址就是个公有地址,我可以通过IP直接访问。

私有地址私人或组织机构内部使用,无需注册,组织内部不重复即可,重复就会出现常见的IP冲突提示。外部网络无法通过私有地址直接访问该机器。比如我的主机IP地址是192.168.0.1,隔壁无法通过这个地址访问到我。

RFC 1918 定义的私有 IP 地址范围是:

10.0.0.0 / 255.0.0.0 :对应的地址范围是 10.0.0.0 ~ 10.255.255.255。被称为 A 类私有地址。
172.16.0.0 / 255.240.0.0 :对应的地址范围是 172.16.0.0 ~ 172.31.255.255。被称为 B 类私有地址。
192.168.0.0 / 255.255.0.0 :对应的地址范围是 192.168.0.0 ~ 192.168.255.255。被称为 C 类私有地址。

使用私有地址将网络连至Internet,需要将私有地址转换为公有地址。这个转换过程称为网络地址转换(Network Address Translation,NAT),通常使用路由器来执行NAT转换。

IP地址的划分练习

例1:假设有一个公司,它的网络为 10.0.0.0/16,该公司拥有 1000 名技术人员,200 名商务人员和 20 名经理。将这个网络划分出三个子网。

答:总人数1220人,该网络子网掩码前16位是 1 ,后16位是 0,网络内总共有 2 的16次方 - 2 等于 65534个机器地址,够用。1000名技术人员需要2的10次方等于1024个机器地址。200名商务人员需要2的8次方等于256个机器地址。20名经理需要2的5次方等于32个机器地址。

技术人员的子网掩码:11111111.11111111.11111100.00000000
       对应10进制:255.255.252.0
技术人员的IP地址从10.0.0.0开始,最大是转换成2进制的后10位置为1, 即 
00001010.00000000.00000011.11111111,转换为十进制:10.0.3.255
技术人员的IP地址范围是10.0.0.0 —— 10.0.3.255

商务人员的子网掩码:11111111.11111111.11111111.00000000
       对应10进制:255.255.255.0
商务人员的IP地址从10.0.4.0开始,最大是转换成2进制的后8位置为1,即 
00001010.00000000.00000100.11111111,转换为10进制:10.0.4.255
商务人员的IP地址范围是10.0.4.0 —— 10.0.4.255

   经理的子网掩码:11111111.11111111.11111111.11100000
      对应10进制:255.255.255.224
经理的IP地址从10.0.5.0开始,最大是转换成2进制的后5位置为1,即
00001010.00000000.00000101.00011111,转换为10进制:10.0.5.31
经理的IP地址范围是10.0.5.0 —— 10.0.5.31

还是上面的例子,之前是先分人最多的技术人员,现在要求先分人最少的经理,然后商务人员,最后技术人员。
答:每个区间所需二进制位沿用上一个例子,经理需要5个位,商务人员需要8个位,技术人员需要10个位。

   经理的子网掩码:11111111.11111111.11111111.11100000
      对应10进制:255.255.255.224
经理的IP地址从10.0.0.0开始,最大是转换成2进制的后5位置为1,即
00001010.00000000.00000000.00011111,转换为10进制:10.0.0.31
经理的IP地址范围是10.0.0.0 —— 10.0.0.31

商务人员的子网掩码:11111111.11111111.11111111.00000000
       对应10进制:255.255.255.0
商务人员的IP地址从10.0.0.32开始,最大是转换成2进制的后8位置为1,即
00001010.00000000.00000000.11111111,转换为10进制:10.0.0.255
商务人员的IP地址范围是10.0.0.32 —— 10.0.0.255
此时问题出现了,商务人员网络的第一个地址是10.0.0.0(最后8位置为0即可),经理网络的第一个地址也是10.0.0.0  

这里商务人员的地址应该从10.0.1.0开始,计算出最后一个地址是10.0.1.255

技术人员的子网掩码:11111111.11111111.11111100.00000000
       对应10进制:255.255.252.0
技术人员的IP地址从10.0.2.0开始,最大是转换成2进制的后10位置为1, 即 
00001010.00000000.00000011.11111111,转换为十进制:10.0.3.255
技术人员的IP地址范围是10.0.2.0 —— 10.0.3.255
问题又出现了,技术人员的第一个而网络应该是后10位置为0,即
00001010.00000000.00000000.00000000,也是10.0.0.0,又冲突了。

这里技术人员的网络应该从10.0.4.0开始,00001010.00000000.00000100.00000000,
即10.0.4.0为他第一个网络地址,不冲突。
技术人员的网络计算出最大是,10.0.7.255

总结一下,第一个网络的判定,需要看其子网掩码为0的二进制位,对应到其IP的后几位置为
0,然后从最近的最可能的数开始取。

IP地址划分技巧

需要借助一个特殊数字,该数字是根据子网掩码的有效字节计算出来的,等于 256 - 有效字节的十进制的值。

有效字节(或者说有意义的那个字节)就是我们所说的子网掩码中 1 和 0 出现划分的那个字节。如果子网掩码是 255.224.0.0,有效字节就是 224。256 - 224 = 32,该数字就是 32。

技巧说明:
1、网络的第一个地址可以这么计算得到:特殊数字的倍数中,小于或等于对应有效字节的那个 IP 地址的字节的最大的那个值;
2、网络的最后一个地址可以这么计算得到:特殊数字的下一个倍数,再减 1。

例子1:192.168.46.0/23 计算第一个和最后一个IP地址
子网掩码为:11111111.111111111.11111110.00000000
分割出现在第三个字节,其转化为十进制为254,特殊数字 = 256-254 = 2。 其倍数是0,2,4,6,8等偶数。
子网掩码的第三个字节为有效字节,对应IP地址的第三个字节是46,小于等于46的最大偶数是46。这个网络的第一个地址是192.168.46.0
46下一个倍数是48, 48-1=47,网络的最后一个地址是192.168.47.255

例子2:10.45.185.24 / 255.255.248.0计算第一个和最后一个IP地址
子网掩码的分割在第三个字节248, 特殊数字 = 256 - 248 = 8 。其对应IP地址第三个字节是185。8的倍数小于等于185的数字是184,这个网络的第一个地址是10.45.184.0
184下一个8的倍数是192,192 - 1 = 191,这个网络的最后一个地址是10.45.191.255

重新做一次类似上面的例子:
假设你负责一个公司的某部门的网络,是 192.168.160.0 / 255.255.224.0。
这个部门中有三个群组:
550 名技术人员;
130 名商务人员;
10 名经理。
因此,需要从网络中划分出三个子网。

特殊数字:256 - 224 = 32,,IP地址的第三个字节是160,小于等于160的32倍数是160,网络的第一个地址是192.168.160.0。
160的下一个32的倍数是192,网络的最后一个地址是192.168.191.255。

550名技术人员,需要1024个地址,即2的10次方。 11111111.11111111.11111100.00000000。以点分十进制表示就是 255.255.252.0。

130名商务人员,需要256个地址,即2的8次方,子网掩码为 255.255.255.0。

10名经理,需要16个地址,即2的4次方,子网掩码 255.255.255.240。

对于技术人员的网络,256 - 252 = 4,小于等于160的4的倍数是160,技术人员网络的第一个地址是192.168.160.0。下一个4的 倍数是164,技术人员网络的最后一个地址是192.168.163.255。

对于商务人员的网络,第一个地址紧跟技术人员网络之后,是192.168.164.0,分割正在在第三个字节和第四个字节之间,最后一个网络直接判断出是192.168.164.255。

对于经理的网络,256 - 240 = 16,分割在第四个字节,第一个地址紧跟商务人员网络后,192.168.165.0。最后一个地址是16 -1 = 15,即192.168.165.15

假设现在又有120名秘书进入这个网络,要求不改变原有网络,增加一部分空间供其使用。
120名秘书需要128个地址,即2的7次方,子网掩码为11111111.11111111.11111111.10000000,即255.255.255.128。特殊数字256 - 128 = 128。假如秘书的网络直接接经理网络后,则秘书网络的第一个网络是192.168.165.16,最后一个网络是192.168.165.127。这个网络共有127-16+1 = 112个地址,不够120个秘书。
如何解决,只需将网络的第一个地址取到下一个特殊数字即可,这里第一个网络设为192.168.165.128即可,最后一个网络为192.168.165.255。

当在一个大的地址范围内选取一个子网,这个子网比在它之前的子网更大时,有必要跳过一定范围的地址,并在大的地址范围内留一个“空洞”。
路由
ip协议

协议是什么,假设你只会英文,我只会中文,你说的我就听不懂,我说的你也听不懂,现在来了个人规定,大家都必须学中文并且用中文交流,现在你说的我能听懂,我说的你也能听懂了。网络之间的通信,需要遵从一定的规则,才能互相听得懂其他机器在说什么。OSI网络层最主要的协议就是IP协议。

对比OSI 第 2 层传输的以太网帧的格式,以太网帧里面的信息是有序的。

同样OSI 第 3 层,我们也得确定传输的消息单元中需要包含哪些信息,以及这些信息排列的顺序。

首先,我们应该可以断言需要用到发送方和接收方的 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 协议,消息单元被称为数据报(datagram)或数据包(packet)。

数据报

首先看一下数据报的格式
在这里插入图片描述
和第二层的以太网帧不同,第二层的以太网帧将目标的地址放在了前面,以方便接收信息的机器可以第一时间判断该信息是否是发给自己的,而数据报则反过来,将发送方的IP地址放在了前面。要理解这个顺序问题,需要先搞懂网络上传输的到底是什么。

首先明白,信息的传输,在发送方是从OSI模型的最上层应用层一路向下最终抵达物理层然后转换为光电等信号传送的,到达接收方后,是从最下层物理层一路向上最终抵达应用层的。

消息单元经过每一层,都会被该层加工(将一些信息放在消息单元的头部),类似下面这样层层包装。

在这里插入图片描述
上图中,没有第 6 层、第 5 层的对应信息,因为我们实际使用的是 TCP/IP 协议,它只用到 OSI 这个理论模型的第 7、4、3、2、1 层。

当穿过第 4 层时,将添加第 4 层的头部到消息单元中;穿过第 3 层时,将添加第 3 层的头部到消息单元中。以此类推。

这种机制被称为封装,英语是 encapsulation,因为我们将一条消息封装在另一条消息中,层层嵌套。

我们清楚地看到,经过层层穿越和消息封装,最终在网络上流动的是第 2 层的帧,其中包含第 3 层的数据报(第 3 层的数据报本身又包含了第 4 层的元素)。

之前学习的以太网帧是这样的:
在这里插入图片描述
现在知道以太网帧应该是这样的:
在这里插入图片描述
下面我们可以回答刚才的问题了:为什么数据报将源IP地址放在目标IP地址之前?
作为信息的接收方,接收到的信息是已经封装好的以太网帧(在发送方一路向下被层层封装),这个帧的头一个信息是接收方的MAC地址,接收方通过MAC地址直接判断出了该信息是不是发送给自己的。所以不关心源IP地址和目标IP地址的前后问题(第4层关心这个问题,第四层需要目标IP地址离自己更近)。

路由器

路由器的功能类似交换机,只不过交换机用于同一个网络内的机器互相通信,而路由器用于不同网络之间的通信。

路由器是 OSI 第 3 层的硬件,可以连接多个网络。因此,对于所连接的每个网络,路由器都有一个对应的接口。

因此,路由器就是一个具有多个网络接口(对应多个网卡)的机器,每个接口连接到一个网络。它的作用是把接收到的数据包(packet)分发到不同的网络。

因此,如果一台电脑拥有两个或以上的网卡,是可以作为路由器使用的。

但是,普通的电脑和路由器之间有什么区别呢?

区别实际上很少。主要区别在于路由器会将不是发给自己的数据包准确地分发出去(起到中继(relay)的作用),而普通的电脑会将不是发给自己的数据包丢弃。

因此,连接到网络的任何机器都可以扮演路由器的角色。只需激活上面的路由功能,进行一些配置。

假设我们是台路由器,MAC 地址为 11:22:33:44:55:66,IP 地址为 192.168.0.1/24

我们的其中一个接口收到了如下的以太网帧(帧中指明了 OSI 第 3 层的头部):
在这里插入图片描述
问1:发送这个帧的机器的 IP 地址是什么?

答:发送这个帧的机器的 IP 地址是源 IP 地址,就是 10.0.0.1。

问2:发送这个帧的机器的 MAC 地址是什么?

答:我们没法知道发送这个帧的机器的 MAC 地址!是的,如果你还记得 OSI 第 2 层,一个 MAC 地址是专属于一个局域网的。出了它所在的局域网,我们将没法得知。我们只能知道,发送这个帧的路由器的MAC地址。

在来问一个重要的问题:“当我们这台路由器收到此帧时,会发生什么呢?”

以太网帧(底层是 0 和 1 的二进制信息)到达我的网卡,我的网卡将帧发送给我的操作系统。

我的操作系统的第 2 层接收这些 0 和 1 的信息,解释它们,并提供帧的目标 MAC 地址给我。目标 MAC 地址正是我的 MAC 地址:11:22:33:44:55:66 !

因此,我读取帧头的其余部分,以了解是谁向我发送此帧,以及第 2 层应将消息发给第 3 层的哪个协议处理。

我读取到的第 3 层的协议是 IP 协议,因此我拿掉帧的以太网头部,得到 IP 数据报(datagram),并将其发送到第 3 层,更准确地说是发送给第 3 层的 IP 协议来处理。

第 3 层的 IP 协议从 IP 数据报的头部读取所有信息,因为我们知道此数据报是发给我们的。

不过,数据报中的目标 IP 地址(132.56.0.19)不是我们这台路由器的 IP 地址(192.168.0.1)呀…

这没关系,因为我们之前已经说过,路由器收到不是发给自己的消息是很正常的。因此,路由器此时的作用就是将数据报定向到它的目的地。

但是路由器是怎么做到的呢?

实际上,就和之前 OSI 第 2 层的交换机有一个 CAM 表一样,路由器也有一个表,该表指示要向其发送数据报的下一个路由器,以使其到达目的地。

有点像“接力赛”,一个个路由器就好像一个个交棒的选手,而传递的消息就像接力棒。

路由器的这个表非常重要,它有一个好听的名字:路由表。

路由表

类似交换机的CAM表,一列是需要接入的网络,另一列是加入这个网络所需要的走的“大门”(网关Gateway)。路由表指明了要使用哪个网关来加入一个网络
像是这样:

要链接的网络的地址网关的IP地址
192.168.1.0/2410.0.0.253
192.168.122.0/2410.0.0.47
192.168.8.0/2410.0.0.254

实际还有别的信息,windows上使用route print命令是这样的:
在这里插入图片描述
我们现在只关心网络目标,掩码和网关。

路由表未完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值