从零开始的计网学习——网络层(计算机网络重点!)

在学习协议时要记得协议的英语缩写,在各种场合用的基本都是英语缩写,不会用中文全称!

4.1 网络层概述

  • 首先要明确的是,网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输。

要是要网络层的任务,需要解决以下问题:

  1. 网络层向运输层提供怎么样的服务(可靠传输还是不可靠传输)
    关于可靠服务和不可靠服务在数据链路层文章有详细讲到:数据链路层

在不同网络体系结构中提供的服务可能是不同的,在因特网所使用的TCP/IP协议的网络层中使用的是无连接、不可靠的数据报服务。


ATM、帧中继和X.25的网络层使用的都是面向连接的、可靠的虚电路服务。

  1. 网络层如何寻址问题

TCP/IP寻址

在图中,各个路由器接口都有不同的IP地址来进行识别,根据其IP地址(网络编号)来识别其路由器接口,就能解决寻址问题。

  1. 路由如何选择问题(路径选择问题)
    路径选择

在图中,从最左端到最右端右多个路径可以选择,如何解决路径选择也就成了网络层的第三个问题。


但是在路由器中,路由器收到数据后是一句什么来决定将数据包从自己的哪个接口发送出去的,这里就引出了路由器中的路由表:
路由表
路由表中记录了目的网络以及各级跳的路由器端口,以此来选择走哪个路由器到达端口。


路由记录表的记录有两种情况生成:

  1. 由用户或网络管理员进行人工配置。这种方法只适用于规模较小且网络拓扑不改变的小型互联网。
  2. 实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路有记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网

解决以上问题就能实现网络层的功能。

网络层(网际层)除了 IP协议外,还有之前介绍过的地址解析协议ARP(详细请看第三章数据链路层),还有网际控制报文协议ICMP,网际组管理协议IGMP。

小结:
小结

4.2 网络层提供的两种服务

面向连接的虚电路服务

  • 虚电路与电路交换类似。
  • 虚电路要求通信双方必须建立网络层的连接——虚电路(Virtual Circuit)
  • 通信双方必须沿着建立的虚电路发送分组

例如:
虚电路例子
通信双方在通信过程中先建立一条虚电路连接,数据沿着这条虚电路有序传输。

目的主机的地址仅在建立连接阶段使用,之后每个分组的首部只需携带一条****虚电路编号(构成虚电路的每一段链路都一个虚电路编号)。

这种通信方式再使用可靠传输的网络协议便可使分组最终正确到达接收方。

通信结束后释放虚拟连接

  • 虚电路相当于逻辑上建立了电路交换,但是不产生物理上的连接。

曾经使用的协议

无连接的数据报服务

  • 无连接数据报服务相当于分组交换
  • 要求可靠连接应当由用户主机来保证
  • 不需要建立网络层连接(虚电路需要)
  • 每个分组可以走不同的路径
    每个点走不同的路径

其路径的选择类似分组交换

因此每个分组的首部必须携带目的主机的完整地址

这种通信方法所传送的分组可能会产生分组差错(误码、丢失、重复、失序|具体请看第三章文章)。

由于网络本身不提供端到端的可靠传输服务,因此网络中的路由器可以做的比较简单,造价低廉(与电信网种的交换机相比)。

因特网采用了这种设计思想

将复杂的网络处理功能至于因特网的边缘用户主机和其内部的运输层)。

相对简单的分组交付功能尽最大努力的至于因特网核心

好处:

  • 使得网络造价大大降低。

  • 运行方式灵活,能够适应多种应用。

数据报服务和虚电路服务对比:
数据包虚电路对比对比

4.3 IPv4地址

IPv4地址概述

  • 在TCP/IP体系中,IP地址是一个最基本的概念,也是网络层最重要的概念之一。
  • IPv4地址就是给因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符
  • IP地址又因特网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。

我国用户可向亚太网信息钟信申请IP地址,但是不对个任开放,需要缴费。


2011年2月3日,互联网号码分配局宣布,IP地址已经分配完毕


我过在2014至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开展商用部署IPv6

  • IPv4地址的编制方法经历了三个阶段:
    三个阶段
    这些都会在后面详细讲解。

IPv4地址由于采用了32比特的记录,不方便用户阅读,记录,以及输入,因此IPv4地址采用了点分十进制标识方法以方便用户使用。

例如:
点分十进制
对于8位无符号二进制数转十进制整数,用每个位数权值相加的方法。

权值相加
例如:

权值相加举例

  • 在后续进行IPv4地址的相关计算时,要用到十进制数转为8位二进制数,因此也需要了解一下。(熟悉的同学可以跳过)

十进制数转为8位二进制数的常用方法是:

除2取余法

例如:

除2取余法例子
每次对数字进行除2取余,当被除数变为0时,停止。并且将所有的余数由下往上取出,便是该十进制数转换后的二进制数

分类编制的IPv4地址

IPv4地址按照分配分为5类:

A类地址:
A类地址

  • A类地址网络号占8比特,主机号占24比特
  • 网络号最高位固定为0

A类地址网络号的两个不可指派(分配)的值:

1.最小网络号0,此时网络号位数全部取0,保留不指派

0保留位数j
2. 最大网络号127,此时网络号位数全部取1,作为本地环回测试地址,不指派
最大环回地址


根据其主机号的位数可以得出:


最小的本地环回地址127.0.0.1主机号为全0是网络号,因此最小为1
最小环回地址


最大的本地环回地址为127.255.255.254主机号为全1是广播地址,因此最小为1
最大环回地址
A类地址网络号的可指派(分配)的最小值和最大值:

  1. 可指派的网络号最小值为1,网络地址为1.0.0.0
    可指派最小值
  2. 最大的可指派网络号为126,网络地址为126.0.0.0
    可指派最大值
    可以得出:
    指派数量

2多少次幂取决于可以改变的二进制数字有多少。在这里网络共有8个二进制数,减去首位固定为0,因此为8 - 1 = 7

B类地址:

B类地址

  • B类地址网络号和主机号分别占16比特
  • B类地址网络号前两位固定为10

B类地址网络号的不可指派(分配)的值与A类相同。

B类地址网络号的可指派(分配)的最小值和最大值:

B类地址可分配值
B类地址的可指派数量:
可指派数量

C类地址:
C类地址

  • C类地址网络号占24位,主机号占8位
  • C类地址网络号前三位固定为110

C类地址网络号的不可指派(分配)的值与A类相同。

C类地址网络号的可指派(分配)的最小值和最大值:

C类地址的最大值和最小值
C类地址的可指派数量:
C类地址的可指派数量

D类地址:
D类地址

  • D类地址为多播号,不区分网络地址和主机地址

  • D类地址前4位为1110
    E类地址:
    E类地址

  • E类地址为保留地址,保留为今后使用


**注意事项:** ![注意事项:](https://img-blog.csdnimg.cn/20210201214918274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L05pbXJvZF9f,size_16,color_FFFFFF,t_70)

一些特殊的IPv4地址:
特殊的IPv4地址
一般不适用的IP地址:
一般不适用的IP地址
小练习题:
练习题

关于分配地址,寻找网络个数的练习题:

分配地址、找网络练习题

  1. 寻找图中有哪些网络

首先明确概念:
网络由若干节点和连接这些节点的链路组成。
并且路由器可以划分网络
网络个数
因此可以明显看出,此图中有4个网络。

  1. 根据个网络中主机和路由器接口总数量来决定给个网络分配哪个类别的网络号:

题目中要求要节约IP地址,也就是网络号的比特数要尽量大,主机比特尽量小(这样子可分配的网络树增大,就可以实现解决IP地址)因此:
对于黄色区域主机个数为65534台,B类地址和C类主机地址个数都不能满足要求,只有A类地址的主机号足够,因此分配A类网络号。


蓝色区域需要254台,此时C类主机地址不足够,B类主机地址足够使用,因此分配B类地址给蓝色块。


同理,可得:
分配情况

  1. 一句所确定的网络号类型,为每个网络挑选一个网络号。

分配网络号

IP 地址的一些重要特点

  1. IP 地址是一种分等级的地址结构。分两个等级的好处是:
  • 第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理

  • 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间

  1. 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口
  • 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。
  • 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址
  1. 转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
  2. 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。

划分子网的IPv4地址

首先先明确为何要引出划分子网的概念:

在 ARPANET 的早期,IP 地址的设计确实不够合理:

  1. IP 地址空间的利用率有时很低。
  2. 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
  3. 两级的 IP 地址不够灵活。

例如:

某一个大型局域网需要连接到因特网:
大型局域网连接到因特网

  • 此时由于C类地址不够存放所有主机,选择可分配主机数为65534个的B类地址,但是很明显此时会有很多主机地址没有被利用
  • 但是对于剩余的IP地址只能有该单位的同一个网络使用,其他网络不得使用。

随着单位的发展,该单位需要将原来的网络划分成三个独立的网络

网络划分成三个独立的网络

此时只能选择为子网申请新的网络号,但是申请新的网络号会带来以下弊端:申请新网络带来的弊端
这是就提出了一种解决办法,从多余的主机号中借用一部分作为子网号。而不用申请新的网络地址。

接用主机号作为子网号
但是此时出现了一个新的问题:

  • 计算机要如何知道分类地址中有多少比特被用作子网号了呢?

这是就提出了一个概念,子网掩码。

子网掩码的存在是为了确定有几位数被主机号被网络号借用,使其成为了网络号。

  • 子网掩码用连续的比特1来对应网络层和子网层。
  • 子网掩码用连续的比特0来对应主机号0。
  • 将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可以得到IPv4地址所在的子网的网络地址。

例如:
子网掩码使用例子
如何进行计算呢?

首先明确,子网掩码有两部分组成,一部分是1,一部分是0,可以理解为1部分就是经过掩码后的网络号,0部分就是经过掩码后的主机部分


1的部分由IPv4地址的原网络号+借用的主机号(图中的子网号)


0的部分就是IPv4的主机号减去被借用位数。


那么如何计算经过子网掩码后的网络地址呢?


此时也要明白一个数字逻辑基础知识:1与任何数字相与都为任何数,0与任何数相与都为0


因此对子网掩码与IPv4地址进行逻辑与运算,所有的主机号就会被归零,原有的网络号和借用主机号作为网络号的地址就会被保留


也就是运算后会消去经过掩码的主机号,只保留掩码后的网络号。


因此逻辑与运算后得出的就是掩码后的网络号。


PS:已经尽量讲明白了,若有不清楚请评论讨论。

举例:
子网掩码举例
解析:

在题目中,由于其网络地址由2开头(C类地址前三位为110,才可能出现2开头)。可以确定其为C类网络地址


回顾C类网络地址的特点:网络位为24位,主机号为8位,既未进从主机号借位的子网掩码的二进制应为:11111111 11111111 11111111 00000000,采用点分十进制表示为:255.255.255.0。


很明显,其题目中子网掩码数量不止255.255.255.0,其位255.255.255.128。说明主机号中有部分被借用做网络号,也就是其主机号8位已不再是全为0,有位数被借用做网络号,因此在子网掩码中显示为1


很清晰可以看出,其后八位二进制数用点分十位表示法为128。

将其转为二进制:128 -> 10000000


说明其有1位被借用做网络号


此时与前面的合起来可得其总的子网掩码为:
11111111 11111111 11111111 10000000


很明显,原C类地址子网掩码后八位主机号为0,现在有一位为1,这位就是借给IPv4作为网络号的位数。


对于1个二进制数,可以划分除2^1个子网数量,也就是2个子网。


因为主机号中有1位被分为网络号,只剩下7位可分配数字。


因此每个子网可分配地址数量为:2^7 - 2 = 126 (0为网络号,128为广播地址)


PS:已经尽量讲明白了,若有不清楚请评论讨论。

总结:

对于划分子网掩码的计算网络地址:

  1. 确定IPv4地址是什么类型,有几个网络号(原网络号)。

  2. 看子网掩码中有多少个数是原有网络号。(可以直接转为二进制数直接消去原网络号)

  3. 确定有几个数属于从主机中借用的。


    对于要求让我们划分子网,设计子网掩码就是这个的逆过程。

不过只要记住一个结论:

  • 子网掩码与IPv4地址进行逻辑与运算就是网络地址。

  • 划分子网纯属一个单位内部的事情,对外部网络透明,对外仍然表现为没有划分子网的一个网络。

对于未分配子网的可分配地址数:

未分配的地址数
分配子网后的情况:
分配子网后的情况
例题:
例题2
各位自己进行理解,欢迎留言讨论。

无分类编址的IPv4地址

划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址(主机地址)空间太小没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁

因此因特网工程任务组IETF又提出了无分址编址方式来解决地址紧张的问题。

1993年,IETF发布了无分类域间路由选择(CIDR),其主要的特点:

  • CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念

  • CIDR可以更加有效分配IPv4的地址空间(使地址空间分配不再被主机号所限制,做到自由的根据主机规模分配),并且可以在新的IPv6使用之前允许因特网的规模继续增长。

  • CIDR使用各种长度的网络前缀”(network-prefix)来代替分类地址中的网络号和子网号

CIDR使用斜线记法,或称之为CIDR记法。即在IPv4地址前面加上斜线”/“,在斜线后面写上网络前缀所占比特数量(就是分类地址中的网络号和子网号)。

例如:CIDR地址举例

  • CIDR实际上使将网络前缀都相同的连续IP地址组成一个”CIDR地址块“
  • 我们只要知道CIDR地址块中的任何一个地址就可以知道该地址块的全部细节,例如:
    CIDR地址块的全部细节
    例如:

CIDR例题

根据IPv4的地址可以看出,其CIDR的网络前缀数量为20,因此将其第一、第二个子节保持不变,将其第三个子节以二进制表示出来:


128.14.35.7.20 —>128.14.0010|0011.00000111


分割线部分前就是其最长前缀码,这部分就是该地址的网络部分


固定其网络部分,改变其主机号部分,可以很简单得出其最小地址为:128.14.32.0
最大地址为:128.14.47.255


因为其剩余的主机号位数为12位,则其可以分配的地址数量为2^12个


其聚合的C类网的数量为2^12 / 8


地址掩码为:11111111.11111111.11110000.00000000(跟子网掩码一样)

解析:
CIDR例题解析
这里就出现了一个聚合的概念

  • 其实聚合就是将多个小的网络,连接起来,一起用一个大的网络分配给他们,向因特网只申请一个大的网络号,而不用申请多个小的网络号,因此形成了多个小网络聚合成一个大网络,减少了网络号的消耗。

路由聚合(构建超网):

路由聚合例子

对于图中R1连接了5个网络,若R1要将这五个网络信息发送给R2,就需要发送5个路由信息给R2(也就是需要5个网络编号) R2的路由表
很显然,这五个网络网络号中由很多部分是共同前缀的,那么这部分能不能采用CIDR路由聚合成一个网络再发送给R2来降低路由表大小呢,显然是可以的。
五个路由找共同地址
因此其聚合地址块为:
聚合地址块
若这是对于因特网地址管理机构的一次网络号申请,这样子就将5个小的网络号合成了1个大的网络号,减少了IPv4地址的分配,为IPv4地址的继续使用做出了贡献,这也是无分类编制IPv4的意义。

在路由过程中,我们可以得出两个结论:

  • 网络前缀越长,地址块越小(主机号),路由约具体。
  • 若地址块转发分组时发现由多条路由可选,则选择网络前缀最长的那条,这样子的路由更具体(网络号越长,说明再继续聚合的可能性越低,也就越具体)。

考研真题:
CIDR考研真题1

考研真题2

IPv4地址的应用规划

  • IPv4地址的应用规划考虑得是给定一个IPv4地址块如何将其划分成几个更小的地址块(来满足多子网划分),并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址。

IPv4的应用规划有两种,也就是我们上面讲诉的两种:定长的子网掩码划分FLSM变长的子网掩码划分VLSM。


定长的子网掩码划分:

  • 使用同一个子网掩码来划分子网
  • 子网划分方式不灵活,只能划分出2^n个子网掩码(n是从主机号部分借用来作为网络号的比特数量)
  • 每个子网所分配IP地址数量相同(主机号相同),对于不同地址数量的子网,容易造成IP地址浪费

例如:

定长地址划分举例

首先可以根据图中的子网情况,计算出所需各子网的网络数量需求。


要注意的是,除了主机以外,路由器、网络地址和广播地址都需要一个地址。


根据网络的情况知道,有5个网络,根据定长分配子网的规则,只能划分2^3 = 8个子网才能最合适的满足需求。因此有:子网掩码划分
对于各个划分子网的细节:
划分子网的细节
划分子网的细节
由此例可以看出,划分的子网个数只能为2^n个,此例子中为8个,但是实际上只需要5个。


子网分的主机地址个数也为固定的32个,对于网络5只需要4个地址,造成了浪费。

  • 为了减少这种地址浪费的情况,也就引出了变长地址子网掩码分配的情况(也就是上面说的不分类编码)

变长的子网掩码:

  • 使用不同的子网掩码来划分子网(不分类地址)
  • 子网划分方式灵活,可以按需分配
  • 每个子网所分配的IP地址可以不同,尽可能减少对IP地址的浪费

同上面的例子:

变长的子网掩码

在地址块的分配原则中:


每个子块的起点位置不能随意选取,只能选取块整数倍的地址作为起点,也就是比特位置上2^n的位置。
最好是先给大的子块分配


变长地址分配答案
若有不懂,欢迎留言讨论。

4.4 IP数据报的发送和转发过程

  • IP数据包的发送和转发过程包含两个部分:
  1. 主机发送IP数据报
  2. 路由器转发IP数据报

忽略APR协议

例如:
两个网络的IP地址数据报发送
A网络和B网络之间要进行数据报交互。

首先要考虑第一个问题:

  • 源主机如何知道目的主机是否与自己在同一个网络中,是直接交付(同一网络),还是间接交付(不同网络,经过路由器转发)

这时就要用到我们上面子网掩码学习过程中用到的知识:


子网掩码和IP地址做逻辑与运算便为网络号

对比网络号,相同为直接交付,不同为间接交付

对比是否为同一网络

  • 如果目的网络地址和源网络地址相同,就是在同一个网络中,属于直接交付
  • 如果目的网络地址和源网络地址不相,就不在同一个网络中,属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发

此时若判断出为不同网络,就会出现第二个问题:

  • 主机C如何知道路由器R的存在?

默认网关

为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为默认网关


例如。路由器的接口0的IP地址192.168.0.128做为左边网络的默认网关


发送到其他网络的数据报都需要经过默认网关进行转发

当数据包到达默认网关后,就出现了第三个问题:

  • 路由器收到IP数据报后如何转发?

路由器收到IP数据报后主要几个步骤:

  1. 检查IP数据报首部是否出错
  • 若出错,则直接丢弃该IP数据报并通告源主机
  • 若没有出错,则进行转发
  1. 根据IP数据报的目的地址在路由表中查找匹配的条目
  • 若找到匹配的条目,则转发给路由器表条目中指示的下一个路由器
  • 若找不到,则丢弃该数据报并通告源主机

在此例中:

假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值。
IP数据报首部没有出错

路由器对该IP数据报进行查表转发:

路由器对该IP数据报进行查表转发

  1. 逐条检查路由条目,将目的地址与路由条目中的地址掩码进行逻辑与运算得到目的网络地址。
  2. 与路由条目中的目的网络进行比较,如果相同,则这条路由条目就是匹配的路由条目,按照它的下一条指示,图中所示的也就是接口1转发该IP数据报
  • 路由器是隔离广播域的,也就是广播只能在自己网络范围内传播
    -路由器是隔离广播域的

4.5 静态路由配置及其可能产生的路由环路问题

  • 静态路由配置指的是用户或者网络管理员使用路由器的相关命令给路由器人工配置路由表
  1. 这种人工配置方式简单、开销小,但是不能及时适应网络状态(流量、拓扑等)的变化
  2. 一般只在小规模网络中使用
  • 使用静态路由配置可能会出现以下导致产生路由环路的错误:
  1. 配置错误
  2. 聚合了不存在的网络
  3. 网络故障

我们来举例说明上述的情况:
静态路由配置

首先在路由器表中会自动生成直连的接口地址。


再根据实际的需求,人工使用路由命令设置一些静态的路由器表项,如R1的静态表项192.168.2.0/24项

  • 对于有多个网络存在时,如连接到因特网,对每个网络都进行静态配置显然是不现实的,因此就引出了默认路由的概念。

默认路由:

  • 对于具有相同下一条的不同目的网络的路由条目,使用一条默认路由进行设置

例如:
默认路由举例
对于除了确定的条目,其他的路由条目都会被默认路由处理。

除此之外,还有个特定路由条目的概念:

特定路由条目:

  • 在需要考虑某种安全问题或者网络管理人员对网络的管理和测试,可以针对某台特定主机设定一个特定路由,在路由表中为该主机设置一个路由条目。
  • 对于特定路由器,其网络前缀最长(主机号最短),路由最具体

特定路由举例
在多条路由可选时,根据最长前缀进行匹配

路由器配置可能产生的路由环路问题:

  • 在路由器表项配置时,由于人工配置差错或者机器故障,可能导致路由环路问题。
  • 路由环路问题指的是网络传输数据报时,由于路由表存在问题,可能导致数据报传输出现了封闭的环路,也就是出现了“反复横跳”现象
  • 这种现象会导致网络传输的资源的巨大浪费。

例如:
正确转发的路由器表项

在R2的路由表中的192.168.1.0.24表项,其下一条是10.0.0.1接口,通过10.0.0.1接口传输到R1,R1根据其路由表找到对应地址在接口0,网络号成功对应,数据报传输成功。
路由器配置错误导致出现路由环路
当R2的路由表中的192.168.1.0.24表项被错误的设置成了10.0.1.2接口时,目的主机应该在10.0.0.1接口转发,但是此时根据路由表会将该数据包错误的发给10.0.1.2接口,传输到R3路由器,此时根据R3路由器的路由表,又将其传回了R2路由器,此时R2路由器根据其路由表又将其传回了R3路由器,此时出现了网络环路的情况。也就是出现了反复横跳


无疑在这种情况下会造成网络资源的浪费。


因此,为了防止IP数据报在环路中永久兜圈,在IP数据报首部设置了生存时间TTL字段其初始化为某值,每次进入路由器-1,若TTL为零,则不转发,丢弃。

对于出现路由器的环路不只是配置了错误的接口,还有以下几种情况:

聚合了不存在的网络导致数据环路:

聚合不存在的网络导致数据环路

在R2的路由表中,对R1连接的两个主机的网络号进行了聚合,根据由于其网络号的情况,可以看出需要借用2个主机号进行聚合,也就是会产生4个子网


但是在实际只有两个子网,此时若路由器接收到人工聚合的地址中存在,但是实际上不存在的网络地址会怎么样呢?聚合路由存在情况

转发不存在的路由地址

此时若R2要转发地址为192.168.3.0/24的地址,这在本网络中是不存在的,但是根据聚合路由表,要将该IP数据报传输的10.0.0.1接口,传输到R1,此时R1查询该IP网络地址,发现找不到该具体网络地址,此时就会通过默认路由地址进行转发。此时很明显,又会被转发回到R2路由器,此时就出现了路由环路

解决方法:

对于这种数据环路的情况,可以通过设置黑洞路由,将路由器聚合存在,但是实际不存在的路由设置一个NULL0接口(路由器内部的虚拟接口,就像是一个黑洞,IP数据报转发进去后有进无出
设置黑洞路由

网络故障导致路由环路:

路由故障导致删除路由条例

根据路由器的工作机制,当检测到某路由器故障时,会将该路由表删除


若此时R2路由器要转发到该故障的网络地址,就会出现像上面没有该网络地址的转发情况,出现路由环路。
网络故障导致网路  环  路

解决方法:

对于这种情况,可以像上面解决网络聚合出现环路的步骤一样,对该网络故障接口设置黑洞接口,当检测到路网络障后设置,当检测到网络正常后将该黑洞接口设置为失效状态。
黑洞路由

4.6 路由器选择协议

路由器选择协议概述

路由器的选择协议分为两种:

静态路由选择:
静态路由选择

动态路由选择:
动态路由选择

因特网(最大的网络)所选择的路由选择协议有三个特点:

  1. 自适应:采用动态路由选择,能较好的时应 网络状态的变化
  2. 分布式:路由器之间通过相互之间的信息交互,交换路由信息
  3. 分层次:将整个互联网划分为许多较小的自治系统AS(Autonomous System),例如,一个较大的因特网服务提供商(电信),就可以划分成一个自治系统,对于自治系统内部和自治系统外部,分别采用不同类别的路由选择协议,分别进行路由选择

例如:
自治系统

自治系统之间称为域间路由选择,自制系统内称为域内路由选择。

自制系统选择的协议

自治系统之间称为内部网关协议,自制系统内称为内部网关协议。

  • 此处的网关就是路由器,只不过是路由器早期的名称。
    路由协议就是一个名称,并不是一个具体的协议。

网关协议之间并没有关联

常见的路由协议:

常见路由协议

路由器的基本结构:
路由器的基本结构

路由器是具有多个输入端口和输出端口的专用计算机,其任务是转发分组


路由器主要由两部分组成:

  1. 路由选择部分:
    核心构件是路由选择处理机根据路由器选择协议,周期性的和其他路由器进行路由信息交互,构建路由表
  2. 分组转发部分:
    分组转发部分主要有三部分组成:交换结构、一组输入端口一组输出端口。

路由器的基本工作过程:

  1. 某IP数据报进入路由器输入端口后处理过程
    数据报进入输入端口

转换为比特流送交数据链路层处理

物理层将其信号转变成比特流,送交数据链路层处理。

数据链路层处理

数据链路层从比特流中识别出帧,去掉帧头和帧尾后送交网络层处理。

网络层输入处理

网络层中接收后判断其分组类型,若是普通的数据分组,会将其发送到分组处理机构中

  1. 某数据报进入分组处理机构后处理过程:
    分组处理机构处理

分组机构会根据其分组首部地址中的目的地址进行查表转发,若找不到目的地址,则进行丢失分组,否则转发到下一对应端口

  1. 某IP数据报进入路由器输出端口后处理过程
    网络层输出端口处理

输出端口网络层会更新数据分组首部中某些字段的值,例如将数据分组生存时间-1。然后送交数据链路层处理 。
数据链路层输出处理
数据链路层封装成帧,交给物理层处理。

物理层输出处理

物理层将帧转为对应的比特流,在转换成电信号进行发送。

  1. 若输入网络层识别到的是路由之间交换路由信息的路由报文。输入识别到是路由报文

则会将该路由报文转发给路由处理机,路由处理机根据分组报文更新自己的路由表。

对于路由表有以下要点:路由要点

初次之外还有两个要点:

  • 路由选择处理机会周期性的发送自己知道的路由信息给其他处理机,发送的处理操作跟上面的发送端口操作一致
  • 路由器的个端口还应有输入缓冲区和输出缓冲区

输入缓冲区用于存储新进入路由器但还来不及处理的分组。


输出缓冲区用来存储已经处理完毕但是还来不及发送的分组

路由信息协议RIP的基本工作原理

RIP协议的基本概述:
RIP的基本工作原理

  • RIP协议认为好的路由就是距离短的路由,就是所通过路由器数量最少的路由。

例如:
RIP认为的好路由

  • 当到达同一目的的网络有多条距离相等的路由时,可以进行等价均衡负载,就是将通信量均衡的分布到多条等价的路由上。
    等价均衡负载

在这种情况下,两条路由长度相等,因此进行等价均衡负载。

RIP协议的三个要点:

  1. 只和相邻路由器交换信息
    相邻路由器
  2. 交换信息时交换自己的路由表
  3. 周期性(例如30秒一次)交换信息

RIP的基本工作过程:

例如:
RIP基本工作过程举例
根据RIP协议,工作流程如下:
RIP协议工作过程

RIP协议的路由条目的更新规则:
例如:
RIP协议路由条目更新规则

在C要把路由表信息转发给D时。


路由器C的表到达各目的网络的下一条都记为问号,可以理解为路由器D并不需要关心路由器C的这些内容


假设路由器C的RIP更新报文发送周期到了,则路由器C将自己路由表中的相关路由信息封装到RIP更新报文中发送给路由器D

  • 路由器根据接收到的路由更新报文进行什么操作,就是我们要学习的RIP协议路由条目更新规则。
  • 总体上来说,明确一个原则,为了更好的转发数据报,提升数据报转发的效率,才进行路由器表更新,否则不更新。

D接收到C发送的数据报

在D接收到C发送来的数据报后,首先会对C发送过来的路由表进行改造,改造主要是:


将路由表的所有下一跳改为C(因为是C发来的路由表,要走该路由表路径,下一条必须为C)


将所有距离+1,同上理由,要走该条路径,必须再走到C,而C是相邻路由器,距离要+1

更新规则

D接收到数据报后,第二步就是要更新路由表,更新规则如下:

  1. 当目的网络、下一跳相同时,新的数据替代旧的数据。(说明是下一条路径的最新数据,有利于数据正确转发,更新)
  2. 当出现了新的目的网络,添加一条新的数据。(能够到达新的目的网络有,有利于转发,更新)
  3. 当目的网络相同,下一跳不同,并且距离小于路由表已有数据时,更新数据。(能够到达的目的网络有了新的、更短的距离路径,有利于提高转发效率,更新)
  4. 当目的网络相同,下一跳不同,并且距离等于路由表已有数据时,添加数据。(有利于进行等价均衡负载,提升效率,添加)
  5. 当目的网络相同,下一跳不同,并且距离大于路由表已有数据时,不进行更新。(不利于提高转发效率,不进行处理)

RIP协议存在“坏消息传得慢”的问题:

例如:
RIP换消息传得慢例子

由于N1出现故障,RI路由器将N1的距离设置为16(16距离就是认为的不可到达距离)。


此时R2根据以前RIP协议获得的路由器情况,发送更新请求给R1,而此时R1的更新情况,也就是N1的更新情况还没发给R2

RIP协议出现慢传递

此时R1的路由器表先收到R1的路由器表后会根据上面说的更新规则进行更新,将N1到R2的距离更新为3。此时数据就是被谣言误导的。


此后,两路由器之间会一直以被误导的数据进行循环更新路由数据,指导双方距离达到16(认为不可达)时,才会选择放弃传输。

RIP协议出现路由环路

在此过程中,就会出现路由环路,导致路由器间被占用长达数分钟的时间

坏消息传得慢概述

可以采取一些措施减少坏消息传得慢问题带来的危害:
减少换消息传得慢措施

  • 但是,就算采取了上述措施,由于向量计算算法的本质决定,坏消息传得慢问题还是有可能会出现。

RIP协议小结:
RIP协议小结

开放最短路径优先OSPF协议

基本原理

  • 开放最短路径优先OSPF,是为了克服RIP的缺点在1989年开发出来的

**“开放”**表明OSPF协议不是受某一家厂商控制,而是公开发表的。


最短路径优先,是因为使用了迪杰斯特拉的最短路径算法SPF(最小生成树)

  • OSPF是基于链路状态的,而不是像RIP那样基于距离向量的
  • OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路
  • OSPF不限制网络规模更新效率高收敛速度快
  • 链路状态是指本路由器都和哪些路由器相连,以及相应链路的代价,也就是走到该路由器的消耗值。(与数据结构-图中点的权值意义类似)

代价用来表示费用、距离、时延、带宽等等。这些都由网络管理人员来决定。

关于代价的计算:
关于代价的计算

  • 值得注意的是,代价计算都由网络管理员来决定,没有统一
  • OSPF相邻路由之间通过交互问候(Hello)分组建立和维护邻居关系
    Hello分组

关于Hello分组:

  1. Hello分组封装在IP数据报中,发往组播地址224.0.0.5
    邻居路由器分组地址
  2. 发送周期为10秒
  3. 40秒未收到来自邻居路由器的Hello分组,则认为该邻居路由器不可达
  • 为了维持邻居关系数据,在路由器中会有一个邻居表,记录一些邻居路由器的情况:
    邻居路由表
  • 使用OSPF的每个路由器都会产生链路状态通告LSA,LSA中包含以下内容:

直连网络的链路状态信息


邻居路由器的链路状态信息

  • LSA被封装在链路状态更新分组LSU中,采用洪范法发送
    洪范法例子

每个使用OSPF的路由器都有一个链路状态数据库LSDB,用于存储LSA


通过各路由器洪范发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达成一致
LSDN数据库

  • 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他路由器的最短路径,即构建各自的路由表。

实际构建过程如下:

DSF算法距离

  • OSPF有5种分组类型:

5种分组类型

OSPF的基本工作过程:

OSPF基本工作过程

主要可以看成三个部分:

  1. 通过发送问候分组建立和维护邻居关系
  2. 链路状态数据库同步


    发送数据库描述分组,将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由。


    路由器发送自己缺失某些链路状态摘要信息中的详细信息,就会向相邻路由发送链路状态请求分组


    相邻路由器收到链路更新请求后会返回路由状态更新分组。


    发送请求的网络收到更新分组后会返回确认分组,一次更新数据过程结束。
  3. 同步状态后的链路状态数据库同步
    在30分钟后或者链路状态发生变化后,会进行新的更新状态过程,如第2点所说。

OSPF在多点接入网络路由器中邻居关系的建立
OSPF在多点接入网络路由器中邻居关系的建立

  • 为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统划分成为若干个更小的范围,叫做区域

例如:
区域

区域之间分为主干区域和区域。


在图中可以看到有4种路由器:

  1. 区域内路由器(IR):只用于区域内通信。
  2. 区域边界路由器(ABR):用户区域间通信。
  3. 自治系统边界路由器(ASBR):用于和其他自治系统通信。
  4. 主干路由器(BBR):位于主干区域的路由器
  • 使用分层次划分区域的方法,虽然使交换信息的种类变多了,也使OSPF协议更复杂了,但是能使区域内部交换信息量大大减少,使的OSPF能用于规模很大的自治系统中

边界网关协议BGP

边界网关协议BGP基本原理:

  • 首先应该明确的是互联网采用分层次的路由选择协议:
    -内部路由选择协议
  • 对于上面所讲的路由信息协议RIP、开放最短路径优先协议OSPF都是用于自治系统内部的,称为:内部网关协议(IGP)

接下来我们就要学习用于外部网关的网关信息协议,外部网关信息协议(EGP):

外部网关协议:

外部网关协议

网布网关协议主要用于不同自治系统之间采用代价计算原则不同导致的自制系统之间寻求最佳路由错误。

例如:
路由度量示例

  • 除此之外,自制系统之间的路由选择必须考虑相关策略(政治、经济、安全等)
    考虑多个因素

但是这些考虑是由网络管理员设置的,并不是网络协议本身。

  • 对于边界网关协议(BGP),只能是力寻一条能够到达目的网络,且比较好的路由路径(不出现网络环路),并不是要找最佳路径。

BGP的基本工作流程如下:
BGP基本工作流程1
基本工作流程图

BGP基本工作流程2
根据以上步骤来构建出某个自制系统连通图:

构建出某个网络

  • BGP适用于多级结构的因特网。

BGP的发言过程:
发言过程
BGP-4的四种报文:BGP的四种报文

BGP刚刚运行时,BGP的临站会交换整个BGP路由表,以后只需要在路由情况发生变化时更新有变化的部分


这样做对节省网络带宽和减少路由器的处理开销都有好处。

IPv4数据报的首部格式

为了表示方便,以下IPv4数据报检查简称为IP数据报。

  • IP数据报及其首部格式是实现IP协议主要功能的基础,我们有必要搞清楚这部分内容

IP协议的组成:
IP协议的组成

在IP协议中分为两部分:


固定部分:
由20子节组成,是每个IP数据报都必须包含的部分。


可变部分:
可选字段,由40个子节组成,用来增加IP数据报的功能。


IP数据报的首部的每一行都由32个比特(4个子节)组成。


在图中的每个小个子称为字段或者。每个字段或者某个字段的组合用来表示IP协议的相关功能

相关字段功能解释:

版本字段:
版本字段
首部长度字段:

首部长度字段
可选字段:
可选字段
可选字段释义
填充字段:
填充字段

  • 填充字段为了确保首部长度为4的整数倍。使用全0进行填充

因为IP地址首部的可选字段的长度为1个子节到40个子节不等。为了确保首部长度整体是4字节的倍数,因此需要用首部填充字段进行填充。

区分服务字段:
区分服务字段

总长度字段:
总长度字段

首部字段和总长度字段的区别和联系:
IP数据报举例

在该IP数据报中,由首部和数据载荷部分组成,这两部分是怎么跟IP数据报首部格式联系起来的呢?


例如:
IP数据报首部长度字段值为:0101(十进制为5)。总长度字段为000000111111100(十进制为1020).

计算得出其各部分长度
计算过程:
计算过程

值得注意的是:
首部字段以4子节为单位,在计算时要乘以4


总长度包括首部长度,因此在计算数据载荷长度时要减去首部长度,即:数据载荷长度计算

标识、标志、片偏移字段:
标志等三个字段

  • 这三个字段共同用户数据报分片,此时就引起了数据报分片的概念。

数据报分片:

  • 简单来说,数据报分配就是数据报长度超过最大传输单元时,将数据报进行分割的操作
  • 数据报长度超过最大传输单元(MTU)时,将无法封装成帧,因此就将原IP数据报进行分片,使其成为更小的IP数据报。再逐个分配IP数据报封装成帧进行递交给物理层处理。

长度过大进行封装成帧

  • 以太网规定MTU的值为1500子节

标识、标志、片偏移含义:
标识、标志、片偏移含义
对IP数据报进行分片举例:
数据报分片图片

对于该数据报,长度为数据载荷子节+固定首部子节 = 3800子节。

若在以太网进行传输时,明显是超过以太网MTU的,此时便无法正常封装成帧,因此需要对其及进行分片

分片后情况

在分片时,首先给数据载荷个字节进行编号

编号完毕后根据合适的大小将其进行分组

分组完毕后再给其加上一个新的首部


然后就要开始填写分组各首部的数据,也就是图中表格的填写。


首先回忆一下各个标识的含义:

MF:标识后面还有没有分片数据报,即自己是不是最后一个分片。


DF:标识可否进行分片

片偏移记录片偏移的地址量(就是分片首部地址编号跟原首部地址的编号偏移了多少个地址)


我们对分片数据报1的首部各个字段进行解释:


总长度字段:由于分片长度为数据载荷长度+分片首部 = 1400 + 20 = 1420


标识字段:用于标识本个分片,设置为12345


MF:由于这是分片1,后面还有分片2,因此该标识位为1

DF:该分片可以继续分片,因而其值为0


片偏移量:
标识分片首部相对于原数据报首部的偏移地址,计算方式为:分片首部地址/片偏移量单位

因此此处的数据为0/8 = 0,标识标识与原数据报的首部地址偏移地址为0,也就是没有偏移。


表格中其他数据大同小异,不再进行赘述。

此时若需要,还可以对某分片进行再度分片,例如,对分片2进行再度分片:
分片2进行再次分片

生存时间字段:
生存时间字段

  • 生存时间字段TTL的一个重要作用:防止IP数据报在网络中永久兜圈

例如:

永久兜圈示例

在此图中,由于人工设置静态路由条目出现错误,很明显会出现路由环路问题,导致IP数据报在路由环路之间循环传输,永久兜圈。


此时TTL就可以在一定时间走过后没有到达目的路由器就会将其进行丢弃,防止IP数据报出现永久兜圈。

协议字段:
协议数据段
例如:
协议字段举例

若协议字段为1,则其为ICMP封装的协议数据单元。

首部检验和字段:
首部检验和字段

值得注意的是,由于其计算过程耗时,在IPv6中已不再计算首部校验和。

源IP地址、目的IP地址字段:

源IP地址、目的IP地址字段

4.8 网际控制报文协议ICMP

  • ICMP是为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP
  • 主机或路由器使用过ICMP来发送差错报文询问报文
  • ICMP报文被封装在IP数据报中发送

ICMP中的差错报文

ICMP中差错报文共有5种,分别是:

  1. 终点不可达:
    终点不可达概念
    例如:
    终点不可达示例

当H1要发送数据给H2时,若R1没有网络N3的路有记录、默认路由以及H2的特定主机路由时,就不知道怎么发送该报文,只能将其丢弃,并且发送ICMP差错报文(终点不可达)

  1. 源点抑制:
    源点抑制概念
    例如:
    源点抑制
    3.时间超过:
    时间超过概念

例如:
时间超过例子

  1. 参数问题: 参数问题错误概念
    例如:
    参数问题举例

  2. 改变路由: 改变路由概念
    例如:
    改变路由示例1

原来H1 -> H2的路径如图红线所示,当R1检测到到H2有更合适的路径时,就会发送改变路由报文。

路由改变报文

之后便会开始走新的路径。

  • 对于以下情况不发送给ICMP差错报告报文:

不发送差错报文

常见的ICMP询问报文

回送回答和回答报文:

  • ICMP回送回答报文是由主机和路由向一个特定的目的主机发出的询问
  • 收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文
  • 主要用来测试目的站是否可达以及了解其有关状态

时间戳请求和回答:

  • ICMP时间戳请求报文时请某个主机或路由器回答当前的日期和时间
  • ICMP时间戳回答报文中有一个32位的字段,写入的整数代表从1900年1月1日到当前时刻一共有多少秒
  • 主要用来进行时钟同步和测量时间

ICMP协议的两个应用

分组网间探测PING:

  • 用来测试主机或路由器之间的连通性

  • 应用层直接使用网际层的ICMP(没有经过运输层的TCP或UDP)

  • 使用ICMP回送请求和回答报文

例如:
PING举例
跟踪路由traceroute:

  • 用来测试IP数据报从源主机到达目的主机要经过哪些路由器
    traceroute
    traceroute

跟踪路由traceroute实现原理:

  • 简单来说,就是先发送一个TTL = 1的报文,当TTL到达第一个主机后TTL变为0,此时路由器会回送时间超过差错报文,此时就能知道第一个路由位置。此时源主机再发送TTL = 2 的报文,当TTL到达第二个主机后TTL变为0,此时路由器会回送时间超过差错报文,此时就能够知道第二个路由的地址。如此反复,直到到达最后一个路由。

例如:
TRACEROUTE第一步

发送第一个TTL = 1 ,到达第一个主机后回送时间超过报文,此时源主机就能知道第一个路由器

traceroute 第二步

发送第二个TTL = 2 ,到达第二个主机后回送时间超过报文,此时源主机就能知道第二个路由器

traceroute第三步

  • 到达目的地址后,知道最后一个路由器,过程结束。

4.9 虚拟专用网VPN和网络地址转换NAT

虚拟专用网VPN:

首先先思考一个问题:

如何让两个专用网络进行通信?

例如:
两个专用网络通信方式

第一种方式就i是采用电信公司的通信线路,这种方法简单方便,但是租金太贵


因特网连接方式

第二种方式就是将两个网络通过英特网进行通信,但是他们之间的IP地址又如何分配?

首先明确一个概念:

  • 利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网称为虚拟专用网(VPN)
  • 由于IPv4地址的紧缺,一个机构在因特网上能够申请到的IPv4的地址数量往往是小于本机构所拥有得到主机数量。因此,虚拟专用网中个主机所分配的地址应该时本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址
  • 在IPv4地址空间中就规定了这样子的特殊地址分配方案

专有地址

这些地址就可以在本地自由分配,不会在因特网中造成冲突。私有地址只能用作本地地址不能用作全球地址
本地地址与全球地址

本地地址:仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。


全球地址:全球唯一的 IP 地址,必须向互联网的管理机构申请。


在因特网中得到所有路由器,对目的地址的IP数据报一律不进行转发。

因此可以对两个专用网络采用本地地址进行分配:
本地地址分配

为了使两个部门的网络能够跟因特网联通,因此还需要两个路由器具有合法的全球IP地址,这样子才能实现通过因特网通信。

此时,两个专用网络通信的过程为
专用网络通信的过程

首先对本地数据报进行加密,加密后发送到因特网,经过因特网传输到目的专用网,解密数据后发送到目的主机。

  • 由于两个专用网内的主机间发送的数据报实际上是通过了公用的因特网,但在逻辑上就好像是在本机构的专用网上传送一样

  • 数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看R1和R2之间好像是一条直通的点对点链路
    隧道技术

因此这种通信方式又称为IP隧道技术

VPN的类型:
VPN类型

对于很多同学在家访问校园内网时,实际上就是远程VPN技术。

网络地址转换NAT:

NAT概述:

NAT
例如:

使用私有地址的主机要给因特网上使用全球IP地址的另一台主机发送IP数据报:

NAT机制发送

通过NAT机制,将本地地址转换成NAT路由器的全球地址,并且将数据报首部的目的地址也改成NAT路由器的全球地址,进行发送。


并且该次转换存在NAT转换表中。

此时若因特网上的这台主机给源主机发回数据报
在这里插入图片描述

NAT路由器接收到数据报告,根据首部的目的在地址,查找NAT转换表后进行转换,转换成目的主机本地地址后进行传输。

此时会出现一个问题:

  • 当专用网中的这两台使用私有地址的主机都要给因特网使用全球地址的另一台主机发送数据报时,在NAT路由器的NAT转换表中就会产生两条记录,分别记录两个私有地址与全球地址的对应关系。
    两个地址进行NAT

由于NAT地址有限,因此存在一个问题:
NAT存在问题
解决方法:多个路由NAT解决方法

napt

这部分内容涉及到运输层,暂时不多解释。

此时就有了一个问题:

  • 内网主机与外网主机的通信,是否能由外网主机首先发起?

答案是不行。

不能由外网发起
不能由外网发起

如果觉得文章写的还不错,麻烦点个赞支持一下,欢迎评论,互相交流学习。

猜你喜欢

转载自blog.csdn.net/Nimrod__/article/details/113503377