一文搞懂网络层
网络层Note
① 网络层概述
1. 网络层的主要任务
数据链路层只能实现同一局域网下主机的通信,但是局域网之间是存在异构的,不能直接通信,而且局域网的总线长度或者说覆盖范围是有限的,无法把全球变成一个局域网。
因此人们就想实现局域网与局域网之间的通信,进而实现IP数据包在各网络之间的传输,实现全球局域网的互联,也就是现在所说的互联网。
2. 需要解决的问题
-
网络层向运输层提供什么样的服务
IP协议采用的是无连接的、尽最大努力交付的数据报服务,是不可靠传输。部分网络层协议可提供可靠传输。
-
网络层寻址问题(IP地址)
-
路由选择问题(路由选择算法)
② 网络层提供的两种服务
1. 面向连接的虚电路服务
把可靠通信交给网络层来保证。使用虚电路服务必须先建立网络层的连接(虚电路VC),通信双方沿着已建立的虚电路发送分组,以这种方式发送的数据包无差错、按序到达、不丢失、不重复。
分组格式:首部只携带一个虚电路的编号,不需要目的主机的地址
2. 无连接的数据报服务
把可靠通信交给主机(传输层)来保证。使用数据报服务不需要建立网络连接,每个分组可以走不同的路径,以这种方式发送的数据包可能误码、丢失、重复和乱序。
分组格式:首部必须携带目的主机的完整地址
因特网采用这种思想,把复杂的错误处理功能置于因特网的边缘(主机内部的传输层),而相对简单的分组交付置于因特网的核心。
③ IP地址
-
给每个连接在互联网上的主机或者路由器分配的一个唯一的32位的标识符,常使用点分十进制来表示。
-
点分十进制:把32位分成4组,每组8位,把这八位二进制数换算成十进制表示。
-
IP地址的结构:网络号+主机号。网络号和主机号的位数在不同的网络有所不同,可以自己划分。网络号标识互联网中每个不同的局域网,主机号标识该局域网中不同的主机。
-
IP地址的编码方法有三种:分类的IP地址、子网的划分以及构成超网
下面我们一步步深入,从IP地址的编码带你了解网络层是如何工作的
1. 分类编址
网络层把IP地址分为五类,分别是A、B、C、D和E类地址,其中D类地址为多播地址,E类地址至今还没使用。重点只需要放在前三种地址:
对IP地址进行分类是为了适应不同的网络,有些网络拥有很多主机,有些网络主机很少。但不管怎么分配,只需要在同一网络的主机有一个唯一的ip地址就行。
-
A类地址
A类地址最小网络号00000000,保留不指派;最大网络号11111111,作为本地环路测试地址,不指派。
因此A类地址可指派的网络号为00000001~01111110,即1 ~ 126,共有126个网络号,\(2^7-2\)
附:A类地址的本地环路测试地址从127.0.0.1~127.255.255.254
-
B类地址
因为B类地址的头两位为10,因此一定不存在网络号全0或者全1
B类地址最小的网络号为10000000 00000000,即128.0.0.0;最大网络号为10111111 11111111,即191.255.0.0
因此B类地址可指派的网络号为128.0.0~192.255.0.0,可指派的网络数量为\(2^{16-2}=16384\)
-
C类地址
C类地址头三位为110,同样不存在网络号全0或者全1
C类地址最小的网络号为11000000 00000000 00000000,即192.0.0.0;最大的网络号为11011111 11111111 11111111,即223.255.255.0
因此C类地址可指派的网络数量为\(2^{24-3}=2097152\)
考研题1
考研题2
2. 划分子网
分类编址存在的问题:
- 地址利用率低,两级的IP地址不够灵活。比如一个单位想在单位内部再划分网路,他就必须去申请一个新的网络号。但是这样不仅不浪费IP地址,还有使路由表的信息变得十分巨大(因为网络数变多了)
解决方法是从主机号‘’借“几位充当子网号,实现在对该网络的进一步划分,使IP地址从两级结构变成三级结构:[网络号-子网号-主机号]
划分子网纯属一个单位内部的事情,对外部网络透明,对外仍然表现为没有划分子网的一个网络。
但是路由器又怎么知道该IP数据报的目的IP地址借了多少位充当子网号呢?也就是说,路由器要怎么区分数据报属于哪个子网?
由此引入了子网掩码的概念。子网掩码是长度和IP地址一样32位,左边一部分全为1,对应网络号和子网号;右边一部分全为0,对应主机号。因此,只要知道报文的子网掩码,就可以知道目的IP地址的子网号是多少,路由器就可以根据子网号进行转发。
如何划分子网【1】
如何划分子网【2】
默认子网掩码
是指不划分子网时的子网掩码
A类地址:255.0.0.0
B类:255.255.0.0
C类地址:255.255.255.0
3. 无分类编制CIDR(构造超网)
在可变子网掩码VLSM的基础上,人们又研究出一种新的划分方式CIDR。这是一种新的划分子网的方法,消除了A类、B类、C类地址的概念,使用各种长度的”网络前缀“来区分不同的网络。
CIDR编码是一种无分类的二级编址:{网络前缀,主机号}
-
在分配到一个CIDR地址块后,可以进一步进行子网划分。比如/20可以再次划分为/23。
-
CIDR地址块
-
路由汇聚
在进行CIDR编址后,路由表根据CIDR地址块的特点可以进行”路由汇聚“,也叫做”构造超网“。使用路由汇聚可以减少路由器之间路由信息的交换,减少路由表的记录数,从而提高整个互联网的性能。
-
路由表如何添加网络记录?
一个网络中有几十个子网,如何不采用CIDR技术,其他路由器的路由表就需要添加全部的网络信息。但是现在我们只需要添加地址聚合后的一个项目就能找到该网络,至于是哪个子网,就由这个网络的路由器负责。
-
路由表如何根据目的网络地址选择下一跳
最长前缀匹配,匹配最具体的网络信息
-
考研真题1
考研真题2
④ IP地址的应用规划
就是根据需求分配IP地址,有两种分配方式:FLSM定长子网掩码和VLSM变长子网掩码
⑤ IP数据报的分组转发
前面一直说路由器转发转发,现在我们就来说说主机是如何发送数据包,路由器收到数据包后又是如何转发数据报的。
-
主机发送数据报:
- 目的主机与自己同一个网络:直接交付(通过ARP协议解析MAC地址,封装MAC帧交给交换机)
- 目的主机与自己不在同一个网络:间接交付(查询本地路由表所造网络的默认网关,由默认网关转发)
-
路由器转发IP数据报:
- 检查IP数据报首部是否出错,出错丢弃并告知源主机,没错下一步
- 根据目的地址在路由表中查找匹配的条目,根据条码进行下一跳。若找不到匹配的,直接丢弃。
-
路由表:实际上所有三层以上的设备都是有一份路由表的,不单单只有路由器有路由表。路由表上的记录一般为目的网络、子网掩码、下一跳。
路由表添加记录的三种方式:
- 动态路由表:当互联网络结构变化时,动态路由选择协议就会自动更新所有路由器中的路由表
- 静态路由表:静态路由表是由人工方式建立,简单和开销较小,但不能及时适应网络状态
特殊的记录:
- 特定主机路由:为特定的主机指明一个路由,静态路由。目的网络为主机IP地址/32,掩码为255.255.255.255。可以看到特定主机的前缀最长32位,只要有匹配的一定选他。
- 默认路由:也是静态路由,人工配置,目的地址为0.0.0.0/0。可以看到默认路由的前缀最短最模糊。
下一跳地址则是目的路由器的IP地址、
⑥ 路由选择协议
-
自适应:动态路由选择
-
分布式:路由器之间相互交换路由信息
-
分层次:将整个因特网划分为多个较小的AS自治系统
AS是在单一技术管理下的一组路由器,使用的是自治系统内部的路由选择协议,可以把单位内部网络细节隐藏起来同时连接到互联网。
路由选择协议的分类
IGP和EGP:
1. 内部网关协议RIP
是一种基于距离向量(目的网络,跳数)的路由选择协议,用来动态构建路由器的路由表。
RIP要求AS内的每一个路由器都要维护自己到AS内其他每个网络的距离向量。
- 路由器到直连网络的跳数为1
- 路由器到非直连网络的跳数为经过的路由器+1
- RIP最大允许的跳数为15,当跳数为16时意味着目的网络不可达。
-
RIP工作的基本原理
要求路由器周期性地(30秒)向外发送路由刷新报文(本路由器的全部路由信息)通知相邻路由器自己可以达到的网络,及到达该网络的距离(跳数)。其他路由器在接收到某个路由器的(V,D)报文后,按照最短路径原则对各自的路由表进行刷新。
举例说明(改造路由更新报文-->更新路由表)
-
RIP协议的报文格式
-
RIP路由选择协议的缺点
有时会形成路由环路,对”坏消息传播慢“,常常需要几分钟才能识别网络中出现的故障。
2. OSPF开放最短路径优先协议
是一种基于链路状态的内部路由选择协议。基于Dijstra算法,从算法上保证了不会产生路由环路,是对RIP协议的改进。
与RIP协议不同的是,RIP协议知道到所有网络的最短距离及下一跳路由器,但不知道全网的拓扑结构信息。而OSPF是一种基于迪杰斯特拉算法的协议,迪杰斯特拉算法告诉我们,只要我们知道了全网络的拓扑结构(带权无向图),我们就可以算出每个结点到其他节点的最短距离。
因此,OSPF协议是动态的为自治系统内的每一个路由器创建并更新全网的拓扑结构。
附:RIP算法是根据路由器的跳数来衡量哪条路径最优,而OSPF协议的权值可有网络管理员自己设置:可以是带宽、距离、费用等等。
附:OSPF直接使用IP数据报转发,协议号为89
!! OSPF协议如何为AS内的每一个路由器创建并更新全网的拓扑结构?
-
OSPF相关的五种分组类型和执行过程
首先要明确的是:使用OSPF协议的每一个路由器都有自己的链路状态数据库LSDB,状态库中有其他路由器的LSA(链路状态信息),用于保存全网的拓扑结构。我们通过洪泛法使各路由器发送自己的LSA(封装在LSU分组中),从而实现各路由器的LSDB保持一致。
-
问候分组:用来建立和维护邻居关系
-
数据库描述分组:向邻居发送自己的链路状态数据库中所有记录的摘要信息
-
链路状态请求分组:向对方请求发送某些链路状态的详细信息
-
链路状态更新分组:用洪泛法(发给相邻,相邻又发给相邻)向全网更新链路状态
-
链路状态确认分组:对链路状态更新分组的确认
-
区域的概念
3. 边界网关协议BGP
BGP协议十分复杂,是用来实现自治系统之间的路由选择。
这里我们只介绍一个考点:BGP协议使用tcp报文转发,协议号字段为6
⑦ IP数据报的报文格式
看下图就够了:
考研真题
⑧ ICMP网际控制报文协议
1. 概述
IP协议提供的是尽力而为的服务,缺少差错控制和查询机制。ICMP协议就是为解决以上问题,而设计的一种差错报告和查询、控制机制。
- ICMP本身是网络层的一个协议,但是它的报文要封装成IP分组(协议号为1),然后再传送给数据链路层。
- 从协议体系上看,ICMP只是要解决IP协议可能出现的不可靠问题,不能独立于IP协议,是IP协议的一个组成部分。
- ICMP不能纠正差错,它只是报告差错。差错处理需要由高层协议去完成。
2. ICMP报文
ICMP报文的种类有两种:ICMP差错报告报文和ICMP询问报文。
差错报告报文的种类:
- 终点不可达:没收到
- 时间超过:TTL为0
- 参数问题:IP数据报首部出现问题
- 改变路由:收到了发信息给源主机,要它为自己的路由表添加记录,下次可以直接发到目的路由,不用经过我转发
以下特殊情况不发送ICMP差错报告报文
- 对ICMP差错报告报文不再发送ICMP差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对广播的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
询问报文的种类:
- 回送请求和回答:主机或路由器给目的主机发出询问,目的主机必须给源主机发送此报文
- 时间戳请求和回答:用于同步时间
ICMP的应用
- ping命令,使用了ICMP回送请求和回答报文,是应用层直接使用ICMP,没有经过TCP和UDP
- tracert命令,使用了ICMP时间超过报文,发送的报文的TTL从1开始逐渐递增,通过路由器的差错报告报文就可以跟踪发送路线。最后一个路由器要发送终点不可达报文,因为tracert发送的IP数据报是无效的差错的。