一,网络层概述
1.1 分组转发和路由选择
网络层主要任务是:将分组从源主机 经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。
分组在多段网络中传输的图:
1.2 网络层向其上 层提供的两种服务
1.2.1 面向连接的虚电路服务
核心思想:可靠通信应由网络自身来保证。
当两台主机进行通信时,首先必须建立连接,即虚电路VC,以保证通信双方所需的一切网络资源,然后通信双方沿着已经建立的虚电路发送分组。
分组的首部仅在连接建立阶段使用完整的目的主机地址,之后每个分组只需要携带一条虚电路编号即可。
通信结束后,通信双方需要释放之前建立的虚电路。
虚电路表示这是一条逻辑上的连接,分组沿着这条逻辑上的连接按照存储转发方式传送,而不是真正的建立了一条物理连接。
采用电路交换的电话通信,则是先建立一条真正的物理连接。因此,分组交换的虚连接与电路交换的连接只是类似,但不完全一样。
这种通信方式如果再使用可靠传输的网络协议,就可使所发送分组最终正确(无差错,按序,不丢失,不重复)到达接受方。
很多广域分组交换网兜使用面向连接的虚电路服务。例如,曾经的X.25和逐渐过时的帧中继,异步传输模式。
然而,以太网的先驱者并没有采用这种设计思想,而是采用了面向无连接的数据报服务。
1.2.2 面向无连接的数据报服务
核心思想:可靠通信应由用户主机来保证。
当两台主机进行通信时,不需要建立网络层连接,每个分组可走不同的路径,因此每个分组首部都必须携带目的主机的完整地址。
通信结束后,通信双方没有需要释放的连接。
这种通信方式所传送的分组可能误码,丢失,重复,失序。
将相对简单的尽最大努力(即不可靠)的分组交付功能置于因特网核心,将复杂的网络处理功能置于因特网的边缘。
由于网络自身不提供端到端的可靠传输服务,这就使得网络中的路由器可以做得比较简单,大大降低了网络的造价。
在因特网所采用的TCP/IP体系结构中,网际层向其上层提供的是简单灵活的,无连接的,不可靠的数据报服务。
二,网际协议IP
2.1 IP协议概述
网际协议IP(Internet Protocol)是TCP/IP体系结构网际层中的核心协议。
网际协议IP,传输控制协议TCP,TCP/IP体系结构是由”因特网之父“Robert Kahn和Vint Cerf二人共同研发的,1974年5月发布了TCP/IP第一个版本。
网际层IP协议的地位:
其他网际层协议:
- ICMP:网际控制报文协议
- IGMP:网际组管理协议
- RARP:逆地址解析协议
- ARP:地址解析协议
2.2 IP地址
IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络。
- 主机编号:标识同一网络上不同主机(或路由器各接口)
数据包转发过程中IP地址与MAC地址的变化情况:
- 数据包转发过程中,源IP地址和目的IP地址保持不变
- 数据包转发过程中,源MAC地址和目的MAC地址逐个链路(或网络)改变。
在数据包的转发过程中,源IP地址和目的IP地址始终保持不变,而源MAC地址和目的MAC地址逐段(或逐个网络)改变。
数据包在转发的过程中:
-
H1知道应该把数据包传给R1,由R1帮其把数据包转发出去。
H1知道R1对应的接口的IP地址为IP3,但不知道其对应的MAC地址是什么。
-
R1知道应该把数据包转发给R2
R1知道R2对应的接口的IP地址为IP5,但不知道其对应的MAC地址是什么。
-
R2知道应该把数据包转发给H2
R2知道H2的IP地址为IP2,但不知道其对应的MAC地址是什么。
在上述过程中,涉及到了都知道IP地址但是不知道MAC地址,故需要用到地址解析ARP协议,将IP地址转化为MAC地址。
2.3 地址解析协议ARP
在IP数据包转发过程中,主机知道IP地址但是不知道MAC地址,IP地址转换为MAC地址就使用ARP地址解析协议。
如图所示:
-
主机B给主机C发送数据包。
每台主机上都有一个ARP高速缓存表,ARP高速缓存表中存储了IP地址和MAC地址的对应关系。
-
在本例中,主机B要发送数据包给主机C时。
首先在自己的ARP高速缓存表中,查找主机C的IP地址对应的MAC地址。
此时没有找到,故主机B回发送ARP请求报文,来获取主机C的MAC地址。
ARP请求报文的简单理解图:
-
当主机B发送了ARP请求报文后,在该总线上的所有主机接收到这个广播帧,然后交付上层来判断这个广播帧是否是给自己的。
如果是是交付给自己的报文,此时会:
- 将B的IP地址和MAC地址记录到自己的ARP高速缓存表中
- 发送一个ARP响应报文,告知自己的MAC地址。
ARP响应报文的简单理解图:
-
此时总线上的所有主机都会接收到ARP响应报文
结果如图:
ARP高速缓存表中的每一条记录都有其类型,类型分为:
-
动态:主机主动获取,生命周期默认两分钟。
因为IP地址和MAC地址的对应关系不是永久性的
-
静态:人工配置的,不同操作系统下的生命周期不同。
注意:ARP协议是在一段链路上的协议,跨路由器是通过下面方式实现传输的。
-
2.4 异构网络互联
如果这些异构网络都采用相同的IP协议,从网络层角度看,就好像一个统一的网络。
当IP网上的主机进行通信时,就好像在一个单个的网络上通信一样,它们看不见互联的各网络的具体异构细节。
三,IPv4地址
3.1 IPv4地址基本概念
在TCP/IP体系结构中,IP地址是一个最基本的概念。
IPv4地址就是给因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
IP地址由因特网名字和数字分配机构ICANN进行分配
- 我国用户可向亚太网络信息中心APNIC申请IP地址,需要交钱,一般不接受个人申请。
- 2011年2月3日,互联网号码分配管理局INAN宣布,IPv4地址已经分配完毕。
- 我国在2014年至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全部开展商用部属IPv6
IPv4地址的编址方法经过了如下三个阶段:
- 1981年:分类编址
- 1985年:划分子网
- 1993年:无分类编址
由于32比特的IPv4地址不方便阅读,记录以及输入,因此IPv4地址采用点分十进制表示方法以方便用户使用。
举例:
3.2 分类编址的IPv4地址
分类编址的IPv4地址可分为:A,B,C,D,E五类。如下如所示
- 只有A类,B类,C类地址可以分配给网络中的主机
- 主机号为全0的地址是网络地址,不能分配给主机或路由器的各接口。
- 主机号为全1的地址是广播地址,不能分配给主机或路由器的各接口。
- 地址0.0.0.0是一个特殊的IPv4地址,只能作为源地址使用,表示在本网络上的本主机,封装有DHCP Discovery报文的IP分组的源地址就使用0.0.0.0
- 地址255.255.255.255是一个特殊的IPv4地址,只能作为目的地址使用,表示只在本网络上进行广播(各路由器均不转发)
3.2.1 A类IPv4地址
-
可指派的网络数量:28-1-2=126
减1的原因是:A类网络号最高位固定为0
减2的原因是:减去最大网络号和最小网络号,这俩个不指派。
-
每个A类网络中,可分配的IP地址数量为:224-2
减2的原因:去掉主机号全0的网络地址,主机号全1的广播地址。
-
最小网络号0:8位全部取0
-
最大网络号127:除固定最高位取1,低7位全部取1
-
最大可被指派的网络号126:可被指派的最大的网络号
-
最小可被指派的网络号1:可被指派的最小的网络号
3.2.2 B类IPv4地址
有些教程中指出128.0是保留网络号,B类第一个可指派的网络号为128.1
但根据2002年9月发出的RFC 3330文档,128.0网络号已可以分配了。
3.2.3 C类IPv4地址
有些教程指出:192.0.0是保留网络号,C类网络第一个可指派的网络号为192.0.1
但根据2002年9月发出的RFC 3330文档,192.0.0网络号已可以分配了。
3.2.4 总结
\[可指派网络数量=2^{网络号可使用比特位数-网络号中固定不能变的比特数量。} \]\[网络号中可分配ip地址数量=2^{主机号比特数量}-2 \]特别的,只有A类网络号的最大位和最小位被保留了,故网络号要-2
IPv4地址中每8位比特位表示一个十进制数,共4个十进制数。
- 对于A类网络:网络号范围:0到127
- 对于B类网络:网络号范围:128到191
- 对于C类网络:网络号范围:192到223
- 记0,128,192,224,左闭右开
可以直接算,就根据IP的类别用二进制算最大最小网络号。
3.3 划分子网的IPv4地址
子网掩码:32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号。
-
子网掩码使用连续的比特1来对应网络号和子网号。
-
子网掩码使用连续的比特0来对应主机号。
-
将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算(都为1才为1)就可得到IPv4地址所在子网的网络地址。
-
使用子网掩码时,先判断这个IP地址属于A,B,C,D,E的哪一类
然后通过子网掩码,来判断网络号,子网号,主机号。
子网掩码中255部分代表的就是网络号,不是255的部分将其变为二进制,其中连续1对应的部分就是子网号,连续0的部分就是主机号
-
可划分子网数量=2当作主机号的比特数量
-
每个子网可分配地址数量=2剩余主机号比特数量-2
举例:
因此,可划分出子网数量为:21=2
每个子网可分配的地址数量为:28-1-2=126
默认子网掩码:指在未划分子网的情况下使用的子网掩码。
- A类地址:255.0.0.0
- B类地址:255.255.0.0
- C类地址:255.255.255.0
3.4 无分类编址的IPv4地址
3.4.1 CIDR
划分子网在一定程度上缓解了因特网在发展中遇到的困难,但数量巨大的C类网因为其地址空间太小并没有得到充分的使用,而因特网的IP地址仍然在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
因此,因特网工程部IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版IP以彻底解决IP地址耗尽问题。
1993年,IETF发布了无分类域间路由选择CIDR(Classless Inter- Domain Routing)的RFC文档:RFC 1517~1519和15020
-
CIDR消除了传统的A类,B类和C类地址,以及划分子网的概念。
-
CIDR可以更加有效的分配IPv4的地址空间,并且可以在新的IPv6使用之前允许因特网的规模继续增长。
-
CIDR使用”斜线记法“,或CIDR记法。即在IPv4地址后面加上斜线"/",在斜线后面写上网络前缀所占的比特数量。
举例:128.14.35.7/20
网络前缀占用比特数量:20
主机编号占用比特数量:32-20=12
-
CIDR实际上是将网络前缀都相同的连续的IP地址组成一个CIDR地址块。
-
我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节,比如:
- 地址块的最小地址
- 地址块的最大地址
- 地址块中的地址数量
- 地址块聚合某类网络(A类,B类,C类)的数量
- 地址掩码(也可继续叫子网掩码)
举例:
3.4.2 路由聚合(构造超网)
聚合地址块:将除了共同前缀的比特,其他全部取0。
网络前缀越长,地址块越小,路由越具体。
若路由器查表转发分组时发现有多条路由可选,则选择网络前缀最长的那条,这叫最长前缀匹配,因为这样的路由更具体。
3.5 IPv4地址的应用规划
IPv4地址的应用规划:给定一个IPv4地址块,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中的不同网络,进而可以给给网络中的主机和路由器各接口分配IPv4地址。
一般有两种方法:
- 定长的子网掩码FLSM
- 使用同一个子网掩码来划分子网
- 每个子网所分配的IP地址数量相同,造成IP地址的浪费
- 变长的子网掩码VLSM
- 使用不同的子网掩码来划分子网
- 每个子网分配的ip地址数量可以不同,尽可能减少对IP地址的浪费。
3.5.1 定长的子网掩码FLSM
应用需求:将C类网络218.75.230.0划分成5个子网,每个子网上可分配的IP地址数量不得少于各自的需求。
3.5.2 变长的子网掩码VLSM
3.6 IP数据报的发送和转发过程
IP数据报的发送和转发过程包含:
- 主机发送IP数据报。
- 路由器转发IP数据报。
- 主机发送IP数据包:首先会判断目的主机是否与自己在同一个网络。
- 如果在同一个网络,属于直接交付
- 若在不同网络,则属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发。
- 路由器转发IP数据报:
- 检测IP数据报首部是否出错
- 若出错,则直接丢弃该IP数据报并通告源主机
- 若没有出错,则进行转发。
- 根据IP数据报的目的地址在路由器表中查找匹配的条目。
- 检测IP数据报首部是否出错
如图所示:(不考虑数据链路层的自学习等过程)
-
源主机判断目的主机是否和自己处于同一个网络中的方法:
假设主机C要给主机F发送IP数据报。C-->F
- 主机C将自己的IP地址和自己的子网掩码进行逻辑与,得到主机C所在子网的网络地址
- 主机C将主机F的IP地址和自己的子网掩码进行逻辑与,得到目的网络地址
如果目的网络地址和主机C所在子网网络地址相同,代表C和F处于同一个网络。 ** 不相同代表C和F处于不同网络**。
主机C和F的通信就属于间接通信,此时主机C需要将IP数据报传输给路由器,由路由器将IP数据报转发给主机F。
-
主机C通过什么知道路由器R的存在:
实际上用户为了让本网络上的主机能和其他网络上的主机进行通信,就必须指定本网络中的一个路由器,由该网络中的路由器进行转发,所指定的路由器叫默认网关。
对于本例,将路由器接口0的ip地址,指定该接口所直连网络中各主机作为默认网关
-
路由器收到IP数据报后如何转发:
- 检测IP数据报首部是否出错
- 若出错,则直接丢弃该IP数据报并通告源主机
- 若没有出错,则进行转发。
- 根据IP数据报的目的地址在自己的路由器表中查找匹配的路由条目。
- 若找到匹配的路由条目,则转发给路由条目中指示的下一跳。
- 若找不到,则丢弃该IP数据报并通告源主机。
假设主机A发送数据给主机D,如图所示:
路由器判断目的地址是否属于路由表中目的网络的办法:将目的地址和子网掩码进行逻辑与,得到的ip地址
- 如果相同就代表匹配成功,则按照下一条指示,进行转发。
- 如果不相同,就接着到下一条记录进行计算。
- 检测IP数据报首部是否出错
-
注意:路由器是隔离广播域的,这样是为了防止造成广播风暴。
即一个网络中的广播帧是无法发送给另外一个网络的。
如图所示:
即使主机发送的是另外一个网段的广播帧,路由器检测出来他是广播帧后,不会进行发送。
3.7 IPv4数据报的首部格式
IPv4数据报的首部格式如图所示:
- 固定部分:每个IPv4数据报必须包含的部分。
- 可变部分:每个IPv4数据报不是必须包含的部分。
- 图中,每一行都由32个比特(即4个字节构成)构成。
- 每个小格子叫域或字段,每个字段或某些字段的组合用来表示IP协议的相关功能。
3.7.1 IP数据报各个字段:
-
版本:占4个比特,表示IP协议的版本,通信双方使用的IP协议的版本必须一致。
-
首部长度:占4个比特,表示IP数据报首部的长度。
该字段取值以4个字节为单位。
最小十进制取值为5,表示IP数据报首部只有20个字节固定部分。
最大十进制取值为15,表示IP数据报首部包含20个字节固定部分和最大40字节可变部分。
-
可选字段:长度从1个字节到40个字节不等。
用来支持排错,测量以及安全等措施。
可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。
实际上可选字段很少被使用。
-
填充字段:确保首部长度为4字节的整数倍,使用全0进行填充。
当ip数据报固定部分假设可变部分会造成IP数据报首部长度不是4字节的整数倍,此时使用填充字段来填充。
-
区分服务:占8个比特,用来获得更好的服务。
该字段在旧标准中叫服务类型,实际上一直没有被使用过。
利用该字段的不同数值可提供不同等级的服务质量,只有在使用区分服务时,该字段才起作用,一般情况都不使用该字段。
-
总长度:占16比特,表示IP数据报的总长度(首部+数据载荷)
最大取值为65535字节。
-
源IP地址和目的IP地址:各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
3.7.2 IP数据报的分片
标识,标致,片偏移:共同用于IP数据报分片。
以太网规定MTU值为1500字节,当IP数据报长度超过MTU,就会将数据报进行分片成多个IP数据报。
-
标识:占16比特,属于同一个数据报的各分片数据报应具有相同的标识。
ip软件维持一个计数器,每产生一个数据报,计数器的值就加1,将这个值赋值给标识字段。
-
标志:占3比特,各比特含义如下:
- DF位:1标识不允许分片。0标识允许分片
- MF位:1标识后面还有分片,0标识这是最后一个分片。
- 保留位:必须为0
-
片偏移:占13个比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。
片偏移以8个字节为单位。片偏移量必须为可被8整除的
如果算出来的结果不是整数,就对结果向下取值再乘8
假设使用以太网传输如下图所示的IP数据报文。
因为以太网的MTU为1500,无法传输该IP数据报。
故对此IP数据报进行分片,将该IP数据报分片成几个更小的IP数据报,长度不能大于1500字节。
然后再将每个分片IP数据报封装成一个以太网帧进行传输。
分片如下图所示:
3.7.3 生存时间TTL字段
生成时间TTL:占8比特
最初以秒为单位,最大生存周期为255秒。
路由器转发IP数据报时,将IP数据报首部中该字段的值减去IP数据报在本路由器上所耗费的时间,如果不为0就转发。
现在以跳数为单位,路由器转发IP数据报时,将IP数据报首部中该字段的值减1,若不为0就转发,否则就丢弃。
生存时间TTL字段的作用:防止IP数据报在网络中永久兜圈。
3.7.4 协议字段
协议字段占8比特,指明IP数据报的数据部分是何种协议数据单元。
常用的一些协议对应的协议字段值如下表所示:
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
3.7.5 首部校验和
占16比特,用来检测首部在传输过程中是否出现差错。比CRC校验码简单,称为因特网校验和。
IP数据报每经过一个路由器,路由器都要重新计算首部校验和,因为某些字段(生存时间,标志,片偏移等)的取值可能发送了变化。
由于IP层本身不提供可靠传输服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快的转发IP数据报。
四,静态路由配置及可能产生的路由环路问题
静态路由配置:指用户或网络管理员使用路由器的相关命令给路由器人工配置路由表。
- 这种人工配置方式简单,开销小。但不能及时适应网络状态(流量,拓扑等)的变化。
- 一般只在小规模网络中采用。
使用静态路由配置可能出现以下导致产生路由环路的错误:
- 配置错误
- 聚合了不存在的网络
- 网络故障
4.1 静态路由配置
4.2 默认路由
对于本例,路由器R1要发送数据给因特网中某一主机,但因特网中存在大量主机。
如果把每个主机的IP都写入路由器就会导致路由器过大,查表效率很低。
此时对于具有相同下一条的不同目的网络的路由条目,使用人工手动配置的默认路由来解决。
- 默认路由条目中目的网络的网络地址为:0.0.0.0/24
- 对于本例可以删除上192.168.2.0/24这一条记录。
- 默认路由的网络前缀最短,路由最模糊。
4.3 特定主机路由
有时候,我们可以给路由器添加针对某个主机的特定主机路由条目。
一般用于网络管理人员对网络的管理和测试,另外在需要考虑某种安全问题时也可采用特定主机路由。
可以看出,特定主机路由的网络前缀最长,路由最具体。
4.4 静态路由配置错误导致路由环路
为了防止IP数据报在路由环路中永久兜圈,在IP数据报首部中设有生存时间TTL字段。
IP数据报进入路由器后,TTL字段的值减1。若TTL的值不等于0,则被路由器转发,否则被丢弃。
4.5 聚合了不存在的网络而导致路由环路问题
解决方法:给不存在的网络添加黑洞路由。
4.6 网络故障而导致的路由环路问题
解决办法:在R1的路由表中添加那个损坏了的网络的黑洞路由。
五,路由选择分类
5.1 路由选择协议概述
路由选择分为:
- 静态路由选择::由人工配置的网络路由,默认路由,特定主机路由,黑洞路由等都属于静态路由。
- 这种人工配置方式简单,开销小,但不能及时适应网络状态(浏览,拓扑等)的变化。
- 一般只在小规模网络中使用。
- 动态路由选择:路由器通过路由选择协议自动获取路由信息。
- 比较复杂,开销比较大。能够较好地适应网络状态的变化。
- 适用于大规模网络。
因特网所采用的路由选择协议的主要特点:
-
自适应:动态路由选择,能够较好地适应网络状态的变化。
-
分布式:路由器之间交换路由信息。
-
分层次:将整个因特网划分为许多较小的自治系统AS(Autonomous System)
例如一个较大的因特网ISP就可以划分为一个自治系统。
在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择。
自治系统之间的路由选择叫域间路由选择。使用内部网关协议IGP
自治系统之内的路由选择叫域内路由选择。使用外部网关协议EGP
IGP和EGP只是路由选择的分类名称,不是具体的路由选择协议。
常见的路由选择协议分为两大类:
-
内部网关协议IGP:用于自治系统内部
路由信息协议RIP:基于距离向量,RIP在因特网上最早使用。
内部网关路由协议IGRP:基于距离向量,IGRP是思科早期私有的协议,现已被EIGRP取代。
增强型内部网关路由协议EIGRP:思科私有的,用来取代IGRP的混合型路由协议(结合距离向量和链路状态)
开放式最短路径优先OSPE:基于链路状态,OSPF在各种网络中广泛使用。
中间系统道中间系统IS-IS:基于链路状态,集成化IS-IS是ISP骨干网上最常用的IGP协议。
-
外部网关协议EGP:用于自治系统之间
边界网关协议BGP
5.2 路由信息协议RIP
路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最早得到广泛使用的协议之一,其相关标准文档为RFC 1058
RIP要求自治系统AS内的每一个路由器都要维护从它自己道AS内其他每一个网络的距离记录。这是一组距离,称为距离向量D-V(Distance-Vector)
RIP使用跳数作为度量来衡量到达目的网络的距离。
-
路由器到直连网络的距离定义为1
-
路由器到非直连网络的距离定义为所经过的链路中,路由器的数量加1
-
允许一条路径最多只能包含15个路由器,距离等于16时相当于不可达。
因此,RIP只适用于小型互联网。
RIP认为好的路由就是距离短的路由,也就是所通过的路由器数量最少的路由。
-
当到达同一目的网络有多条距离相等的路由时,可以进行等价负载均衡。即将通信量均衡地分布到多条等价的路由上。
RIP包含以下三个要点:
-
和谁交换信息:仅和相邻路由器交换信息。
-
交换什么信息:自己的路由表。
-
何时交换信息:周期性交换(例如每30秒)
RIP的基本工作过程:
- 路由器刚开始工作时,只知道自己到直连网络的距离为1.
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息。
- 若干次交换和更新之后,每个路由器都知道到达本AS内各网络的最短距离和下一条地址,称为收敛。
RIP的路由条目更新规则:
假设路由器C和D互为相邻路由器,它们之间周期性交换并更新路由信息。
其中路由器C的路由表下一条都是?,可以理解为,路由器D不需要关系路由器C的这些内容。
假设路由器C的RIP更新报文发送周期到了,则路由器C将自己的路由表中相关路由信息封装到RIP更新报文并发送给路由器D
可以简单的理解为,路由器C将自己的路由表发送给了路由器D
路由器D收到路由器C的路由表并对它进行改造:
- 将到达各目的网络的下一跳都改为C
- 将距离+1
改造完毕后,路由器D根据路由器C的信息对自己的路由表进行更新。
-
到达的网络,相同的下一跳,最新消息,更新。
路由器原来到达网络N2的距离是2,下一跳经过路由器C的转发。
根据改造后的路由器C的路由表可知,路由器D仍然经过路由器C的转发到达网络N2,只不过距离变成5,故将自己的距离变成5
-
发现了新网络,添加
路由器原来不知道网络N3的存在,现在知道了,可以通过路由器C到达网络N3,于是将该路由条目添加到自己的路由表中。
-
到达的网络,不同下一跳,新路由优势,更新。
路由器原来到达网络N6的距离是8,下一跳经过路由器F的转发。
根据改造后的路由器C的路由表可知,到达网络N6如果通过C来转发,则距离可以缩短为5。于是将自己这条路由条目中的距离修改为5,下一跳变为C
-
到达目的网络,不同下一跳,等价负载均衡。
路由器到达网络N8的距离是4,下一跳经过路由器E的转发。
根据改造后的路由器C的路由表可知,到达网络N8可以通过路由器C的转发,距离也为4,此时将这个条目也添加进路由表。
-
到达目的网络,不同下一跳,新路由劣势,不更新。
路由器D到达网络N9的距离为4,经过路由器F的转发。
根据改造后的路由器C的路由表可知,路由器D可以通过路由器C进行转发到达网络N9,但网络N9用路由器C转发的距离是6大于4故不更新。
RIP存在“坏消息传播得慢”得问题。
坏消息传得慢,又称为路由环路或距离无穷计数问题,这是距离向量算法得一个固有问题。可以采用多种措施减少出现该问题得概率或减小该问题得危害。
- 限制最大路径距离为15(16表示不可达到)
- 当路由表发生变化就立即发送更新报文(即触发更新),而不是周期性发送。
- 让路由器记录收到某特定路由信息得接口,而不让同一路由信息再通过此接口反方向传送(即水平分割)
如图所示:
假设N1与R1之间的链路故障,当R1检测出该故障后,会将到达N1的路由条目中的距离修改为16表示N1不可达到。
并等待RIP更新周期到时后发送该路由信息给R2
此时R2的路由表中,关于N1的路由条目仍然是先前通过RIP协议获取到的。
假设R2的RIP更新周期先到时。即R2的路由信息先到达R1,R1的这条路由信息后到达R2。
当R1收到R2的这条信息后,就会被R2误导,认为可以通过R2到达N1,距离为3。并在自己的RIP更新周期到时后,将这条路由信息发送给R2。无限循环直到R1和R2双方路由表中,到达N1的距离都达到16为止。
在该过程中,R1和R2之间会出现路由环路,这个时间长达数分钟。
5.3 开放最短路径优先协议OSPF
开放最短路径优先OSPF,是为了克服RIP的缺点在1989年开发出来的。
- 开放:表明OSPF协议不是收某一厂家控制,而是公开发表的。
- 最短路优先是因为使用了Dijkstra提出的最短路径算法SPF
- OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。
- OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。
- OSPF不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的代价
-
代价用来表示费用,距离,时延,带宽等,这些是由网络管理员人员决定。
-
举例:在思科路由器中OSPF计算代价的方法:100Mbps/链路带宽
计算结果小于1的值仍记为1,大于1且有小数的,舍弃小数。
OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。
-
Hello分组封装在IP数据报中,发往组播地址224.0.0.5
-
发送周期为10秒
-
40秒未收到来自邻居路由器的Hello分组,则认为该邻居路由器不可达。
使用OSPF的每个路由器都会产生链路状态通告LSA。LSA包含以下内容:
- 直连网络的链路状态信息。
- 邻居路由器的链路状态信息。
LSA被封装在链路状态更新分组LSU中,采用洪泛发送。即收到链路状态更新分组的路由器,将从自己其他所有接口转发该分组。
使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。
通过各路由器洪泛发送分组装有自己的LSA的LSU分组,各路由器的LSDB最终达到一致。
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各种到达其他各路由器的最短路径,即构建各种的路由表。
OSPF有以下五种分组类型:
-
类型1,问候(Hello)分组
用来发现和维护邻居路由器的可达性。
-
类型2,数据库描述(Database Description)分组
向邻居路由器给出自己的链路状态数据库中所有链路状态项目的摘要信息。
-
类型3,链路状态请求(Link State Request)分组
向邻居路由器请求发送某些链路状态项目的详细信息。
-
类型4,链路状态更新(Link State Update)分组
路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。
-
类型5,链路状态确定(Link State Acknowledgement)分组
这是对链路状态更新分组的确认分组。
OSPF的基本工作过程:
相邻路由器之间周期性发送问候分组,建立和维护邻居关系。
建立邻居关系后给邻居路由器发送数据库描述分组,即将自己的链路状态数据库中所有链路状态项目的摘要信息发送给邻居路由器。
假设R1收到R2的数据库描述分组后,发现自己缺少其中某些链路状态项目
于是给R2发送链路状态请求分组。
R2收到后,将R1所缺少的链路状态项目的详细信息,封装在链路状态更新分组中,发送给R1。
R1收到后,将这些所缺少的链路状态项目的详细信息,添加到自己的链路状态数据库中,并给R2发送链路状态确认分组。
最终,R1和R2的链路数据库将达到一致,即链路状态数据库达到同步。
每30分组或链路状态发送变化时,路由器都会发送链路状态更新分组。
收到该分组的其他路由器将洪泛转发该分组,并给该路由器发回链路状态确认分组。
这个叫新情况下的链路状态数据库同步。
OSPF在多点接入网络中的路由器邻居关系的建立。
如图所示:
假设路由器数量为n,则邻居关系数量为(n-1)*n/2
为了减少所发送分组的数量,OSPF采用选举指定路由器DR和备用的指定路由器BDR的方法
- 所有的非DR/非BDR只与DR/BDR建立邻居关系。
- 非DR/BDR之间通过DR/BDR交换信息。
- 若DR出现问题,则由BDR顶替DR
此时邻居关系的数量:2(n-2)+1
为了使OSPF能够用于规模很大的为了,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域。
每个区域都有32比特的区域标识符。可以用点分十进制表示。
-
主干区域的标识符必须为0,可表示为0.0.0.0
主干区域用于连通其他区域。
-
其他区域的标识符不能为0且互不相同。
-
每个区域的规模不能太大,一般所包含路由器不应该超过200个。
划分区域的好处:把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统。减少了整个网络的通信量。
定义:
-
区域内路由器IR:路由器的所有接口都在同一个区域内。上图区域内路由器IR为:R1,R2,R8,R9
-
区域边界路由器ABR:为了本区域可以和自治系统内的其他区域连通,每个区域都会有一个区域边界路由器。
它的一个接口用于连接自身所在区域,另一个接口用于连接主干区域。上图区域边界路由器有:R3,R4,R7
-
主干路由器BBR:主干区域内的路由器。上图主干区域路由器有:R3,R4,R5,R6,R7
-
自治系统边界路由器ASBR:在主干区域内,一个专门用来和本自治系统外的其他自治系统交换路由信息的路由器。上图自治系统边界路由器有R6
5.4 边界网关协议BGP
外部网关协议EGP:
- 在不同自治系统内,度量路由的代价(距离,带宽,费用等)可能不同,因此,对于自治系统之间的路由选择,使用代价作为度量来寻找最佳路由是不可行的。即没有同一的度量,寻找最佳的路由是无意义的。
- 自治系统之间的路由必须考虑相关策略(政治,经济,安全等)
- BGP只能力求寻找一条能够到达目的网络且比较好的路由,而非寻找一条最佳路由。
BGP基本工作原理:
-
在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”
一般来说,两个BGP发言人都是通过一个共享网络连接在一起的。
BGP发言人往往就是BGP边界路由器。 -
不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179
- 在此TCP连接上交换BGP报文以建立BGP会话。
- 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站。
-
BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP
-
BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)
-
当BGP发言人互相交换了网络可达性的信息后,各位BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构,不存在回路的自治系统连通图。
-
BGP适用于多级结构的因特网。
BGP-4的四种报文:
- OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
- UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
- KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性。
- NOTIFICATION(通知)报文:用来发送检测到的差错。
5.5 路由器的基本工作原理
路由器:路由器是一种具有多个输入和输出端口的专用计算机,其任务是转发分组。
整个路由器结构可划分为两大部分:
-
路由选择部分:核心是路由选择处理机,它的任务是根据所使用的路由选择协议,周期性地与其他路由器进行路由信息交互,来更新路由表。
-
分组转发部分:
由三部分构成:
-
交换结构:交换结构的速率对于路由器是至关重要的。
实现交换结构的三种基本方式:通过存储器,通过总线,通过互联网。
-
一组输入端口
-
一组输出端口
信号从某个输入端口进入路由器,物理层将信号转换成比特流送交数据链路层处理。
数据链路层从比特流中识别出帧,去掉帧头和帧尾后,送交网络层处理。
-
如果送交网络层的分组是普通待转发的数据分组,则根据分组首部中的目的地址进行查表转发。若找不到匹配的转发条目,则丢弃该分组。否则,按照匹配条目中所指示的端口进行转发。
-
如果送交网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交路由选择处理机。
路由选择处理机根据分组的内容来更新自己的路由表
- 路由表一般只包含从目的网络道下一跳的映射。
- 路由表需要对网络拓扑变化的计算最优化。
- 转发表是从路由表得出的。
- 转发表的结构应当使查找过程最优化。
-
-
路由器的各端口还具有输入缓冲区和输出缓冲区
- 输入缓冲区:缓冲新进入路由器但还来不及处理的分组。
- 输出缓冲区:暂存已经处理完毕但来不及发送的分组。
-
路由器的端口一般都具有输入和输出的功能。
六,网际控制报文协议ICMP
6.1 ICMP简述
- 为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP
- 主机或路由器使用ICMP来发送差错报文和查询报文。
- ICMP报文被封装在IP数据报中发送。
- ICMP差错报告报文共有以下五种:
- 终点不可达
- 源点抑制
- 时间超过
- 参数问题
- 改变路由(重定向)
- 常用的ICMP询问报文有两种:
- 回答请求和回答
- 时间戳请求和回答
6.2 ICMP差错报告报文
6.2.1 终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可根据ICMP的代码字段细分为:目的网络不可达,目的主机不可达,目的协议不可达,目的端口不可达,目的网络未知,目的主机未知等13种错误。
6.2.2 源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点找到应当把数据报的发送速率放慢。
6.2.3 时间超过
当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段值减1。
- 若结果不为0,则将该IP数据报转发出去。
- 若结果为0,除丢弃该IP数据报外,还要向源点主机发送时间超过报文。
当终点在预先规定的时间内不能收到一个数据报的全部数据报分片时,就将已收到的数据报片都丢弃,也会向源点发送时间超过报文。
6.2.4 参数问题
当路由器或目的主机收到IP数据报后,根据其首部的校验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
6.2.5 改变路由
路由器把改变路由报文发送给主机,让主机知道,下次应该将数据报发送给另外的路由器(可通过更好的路由)
6.2.6 不能发送ICMP差错报告报文的情况
- 对ICMP差错报告报文不再发送ICMP差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
- 对具有多播地址的数据报都不发送ICMP差错报告报文。
- 对具有特殊地址(127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
6.3 ICMP询问报文
6.3.1 回答请求和回答
ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。
收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
这种询问报文用来测试目的站是否可达及了解有关状态。
6.3.2 时间戳请求和回答
ICMP时间戳请求报文是请求某个主机或路由器回答当前的日期和时间。
在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
这种询问报文用来进行时钟同步和测量时间。
6.4 ICMP的典型应用
6.4.1 分组网间探测PING
- 用来测试主机或路由器间的连通性。
- 应用层直接使用网际层的ICMP(没有通过TCP或UDP)
- 使用ICMP回送请求和回答报文。
6.4.2 跟踪路由traceroute
- 用来测试IP数据报从源主机到目的主机要经过哪些路由器。
- 应用层直接使用网际层ICMP
- 使用了ICMP回送请求和回答报文,差错报告报文。(Windows版本)
- 使用了ICMP差错报告报文(Unix版本)
原理:
七,虚拟专用网VPN和网络地址转换NAT
7.1 虚拟专用网VPN
让这两个网络进行通信的方法:
-
租用电信公司的通信线路
简单方便,但租金过高。
-
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又叫虚拟专用网。
虚拟专用网的各主机分配IP地址:由于IPv4地址紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此虚拟专用网中的各主机所分配的地址应是本机构可自由分配的专用地址,而不是需要申请的,在因特网上使用的公有地址。
规定的:专用(私有)地址:
- 10.0.0.0~10.255.255.255(10.0.0.0/8地址块)
- 172.16.0.0~172.31.255.255(172.16.0.0/12地址块)
- 192.168.0.0~192.168.255.255(192.168.0.0/16地址块)
注:私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。即私有地址只能用作本地地址,而不能用作全球地址。
在因特网中的所有路由器,对目的地地址是私有地址的IP数据报一律不进行转发。
举例:
相当于封装了两层IP数据报,内层是内网主机的IP地址,外层是外网路由器的IP地址。
VPN的种类:
- 同一机构不同部门的内部网络所构成的虚拟专用VPN又称为内联网VPN。
- 一共机构的VPN需要有某些外部机构参加进来,这样的VPN就叫外联网VPN
- 在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源,这种VPN成为远程接入VPN
7.2 网络地址转换NAT
虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的威胁仍然没有得到解除。
- 1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题。
- NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
举例:内外主机访问外网资源。
解决办法:
- 在专用网络连接到因特网的路由器上安装NAT软件。
- 装有NAT软件的路由器叫NAT路由器。它至少有一个外部全球有效的IP地址。
- 这样所有使用私有地址的主机和外界通信时,都要在NAT路由器上将其私有全球地址转换成全球IP地址。
将内外地址转换为外网地址存在一个问题:如果NAT路由器具有N个全球IP地址,那么最多只能有N个内外主机能够同时和因特网上的主机通信。
由于绝大多所的网络应用都是使用运输层协议TCP或UDP来传输数据的,因此可以利用运输层的端口号和IP地址一起进行转换。
这样,用一个IP地址就可以使用多个拥有本地地址的主机同时和因特网上的主机进行通信。
这种将端口号和IP地址一起进行转换的技术叫:网络地址与端口号转换NAPT
八,IP多播技术
8.1 IP多播技术的相关概念
-
多播也叫组播,是一种实现一对多通信的技术,与传统单播一对一通信相比,多播可以极大地节约网络资源。
-
在因特网上进行的多播,称为IP多播。
-
举例:
在因特网上实现IP多播,需要因特网上的路由器解决:
- IP多播数据报的寻址
- 多播路由选择协议
8.2 IP多播地址和多播组
-
在IPv4中,D类地址被称为多播地址。
-
多播地址只能用作目的地址,而不能用作源地址。
-
每使用一个D类地址来标识一个多播组,使用同一个IP多播地址来接收IP多播数据报的所有主机就构成了一个多播组。
- 每个多播组成员是可以随时变动的,一台主机可以随时加入或离开多播组。
- 多播组成员的数量和所在地理位置不受限制,一台主机可以属于多个多播组。
-
非多播组成员也可向多播组发送IP多播数据报。
-
与IP数据报相同,IP多播数据报也是尽最大努力交付,不保证一定能够交付给多播组内的所有成员。
-
IPv4多播地址可分为:
- 预留的多播地址(永久多播地址)
- 全球范围可用的多播地址
- 本地管理的多播地址
-
IP多播可分为以下两种:
- 只在本局域网上进行的硬件多播
- 在因特网上进行的多播
目前,大部分主机都是通过局域网接入因特网的,因此,在因特网上进行多播的最后阶段,还是要把IP多播数据报在局域网上用硬件多播交付给多播组的所有成员。
8.3 在局域网上进行硬件多播
由于MAC地址有多播MAC地址这种类型,因此只要把IPv4多播地址映射成多播MAC地址,即可将IP多播数据报封装在局域网的MAC帧中,而MAC帧首部中的目的MAC地址字段的值,就设置为由IPv4多播地址映射成的多播MAC地址。这样就很方便地利用硬件多播来实现局域网的IP多播。
当给某个多播组的成员主机配置其所属多播组的IP多播时,系统就会根据映射规则从该IP多播地址生成相应的局域网多播MAC地址。
因特网号码指派管理局IANA,将自己从IEEE注册管理机构申请到的以太网MAC地址块从01-00-5E-00-00-00到01-00-5E-7F-FF-FF
的多播MAC地址,用于映射IPv4多播地址。
-
这些多播MAC地址的左起25个比特都是相同的,剩余23个比特可任意变化,因此共223个。
将32比特的IPv4多播地址映射成48比特的MAC多播地址的方法:
举例:IP多播地址与多播MAC地址的映射关系并不是唯一的。
- 如果不同的IP多播地址之间的不同之处仅仅出现在不能映射的那5个比特,则这些IP多播地址会映射出同一个多播MAC地址。
由于IP多播地址与多播MAC地址的映射关系不是唯一的,因此收到IP多播数据报的主机还要在网际层利用软件进行过滤,把不是主机要接收的IP多播数据报丢弃。
8.4 在因特网上进行IP多播需要的两种协议介绍
要在因特网上进行IP多播,就必须考虑IP多播数据报经过多个多播路由器进行转发的问题。
-
多播路由器必须根据IP多播数据报首部中的IP多播地址,将其转发到有该多播组成员的局域网。
路由器通过网际组管理协议IGMP知道自己各接口所在局域网是否具有某个多播组成员。
- 网际组管理协议IGMP是TCP/IP体系结构网际层中的协议,其作用是让连接在本地局域网上的多播路由器知道本局域网上是否有主机加入或退出某个多播。
- IGMP只在本网络中有效,使用IGMP并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在了哪些网络。
- 仅使用IGMP并不能在因特网上进行IP多播。连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协调工作,以便把ip多播数据报用最小的代价传送给所有的多播组成员,这就需要使用到多播路由选择协议。
- 多播路由选择协议的主要任务是:在多播路由器之间为每个多播建立一个多播转发树。
- 多播转发树连接多播资源和所有拥有该多播组成员的路由器。
- IP多播数据报只要沿着多播转发树进行洪泛,就能被传送到所有拥有该多播组成员的多播路由器。
- 之后,在多播路由器所直连的局域网内,多播路由器通过硬件多播,将IP多播数据报发送给该多播组的所有成员。
- 针对不同的多播组需要维护不同的多播树,而且必须动态地适应多播组成员的变化,但此时网络图片并不一定发生变化,因此多播路由选择协议要比单播路由选择协议(RIP,OSPF)复杂的多
- 即使某个主机不是任何多播组的成员,它也可向任何多播组发送多播数据报。
- 为了覆盖多播组的所有成员,多播转发树可能要经过一些没有多播组成员覆盖的路由器。
8.5 网际组管理协议IGMP
8.5.1 网际组管理协议IGMP的三种报文类型
-
网际组管理协议IGMP目前最新版本是2002年10月发布的IGMPv3
-
IGMP有三种报文类型:
成员报告报文,成员查询报文,离开组报文、
-
IGMP报文被封装在IP数据报中传输:
8.5.2 网际组管理协议IGMP的基本工作原理
8.5.2.1 加入多播组的情况。
假设主机B首先向以太网发送IGMP成员报告报文
IGMP成员报告报文的主要内容:
- 所希望加入多播组的IP地址
- IP数据报的目的地址(同上)
- 以太网多播帧的目的地址:由所希望加入多播组的IP地址映射而来的多播MAC地址。
主机A发现这个多播数据报中多播帧MAC地址和自己的相同,接收该数据报,交给自己的网际层处理。
这样A就知道这是来自同一个IP多播组的另一个成员的IGMP成员报文。
于是取消自己准备发送的IGMP成员报告报文。
多播路由器R1收到该多播帧后提取出其中的IGMP成员报告报文,解析后就知道自己直连网络中有一个新的IP多播组。
此时将这个多播地址添加到自己的多播组列表中。
8.5.2.2 监视多播组的成员变化
- IGMP成员查询报文的内容:主要是要查询的特定多播组的IP多播地址。内容也可也为0.0.0.0,表示全部多播
- IP多播数据报的目的地址:224.0.0.1,一个特殊的多播地址,在本网络中所有参加多播的主机和路由器的网际层都会接收该多播数据报。
- 以太网多播的目的地址:01-00-5E-00-00-01是由IP多播数据报的目的地址映射来的MAC地址。
收到IGMP成员查询报文的被查询多播组的任何成员,将会发送IGMP成员报告报文作为应答。
为了减少不必要的重复应答,每个多播组只需要有一个成员应答就可以了。因此,采用了一种延迟响应的策略。
收到IGMP成员查询报文的主机,并不是立即响应,而是在1到10秒这个范围内,等待一段随机时间再进行响应。
如果在这段随机时间内,收到了同组其他成员发送的IGMP成员报告报文,就取消响应。
假设主机C不再是多播组成员
注:
- 同一网络中的多播路由器可能不止一个,但没有必要每个多播路由器都周期性发送ICMP成员查询报文。
- 只要在这些多播路由器中选择一个作为查询路由器,由查询路由器发送IGMP成员查询报文,而其他的多播路由器仅被动地响应并更新主机的多播组列表即可。
- 选择查询路由器的方法:
- 每个多播路由器若监听到源IP地址比自己的IP地址小的IGMP成员查询报文,则退出选举。
- 最后,网络中只有IP地址最小的多播路由器成为查询路由器。
8.5.2.3 退出多播组
IGMPv2在IGMPv1的基础上增加了一个可选项:当主机要退出某个多播组时,可主动发送一个离开组报文,而不必等待多播路由器的查询。这样可使多播路由器能够更快地发现某个组有成员离开。
当路由器接收到这个离开组报文,暂时不删除这个多播组,而是立即发送针对该多播组的特殊IGMP成员查询报文,探测该多播组是否还要其他的成员。
封装这个特殊的IGMP成员查询报文的IP多播数据报的目的地址为:该多播组ip地址而不是224.0.0.1
- IGMP离开组报文的内容:要退出的那个多播组的ip地址
- IP多播数据报的目的地址:224.0.0.2,特殊的IP多播地址,在本网络中的所有多播路由器的网际层都会接收该多播数据报。
8.6 多播路由选择协议
-
多播路由器选择协议的主要任务是:在多播路由器之间为每个多播组建立一个多播转发树。
- 多播转发树连接多播源和所拥有该多播组成员的路由器。
-
目前有两种方法来构建多播转发树:
- 基于源树多播路由选择
- 组共享树多播路由选择
8.6.1 基于源树多播路由选择
-
基于源树的多播路由选择的最典型算法是反向路径多播(Reserve Path Multicasting)RPM算法
-
RPM算法包含以下两个步骤:
- 利用反向路径广播(Reserve Path Broadcasting,RPB)算法建立一个广播转发树。
- 利用剪枝算法,剪除广播转发树中的下游非成员路由器,获得一个多播转发树。
-
利用洪范法建立广播树:
-
利用反向路径广播RPB算法建立广播树,不会生成环路,可避免广播分组在环路中兜圈。
RPB算法的要点是:每一台路由器在收到一个广播分组时,先检查该广播分组是否是从源点经过最短路径传送来的。
-
若是,本路由器就从除了自己刚才接收该广播分组的接口的其他所有接口转发该广播分组。
-
否则,丢弃该广播分组。
-
如果本路由器有好几个邻居路由器都处在到源点的最短路由器上,也就是存在好几条同样长度的最短路径,那么只能选取一条最短路径。
选择规则:IP地址最小的那条邻居路由器。
RPB中,反向路径的意思是:在计算最短路径时把源点当作终点。
RPB只是实现了广播,假设R8没有多播组成员(利用ICMP探测),也没有下游路由器的叶节点从广播转发树上剪枝,从而实现多播转发树。
尽管R2没有多播组成员,但也要保留R2以确保多播转发树的连通性。
-
8.6.2 组共享树多播路由选择
-
组共享树多播路由选择采用基于核心的分布式生成树算法来建立共享树。
- 该方法在每个多播组中指定一个核心路由器,以该路由器为根,建立一颗连接多播组所有成员路由器的生成树,作为多播转发树。
-
每个多播组中除了核心路由器,其他所有成员路由器都会向自己多播组中的核心路由器单播加入报文。
- 加入报文通过单播朝着核心路由器转发,直到它到达已经属于该多播生成树的某个节点或直接到达该核心路由器。
- 加入报文所经过的路径,就确定了一条从单播该报文的边缘节点到核心路由器之间的分支,而这个新分支就被嫁接到先有的多播转发树上。
-
举例:基于核心的生成树的建立过程
8.6.3 因特网的多播路由选择协议
-
目前还没有在整个因特网范围使用的多播路由选择协议。
-
一些建议使用的多播路由选择协议:
-
尽管因特网工程任务组IETF努力推动着因特网上的全球多播主干网(Multicast Backbone On the Internet ,MBONE)的建。
但至今在因特网上的IP多播还没有得到大规模应用。
- 主要原因是:改变一个已成功运行且广泛布署的网络层协议是一件极其困难的事。
- 目前IP多播主要应用在一些局域网的园区网络,专用网络或虚拟专用网络中。
P2P技术的广泛应用推动了应用层多播技术的发展,许多视频公司和内容分发公司,通过构建自己的应用层多播覆盖网络来分发它们的内容。但上述多播路由选择协议的算法思想在应用层多播中仍然适用。
九,移动IP技术
9.1 移动IP技术概述
为了解决应用场景三的影响,诞生了移动IP技术。
移动IP技术相关概念:
-
移动IP是因特网工程任务组IETF开发的一种技术,该技术使得移动主机在各网络之间漫游时,仍然能够保持其原来的IP地址不变。
-
移动IP技术还为因特网的非移动主机提供了相应机制,使得他们能够将IP数据报正确发送到移动主机。
-
归属网络:每个移动主机都有一个默认连接的网络或初始申请接入的网络,称为归属网络
-
归属地址:移动主机在归属网络中的IP地址在其整个移动通信过程中是始终不变的,因此称为永久地址或归属地址。
-
归属代理:在归属网络中,代表移动主机执行移动管理功能的实体称为归属代理。
归属代理通常就是连接在归属网络上的路由器,然而它作为代理的特定功能则是在网络层完成的。
-
外地网络:移动主机当前漫游所在的网络称为外地网络或被访问网络。
-
外地代理:在外地网络中,帮助移动主机执行移动管理任务的实体称为外地代理。
-
转交地址:外地代理通常就是连接在外地网络上的路由器。外地代理会为移动主机提供一个临时使用的属于外地网络的转交地址。
9.2 移动IP技术的基本工作原理
9.2.1 代理发现与注册
9.2.2 固定主机向移动主机发送IP数据报
当外地代理和移动主机部属同一台设备时,转交地址实际上是外地代理的地址而不是移动主机的地址。
转交地址既不会作为移动主机发送IP数据报的源地址,也编号作为移动主机所接收的IP数据报的目的地址。
转交地址仅仅是归属代理到外地代理的IP隧道的出口地址。
所有使用同一外地代理的移动主机都可共享同一个转交地址。
当外地代理从IP隧道中收到并解封出原IP数据报时,会在主机的代理注册表中查找移动主机的永久地址所对应的MAC地址,并将该数据报封装到目的地址为该MAC地址的帧中发送给移动主机。
这与正常IP数据报转发流程是不同的,否则会造成该数据报又被发回移动主机的归属网络。
9.2.3 移动主机向固定主机发送IP数据报
该ip数据报被移动主机A按照正常的发送流程发送出去即可。
由于IP路由器并不关心IP数据报的源地址,因此该IP数据报被直接路由到固定主机B,而无需再通过归属代理进行转发。
为此,移动主机可以将外地代理作为自己的默认路由器,也可通过代理发现协议从外地代理获取外地网络中其他路由器的地址,并将其设置为自己的默认路由器。
9.2.4 同址转交地址方式
外地代理除了可以配置在外地网络中的某个路由器上,也可直接运行在移动主机上。为此,移动主机需要额外的外地代理软件。外地网络也需要提供相应的机制,使移动主机能够自动获取一个外地网络中的地址作为自己的IP地址和外地代理的地址,被称为:同址转交地址,这样移动主机自己将接收所有发往转交地址的IP数据报。
9.2.5 三角形路由问题
假设固定主机B要发送ip数据报给移动主机A,如下图所示:
即使在固定主机与移动主机之间存在一条更有效的路径,发往移动主机的IP数据报也要先发送给归属地址,造成IP数据报转发的低效。
解决三角形路由问题的一种方法:
-
给固定主机配置一个通信代理,固定主机发送给移动主机的IP数据报,都要通过该通信代理转发。
通信代理先从归属代理获取移动主机的转交地址,之后所有发送给移动主机的IP数据报,都利用转交地址直接从IP隧道发送给移动主机的外地代理,而无需再通过移动主机的归属代理进行转发。
这种方法以增加复杂性为代价,并且要求固定主机也要配置通信代理,也就是对固定主机不再透明。
十,IPv6地址
10.1 IPv6引进的主要变化
- 更大的地址空间:IPv6将IPv4的32比特地址空间增大到了128比特,在采用合理编址方法的情况下,在可预见的未来是不会用完的。
- 扩展的地址层次结构:可划分为更多的层次,这样可以更好地反映出因特网的拓扑结构,使得对寻址和路由层次的设计更加灵活。
- 灵活的首部格式:IPv6与IPv4的首部不兼容,IPv6定义了许多可选的扩展首部,不仅可提供比IPv4更多的功能,而且还可提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扩展首部都不进行处理。
- 改进的选项:IPv6允许分组包含有选项的控制信息,因而可以包含一些新的选项。然而IPv4规定的选项是不变的。
- 允许协议继续扩充:这一点很重要,因为技术总是在不断发展,而新的应用也会层出不穷。然而IPv4的功能却是固定不变的。
- 支持即插即用(即自动配置):IPv6支持主机或路由器自动配置IPv6地址以及其他网络配置参数。因此IPv6不需要使用DHCP
- 支持资源的预分配:IPv6能为实时语音视频等要求一定带宽和时延的应用,提供更好的服务质量保证。
10.2 IPv6数据报的基本首部
IPv6数据报构成图:
所有的扩展首部并不属于IPv6数据报的首部,它们与其后面的数据部分合起来构成有效载荷(也叫净载荷)
IPv6数据报的基本首部的格式:
IPv6将IPv4数据报首部中不必要的功能取消了,这使IPv6数据报基本首部中的字段数量减少到只有8个。
-
但由于IPv6地址的长度扩展到了128比特,因此使得IPv6数据报基本首部的长度反而增大到了40字节。
比IPv4数据报首部固定部分长度多了20字节。
-
IPv6取消了首部长度字段,因为IPv6数据报的首部长度固定40字节。
-
IPv6取消了区分服务字段,因为IPv6数据报首部中的通信量类和流标号字段实现了这个功能。
-
IPv6取消了总长度字段,改用有效载荷长度字段。因为IPv6数据报的首部长度是固定40字节,只有后面的有效载荷长度是可变的。
-
IPv6取消了标识,标志,片偏移字段,因为这些功能包含在了IPv6数据报的分片扩展首部中。
-
IPv6把生存时间字段改叫跳数限制字段,这样名称与作用更加一致。
-
IPv6取消了协议字段,改用下一个首部字段
-
IPv6取消了首部校验和字段,这样可以加快路由器处理IPv6数据报的速度。
-
IPv6取消了可选字段,改用扩展首部来实现选项功能。
IPv6数据报基本首部中各字段的含义:
-
版本字段:长度为4比特,用来标识IP协议的版本。
对于IPv6该字段的值为6
-
通信量类字段:长度为8比特,该字段用来区分不同的IPv6数据报的类别或优先级。
目前正在进行不同的通信量类性能的实验。
-
流标号字段:长度为20比特
-
IPv6提出了流的抽象概念
-
流就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据报的传送),而在这个流所经过的路径上的所有路由器都保证指明的服务质量。
-
所有属于同一个流的IPv6数据报都具有相同的流标号。
换句话说,流标号用于资源分配。
-
流标号对于实时音频数据的传输特别有用,但对于传统的非实时数据,流标号没有用处,把流标号的值置为0即可。
-
有效载荷长度字段:长度为16比特,指明IPv6数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量。
- 该字段以字节为单位,最大取值为65535,因此IPv6数据报基本首部后面的有效载荷的最大长度为65535
-
下一个首部字段:长度为8比特。该字段相当于IPv4数据报中的协议字段或可选字段。
- 当IPv6数据报没有扩展首部时,该字段的作用和IPv4的协议字段一样,它的值指出了IPv6数据报基本首部后面的数据是何种协议数据单元PDU
- 当IPv6数据报基本首部后面有扩展首部时,该字段的值就标识后面第一个扩展首部的类型。
-
跳数限制字段:长度为8比特,该字段用来防止IPv6数据报在因特网中永久兜圈。
- 源点在每个IPv6数据报发出时就设定某个跳数限制(最大为255)
- 每个路由器在转发IPv6数据报时,要先把跳数限制字段的值减1。当跳数限制的值为0时,就把这个IPv6数据报丢弃,不转发。
- 该字段的作用和IPv4数据报首部中的生存时间TTL字段完全一样,IPv6只是改了名。
-
10.3 IPv6数据报的扩展首部
- IPv4数据报如果在其首部中使用了选项字段,则在数据报的整个传送路径中的全部路由器,都要对选项字段进行检查,这就降低了路由器处理数据报的速度。
- 实际上,在路径的路由器对很多选项是不需要检查的。因此为提高路由器对数据报的处理效率。IPv6把原来IPv4首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理。而数据报传送路径中的所有路由器都不处理这些扩展首部(除了逐跳选项扩展首部)
- 在RFC 2460中定义了六种扩展首部:
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选择
- 每一个扩展首部都由若干字段组成,它们的长度是不一样的。
- 所有扩展首部的第一个字段都是8比特的,下一个首部字段。该字段的值指出在该扩展首部后面是何种扩展首部。
- 当使用多个扩展首部时,应按以上的先后顺序出现。
10.4 IPv6地址的表示方法
-
在IPv6中,每个地址占128比特,因此IPv6地址空间大小为2 128
-
在IPv6地址的冒号十六进制记法的基础上,再使用左侧零省略和连续零压缩,可使IPv6地址的表示更加简洁。、
-
左侧零省略:两个冒号之间的十六进制数种,最前面的一串0可不写。
-
连续零压缩:一连串连续的0可用冒号取代。
-
在一个IPv6地址中,只能使用一次连续零压缩,否则会导致歧义。
-
-
冒号十六进制记法还可结合点分十进制的后缀。这在IPv4向IPv6过度阶段非常有用。
-
CIDR的斜线表示法在IPv6中仍然可用。
10.5 IPv6地址的分类
IPv6数据报的目的地址有三种类型:
- 单播:传统的点对点通信
- 多播:一对多的通信。数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而将广播看作多播的一个特例。
- 任播:这是IPv6新增的一种类型。任播的终点是一组计算机,但数据报只交付其中任意的一个。通常是按路由算法得出的距离最佳的一个。
RFC 4291对IPv6地址进行了分类:
-
未指明地址
128个比特全为0的地址,可缩写为两个冒号::
该地址不能用作目的地址,只能用于一个还没有配置到一个标志IPv6地址的主机用作源地址。
未指明地址只能有一个
-
环回地址
最低比特为1,其余127个比特全为0,即 0:0:0:0:0:0:0:1,可缩写为::1
该地址的作用与IPv4的环回地址相同。
IPv6的环回地址只有一个
-
多播地址
最高8比特为全1的地址,可记为FF00::/8
IPv6多播地址的功能与IPv4多播地址相同
这类地址占IPv6地址空间的1/256
-
本地链路单播地址
最高10位比特为1111111010的地址,可记为FE80::/10
即使用户网络没有连接到因特网,但仍然可用TCP/IP协议。连接在这种网络上的主机,都可使用本地链路单播地址进行通信,但不能和因特网上的其他主机通信。
这类地址占IPv6地址空间的1/1024
-
全球单播地址
全球单播地址是使用得最多得一类地址。
IPv6全球单播地址采用三级结构,这是为了使得路由器可更快地查找路由器。
全球路由选择前缀:分配给公司和机构,用于因特网中路由器得路由选择,相当于IPv4分类地址中的网络号。
子网标识符:用于公司和机构构建自己的子网
接口标识符:用于指明主机或路由器的单个网络接口,相当于IPv4分类地址中的主机号。有64个比特,足够将各种硬件地址直接进行编码,这样就不需要使用ARP了。
10.6 从IPv4向IPv6过渡
- 因特网上使用IPv4的路由器的数量太大,要让所有路由器都改用IPv6不能一蹴而就。因此,从IPv4转变到IPv6就只能采用逐步演进的办法。
- 另外,新部属的IPv6系统必须能够向后兼容,也就是IPv6系统必须能够接收和转发IPv4数据报,并且能够为IPv4数据报选择路由。
- 有两种从IPv4过渡到IPv6的策略:
- 使用双协议栈
- 使用隧道即使
使用双协议栈技术从IPv4向IPv6过渡:
- 双协议栈(Dual Stack)是指在完全过渡到IPv6之前,使一部分主机或路由器装有IPv4和IPv6两套协议栈。
- 双协议栈主机或路由器既可以和IPv6系统通信,又可以和IPv4系统通信。
- 双协议栈主机或路由器记为IPv6/IPv4,表明它具有一个IPv6地址和一个IPv4地址。
- 双协议栈主机在与IPv6主机通信时采用IPv6地址,而与IPv4主机通信时采用IPv4地址。双协议栈主机通过域名系统DNS查询目的主机采用的IP地址:
- 若DNS返回的是IPv4地址,则双协议栈的源主机就使用IPv4地址
- 若DNS返回的是IPv6地址,则双协议栈的源主机就使用IPv6地址。
使用隧道技术从IPv4向IPv6过渡:
隧道技术(Tunneling)的核心思想
- 当IPv6数据报要进入IPv4网络时,将IPv6数据报重新封装成IPv4数据报,即整个IPv6数据报成为IPv4数据报的数据载荷。
- 封装有IPv6数据报的IPv4数据报在IPv4网络中传输。
- 当IPv4数据报要离开IPv4网络时,再将其数据载荷(即原来的IPv6数据报)取出并转发到IPv6网络。
要使双协议栈路由器R4知道IPv4数据报的数据载荷是IPv4数据报,则IPv4数据报首部中协议字段值必须设为41
10.7 网际控制报文协议ICMPv6
ICMPv6概述:
- 由于IPv6与IPv4一样,都不确保数据报的可靠交付,因此IPv6也需要使用网际控制报文协议ICMP来向发送IPv6数据报的源主机反馈一些差错信息,相应的ICMP版本为ICMPv6。
- ICMPv6比ICMPv4要复杂得多,它合并了原来的地址解析协议ARP和网际组管理协议IGMP的功能。因此与IPv6配套使用的网际层协议就只有ICMPv6这一个协议。
ICMPv6报文的封装:
-
ICMPv6报文需要封装成IPv6数据报进行发送
若IPv6数据载荷部分没有扩展首部,则在下一个首部字段取值为58,表明数据载荷为ICMPv6报文
若IPv6数据载荷部分有扩展首部,则在最后一个扩展首部中的下一个字段取值58,表明数据载荷为ICMPv6报文
ICMPv6报文的分类:
-
ICMPv6报文可被用来报告差错、获取信息、探测邻站或管理多播通信。
-
在对ICMPv6报文进行分类时,不同的RFC文档使用了不同的策略:
- 在[RFC 2463]中定义了六种类型的ICMPv6报文
- 在[RFC 2461]中定义了五种类型的ICMPv6报文
- 在[RFC 2710]中定义了三种类型的ICMPv6报文
-
常用的几种ICMPv6报文:
十一,软件定义网络SDN
- 软件定义网络(Software Defined Network,SDN)的概念最早由斯坦福大学的Nick McKeown教授于2009年提出。
- SDN最初只是学术界讨论的一种新型网络体系结构。
- SDN成功案例:谷歌于2010~2012年间建立的数据中心网络B4。
- SDN是当前网络领域最热门和最具发展前途的技术之一,成为近年来的研究热点。
- 在SDN体系结构中,路由器中的路由软件都不存在了。因此,路由器之间不再交换路由信息。在控制层面中,有一个在逻辑上集中的远程控制器。逻辑上集中的远程控制器在网络上可由不同地点的多个服务器组成。
- 远程控制器掌握各主机和整个网络的状态。
- 远程控制器能够为每一个分组计算出最佳的路由。
- 远程控制器为每一个路由器生成其正确的转发表。
- SDN这种新型网络体系结构的核心思想:把网络的控制层面和数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备。
OpenFlow协议与SDN体系结构的关系:
- OpenFlow协议是一个得到高度认可的标准,在讨论SDN时往往与0penFlow一起讨论。
- OpenFlow协议可被看成是SDN体系结构中控制层面与数据层面之间的通信接口。
- OpenFlow协议使得控制层面的控制器可以对数据层面中的物理设备进行直接访问和控制。
- OpenFlow协议的技术规范由非营利性的产业联盟开放网络基金会负责制定。
- ONF的任务是致力于SDN的发展和标准化。
- SDN并未规定必须使用OpenFlow,只不过大部分SDN产品采用了OpenFlow作为其控制层面与数据层面的通信接口。
- OpenFlow从2009年底发表的1.0版开始,每年都被更新,历经12次更新,到2015年3月发布了1.5.1版,目前较为成熟的是1.3版本。
传统意义上的数据层面的任务:根据转发表转发分组。
转发分组分为以下两个步骤:
- 进行“匹配”:查找转发表中的网络前缀,进行最长前缀匹配。
- 执行“动作”∶把分组从匹配结果指明的接口转发出去。
SDN的广义转发分为以下两个步骤:
- 进行“匹配”︰能够对网络体系结构中各层(数据链路层、网络层、运输层)首部中的字段进行匹配。
- 执行“动作”︰不仅转发分组,还可以负载均衡、重写IP首部(类似NAT路由器中的地址转换)、人为地阻挡或丢弃一些分组(类似防火墙一样)
在SDN的广义转发中,完成“匹配+动作”的设备并不局限在网络层工作,因此不再称为路由器,而称为“OpenFlow交换机”或“分组交换机”,或更简单地称为“交换机”。相应的,在SDN中取代传统路由器中转发表的是“流表((Flow Table) "。
- 一个流就是穿过网络的一种分组序列,而在此序列中的每个分组都共享分组首部某些字段的值。例如,某个流可以是具有相同源IP地址和目的IP地址的一连串分组。
- OpenFlow交换机中的流表是由SDN远程控制器来管理的。SDN远程控制器通过一个安全信道,使用OpenFlow协议来管理OpenFlow交换机中的流表。
- 每个OpenFlow交换机必须有一个或多个流表。****每一个流表可以包含多个流表项。
每个流表项包含三个字段:首部字段值(或称匹配字段)、计数器、动作。
-
首部字段值字段包含有一组字段,用来使入分组(Incoming Packet)的对应首部与之匹配,因此又称为匹配字段。匹配不上的分组就被丢弃,或被发送到SDN远程控制器做更多的处理。
在OpenFlow交换机中,既可以处理数据链路层的帧,也可以处理网际层的IP数据报,还可以处理运输层的TCP或UDP报文。
-
计数器字段是一组计数器:
记录已经与该流表项匹配的分组数量的计数器;
记录该流表项上次更新到现在经历时间的计数器。 -
动作字段是一组动作,当分组匹配某个流表项时,执行该流表项中动作字段指明的以下某个或多个动作:
把分组转发到指明的端口
丢弃分组
把分组进行复制后再从多个端口转发出去
重写分组的首部字段(包括数据链路层、网际层以及运输层的首部)。
SDN体系结构及其四个关键特征:
- 基于流的转发
- 数据层面与控制层面分离
- 位于数据层面分组交换机之外的网络控制功能
- 可编程的网络
SDN控制器可划分三个层次:
标签:多播,主机,网络层,地址,IP,路由,路由器 From: https://www.cnblogs.com/wdadwa/p/17500250.html