目录
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
要实现网络层主要任务,需要解决以下主要问题:
因特网(Internet)是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。
由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
综上所述,我们通过学习TCP/IP协议栈的网际层来学习网络层的理论知识和实践技术。


采用这种思想的好处:网络的造价大大降低、运行方式灵活、能够适应多种应用

由于TCP/IP体系结构的因特网的网际层提供的是简单灵活、无连接的、尽最大努力交付的数据服务,因此本博客主要围绕网际层如何传送IP数据报这个主题进行讨论。

32比特的IPv4地址不方便阅读、记录以及输入等,因此IPV4地址采用点分十进制表示方法以方便用户使用


8位网络号第一个固定为0

可指派的网络数量为eq?2
每个网络中可分配的IP地址数量为eq?2
16位网络号前两位固定为10

可指派的网络数量为eq?2=16384
每个网络中可分配的IP地址数量为eq?2-2=65534(减2的原因是除去主机号为全0的网络地址和全1的广播地址)
24位网络号前三位固定为110

可指派的网络数量为eq?2=2097152
每个网络中可分配的IP地址数量为eq?2-2=254(减2的原因是除去主机号为全0的网络地址和全1的广播地址)


首先我们先来说明以下为什么要将IPv4地址划分子网。
如图:某单位有一个大型的局域网需要连接到因特网。申请了一个B类的网络地址,因此分配IP地址的数量达到了65534个,给每台计算机和路由器的接口分配一个IP地址后,还有大量IP地址剩余,这些剩余的IP地址只能由该单位的同一个网络使用,而其他单位的网络不能使用。

随着发展需要将原来三个网络划分成三个独立的网络,需要将原来的网络划分成三个独立的网络假设子网1仍然使用原先申请到的B类网络地址,那么就需要为子网2和子网3个字申请一个网络地址。

为新增网络申请新的网络号会带来以下弊端:
为避免这种情况出现,可以从主机号部分借用一部分作为子网号,如图


【举例】已知某个网络的地址是 218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节。
【解析】
由网络号可知是C类网络地址 
子网掩码 
所以划分出的子网数量eq?2=2
每个子网可分配的地址数量eq?2-2=126(减2是要去掉主机号为“全0”的网络地址和“全1”的广播地址)


【习题】已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.192对其进行子网划分,请给出划分细节。

【2019年 题39】某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0,如该主机向其所在子网发送广播分组,则目的地址可以是

默认子网掩码默认的子网掩码是指在未划分子网的情况下使用的子网掩码。

划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址空间太小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题。
1993年,IETF发布了无分类域间路由选择CIDR的RFC文档
CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念;
CIDR可以更加有效地分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。
【举例】
【例1】请给出CIDR地址块128.14.35.7/20的全部细节(最小地址,最大地址,地址数量,聚合C类网数量,地址掩码)。
【解析】

【练习】请给出CIDR地址块206.0.64.8/18的全部细节(最小地址,最大地址,地址数量,聚合
C类网数量,地址掩码)。
【解析】




举例说明一下定长的子网掩码FLSM

我们先分析一下应用需求

应用需求:将C类网络218.75.230.0划分成5个子网,每个子网上可分配的IP地址不少于各自的需求

由于划分成5个子网,因此可以从主机号借用3个比特作为子网号
子网数量:eq?2=8
每个子网上的地址数量:eq?2=32

我们看一下划分子网的细节


通过本例可以看出,采用定长的子网掩码进行子网划分,只能划分出eq?2个子网,其中n是从主机号部分借用的用来作为子网号的比特数量。每个子网所分配的IP数量相同,例如图中的网络5只需要4个IP地址 ,但是我们给它分配了32个IP地址,这样就造成了IP地址的严重浪费。
示例:同样用上面的例子这次采用变长的子网掩码VLSM,首先我们分析每个子网的主机号位数、网络前缀位数、地址块、地址数量,如下:

得出应用需求:从地址块218.75.230.0/24中取出5个地址块(1个“/27”地址块,3个“/28”地址块,1个“/30”地址块),按需分配给下图所示5个网络
在该地址块中给下图所示的网络N1~N5分配子块,分配原则是“每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点”。建议先给大的子块分配

每个子网块中最小地址位网络地址,最大地址位广播地址
IP数据报的发送和转发过程包含以下两部分:
举例说明:
在下图所示的小型互联网中,路由器的接口0直连了一个交换式以太网,接口1也直连了一个交换式以太网。我们给该网络分配了这样的网络地址和子网掩码,给网络中的各主机和路由器的接口配置了相应的IP地址和子网掩码。

同一网络中的主机之间可以直接通信,不同网络中的主机之间的通信,需要通过路由器来中转,这属于间接交付。

源主机如何判断出目的主机是否与自己在同一个网络中:
举例说明,假设主机要给主机F发送IP数据报。主机C将自己的IP地址和子网掩码相与,就可以得到主机C所在网络的网络地址。既然主机C要给主机F发送IP数据报,那主机C肯定知道主机F的IP地址,主机C将主机F的IP地址与自己的子网掩码相与,就可以得到目的网络地址,发现不相等因此主机C就知道了主机F与自己不在同一网络。它们之间的通信属于间接交付。

主机C如何知道路由器R的存在?主机C应该把IP数据报交给哪个路由器进行转发呢?用户俄日了让本网络中的主机就必须给其指定本网络中的一个路由器,所指定的路由器,也被称为默认网关。我们可以将路由器接口0的IP地址指定给该接口所直连网络中的各个主机作为默认网关。同理,可将路由器接口1的IP地址指定给该接口所直连网络中的各个主机作为默认网关

当本网络中的主机要和其他网络中的主机进行通信时,会将数据报传输给默认网关,由默认网关帮主机将IP数据报转发出去。
假设本例中的主机A要给主机D发送IP数据报,这属于间接交付。主机A会将该IP数据报传输给自己的默认网关,

路由器收到IP数据报后如何转发?
路由器收到IP数据报后如何转发?
我们假设本例中的IP数据报首部没有出现差错。路由器取出IP数据报首部各地址字段的值。源地址字段的值位主机A的IP地址,目的地址字段的值为主机D的IP地址。路由器就要对该IP数据报继续宁查表转发。当我们给路由器的接口配置IP地址和子网掩码时,路由器表中就存储了相关信息

路由器根据IP数据报的目的地址在自己的路由表中查找匹配的路由条目。将目的地址与路由条目中的地址掩码相与得到目的网络地址,该目的网络地址与路由条目中的目的网络地址相同,则这条 路由条目就是匹配的路由条目,也就是从接口1转发该IP数据报。这样主机D就可以收到路由器转发来的该IP数据报。


假设主机A给本网络上的各设备发送一个广播IP数据报。在数据报首部的目的地址字段可以填写的目的地址为192.168.0.127,这就是本网络的广播地址;也可以填写255.255.255.255,这就是受限的广播地址,该网络中的各设备都会收到该广播IP数据报。但是路由器收到后不会转发该数据报,路由器是隔离广播域的




静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。
【举例】说明静态路由配置
我们采用如图所示的网络拓扑和相应的IP地址配置,路由器R1和R2的路由表如下

现在假设R1要转发一个IP数据报给该网络中的某个主机。R1应该把该IP数据报转发给路由器R2的接口2。但R1的路由表中并没有关于该网络的路由条目。R1并不知道目的网络的存在。因此我们可以使用路由器的相关配置命令,给R1添加一条到达该目的网络的路由条目。

该路由条目是我们人工配置的静态路由。所以类型是静态,同理R2要给左边网络的某主机转发一个IP数据报,也需要使用路由器的相关配置命令,给R2添加一条到达该目的网络的路由条目。

以上就是我们举例说明的静态路由配置。
【举例】默认路由举例
还是这个例子,现在假设路由器R2的接口连接到了因特网。

假设R1要转发一个IP数据报给因特网某个网络中某个主机。R1应该把该IP数据报转发给路由器R2的接口0。由于因特网中包含众多网络,如果我们给R1添加针对这些网络的每一条路由条目,则会给人工配置带来巨大的工作量,并且使R1路由表变的非常大,降低查表转发的速度。实际上对于具有相同下一跳的不同目的网络的路由条目,我们可以使用一条默认路由条目来代替。默认路由中的目的地址为0.0.0.0,地址掩码也为0.0.0.0,其CIDR形式为0.0.0.0/0。如图

【举例】特定主机路由举例
特定主机路由一般用于网络管理人员对网络的管理和测试。另外在需要考虑某种安全问题时也可以采用特定主机路由。

假设这是该网络中的某台特定主机。我们可以在R1的路由表中添加一条到达该主机的特定主机路由条目。

使用静态路由配置可能出现以下导致产生路由环路的错误
【举例】静态路由配置错误导致路由环路
如图这是各路由器自动得出的直连网络和我们给各路由器人工配置的静态路由。

假设我们将R2第一条人工配置的静态路由条目错误的配置成10.0.1.2。下一条就从R1的接口1错误的指向了R3的接口0。该IP数据报发送后,经过R3查表会回到R2查表又会到R3就导致了路由环路。
为了防止IP数据报在路由环路中永久兜圈,可以在IP数据报首部设有生存时间TTL字段。IP收报进入路由器后,TTL字段的值减1。若TTL的值不等于0,则被路由器转发,否则被丢弃。
【举例】聚合了不存在的网络而导致路由环路
如图这是各路由器自动得出的直连网络和我们给各路由器人工配置的默认路由和聚合路由。

假设R2要转发IP数据报到该网络。进行查表转发到R1,R1查表下一跳是通过接口2直接交付。就转发给了目的网络

实际上聚合路由的目的网络包含了以下四个地址


假设当R2要转发IP数据报到这个不存在的网络时,R1查表找到了匹配的路由条目,转发给R1,但对于这个不存在的网络,却错把它转发给了路由器R1。R1进行查表发现没有匹配的路由条目,只能走默认路由,就又回到了R2,就导致了路由环路

针对这个问题,我们可以在R2的路由表中添加针对所聚合的、不存在的网络黑洞路由。下一跳为null0也就是丢弃。假设R2要转发IP数据报到这个不存在的网络,找到了两条可选的路由条目,根据最长前缀匹配原则,将会选择黑洞路由,进而丢弃
【举例】网络故障导致路由环路
假设路由器R1检测到其接口0所直接的网络出现了故障而不可达,就会自动在其路由表中删除该直连网络的路由条目。

R2要转发IP数据报到该网络,会进行查表,转发到R1查表后没有找到匹配的路由条目,就只能走默认路由,默认路由下一跳又回到了R2就导致了路由环路。

针对这个问题,我们可以在R1的路由表中添加针对该直连网络的黑洞路由。R1查表后丢弃该IP数据报,故障恢复后会自动调价该路由条目并且自动使黑洞路由失效,当故障再次出现后,黑洞路由再次自动生效。

因特网所采用的路由选择协议的主要特点:
【举例】说明因特网分层次的路由选择协议
如图是因特网中的一部分,左边网络和路由器划归为一个自治系统,右边划分为另一个自治系统。


路由选择协议是在路由器上运行的
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。


路由选择部分也叫做控制部分,或控制层面,其核心构件是路由选择处理机。路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
分组转发部分,也就是数据层面,它是三部分组成:交换结构、一组输入端口和一组输出端口
交换结构又称为交换组织,它的作用就是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。
物理层进行比特的接收。数据链路层按照链路层协议接收转发分组的帧。在把帧的首部和尾部剥去之后,分组就被送入网络层的处理模块。若接收到的分组是路由器之间交换路由信息的分组(如RIP或OSPF分组等),则把这种分组送交路由器的路由选择部分中的路由选择处理机。若接收到的是数据分组,则按照分组首部中的目的地址查找转发表,根据得出的结果,分组就经过交换结构到达合适的输出端口



RIP包含以下三个要点:

【举例】RIP的基本工作过程


【举例】RIP的路由条目的更新规则
假设C、D原来路由表信息如下
假设现在路由器C的RIP更新报文周期到了,C就发送封装有路由信息的RIP更新报文给D。

路由器D收到之后对其进行改造。距离+1,下一跳改为C

路由器D再对照自己的路由条目进行更新


【举例】
思科路由器中OSPF计算代价的方法:100Mbps/链路带宽,计算结果小于1的值仍记为1;大于1且有小数的,舍去小数。

OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。


使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement)。LSA中包含以下内容:
LSA被封装在链路状态更新分组LSU中,采用洪泛法发送(将自己其他所有接口转发该分组)。

使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。
通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达到一致。

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

OSPF有以下五种分组类型
OSPF的基本工作原理

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

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

区域内路由器IR(internal router): R1,R2,R8,R9
主干路由器BBR(backbone router): R3,R4,R5,R6,R7
区域边界路由器ABR(area border router): R3,R4,R7
自治系统边界路由器ASBR(AS border router): R6
外部网关协议EGP(例如边界网关协议BGP)

在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人“
不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179
BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP

BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)
当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图。

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

BGP-4有以下四种报文
例题



版本:
占4比特,表示IP协议的版本。
通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
首部长度:
占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。
最小十进制取值为5,表示IP数据报首部只有20字节固定部分;
最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
可选字段:
长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。
可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。
填充字段:
确保首部长度为4字节的整数倍,使用全0进行填充。
区分服务:
占8比特,用来获得更好的服务。
该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。1998年,因特网工程任务组IETF把这个字段改名为区分服务。利用该字段的不同数值可提供不同等级的服务质量。
只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。
总长度:
占16比特,表示IP数据报的总长度(首部+数据载荷)。
最大取值为十进制的65535,以字节为单位。

标识、标志、片偏移这三个字段共同用于IP数据报分片
标识:
占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。
IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
标志:
占3比特,各比特含义如下:
片偏移:
占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。片偏移以8个字节为单位。
【举例】对IPv4数据报进行分片


生存时间TTL:
占8比特,最初以秒为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由上所耗费的时间,若不为0就转发,否则就丢弃。
现在以”跳数“为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
【举例】生存时间TTL字段的作用——防止IP数据报在网络中永久兜圈

协议:
占8比特,指明IPv4数据报的数据部分时何种协议数据单元。常用的一些协议和相应的协议字段值如下。

【举例】

首部检验和:
占16比特,用来检验首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。IP数据报没经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
由于IP层本身并不提供可靠传输的服务,并且计算首部检验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部检验和,从而更快转发IP数据报。
源IP地址和目的IP地址:
各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
【题1】


【题2】




ICMP差错报文报文共有以下五种:
1.终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。

2.源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

3.时间超过

4.参数问题
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
5.改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应把数据报发送给另外的路由器(可通过更好的路由)。

以下情况不应发送ICMP差错报告报文:

常用的ICMP询问报文有以下两种:
1.回送请求和回答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。
收到此报文的数据必须给源主机或路由器发送ICMP回送回答报文。
这种询问报文用来测试目的站是否可达及了解其有关状态。
2.时间戳请求和回答
ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。
在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
这种询问报文用来进行时钟同步和测量时间。
ICMP应用举例
分组网间探测PING
跟踪路由
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。
由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。
原理

如下图所示,同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN。
有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网VPN。
在外地工作的员工需要访问公司内部的专用网络时,只有要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,既可访问专用网络中的资源。这种VPN称为远程接入VPN。





