注:内容参考湖科大教书匠《深入浅出计算机网络》
网络层概述
分组转发和路由选择
网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。
分组转发
分组转发:当路由器从自己的某个接口所连接的链路或网络上收到一个分组后,将该分组从自己其他适当的接口转发给下一跳路由器或者目的主机。
每个路由器都需要维护自己的一个转发表,路由器根据分组首部中的转发标识A(取决于具体的网络层)在自己的转发表中进行查询。
路由选择
路由选择:源主机和目的主机之间可能存在多条路径,网络层需要决定哪一条路径来传送分组。
选择哪一条路径,取决于路由选择方式:
- 集中式路由选择:由某个网络控制中心执行路由选择,并向每个路由器下载路由信息。
- 分布式路由选择:在每个路由器上运行路由选择协议,各路由选择协议相互交换路由信息并各自计算路由。
- 人工路由选择:由网络运维人员配置路由。
注:路由选择生成的是路由表,路由表一般仅包含从目的网络到下一跳的映射,路由表需要对网络拓扑变化的计算最优化。而转发表是从路由表得出的,转发表的结构应当使查找过程最优化。
网络层向上层提供的两种服务
面向连接的虚电路服务
核心思想是“可靠通信应由网络自身来保证”。
必须首先建立网络层连接——虚电路(VC),以保证通信双方所需的一切网络资源。
通信双方沿着已建立的虚电路发送分组。
通信结束后,需要释放之前所建立的虚电路。
注1:虚电路表示这是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而不是真正建立了一条物理连接。
注2:分组的首部仅在连接建立阶段使用完整的目的主机地址,之后每个分组的首部只需要携带一条虚电路编号即可。
无连接的数据报服务
核心思想是“可靠通信应由用户主机来保证”。
不需要建立网络层连接。
每个分组可走不同的路径。因此,每个分组的首部都必须携带目的主机的完整地址。
通信结束后,没有需要释放的连接。
- 将复杂的网络处理功能置于因特网的边缘(即用户主机和其内部的运输层)
- 将相对简单的尽最大努力(即不可靠)的分组交付功能置于因特网核心。
注:这种通信方式所传送的分组可能误码、丢失、重复和失序。
网际协议IP
网际协议IP
网际协议(Internet Protocol,IP)是TCP/IP体系结构网际层中的核心协议。
地址解析协议(ARP)、逆地址解析协议(RARP)、网际控制报文协议(ICMP)、网际组管理协议(IGMP)
在网际层中,RARP和ARP画在IP的下面,这是因为IP协议经常要使用这两个协议。ICMP和IGMP画在IP的上面,因为它们要使用IP协议。
异构网络互连
下图网络的拓扑、性能以及所使用的网络协议都不尽相同,这是由用户需求的多样性造成的,没有一种单一的网络能够适应所有用户的需求。
要将众多的异构型网络都互连起来,并且能够互相通信,需要解决许多问题:1)不同的网络接入机制;2)不同的差错恢复方法;3)不同的路由选择技术;4)不同的寻址方案;5)不同的最大分组长度;5)不同的服务(面向连接服务和无连接服务)。
IPv4地址及其编址方法
IPv4地址概述
IPv4地址是给因特网(Internet)上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的32比特的标识符。
IPv4地址的表示方法
采用点分十进制表示方法以方便用户使用。
分类编址
分类编址方法将32比特的IPv4地址分为以下两部分:
- 网络号:用来标志主机(或路由器)的接口所连接到的网络。
- 主机号:用来标志主机(或路由器)的接口。
同一个网络中,不同主机(或路由器)的接口的IPv4地址的网络号必须相同,表示它们属于同一个网络,而主机号必须各不相同,以便区分各主机(或路由器)的接口。
分类编址的IPv4地址分为以下五类:A类地址、B类地址、C类地址、D类地址(多播地址)、E类地址(保留地址)。
- A类、B类和C类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口。
- 主机号为“全0”的地址是网络地址,不能分配给主机(或路由器)的各接口。
- 主机号为**“全1**”的地址是广播地址,不能分配给主机(或路由器)的各接口。
A类地址
最小网络号为0
,表示本网络,不能指派。
最小可指派的网络号为1
,网络地址为1.0.0.0
。
最大网络号为127
,作为本地环回测试地址,不能指派。
- 最小的本地环回测试地址为
127.0.0.1
。 - 最大的本地环回测试地址为
127.255.255.254
。
最大可指派的网络号为126
,网络地址为126.0.0.0
。
可指派的A 类网络数量为 2 ( 8 − 1 ) − 2 = 126 2^{(8-1)}-2=126 2(8−1)−2=126(减2是去掉最小网络号0和最大网络号127)。
每个A 类网络中可分配的地址数量为 2 24 − 2 = 16777214 2^{24}-2=16777214 224−2=16777214(减2是去掉网络地址和广播地址)。
B类地址
最小可指派的网络号为128.0
,网络地址为128.0.0.0
。
最大可指派的网络号为191.255
,网络地址为191.255.0.0
。
可指派的B类网络数量为 2 ( 16 − 2 ) = 16384 2^{(16-2)}=16384 2(16−2)=16384。
每个B类网络中可分配的地址数量为 2 16 − 2 = 65534 2^{16}-2=65534 216−2=65534。
C类地址
最小可指派的网络号为192.0.0
,网络地址为192.0.0.0
。
最大可指派的网络号为223.255.255
,网络地址为223.255.255.0
。
可指派的C类网络数量为 2 ( 24 − 2 ) = 2097152 2^{(24-2)}=2097152 2(24−2)=2097152。
每个C类网络中可分配的地址数量为 2 8 − 2 = 254 2^{8}-2=254 28−2=254。
特殊地址
划分子网
如果可以从IPv4地址的主机号部分借用一些比特作为子网号来区分不同的子网,就可以利用原有网络中剩余的大量IPv4地址,而不用申请新的网络地址了。
子网掩码
子网掩码可以表明分类IPv4 地址的主机号部分被借用了几个比特作为子网号。
与IPv4 地址类似,子网掩码也是由32比特构成的。
- 用左起多个连续的比特1对应IPv4地址中的网络号和子网号;
- 之后的多个连续的比特0对应IPv4地址中的主机号。
将划分子网的IPv4地址与相应的子网掩码进行逐比特的逻辑与运算,就可得到该IPv4地址所在子网的网络地址。
注:只要给定了一个分类的IPv4 地址及其相应的子网掩码,就可以得出子网划分的全部细节。
默认子网掩码
默认子网掩码是指在未划分子网的情况下使用的子网掩码:A类:255.0.0.0
;B类:255.255.0.0
; C类:255.255.255.0
。
无分类编址
因特网工程任务组IETF又提出了采用无分类编址的方法,来解决IPv4 地址资源紧张的问题。
无分类域间路由选择(CIDR)消除了传统A 类、B 类和C 类地址以及划分子网的概念,可以更加有效地分配IPv4地址资源,并且可以在IPv6使用之前允许因特网的规模继续增长。
CIDR把32比特的IPv4地址从划分子网的三级结构(网络号、子网号、主机号)又改回了与分类编址相似的两级结构(网络号、主机号)。
无分类编址的网路前缀是不定长的,需要配合使用32位比特的地址掩码来确定其网络前缀和主机号。
地址掩码
无分类编址方法使用的地址掩码与划分子网使用的子网掩码类似,由32比特构成。
- 用左起多个连续的比特1对应IPv4地址中的网络前缀;
- 之后的多个连续的比特0对应IPv4地址中的主机号。
为了简便起见,可以在无分类编址的IPv4地址后面加上斜线“/”,在斜线之后写上网络前缀所占的比特数量(也就是地址掩码中左起连续比特1的数量),这种记法称为斜线记法。
CIDR地址块
CIDR是将网络前缀都相同的、连续的多个无分类IPv4地址,组成一个“CIDR地址块”,只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的以下全部细节:1)地址块中的最小地址;2)地址块中的最大地址;3)地址块中的地址数量;4)地址块中聚合某类网络(A类、B类、C类)的数量;5)地址掩码。
注:该地址所在地址块聚合C类网的数量,可用该地址所在地址块的地址数量除以1个C类网所包含的地址数量得出。
路由聚合
由于一个CIDR地址块中包含很多个地址,所以在路由器的路由表中就可利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合。
路由聚合也称为构造超网,这有利于减少路由器之间路由选择信息的交换,从而提高整个因特网的性能。
路由聚合的方法:找共同前缀。
网络前缀越长,地址块越小,路由越具体。
若路由器查表转发分组时发现有多条路由条目匹配,则选择网络前缀最长的那条路由条目,这称为最长前缀匹配,因为这样的路由更具体。
IPv4地址的应用规划
采用定长的子网掩码进行子网划分
在使用定长的子网掩码(FLSM)划分子网时,所划分出的每个子网都使用同一个子网掩码,并且每个子网所分配的IPv4地址数量相同,容易造成地址资源的浪费。
采用变长的子网掩码进行子网划分
在使用变长的子网掩码(VLSM)划分子网时,所划分出的每个子网可以使用不同的子网掩码,并且每个子网所分配的IPv4地址数量可以不同,这样就尽可能地减少了对地址资源的浪费。
在地址块中选取子块的原则:
- 每个子块的起点位置不能随便选取,只能选取主机号部分是块大小整数倍(包括0倍)的地址作为起点。
- 建议先为大的子块选取。
IPv4地址与MAC地址
IPv4地址与MAC地址的封装位置
地址是网际层和以上各层使用的地址,而MAC地址(也称为硬件地址或物理地址)是网络接口层中数据链路层使用的地址。
源IP地址和目的IP地址被封装在IP数据报(网际层协议数据单元PDU)的首部,而源MAC地址和目的MAC地址被封装在帧(数据链路层协议数据单元PDU)的首部。
数据包传送过程中IPv4地址与MAC地址的变化情况
注:主机一般只有1个接口,因此需要1个IP地址和1个MAC地址;而路由器最少有2个接口,而每个接口需要1个IP地址和1个MAC地址。
在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变。
在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或逐网络)改变。
IPv4地址与MAC地址的关系
由于全世界存在着各种异构网络,它们使用不同形式的MAC地址。要使这些异构网络能够互相通信,就必须进行非常复杂的MAC地址转换工作,而由用户或用户主机来完成这项工作几乎是不可能的。
但在网际层统一使用IP地址进行寻址,就把这个复杂的问题解决了。连接到因特网的不同网络中的主机只需要拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便。
地址解析协议ARP
地址解析协议的主要功能是,通过已知IP地址找到其相应的MAC地址。
与ARP协议相反,逆地址解析协议的主要功能是,使只知道自己MAC地址的主机能够通过RARP协议找出其IP地址。
每台主机都会维护一个ARP高速缓存表。ARP高速缓存表中记录有IP地址和MAC地址的对应关系。
当主机A要给B发送分组时,会首先在自已的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址,但未找到,需要发送ARP请求报文来获取主机B的MAC地址。
主机B收到ARP请求报文时,会做两件事:
- 将A的IP地址与MAC地址记录到自己的ARP高速缓存表中。
- 给A发送ARP响应,以告知自己的MAC地址。
同时,主机A收到响应报文时,将其所包含的主机B的IP地址与MAC地址记录到自已的ARP高速缓存表中。
ARP高速缓存表中的每一条记录都有其类型,分为动态和静态两种:
- 动态类型是指记录是由主机通过ARP协议自动获取到的,其生命周期默认为2分钟。当生命周期结束时,该记录将自动删除。
- 静态类型是指记录是由用户或网络维护人员手工配置的。
ARP协议解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射问题,不能跨网络使用。
注1:将ARP协议划归在网际层,将ARP协议划归在数据链路层,都是可以的。
注2:除了的ARP请求报文和响应报文,ARP协议还有其他类型的报文,例如用于检查IP地址冲突的“无故ARP”。
注3:ARP协议没有安全验证机制,存在ARP欺骗和攻击等问题。
IP数据报的发送和转发过程
IP数据报的发送和转发过程包含,1)主机发送IP数据报;2)路由器转发IP数据报。
主机发送IP数据报
同一个网络中的主机之间可以直接通信,这属于直接交付。
不同网络中的主机之间的通信,需要通过默认网关(路由器)来中转,这属于间接交付。
主机A与C之间的通信属于直接交付,而主机A与D之间的通信属于间接交付。
对于直接交付,源主机只需通过ARP协议获取到同一网络中的目的主机的MAC地址就可将IP数据报封装成帧后发送给目的主机。
对于间接交付,源主机需要通过ARP协议获取到同一网络中的默认网关的MAC地址然后将IP数据报封装成顿后发送给默认网关,由默认网关替源主机进行转发。
判断是否在同一网络
根据本机的IP地址,分析出网络前缀的比特数,写出网络地址的点分十进制形式,对其余主机地址展开后保留相应的比特数,比较其点分十进制是否一致,一致则在同一网络;不一致则在不同网络。
例如:
- 主机A的IP地址为
192.168.0.2/25
,这表明网络前缀为该IP地址左起前25个比特剩余7个比特为主机号。将网络前缀保持不变,主机号全部清零,写成点分十进制形式为192.168.0.0
,这就是主机A所在网络的网络地址。 - 要判断主机C是否与主机A在同一个网络,需要将主机C的IP地址
192.168.0.3
的左起前25个比特保持不变,剩余7个比特全部清零,写成点分十进制形式为192.168.0.0
,这与主机A所在网络的网络地址相同,因此主机A可判断出主机C与自己在同一网络中。 - 要判断主机D是否与主机A在同一个网络,需要将主机D的IP地址
192.168.0.128
的左起前25个比特保持不变,剩余7个比特全部清零,写成点分十进制形式为192.168.0.128
,这与主机A所在网络的网络地址192.168.0.0
不相同,因此主机A可判断出主机D与自己不在同一个网络中。
路由器转发IP数据报
路由器收到某个正确的IP数据报(IP数据报生存时间未结束且首部无误码)后,会基于IP数据报首部中的目的IP地址在自己的路由表中进行查询。
- 如果查询到匹配的路由条目,就按照该路由条目的指示进行转发。
- 如果查询不到匹配的路由条目,就丢弃该IP数据报,并向发送该IP数据报的源主机发送差错报告。
查询方式:将目的地址的与路由表条目中的地址掩码逐条进行逻辑与运算,比较结果是否与当前条目的目的网络相同,相同则匹配。
注:如果路由器收到的是目的地址为广播地址的IP数据报,则不会对这种IP数据报进行转发(即,隔离广播域)。
IPv4数据报的首部格式
IP数据报的首部格式及其内容是实现IP协议各种功能的基础。
IPv4数据报的首部由20字节的固定部分和最大40字节的可变部分组成。所谓固定部分,是指每个IPv4数据报的首部都必须要包含的部分。某些IPv4数据报的首部,除了包含20字节的固定部分,还包含一些可选的字段来增加IPv4数据报的功能。
在TCP/IP标准中,各种数据格式常常以32比特(即4字节)为单位来描述。图中每一行都由32个比特(即4个字节)构成,每个格子称为字段或者域。每个字段或某些字段的组合用来表达IPv4协议的相关功能。
版本
长度为4个比特,用来表示IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议的版本号为4(即IPv4)。
首部长度
长度为4个比特,该字段的取值以4字节为单位,用来表示IPv4数据报的长度。
最小取值为二进制的0101,表示IPv4数据报首部只有20字节固定部分。
最大取值为二进制的1111,表示IPv4数据报首部包含20字节固定部分和最大40字节可变部分。
可选字段
长度从1字节到40字节不等,用来支持排错、测量以及安全措施等功能。
填充
用来确保IPv4数据报的首部长度是4字节的整数倍,用全0进行补充。
区分服务
长度为8个比特,用来获得更好的服务。只有在使用区分服务时该字段才起作用,一般情况下都不使用该字段。
总长度
长度为16比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度+数据载荷长度)。最大取值为二进制的16个比特1,即十进制的65535。
可根据首部的首部长度字段和总长度字段计算出数据载荷部分的长度。
标识、标志和片位移
这三个字段共同用于IPv4数据报分片。
每一种数据链路层协议都规定了帧的数据载荷的最大长度,即最大传送单元。如,以太网的数据链路层规定MTU的值为1500字节。当IPv4数据报的总长度超过MTU,将无法封装成帧。需要将原IPv4数据报分片为更小的IPv4数据报,再将各分片IPv4数据报封装成帧。
标识字段长度为16个比特,属于同一个IPv4数据报的各分片数据具有相同的标识。
标志字段长度为3个比特,含义如下:
- 最低位(MF):MF=1表示本分片后面还有分片;MF=0表示本分片后面没有分片。
- 中间位(DF):DF=1表示不允许分片;DF=0表示允许分片。
- 最高位为保留位,必须设置为0。
片位移字段长度为13个比特,该字段的取值以8字节为单位,用来指出分片的数据载荷偏移其在原IPv4数据报的位置有多远。
注:除最后一个分片数据报外,每个分片数据报的数据载荷的长度,都必须是8字节的整数倍。否则,会造成其相邻后续分片数据报的片偏移不是整数。
生存时间(TTL)
长度为8个比特,最大取值为11111111
,该字段的取值最初以秒为单位。因此,IPv4 数据报的最大生存时间最初为255 秒。
后来改为以“跳数”为单位,路由器收到待转发的IPv4 数据报时,将其首部中的该字段的值减1,若结果不为0 就转发,否则就丢弃。
协议
长度为8个比特,用来指明IPv4数据报的数据载荷是何种协议数据单元PDU。
首部检验和
长度为16个比特,用于检测IPv4数据报在传输过程中首部是否出现了差错。
数据报每经过一个路由器都需要重新计算一下首部检验和。
发送方操作:将首部划分为若干个16比特字的序列,并把首部检验和字段的值置为全0。用反码算术运算把所有16比特字相加后,将得到的和的反码写入首部检验和字段。
接收方操作:将首部的所有16比特字再使用反码算术运算相加一次。将得到的和取反码,即得出接收方检验和的计算结果。若在IPv4数据报传输过程中其首部没有产生差错,则此结果必为0。
二进制反码运算
- 0和0相加是0。
- 0和1相加是1。
- 1和1相加是0,但是要产生一个进位1,加到下一列。
- 最高位若产生进位,则将进位的1加到最低位。
源IP地址、目的IP地址
源IP地址字段和目的IP地址字段的长度都是32个比特,用来填写发送IPv4数据报的源主机的IPv4地址和接收该IP数据报的目的主机的IPv4地址。
静态路由配置
静态路由配置是指用户或网络运维人员使用路由器的相关命令给路由器人工配置路由表。
一般只在小规模网络中采用。
直连路由和非直连路由
网络运维人员给路由器的各接口配置了IP地址和地址掩码后,路由器就可自行得出各接口与哪些网络直连(即中间没有其他路由器)。路由器将这些直连路由条目记录在路由表中。
路由器到其他非直连网络的路由可进行人工配置(即所谓的静态路由配置),也可通过路由选择协议由路由器自动获取。
默认路由和特定主机路由
默认路由
默认路由由网络运维人员事先配置,当路由器查询不到目的IP地址匹配的路由条目时,会按默认路由条目中的“下一跳”进行转发。
路由器采用默认路由(default route)可以减少路由表所占用的存储空间以及搜索路由表所耗费的时间。
默认路由条目中的“目的网络”地址填写为0.0.0.0/0
,其中0.0.0.0
标识任意网络,网络前缀/0
是最短的网络前缀。
注:路由器在查找转发表,遵循“最长前缀”的匹配原则,因此默认路由的匹配优先级最低。
特定主机路由
出于某种安全问题的考虑,同时为了使网络运维人员更方便地控制网络和测试网络,特别是在对网络的连接或路由表进行排错时,指明到某一台主机的特定主机路由是十分有用的。
网络192.168.2.0/24
中有一台IP地址为192.168.2.1
的特定主机。可在路由器R1的路由表中针对该主机配置一条特定主机路由条目。特定主机路由条目中的“目的网络”填写为192.168.2.1/32
,其中192.168.2.1
是特定主机的IP地址,而网络前缀/32
是最长的网络前缀,匹配优先级最高。
因特网路由选择协议
路由选择分类
静态路由选择 | 动态路由选择 |
---|---|
采用人工配置的方式给路由器添加网络路由、默认路由和特定主机路由等路由条目。 | 路由器通过路由选择协议自动获取路由信息。 |
静态路由选择简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化。 | 动态路由选择比较复杂、开销比较大,但能较好地适应网络状态的变化。 |
静态路由选择一般只在小规模网络中采用。 | 动态路由选择适用于大规模网络。 |
分层次的路由选择协议
因特网是最大的互联网,采用分层次的路由选择协议,具有以下主要特点:
- 自适应:采用动态路由选择,较好地适应网络状态的变化。
- 分布式:各路由器通过相互间的信息交互,完成路由信息的获取和更新。
- 分层次:将整个因特网划分成许多较小的自治系统(AS),在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择。
注1:外部网关协议EGP 和内部网关协议IGP 只是路由选择协议的分类名称,而不是具体的路由选择协议。
注2:外部网关协议和内部网关协议名称中使用的是“网关”这个名词,即路由器。
路由信息协议
RIP的基本概念
路由信息协议(RIP)是内部网关协议中最先得到广泛使用的协议之一。
RIP要求自治系统AS内的每一个路由器,都要维护从它自己到AS内其他每一个网络的距离记录,是一组距离,称为距离向量(DV)。
RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
- RIP将路由器到直连网络的距离定义为1 。
- RIP将路由器到非直连网络的距离定义为所经过的路由器数加1 。
- RIP允许一条路径最多只能包含15个路由器,距离等于16 时相当于不可达。只适用于小型互联网。
RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。
当到达同一目的网络有多条RIP 距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上。
RIP具有三个特点:
- 和谁交换信息,仅和相邻路由器交换信息。
- 交换什么信息,路由器自己的路由表。
- 何时交换信息,周期性交换(或者触发更新)。
RIP的基本过程
- 路由器刚开始工作时,只知道自己到直连网络的RIP 距离为1 。
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息。
- 若干次交换和更新后,每个路由器都知道到达本自治系统AS内各网络的最短距离和下一跳路由器,
称为收敛。
RIP的距离向量算法
运行RIP的路由器周期性地向其所有相邻路由器发送RIP更新报文。路由器收到每一个相邻路由器发来的RIP更新报文后,都会根据RIP更新报文中的路由信息来更新自已的路由表。
更新理由:
- 到达目的网络,相同的下一跳,最新消息,要更新。
- 发现了新的网络,添加。
- 到达目的网络,不同的下一条,新路由优势,要更新。
- 到达目的网络,不同的下一跳,RIP距离相等,可以等价负载均衡,添加。
不更新理由:
- 到达目的网络,不同的下一跳,新路由劣势,不更新。
除了上述RIP 路由条目更新规则,在RIP 的距离向量算法中还包含以下一些时间参数:
- 路由器每隔大约30秒向其所有相邻路由器发送路由更新报文。
- 若180 秒(默认)没有收到某条路由条目的更新报文,则把该路由条目标记为无效(即把RIP 距离设置为16),若再过一段时间,还没有收到该路由条目的更新报文,则将该路由条目从路由表中删除。
RIP存在的问题
RIP存在“坏消息传播得慢”问题。
“坏消息传播得慢”的问题又被称为路由环路或RIP距离无穷计数问题。这是距离向量算法的一个固有问题。可以采取以下多种措施减少出现该问题的概率或减小该问题带来的危害:
- 限制最大RIP 距离为15(16 表示不可达)。
- 当路由表发生变化时就立即发送路由更新报文(即“触发更新”),而不仅是周期性发送。
- 让路由器记录收到某个特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)。
注:采取上述措施仍无法彻底解决问题。
RIP版本和报文得封装
现在较新的RIP版本是RIP2 ,已经成为因特网标准协议。RIP2可以支持变长子网掩码和CIDR ,提供简单的鉴别过程并支持多播。
RIP相关报文使用运输层得用户数据报协议UDP进行封装,使用的UDP端口号为520
- 从报文封装的角度来看,RIP属于TCP/IP体系结构的应用层。
- 但RIP的核心功能是路由选择,属于TCP/IP体系结构的网际层。
RIP的优缺点
优点
实现简单,路由器开销小。
如果一个路由器发现了RIP 距离更短的路由,那么这种更新信息就传播得很快,即“好消息传播得快”。
缺点
RIP限制了最大RIP距离为15,这就限制了使用RIP的自治系统AS的规模。
相邻路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也随之增大。
“坏消息传播得慢”,使更新过程的收敛时间过长。因此,对于规模较大的自治系统ASAS,应当使用OSPF协议。
开放最短路径优先协议
OSPF的基本概念
开放最短路径优先(OSPF)协议是为了克服路由信息协议RIP的缺点开发出来的。
- “开放”表明OSPF 协议不是受某一厂商控制,而是公开发表的。
- “最短路径优先”是因为使用了Dijkstra 提出的最短路径算法(SPF)。
OSPF是基于链路状态,而不是基于距离向量。
OSPF基于链路状态并采用最短路径计算路由,不会产生路由环绕。
OSPF不限制网络规模,更新效率高,收敛速度快。
链路状态
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”。
例如:思科路由器中OSPF协议计算代价的方法是:100Mb/s除以链路带宽,计算结果小于1的值仍记为1,大于1且有小数的,舍去小数。
邻居关系的建立和维护
OSPF相邻路由器之间通过交互问候(Hello)分组来建立和维护邻居关系。
问候分组封装在IP 数据报中,发往组播地址224.0.0.5
。IP 数据报首部中的协议号字段的取值为89,表明IP数据报的数据载荷为OSPF分组。
注:OSPF分组使用网际层的IP数据报进行封装,因此从网络体系结构的角度看,OSPF协议属于网际层协议。
每个路由器都会建立一张邻居表。每一个条目对应记录其各邻居路由器的相关信息,包括邻居ID、接口以及“判活”倒计时。
链路状态通告
使用OSPF的每个路由器都会产生链路状态通告(LSA)。LSA中包含以下两类链路状态信息:
- 连网络的链路状态信息。
- 邻居路由器的链路状态信息。
链路状态更新分组
LAS被封装在链路状态更新分组(LSU)中,采用可靠的洪泛法发送。
洪泛法是指路由器通过自己的所有接口向所有邻居路由器发送信息,而每一个邻居路由器又将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。
可靠是指收到分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认。
链路状态数据库
使用OSPF的每个路由器都有一个链路状态数据库(LSDB),用于存储LSA。通过各路由器洪泛发送封装有各自LSA的LSU,各路由器的LSDB最终将达到一致。
基于LSDB进行最短路径优先计算
使用OSPF的各路由器,基于链路状态数据库LSDB进行最短路径优先计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。
最短路径优先计算步骤:
- 网络拓扑和各链路代价(各链路旁的数值)。
- 通过各路由器洪泛发送封装有各自LSA的LSU,各路由器最终会得出相同的LSDB。
- 由LSDB可以得出带权有向图。
- 对带权有向图进行基于Dijkstra的最短路径优先算法,就可以得出以各路由器为根的最短路径。
OSPF的五种分组类型
OSPF包含以下五种分组类型:
- 问候分组:用来发现和维护邻居路由器的可达性
- 数据库描述分组:用来向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 链路状态请求分组:用来向邻居路由器请求发送某些链路状态项目的详细信息。
- 链路状态更新分组:路由器使用链路状态更新分组将其链路状态进行洪泛发送,即用洪泛法对整个系统更新链路状态。
- 链路状态确认分组:是对链路状态更新分组的确认分组。
OSPF的基本工作过程
多点接入网络中的OSPF 路由器
为了减少所发送问候分组和链路状态更新分组的数量,OSPF 采用以下措施:
- 选举指定路由器(DR)和备用的指定路由器(BDR)。
- 所有的非DR/BDR 只与DR/BDR 建立邻居关系。
- 非DR/BDR 之间通过DR/BDR 交换信息。
OSPF划分区域
OSPF协议能够用于规模很大的网络,OSPF把一个自治系统AS再划分为若干个更小的范围,称为区域(area)。
划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个AS,减少了整个网络的通信量。
如果路由器的所有接口都在同一个区域内,则该路由器称为区域内路由器,如路由器R1、R2、R8和R9。
为了本区域可以和自治系统内的其他区域连通,每个区域都会有一个区域边界路由器,如路由器R3、R4和R7。区域边界路由器的一个接口用于连接自身所在区域,另一个接口用于连接主干区域。
主干区域内的路由器称为主干路由器,如R3、R4、R5、R6和R7。也可以把区域边界路由器看作主干路由器。
在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息,这样的路由器称为自治系统边界路由器,如路由器R6。
边界网关协议
BGP的基本概念
边界网关协议(BGP)属于外部网关协议EGP这个类别,用于自治系统AS 之间的路由选择协议。
由于在不同AS内度量路由的“代价”(距离、带宽、费用等)可能不同,因此对于AS之间的路由选择,使用统一的“代价”作为度量来寻找最佳路由是不行的。
BGP只能是力求寻找一条能够到达目的网络且比较好的路由,而并非要寻找一条最佳路由。
注:BGP适用于多级结构的因特网。
BGP边界路由器
在配置BGP时,每个AS的管理员,要选择至少一个路由器作为该AS的“BGP发言人”。
一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器。
使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站。
发言人除了运行BGP协议外,还必须运行自己所在AS所使用的内部网关协议IGP,例如RIP或OSPF。
BGP发言人交换网络可达性的信息,也就是要到达某个网络所要经过的一系列自治系统。
当BGP发言人相互交换了网络可达性的信息后,各BGP 发言人就根据所采用的策略,从收到的路由信息中找出到达各自治系统的较好的路由,构造出树形结构且不存在环路的自治系统连通图。
BGP-4 的四种报文
BGP-4是目前使用得最多的版本,规定了BGP-4的四种报文:
- OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
- UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
- KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性。
- NOTIFICATION(通知)报文:用来发送检测到的差错。
路由器的基本工作原理
路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组。
整个路由器可以划分为两大部分:
- 路由选择部分:核心构件是路由选择处理机,其任务是根据所使用的路由选择协议,周期性地与其他路由器进行路由信息的交换,以构建和更新路由表。
- 分组转发部分:由一组输入端口、交换结构以及一组输出端口构成。
网际控制报文协议
网际控制报文协议ICMP概述
为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文协议(ICMP)。
主机或路由器使用ICMP来发送差错报告报文和询问报文。
ICMP报文被封装在IP数据报中发送。
ICMP报文种类
ICMP报文分为两大类:ICMP差错报告报文和ICMP询问报文。
ICMP差错报告报文
- 终点不可达
当路由器或主机不能交付IP数据报时,就向源点发送终点可达报文。
具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种。
- 源点抑制
当路由器或主机由于拥塞而丢弃IP数据报时,就向发送该IP数据报的源点发送源点抑制报文,使源点知道应当把IP数据报的发送速率放慢。
- 时间超过(超时)
当路由器收到一个目的IP地址不是自己的IP数据报时,会将其首部中生存时间TTL字段的值减1,若结果为0,路由器要丢弃该数据报,向发送该IP数据报的源点发送时间超过(超时)报文。
当终点在预先规定的时间内未能收到一个数据报的全部数据报分片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过(超时)报文。
- 参数问题
当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段的值发现首部在传送过程中出现了误码,就丢弃该数据报,并向发送该数据报的源点发送参数问题报文。
- 改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应将IP数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机。
ICMP询问报文
- 回送请求和回答
由主机或路由器向一个特定的目的主机或路由器发出。
收到此报文的主机或路由器必须给发送该报文的源主机或路由器发送ICMP回送回答报文。
这种询问报文用来测试目的站是否可达以及了解其有关状态。
- 时间戳请求和回答
用来请求某个主机或路由器回答当前的日期和时间。
在ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
这种询问报文用来进行时钟同步和测量时间。
ICMP的典型应用
分组网间探测PING
分组网间探测PING 用来测试主机或路由器之间的连通性。
跟踪路由
跟踪路由应用traceroute,用于探测IP 数据报从源主机到达目的主机要经过哪些路由器
虚拟专用网和网络地址转换
虚拟专用网
虚拟专用网(Virtual Private Network,VPN):利用公用的因特网作为本机构各专用网之间的通信载体,这样形成的网络又称为虚拟专用网。
给专用网内各主机配置的IP地址应该是该专用网所在机构可以自行分配的IP地址,这类IP地址仅在机构内部有效,称为专用地址。
注:因特网中的所有路由器,对目的地址是专用地址的IP 数据报一律不进行转发,设置实现。
虽然两个专用网内的主机间发送的数据报是通过公用的因特网传送的,但从效果上就好像是本机构的专用网上传送一样,这就是“虚拟”的含义。
同一机构内不同部门的内部网络所构成的VPN,又称为内联网VPN 。
一个机构的虚拟专用网VPN需要某些外部机构参加进来,这样的VPN就称为外联网VPN 。
在外地工作的员工需要访问公司内部的专用网时,运行驻留在员工PC 中的VPN软件,在员工的PC和公司的主机之间建立VPN 隧道,就可以访问专用网中的资源,这种虚拟专用网又称为远程接入VPN 。
网络地址转换
网络地址转换(NAT)技术于1994年被提出,用来缓解IPv4地址空间即将耗尽的问题。
- NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
- 在专用网络连接到因特网的路由器上安装NAT软件。该路由器称为NAT路由器,它至少要有一个有效的外部全球地址IP 。所有使用内部专用地址的主机在和外部因特网通信时,都要在NAT路由器上将其内部专用地址转换成全球地址IP。
最基本的NAT方法
主机A给主机B发送一个IP数据报,该数据报首部中的源地址为主机A的专用地址IPA,目的地址为主机B的全球地址IPB。
该数据报必须经过NAT路由器的转发,路由器收到该数据报后,从自己的全球地址池中为主机A选择一个临时的全球地址IPG。将数据报首部中的源地址修改为IPG,并在自己的NAT转换表中记录IPA与IPG的对应关系,之后将修改过源地址的数据报转发到因特网。
缺点:如果NAT路由器拥有n个全球IP地址,那么专用网内最多可以同时有n台主机接入因特网。若专用网内的主机数量大于n,则需要轮流使用NAT路由器中数量较少的全球IP地址。
网络地址与端口号转换
为了更加有效地利用NAT路由器中的全球IP地址,现在常将NAT转换和运输层端口号结合使用。
将NAT和运输层端口号结合使用,称为网络地址与端口号转换(NAPT)。
NAT(和NAPT)的一个重要特点就是通信必须由专用网内部发起,因此拥有内部专用地址的主机不能直接充当因特网中的服务器。
对于目前P2P这类需要外网主机主动与内网主机进行通信的网络应用,在通过NAT时会遇到问题(外网主机不能首先发起通信),需要网络应用自身使用一些特殊的NAT穿透技术来解决。
IP多播
IP多播技术的相关基本概念
多播(组播)是一种实现“一对多”通信的技术,与传统单播“一对一”通信相比,多播可以极大地节省网络资源。
在因特网上进行的多播,称为IP多播。
当多播组的成员数量很大时,采用多播方式可以显著地减少网络中各种资源的消耗。
IP多播地址和多播组
在IPv4中,D类地址被作为多播地址。
多播地址只能用作目的地址,而不能用作源地址。
用每一个D类地址来标识一个多播组,使用同一个IP多播地址接收IP多播数据报的所有主机就构成了一个多播组。
- 每个多播组的成员是可以随时变动的,一台主机可以随时加入或离开多播组。
- 多播组成员的数量和所在的地理位置也不受限制,一台主机可以属于几个多播组。
非多播组成员也可以向多播组发送IP多播数据报。
与IP数据报相同,IP多播数据报也是“尽最大努力交付”。
D类地址又可分为预留的多播地址(永久多播地址)、全球范围可用的多播地址以及本地管理的多播地址。
IP多播可以分为以下两种:
- 只在本局域网上进行的硬件多播。
- 在因特网上进行的多播。
目前大部分主机都是通过局域网接入因特网的。因此,在因特网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付给多播组的所有成员。
在局域网上进行硬件多播
由于MAC地址有多播MAC地址这种类型,只要把IPv4多播地址映射成多播MAC地址,即可将IP多播数据报封装在局域网的MAC帧中。
因特网号码指派管理局IANA,将以太网MAC地址块中从01 00 5E 00 00 00
到01 00 5E 7F FF FF
的多播MAC 地址,用于映射IPv4 多播地址。
由于IP多播地址可变化的28比特的前5个比特无法映射到MAC多播地址,这会造成IP多播地址与多播MAC地址的映射关系并不是唯一的。
由于IP多播地址与多播MAC地址的映射关系不是唯一的,因此收到IP多播数据报的主机还要在网际层利用软件进行过滤,把不是主机要接收的IP多播数据报丢弃。
在因特网上进行IP多播需要的两种协议
网际组管理协议IGMP
网际组管理协议(IGMP)是TCP/IP体系结构网际层中的协议,其作用是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(实际上是主机中的某个进程)加入或退出了某个多播组。
IGMP仅在本网络有效,使用IGMP并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在哪些网络中。
IGMP 的三种报文类型
IGMP有三种报文类型:
- 成员报告报文
- 成员查询报文
- 离开组报文
IGMP报文被封装在IP数据报中传送。
IGMP的基本工作原理
加入多播组
当一个主机的某个进程要加入某个多播组时,主机会向所在网络发送一个封装IGMP成员报告报文的IP多播数据报。
- 成员报告报文中包含要加入的IP多播组的地址。
- 目的地址也为要加入的IP多播组的地址。
该IP多播数据报会被本网络中所有该多播组的成员以及多播路由器接收(因为多播路由器被设置为接收所有的IP多播数据报)。
如果本网络中还有同组其他成员要发送IGMP成员报告加入该多播组,则监听到该IP多播数据报后就取消发送,因为每个网络中的每个多播组仅需要一个成员发送IGMP成员报告报文。
多播路由器会维护一个多播组列表,在该表中记录有该路由器所知的与其直连的各网络中有多播组成员的多播组地址。
注:多播路由器并不会记录发送该IGMP成员报告的主机的IP地址。
监视多播组的成员变化
多播路由器默认每隔125秒就向其直连的网络发送一个封装有IGMP成员查询报文的IP多播数据报。
- IGMP成员查询报文中包含要查询的特定多播组的地址或表示全部多播组的地址(由32比特“全0”表示)。
- IP多播数据报的目的地址为
224.0.0.1
,这是一个特殊的IP多播地址,在本网络中的所有参加多播的主机和路由器都会收到该多播数据报。
收到该多播数据报的任意多播组的成员将会发送一个封装有IGMP成员报告报文的IP多播数据报作为应答(每个多播组只需有一个成员应答,采取延迟响应的策略)。
注:实际上,同一网络中的多播路由器可能不止一个,在这些多播路由器中选举出一个作为查询路由器,由查询路由器发送IGMP成员查询报文,而其他的多播路由器仅被动接收响应并更新自己的多播组列表即可。
退出多播组
当主机要退出某个多播组时,可主动发送一个离开组报文而不必等待多播路由器的查询。
IGMP离开组报文被封装在IP多播数据报中发送。
- 离开组报文的内容包含主机要退出的多播组的地址。
- IP多播数据报的目的地址为
224.0.0.2
,这是一个特殊的IP多播地址,在本网络中的所有多播路由器都会收到该多播数据报。
有成员离开该多播组,暂时不删除该多播组,立即发送针对该多播组的特殊的IGMP成员查询报文(IP多播数据
报的目的地址为该多播组的地址),探测该多播组是否还有其他成员。
多播路由选择协议
多播路由选择协议的主要任务是在多播路由器之间为每个多播组建立一个多播转发树。
- 多播转发树连接多播源和所有拥有该多播组成员的路由器。
- IP多播数据报只要沿着多播转发树进行洪泛,就能被传送到所有拥有该多播组成员的多播路由器。
针对不同的多播组需要维护不同的多播转发树,而且必须动态地适应多播组成员的变化,但此时网络拓扑并不一定发生变化,因此多播路由选择协议要比单播路由选择协议(例如RIP、OSPF等)复杂得多。
为了覆盖多播组的所有成员,多播转发树可能要经过一些没有多播组成员的路由器。
基于源树多播路由选择
基于源树的多播路由选择的最典型算法是反向路径多播(RPM)算法。
RPM算法包含以下两个步骤:
- 利用反向路径广播(RPB)算法建立一个广播转发树。
- 利用剪枝算法,剪除广播转发树中的下游非成员路由器,获得一个多播转发树。
要建立广播转发树,可以使用洪泛法。
利用反向路径广播RPB 算法生成的广播转发树,不会存在环路,因此可以避免广播分组在环路中兜圈。
RPB算法的要点是:
- 每一台路由器在收到一个广播分组时,先检查该广播分组是否是从源点经最短路径传送来的。
- 若是,本路由器就从自己除刚才接收该广播分组的接口的所有其他接口转发该广播分组。
- 否则,丢弃该广播分组。
- 如果存在好几条同样长度的最短路径,选取的规则是这几条最短路径中的邻居路由器的IP地址最小的那条最短路径。
RPB中“反向路径”的意思是:在计算最短路径时把源点当作终点。
组共享树多播路由选择
组共享树多播路由选择采用基于核心的分布式生成树算法来建立共享树。该方法在每个多播组中指定一个核心(core)路由器,以该路由器为根,建立一棵连接多播组的所有成员路由器的生成树,作为多播转发树。
每个多播组中除了核心路由器,其他所有成员路由器都会向自已多播组中的核心路由器单播加入报文。加入报文通过单播朝着核心路由器转发,直到它到达已经属于该多播生成树的某个节点或者直接到达该核心路由器。在任何一种情况下,加入报文所经过的路径,就确定了一条从单播该报文的边缘节点到核心路由器之间的分支,而这个新分支就被嫁接到现有的多播转发树上。
因特网的多播路由选择协议
移动IP技术
移动IP技术的相关基本概念
移动IP(Mobile IP)是因特网工程任务组开发的一种技术,该技术使得移动主机在各网络之间漫游时,仍然能够保持其原来的IP地址不变。
移动IP技术还为因特网中的非移动主机提供了相应机制,使得它们能够将IP数据报正确发送到移动主机。
归属网络、归属地址(永久地址)以及归属代理
每个移动主机都有一个默认连接的网络或者初始申请介入的网络,称为归属网络。移动主机在归属网络中的IP地址在其整个移动通信过程中时始终不变的,称为永久地址或归属地址。
在归属网络中,代表移动主机执行移动管理功能的实体称为归属代理。通常是连接在归属网络上的路由器,其作为代理的特定功能是在应用层完成的。
外地网络(被访网络)、外地代理以及转交地址
移动主机当前漫游所在的网络称为外地网络或被访网络。
在外地网络中,帮助移动主机执行移动管理功能的实体称为外地代理。外地代理通常就是连接在外地网络上的路由器。外地代理会为移动主机提供一个临时使用的属于外地网络的转交地址。
移动IP的工作过程
- 归属代理为移动主机代收所有发送给移动主机的数据报。
- 归属代理将这些数据报,利用转交地址通过IP隧道技术,转发给移动主机所在外地网络的外地代理。
- 外地代理将这些数据报转发给移动主机。
移动IP技术的基本工作原理
代理发现与注册
移动主机A通过自己的代理发现协议,与外地代理建立联系,并从外地代理获得一个属于该外地网络的转交地址(例如175.1.1.1/16
),同时向外地代理注册自己的永久地址和归属代理地址。
外地代理将移动主机A的永久地址记录在自己的注册表中,并向移动主机的归属代理注册该移动主机的转交地址(也可由移动主机直接进行注册)。
归属代理会将移动主机A的转交地址记录下来,此后归属代理会代替移动主机接收所有发送给该移动主机的IP数
据报,并利用IP隧道技术将这些数据报转发给外地网络中的移动主机。
固定主机向移动主机发送IP数据报
数据报会被路由到移动主机A的归属网络,归属代理会代替移动主机A接收该数据报,并将该数据报封装到一份新的IP数据报中转发出去。
这份新的IP数据报的目的地址为移动主机A的转交地址175.1.1.1/16
(外地代理的IP地址)。
外地代理收到这份新的IP数据报后,将其数据载荷(原IP数据报)解封出来。
外地代理将解封出的原IP数据报,直接转发给位于外地网络中的移动主机A。
归属代理代替移动主机接收数据报
当移动主机不在归属网络时,归属代理会以自己的MAC地址应答所有对该移动主机的ARP请求,即归属代理采用ARP代理技术。
为了使归属网络中其他各主机和路由器能够尽快更新各自的ARP高速缓存,归属代理会主动发送ARP广播,并声称自己是该移动主机。
转交地址
当外地代理和移动主机不是同一台设备时,转交地址实际上是外地代理的地址而不是移动主机的地址。
转交地址既不会作为移动主机发送IP数据报的源地址,也不会作为移动主机所接收的IP数据报的目的地址。
转交地址仅仅是归属代理到外地代理的IP隧道的出口地址。
外地代理转交原IP数据报
外地代理在登记移动主机的永久地址时,会同时记录下它的MAC地址。
当外地代理从IP隧道中收到并解封出原IP数据报时,会在自己的代理注册表中查找移动主机的永久地址所对应的MAC地址,并将该IP数据报封装到目的地址为该MAC地址的顿中发送给移动主机。
移动主机向固定主机发送IP数据报
由于IP路由器并不关心IP数据报的源地址,因此该IP数据报会被直接路由到固定主机B,而无须再通过归属代理进行转发。
移动主机可以将外地代理作为自已的默认路由器,也可以通过代理发现协议从外地代理获取外地网络中路由器的地址,并将其设置为自已的默认路由器。
同址转交地址方式
外地代理除了可以配置在外地网络中的某个路由器上,也可以直接运行在移动主机上。当外地代理直接运行在移动主机上时,转交地址被称为同址转交地址。
移动主机自已将接收所有发往转交地址的IP数据报。
采用同址转交地址方式时,移动主机上要运行额外的外地代理软件。这时,外地网络需要提供相应机制,使移动主机能够自动获取一个外地网络中的地址作为自已的IP地址,这通常需要使用TCP/IP应用层中的动态主机配置协议(DHCP)。
三角形路由问题
解决三角形路由问题的一种方法是,固定主机配置一个通信代理,固定主机发送给移动主机的IP数据报,都要通过该通信代理转发。
该通信代理先从归属代理获取移动主机的转交地址,之后所有发送给移动主机的IP数据报,都利用转交地址直接通过IP隧道发送给移动主机的外地代理,而无须再通过移动主机的归属代理进行转发。
但是这种解决方法以增加复杂性为代价,并要求固定主机也要配置通信代理,也就是对固定主机不再透明。
下一代网际协议IPv6
IPv6引进的主要变化
- 更大的地址空间
IPv6地址空间增大到了128比特,在采用合理编址方法的情况下,在可预见的未来是不会用完的。
- 扩展的地址层次结构
可划分为更多的层次,这样可以更好地反映出因特网的拓扑结构,使得对寻址和路由层次的设计更具有灵活性。
- 灵活的首部格式
与IPv4 首部并不兼容。IPv6 定义了许多可选的扩展首部,不仅可提供比IPv4 更多的功能,而且还可以提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扩展首部都不进行处理。
- 改进的选项
IPv6允许分组包含有选项的控制信息,因而可以包含一些新的选项。然而IPv4规定的选项却是固定不变的。
- 允许协议继续扩充
这一点很重要,因为技术总是在不断地发展,而新的应用也会层出不穷。然而IPv4的功能却是固定不变的。
- 支持即插即用(即自动配置)
IPv6支持主机或路由器自动配置IPv6地址及其他网络配置参数。因此IPv6不需要使用DHCP。
- 支持资源的预分配
IPv6能为实时音视频等要求保证一定带宽和时延的应用,提供更好的服务质量保证。
IPv6数据报的基本首部
IPv6数据报由两部分组成:1)长度为40字节的基本首部;2)长度可变的有效载荷,由零个或多个扩展首部及其后的数据部分构成。
1)取消了首部长度字段,因为IPv6数据报的首部长度是固定的40字节。2)取消了服务类型字段,因为IPv6数据报首部中的通信量类和流标号字段实现了服务类型字段的功能。3)取消了总长度字段,改用有效载荷长度字段。这是因为IPv6数据报的首部长度是固定的40字节,只有其后面的有效载荷长度是可变的。4)取消了标识、标志和片偏移字段,因为这些功能已包含在IPv6数据报的分片扩展首部中。5)把生存时间(TTL)字段改称为跳数限制字段。6)取消了协议字段,改用下一个首部字段。7)取消了检验和字段,这样可以加快路由器处理IPv6数据报的速度。8)取消了选项字段,改用扩展首部来实现选项功能。
版本字段
长度为4比特,用来表示IP协议的版本。对于IPv6该字段的值是6。
通信量类字段
长度为8比特,该字段用来区分不同的IPv6数据报的类别或优先级。
流标号字段
长度为20 比特。流标号用于资源分配。所有属于同一个流的IPv6 数据报都具有同样的流标号。
有效载荷长度字段
长度为16比特,该字段以字节为单位,它指明IPv6 数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量。
下一个首部字段
长度为8比特。
当IPv6 数据报没有扩展首部时,该字段的作用与IPv4 的协议字段一样,它的值指出了IPv6 数据报基本首部后面的数据是何种协议数据单元PDU 。
当IPv6数据报基本首部后面带有扩展首部时,该字段的值就标识后面第一个扩展首部的类型。
跳数限制字段
长度为8比特。该字段用来防止IPv6数据报在因特网中永久兜圈。
源地址字段和目的地址字段
长度都为128比特。分别用来填写IPv6数据报的发送端的IPv6地址和接收端的IPv6地址。
IPv6数据报的扩展首部
为了提高路由器对数据报的处理效率,IPv6把原来IPv4首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理,而数据报传送路径中的所有路由器都不处理这些扩展首部(除逐跳选项扩展首部)。
在技术文档中规定了六中扩展首部:1)逐跳选项;2)路由选择;3)分片;4)鉴别;5)封装安全有效载荷;6)目的站选项。
每一个扩展首部都由若干个字段组成,它们的长度也各不相同。
所有扩展首部中的第一个字段都是8比特的下一个首部字段。该字段的值指出在该扩展首部后面是何种扩展首部。
当使用多个扩展首部时,应按以上的先后顺序出现。
IPv6地址
IPv6地址空间大小
在IPv6中,每个地址占128个比特。显然,这样巨大的地址空间在采用合理编址方法的情况下,在可预见的未来是不会用完的。
IPv6地址的表示方法
IPv6采用冒号十六进制记法:
- 将128比特的IPv6地址以每16比特分为1组(共8组),每组之间使用冒号“:”分割。
- 将每组中的每4比特转换成1个16进制数。
在IPv6地址的冒号十六进制记法的基础上,再使用**“左侧零”省略和“连续零”压缩**,可使IPv6地址的表示更加简洁。
- “左侧零”省略是指两个冒号间的十六进制数中最前面的一串0可以省略不写,例如
000F
可缩写为F
。 - “连续零”压缩是指一连串连续的0可以用一对冒号取代,例如
2001:0:0:0:0:0:0:ffd
可缩写为2001::ffd
。
注:在一个IPv6地址中只能使用一次“连续零”压缩,否则会导致歧义。
冒号十六进制记法还可结合点分十进制的后缀。这在IPv4向IPv6过渡阶段非常有用。
CIDR的斜线表示法在IPv6 中仍然可用。
IPv6地址的分类
目的地址类型
IPv6数据报的目的地址有三种基本类型:
- 单播(unicast):传统的点对点通信。
- 多播(multicast):一点对多点的通信。数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而将广播看作多播的一个特例。
- 任播(anycast):这是IPv6新增的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个。
IPv6地址的分类
全球单播地址是使用得最多的一类地址。IPv6全球单播地址采用三级结构,这是为了使路由器可以更快地查找路由。
从IPv4向IPv6过渡
使用双协议栈
双协议栈(DualStack)是指在完全过渡到IPv6之前,使一部分主机或路由器装有IPv4和IPv6两套协议栈。因此双协议栈主机或路由器既可以和IPv6系统通信,又可以和IPv4系统通信。双协议栈的主机或路由器记为IPv6/IPv4,表明它具有一个IPv6地址和一个IPv4地址。
使用隧道技术
方法的核心思想是在IPv6数据报要进入IPv4网络时,将IPv6数据报重新封装成为IPv4数据报,即整个IPv6数据报成为IPv4数据报的数据部分。
然后IPv4数据报就在IPv4网络中传输。当IPv4数据报要离开IPv4网络时,再将其数据部分(即原来的IPv6数据报)取出并转发到IPv6网络。
注:要使双协议栈路由器R4知道IPv4数据报的数据载荷是IPv6数据报,则IPv4数据报首部中协议字段的值必须设置为41。
网际控制报文协议ICMPv6
IPv6不确保数据报的可靠交付,需要使用网际控制报文协议ICMP来向发送IPv6 数据报的源主机反馈一些差错信息,相应的ICMP版本为ICMPv6 。
ICMPv6合并了原来的地址解析协议ARP和网际组管理协议IGMP的功能。
ICMPv6报文的封装
ICMPv6报文需要封装成IPv6数据报进行发送。ICMPv6报文的前面是IPv6基本首部和零个或多个IPv6扩展首部。在ICMPv6前面的一个首部(也可能是扩展首部)中的“下一个首部”字段的值应当置为58。
ICMPv6报文的分类
ICMPv6报文可被用来报告差错、获取信息、探测邻站或管理多播通信。
软件定义网络
软件定义网络SDN概述
软件定义网络(Software Defined Network,SDN)的概念最早由斯坦福大学的Nick McKeown教授于2009年提出。
SDN最初只是学术界讨论的一种新型网络体系结构。
网络层的数据层面和控制层面
路由器的功能是分组转发和路由选择。因此,路由器之间传送的信息可以分为以下两大类:
- 主机和目的主机之间所传送的信息。
- 路由信息。
把路由器的网络层抽象地划分为两个层面(plane):数据层面(或称转发层面)和控制层面。
在传统因特网中的每一个路由器中,既有数据层面也有控制层面。但SDN结构中,路由器中的路由选择软件都不存在了,因此路由器之间不再相互交换路由信息。
在网络的控制层面有一个在逻辑上集中的远程控制器。逻辑上的远程控制器在物理上可由不同地点的多个服务器组成。远程控制器掌握各主机和整个网络的状态,能够为每一个分组计算出最佳的路由,然后在每一个路由器中生成其正确的转发表。
OpenFlow协议
SDN是一种新型网络体系结构,其核心思想就是把网络的控制层面和数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备。
OpenFlow协议可被看作在SDN体系结构中控制层面与数据层面之间的通信接口。
OpenFlow协议使得控制层面的控制器可以对数据层面中的物理设备或虚拟设备进行直接访问和控制。这种控制在逻辑上是集中式的、基于流的控制。
传统意义上的数据层面的任务
传统意义上的数据层面的任务就是根据转发表转发分组。可将转发分组分为以下两个步骤:
- 进行“匹配”:查找转发表中的网络前缀,进行最长前缀匹配。
- 执行“动作”:把分组从匹配结果指明的接口转发出去。
上述这种“匹配+动作”的转发方式在SDN中得到了扩充,增加了新的内容,变成了广义的转发。
SDN中的广义转发
SDN的广义转发包含两部分:
- “匹配”:能够对网络体系结构中各层(数据链路层、网络层、运输层)的首部中的字段进行匹配。
- “动作”:不仅是转发分组,而且可以进行负载均衡,也就是可以把具有同样目的地址的分组从不同的接口转发出去。还可以重写IP首部(如同在NAT路由器中的地址转换),或者可以人为地阻挡或丢弃一些分组(如同在防火墙中一样)。
OpenFlow交换机和流表
OpenFlow交换机、流表、SDN远程控制器三者之间的关系
在SDN的广义转发中,完成“匹配+动作”的设备并不局限在网络层工作,因此不再称为路由器,而称为“OpenFlow交换机”或“分组交换机”,或更简单地称为“交换机”。
在SDN中取代传统路由器中转发表的是“流表(Flow Table)”。
一个流就是穿过网络的一种分组序列,而在此序列中的每个分组都共享分组首部某些字段的值。
OpenFlow交换机中的流表是由SDN远程控制器来管理的。SDN远程控制器通过一个安全信道,使用OpenFlow协议来管理OpenFlow交换机中的流表。
流表中的各字段
每个OpenFlow交换机必须有一个或多个流表。每一个流表可以包含多个流表项(FlowEntry)。流表项包含三个字段:首部字段值(或称匹配字段)、计数器和动作。
首部字段值字段
含有一组字段,用来使入分组(IncomingPacket)的对应首部与之匹配,因此又称为匹配字段。匹配不上的分组就被丢弃,或被发送到SDN远程控制器做更多的处理。
在OpenFlow交换机中,既可以处理数据链路层的帧,也可以处理网际层的IP数据报,还可以处理运输层
的TCP或UDP报文。
计数器字段
计数器字段是一组计数器:
- 记录已经与该流表项匹配的分组数量的计数器;
- 记录该流表项上次更新到现在经历时间的计数。
动作字段
动作字段是一组动作,当分组匹配某个流表项时,执行该流表项中动作字段指明的以下某个或多个动作:
- 把分组转发到指明的端口
- 丢弃分组
- 把分组进行复制后再从多个端口转发出去
- 重写分组的首部字段(包括数据链路层、网际层以及运输层的首部)
举例
SDN体系结构
SDN体系结构及其四个关键特征
- 基于流的转发
- 数据层面与控制层面分离
- 位于数据层面分组交换机之外的网络控制功能
- 可编程的网络
SDN控制器
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 408计算机网络知识点——第四章 网络层
发表评论 取消回复