主要任务是实现网络互连,进而实现数据包在各网络之间的传输
1. 面向连接的虚电路服务
- 可靠的通信由网络来保证
-
必须
建立网络层的连接—-虚电路VC
(
Virtual Circuit
) -
通信双方
沿着已建立的虚电路发送分组
-
目的主机的地址仅在连接建立阶段使用
,之后每个
分组的首部只需携带一条虚电路的编号
(构成虚电路的每一段链路都有一个虚电路编号)。 - 这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到达、不丢失、不重复)。
-
通信结束后,需要释放之前所建立的虚电路
2. 无连接的数据报服务
-
可靠通信应当由用户主机来保证
-
不需要建立网络层连接
-
每个分组可走不同路径
-
每个分组的
首部必须携带目的主机的完整地址
-
这种通信方式所传送的
分组可能误码、丢失、重复和失序
- 由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉
-
因特网采用了这种设计思想,也就是
将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层)
,而将相对简单的尽最大努力的分组交付功能置于因特网核心。
3. IPv4地址
IPv4
地址就是因特网上的
每一台主机(或路由器)的每一个接口
分配一个在全世界范围内是
唯一的32比特的标识符
分类编址
-
A
类地址
网络号第1位固定为0
,网络号后面部分不能全
0
,也不能全
1
,所以
网络号范围是1~126
-
B
类地址
网络号前2位固定为10
,网络号后面部分可以全取
0
或
1
,所以
网络号范围是128.0~191.255
-
C
类地址
网络号前3位固定为110
,网络后后面部分可以全取
0
或
1
,所以
网络号范围是192.0.0~223.255.255
-
D
类地址为多播地址,
IP
地址为
224.0.0.0~239.255.255.255
划分子网的IPv4地址
为什么需要划分子网?
比如一个单位有
300
台主机,此时需要申请一个
B
类网络地址,很容易得知,分配出去
300
个
IP
地址后,申请得到的
B
类网络
还剩下很多IP地址
。
当单位扩大规模,需要再添加两个子网的时,又要为这两个子网分别申请
B
类地址,这会花费一些不必要的支出,实际上子网
1
申请到的
B
类地址还有很多没用到,
我们希望能够将这些剩余地址应用到其他子网中(节约地址)
。
如何实现子网划分?
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
-
子网掩码
使用连续的比特1来对应网络号和子网号(子网号来自原先的一部分主机号)
-
子网掩码使用连续的比特
0
来对应主机号 -
将划分子网的
IPv4
地址与其相应的子网掩码进行**(逻辑与运算)【即掩码是1的部分】**就可得到
IPv4
地址所在子网的网络地址
无分类编址的IPv4地址
为什么需要?
划分子网在一定程度上缓解了因特网发展中遇到的困难,但是
数量巨大的C类网因为其地址空间太小并没有得到充分使用
,而因特网的IP地址仍在加速消耗,
整个IPv4地址空间面临全部耗尽的威胁
1993年,IETF发布了
无分类域间路由选择CIDR
-
CIDR
消除了传统的
A
类、
B
类和
C
类地址,以及划分子网的概念 -
CIDR
可以更加有效地分配
IPv4
地址空间 -
CIDR
使用**“斜线记法”**,或称
CIDR
记法。即在
IPv4
地址后面加上斜线”
/
“,
在斜线后面写上网络前缀所占比特数量
-
CIDR实际上是将网络前缀都相同的连续IP地址组成一个”CIDR地址块”
路由聚合
如路由器
A
上连接同一网络的多台主机,路由器
B
与
A
相连。若
A
将所有主机的具体
IP
地址都报给
B
,则路由器
B
中会增加多项路由条目。可实际上
B
向
A
中任意一个主机转发数据的时都是走同一个端口,因此我们可以
将这些网络的共同前缀提取出来成为新的网络号,同时将剩余主机号置0放入路由器B中
如:
A
连接了
172.1.4.0/25
和
172.1.7.0/24
,则提取公共前缀聚合后变为
172.1.4.0/22
4. IP数据报发送转发过程
同一个网络之间的主机可以直接通信,不同网络之间的主机通信需要路由器中转
源主机如何判断目的主机是否和自己在同一个网络中?
将自身的
IP
地址与子网掩码
相与
得到自身的网络号
1
,再将目的
IP
地址与自身子网掩码相与得到网络号
2
。若两个网络号相等,则说明处在同一个网络
主机如何知道应该把IP数据报交给哪个路由器进行转发呢?
通过设置默认网关。所谓默认网关,即当路由表中查不到数据时会将数据发往的路由器端口
IP
地址
静态路由配置
静态路由配置是指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表
-
这种人工配置方式简单、开销小。但不能及时适应网络状态的变化。
一般只在小规模网络中采用
-
可能由于:①配置错误 ②聚合了不存在的网络 ③网络故障 而
出现路由环路错误
-
默认路由为:0.0.0.0/0
。其
作用是当路由表不知道往哪里转发时,就会往默认路由指定的下一跳位置转发
,根据网络号最长匹配原理,默认路由网络号长度为
0
,因此一定是最后一个被匹配的条目 -
特定主机路由:具体主机IP/32
。网络号前缀长度
32
保证了这是第一个被匹配的静态条目
如何防止错误路由导致IP数据报永久兜圈?
-
在
IP
数据报首部
设置生存时间TTL字段
-
IP
数据报进入路由器后,
TTL
字段的值减
1
。
若TTL的值不等于0,则被路由器转发,否则被丢弃
-
-
对于聚合后或由于网络故障而不存在的路由条目
设置黑洞路由
-
所谓
黑洞路由,即路由器应该丢弃的路由
-
所谓
5. 路由选择协议
因特网所采用的的路由选择协议主要特点
-
自适应
:动态路由选择,能较好地适应网络状态的变化 -
分布式
:路由器之间交换路由信息 -
分层次
:将整个因特网划分为许多较小的自治系统
AS
路由信息协议RIP
RIP
使用
跳数
作为度量
来衡量到达目的网络的距离
-
路由器到直连网络的距离定义为
1
-
路由器到非直连网络的距离定义为所经过的路由器数
+1
-
允许一条路径最多只能包含
15
个路由器。
“距离”等于16时相当于不可达
。因此,
RIP
只适用于小型互联网 -
RIP
认为
好的路由
就是”距离短”的路由,也就是所
通过路由器数量最少的路由
- 当到达同一目的网络有多条”距离相等”的路由时,可以进行等价负载均衡
-
RIP
包含以下三个要点- 仅和相邻路由器交换信息
- 交换的是各自路由表的信息
- 周期性交换信息
RIP存在的问题
存在”坏消息传播很慢”的问题,又称为
路由环路(两个路由器相互学习错误路由,造成循环)
或距离无穷计数问题,这是距离向量算法的一个固有问题,可以采取多种措施
减少
出现该问题的概率或减小该问题带来的危害
-
限制最大路径距离为
15
(
16
表示不可达) -
当路由表发生变化时就立即发送更新报文(即”
触发更新
“),而不是周期性发送 - 让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口反方向传送(即**“水平分割”“毒性反转”**)
开放最短路径优先OSPF
简单来说就是得到一个带权有向图,以当前路由器为起点,通过迪杰斯特拉算法得到到达某个点的最短路径
-
OSPF
是
基于链路状态
的,而不像
RIP
那样是基于距离向量的 -
OSPF
采用
SPF
算法计算路由,而不像
RIP
那样是基于距离向量的 -
OSPF
不限制网络规模,更新效率高,收敛速度快 -
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的”代价”
-
“代价”的意思是费用、距离、时延、带宽等
-
-
OSPF
相邻路由器之间通过交互
问候(Hello)分组
,建立和维护邻居关系-
Hello
分组封装在
IP
数据报中,发往组播地址
224.0.0.5
-
发送周期为
10
秒 -
40
秒未收到来自邻居路由器的
Hello
分组,则认为该邻居路由器不可达
-
-
使用
OSPF
的每个路由器都会产生
链路状态通告LSA
,包含以下内容- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
-
LSA
被封装在
链路状态更新分组LSU
中,
采用洪泛法发送
-
使用
OSPF
的每个路由器都有一个
链路状态数据库LSDB
,用于存储
LSA
-
通过各路由器洪泛法发送封
装有自己LSA的LSU分组
,各路由器的
LSDB
最终达到一致 -
使用
OSPF
的各路由器
基于LSDB进行最短路径优先SPF计算
,构建出各种到达其他各路由器的最短路径,即构建各自的路由表
OSPF五种分组
-
问候
(
Hello
)分组用来发现和维护邻居路由器的可达性
-
数据库描述
(
D
atabase
D
escription)分组向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
-
链路状态请求信息
(
L
ink
S
tate
R
equest)分组向邻居路由器请求发送某些链路状态项目的详细信息
-
链路状态更新
(
L
ink
S
tate
U
pdate)分组路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态
-
链路状态确认
(
L
ink
S
tate
A
cknowledgement)分组这是对链路状态更新分组的确认分组
OSPF基本工作过程
-
相邻路由器之间周期性发送
问候分组(Hello)
,以便建立和维护邻居关系 -
建立邻居关系后,
给邻居路由器发送数据库描述分组(DD)
,
也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器
-
收到数据库描述分组后,若发现自己缺少其中某些链路状态项目,则会发送
链路状态请求分组(LSR)
。 - 对方收到链路状态请求分组后,则会将其所缺少的链路状态项目的详细信息封装在**链路状态更新分组(LSU)**中发送回去
- 收到链路状态更新分组后,将这些信息添加到自己的链路状态数据库中
邻居关系的建立
一条总线上有多台主机,则它们互为邻居,因此每个路由器都要向其他路由器发送问候分组和链路状态更新分组。为了减少所发送分组的数量,则需要用相应方法对邻居关系进行删减
OSPF
采用选举
指定路由器DR
(
Designated Router
)和
备用的指定路由器BDR
(
Backup Designated Router
)的方法减少邻居数目
-
所有的非
DR/BDR
只与
DR/BDR
建立邻居关系 -
非
DR/BDR
之间通过
DR/BDR
交换信息 -
当
DR
失效时由
BDR
顶上
边界网关协议BGP
尽力寻找一条能够到达目的网络且比较好的路由(不兜圈子),而并非找最佳路由
内部网关协议IGP(如路由信息协议RIP或最短路径优先OSPF)
- 设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络
- 无需考虑自治系统外部其他方面的策略
外部网关协议EGP(如边界网关协议BGP)
-
在不同自治系统内,度量路由的”代价”(距离,宽带,费用等)可能不同。因此,对于自治系统之间的路由选择,使用”代价”作为度量来寻找最佳路由是不行的
-
比如
A
系统路由选择度量是距离,
B
系统是带宽……那么
A
到系统
E
的路由怎样走最好呢?由于没有统一度量,所以不能直接得到最佳路由
-
比如
-
自治系统之间的路由选择必须考虑相关策略(政治、经济、安全等)
- 如中国的数据报尽量要绕开美国的自治系统
工作原理
-
BGP
发言人
交换网络可达性的信息
(要到达某个网络所要经过的一系列自治系统) -
当
BGP
发言人互相交换了网络可达性的信息后,各
BGP
发言人就根据所采用的策略从收到的路由信息中
找出到达各自治系统的较好路由
。也就是构造出树形结构(防环路)的自治系统连通图
BGP-4的4中报文
-
OPEN(打开)报文
:用来与相邻的另一个
BGP
发言人建立关系,使通信初始化 -
UPDATE(更新)报文
:用来通告某一路由的信息,以及列出要撤销的多条路由 -
KEEPALIVE(保活)报文
:用来周期性地证实邻站的连通性 -
NOTIFICATION(通知)报文
:用来发送检测到的差错
6. IPv4数据报首部格式
-
版本
占
4
比特,表示
IP
协议版本。通信双方使用的
IP
协议版本必须一致。目前广泛使用的
IP
协议版本为号为
4(IPv4)
-
首部长度
占
4
比特,表示
IP
数据报首部长度。该字段取值
以4字节为单位
最小十进制取值为5,表示IP数据报首部只有20字节
【
4
字节单位,所以取值
5
对应
20
字节】固定部分
最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分
-
可选字段
长度从
1
到
40
个字节不等。
用来支持排错、测量及安全等措施
可选字段增加了
IP
数据报的功能,但这同时也
使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销
。实际上可选字段很少被使用 -
填充字段
确保首部长度为
4
字节长度的整数倍,使用全
0
进行填充 -
区分服务
占
8
比特,利用该字段的不同数值可提供不同等级的服务质量,只有在使用区分服务时,该字段才起作用。一般情况下不使用该字段 -
总长度
占
16比特
,表示
IP
数据报的总长度【首部+数据载荷】,最大取值为十进制
65535
,
以字节为单位
-
标识
占
16
比特,
属于同一个数据报的各分片数据报应该具有相同的标识【可理解为ID】
IP
软件维持一个计数器,每产生一个数据报,计数器值
+1
,并将此值赋给标识字段 -
标志
占
3
比特,各比特含义如下-
DF
位:
1
表示不允许分片,
0
表示允许 -
MF
位:
1
表示”后面还有分片”,
0
表示”这是最后一个分片” -
保留位:必须为
0
-
-
片偏移(必须是整数)
占
13
比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少单位
片偏移以8个字节为单位
-
生存时间
占8比特
,最初以秒为单位,最大生存周期为
255
秒;路由器转发IP数据报时,将
IP
数据报首部中的该字段值减去
IP
数据报在本路由器上耗费的时间,若不为
0
【说明路由器消耗时间后还活着】就转发,否则丢弃
现在以”跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段值减1,若不为0就转发,否则丢弃
【防止兜圈】 -
协议
占
8
比特,指明
IPv4
数据报的数据部分是何种协议数据单元 -
首部检验和
占
16比特,用来检测首部在传输过程中是否出现差错
,比
CRC
检验码简单,称为因特网检验和
IP
数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段【生存时间、标志、片偏移等】的取值可能发生变化由于
IP
层本身不提供可靠传输服务,并且计算首部校验和是一项耗时的操作,因此在
IPv6
中,路由器不再计算首部校验和,从而更快转发
IP
数据报 -
源IP地址和目的IP地址
各占
32比特
,用来填写发送该
IP
数据报的源主机
IP
地址和接收该
IP
数据报的目的主机
7. 网际控制报文ICMP
为了更有效地转发
IP
数据报和提高交付成功的机会,在网际层使用了网际控制报文协议
ICMP
-
主机或路由器使用
ICMP
来发送差错报告报文和询问报文 -
ICMP
报文被封装在
IP
数据报中发送
回答报文类型
终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文
。具体可再根据
ICMP
的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络位置、目的主机未知等
13
种错误
源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文
,使源点知道应当把数据报发送速率放慢
时间超过
当路由器收到一个目的
IP
地址不是自己的
IP
数据报,会将其
生存时间TTL字段
值减
1
。若结果不为
0
,则将该
IP
数据报转发出去;
若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文
当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文
参数问题
当路由器或目的主机收到
IP
数据报后,根据其首部中的检验和字段发现首部在传输过程中
出现了误码,就丢弃该数据报,并向源点发送参数问题报文
改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
如主机
1
的默认路由是
R1
,信息经过
R1
时,
R1
发现最佳路由不是自己,而是
R2
,所以通过
ICMP
告知主机
1
询问报文类型
回送请求和回答
-
ICMP
回送请求报文是由主机或路由器向一个特定的目的主机发出的询问 -
收到此报文的主机必须给源主机或路由器发送
ICMP
回送回答报文 - 这种询问报文用来测试目的站是否可达及了解其有关状态
时间戳请求和回答
-
ICMP
时间戳请求报文是请某个主机或路由器回答当前的日期和时间 -
在
ICMP
时间戳回答报文中有一个
32
比特的字段,其中写入的整数代表从
1900
年
1
月
1
日起到当前时刻一共有多少秒 - 这种询问报文用来进行时钟同步和测量时间
不发送ICMP的情况
-
对
ICMP
差错报告报文不再发送
ICMP
差错报告报文 -
对
第一个分片的数据报片的所有后续数据报片
都不发送
ICMP
差错报告报文 -
对具有
多播地址的数据报
都不发送
ICMP
差错报告报文 -
对具有
特殊地址(如127.0.0.0或0.0.0.0)的数据报
不发送
ICMP
差错报告报文
ICMP应用举例
分组网间探测PING
-
用来测试主机或路由器间的连通性【
eNSP
的
ping
命令】 -
应用层直接使用网际层的
ICMP
(没有通过运输层的
TCP
或
UDP
) -
使用
ICMP
回送请求和回答报文
跟踪路由tracerouce
用来测试IP数据报从源主机到达目的主机要经过哪些路由器
Windows
版本
-
tracert
命令 -
应用层直接使用网际层
ICMP
-
使用了
ICMP
回送请求和回答报文以及差错报告报文
实现方法
由
主机发送出去的数据包中的生存时间字段TTL由1开始逐渐增加
,每个路由器都会返回一个时间超过报文,由此达到跟踪路由器的目的
8. 虚拟专用网VPN
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。
虚拟专用网中各主机所分配的地址应该是本机构可自由分配的专用地址
9. 网络地址转换NAT
NAT
能使大量使用
内部专用地址的专用网络用户共享少量外部全球地址
来访问因特网上的主机和资源【为了节省
IPv4
地址】
由于绝大多数的网络应用都是使用运输层协议
TCP
或
UDP
来传送数据,因此可以
利用运输层的端口号和IP地址一起进行转换。
这样,
用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信
。这种将端口号和
IP
地址一起进行转换的技术叫作
网络地址与端口号转换NAPT
借鉴:
https://blog.csdn.net/weixin_45488428/article/details/115102326