转发和路由选择:数据平面和控制平面
转发指将分组从一个输入接口转移到适当的输出接口的路由器本地动作。转发发生的时间尺度短,采用硬件实现.
路由选择用来决定输入接口接收的分组应该转移到那个输出接口。路由选择发生的时间尺度长得多,常用软件实现。
每台网络路由器中有一个关键元素是它的转发表路由器检查到达分组首部的一个或多个字段值,使用这些首部值在其转发表中索引,来转发.转发表的形式和维护是路由算法要作的工作.
传统的方法
路由选择算法运行在每台路由器中,在每台路由器中都包含了转发和路由选择两种功能.
SDN方法
路由器p
和一个负责路由信息维护的远程路由器q
连接.远程路由器计算和分发路由表以供每台路由器使用。
此时路由选择由远程路由器q
实现.对p
而言,通过向q
请求的方式获取转发表,然后按转发表执行转发工作即可.
网络服务模型
网络层的IP
服务:不做可靠性保证.数据包可能丢失,失序,损坏.
(1). 输入端口
到达的分组通过路由器的交换结构转发到输出端口
(2). 交换结构
将路由器的输入端口连接到它的输出端口,这种交换结构完全包含在路由器中.
(3). 输出端口
存储从交换结构接收的分组
链路是双向时,一个链路上既由输入端口来接收包,也有输出端口来发出包.
(4). 路由选择处理器
传统路由器中,它执行路由算法,维护路由表.
SDN
路由器中,路由选择处理器负责与远程路由器通信.远程路由器负责运行路由算法,维护路由表.
交换
通过交换结构,分组实际地从一个输入端口交换(转发)到一个输出端口
(1). 经内存交换
最早的路由器是传统计算机,一个分组到达一个输入端口时,该端口会先通过中断方式向路由选择处理器发出信号,分组从输入端口处被复制到处理器内存,处理器提取目的地址,在转发表找输出端口,将分组复制到输出端口缓存.
许多现代路由器通过内存进行交换,差别是,目的地址的查找,将分组存储进适当的内存存储位置由输入线路卡完成.
(2). 其他交换方式
略去
输出端口处理
待发送分组排队,输出端口对排队分组逐个取出,处理,通过链路发送出去.
何处出现排队
在输入端口和输出端口处,均可形成分组队列.
输入排队
分组到达某个输入端口速度,快于输入端口处理分组速度时,分组将在输入端口排队.
输出排队
分组到达某个输出端口速度,快于输出端口处理到达分组速度时,分组将在输出端口排队.
网络层协议
Ipv4数据报格式
IPv4
数据报中的关键字段
(1). 版本号
这4
比特规定了数据报的IP
协议版本,通过版本号,路由器能确定如何解释IP
数据报的剩余部分.对ipv4来说,这里为4
.
(2). 首部长度
一个IPv4
数据报可包含一些可变数量的选项.选项包括在IPv4
数据报首部中,故需用这4
比特来确定IP
数据报中载荷实际开始地方.不含选项时,IP
首部长度为20
字节.
(3). 服务类型
提供特定等级的服务是一个由网络管理员对路由器确定和配置的策略问题.
(4). 数据报长度
IP
数据报的总长度(首部加上数据),以字节计。该字段16
比特。
(5). 标识,标志,片偏移
服务于IP
分片.属于同一组的各个分片标识部分一致.
(6). 寿命
每当一条路由器处理数据报时,该字段的值减1
.若变为0
,则该数据报被丢弃.
(7). 协议
该字段值指示了IP
数据报的数据部分应交给哪个特定的运输层协议。
值为6
表明数据部分交给TCP
,值为17
表明数据要交给UDP
.
(8). 首部检验和
首部检验和用于帮助路由器检测收到的IP
数据报中的比特错误.
路由器一般会丢弃通过计算校验和检测出错误的数据报,每台路由器上必须重新计算检验和并再次存放到原处,因为TTL
及可能的选项字段会改变.
在TCP/IP
的运输层和网络层都通过校验和执行差错检测:
在IP
层只对IP
首部计算了检验和.
TCP/UDP
检验和是对整个TCP/UDP
报文段进行的.
(9). 源和目的IP地址
某源生成一个数据报时,在源IP
字段插入它的IP
地址,在目的IP
地址字段插入其最终目的地地址.
(10). 选项
通过添加选项来支持IP
功能的扩展.
(11). 数据部分
IPv4数据报分片
链路层受限于物理硬件,传输帧长度存在限制.
一个链路层帧能承载的最大帧长度叫作最大传送单元MTU
.
每个IP
数据报封装在链路层帧中从一台路由器传输到下一台路由器,故链路层协议的MTU
间接限制了IP层数据报的最大长度.发送方与目的路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU
.
网络层负责将IP
数据报中的数据分片成两个或更多个较小的IP
数据报,用单独的链路层帧封装这些较小的IP
数据报,以便通过输出链路发送这些帧。这种操作叫ip
分片.
ip
分片只在到达目的地时,由目的地ip
层重新组装起来,再提交给上层.如果源发出的某个ip
数据报尺寸较大,其可能在传输过程中被多次分片.多次分片下,依然可通过源地址,目的地址,标识,片偏移将这些分配最终组合成原始的ip
数据报.
IPv4编址
主机与物理链路间的边界叫接口.
路由器与它的任意一条链路之间的边界也叫接口.
从技术上讲,一个IP
地址与一个接口相关联.通过接口既可以接收数据,也可发送数据.
CIDR
使用子网寻址时,32
比特的IP
地址被划为两部分,且也具有点分十进制数形式a.b.c.d/x
,x
指示了地址的第一部分中的比特数.
形如a.b.c.d/x
的地址的x
最高比特构成了IP
地址的网络部分,且经常被称为该地址的前缀.一个组织常被分配一块连续的地址,即具有相同前缀的一段地址。这时,组织内部的设备的IP
地址将共享共同的前缀,组织网络外部的路由器仅考虑前面的前缀比特x
.也即,当该组织外部的一台路由器转发一个数据报,且该数据报的目的地址位于该组织的内部时,仅需考虑该地址的前面x
比特,这减少了在这些路由器中转发表的长度,因为a.b.c.d/x
的单一表项足以将数据报转发到该组织内的任何目的地。
这种使用单个网络前缀通告多个网络的能力通常称为地址聚合,也称为路由聚合或路由摘要,当地址按块分给ISP
,又由ISP
分给客户组织时,地址聚合工作极为有效.
一个地址的剩余32-x
比特,可认为是用于区分该组织内部设备的。该组织内部的路由器转发分组时,才考虑这些比特。在CIDR
被采用前,IP
地址的网络部分被限制为长度为8/16/24
,这是一种称为分类编址的编址方案。具有8、16、24
比特子网地址的子网称为A,B,C
类网络。
255.255.255.255
目的地址,对应同一个网络中的所有主机。
获取主机地址:动态主机配置协议
某组织一旦获得了一块地址,就可为本组织内的主机与路由器接口逐个分配IP
地址。
系统管理员,常手工配置路由器中的IP
地址,主机地址也能手动配置,但目前更多使用动态主机配置协议.
DHCP
允许主机自动获取一个IP
地址,网络管理员能配置DHCP
,使某给定主机每次与网络连接时能得到一个相同的IP
地址或某主机将被分配一个临时的IP
地址,每次与网络连接时该地址也许是不同的。
除主机IP地址分配外,DHCP
还允许一台主机得知其他信息。如子网掩码,第一跳路由器地址(默认网关),本地DNS
服务器地址.
DHCP
是一个客户-服务器协议。客户常为新到达的主机,它要获得含自身使用的IP
地址在内的网络配置信息。
简单场合下,每个子网有一台DHCP
服务器如某子网没服务器,则需一个DHCP
中继代理(常为一台路由器),代理知道用于该网络的DHCP
服务器地址.
对一台新到达的主机,针对上图的网络设置,DHCP
协议是一个4
个步骤的过程,下图yiaddr
指示分配给该新到达客户的地址.
(1). DHCP
服务器发现
一台新到达主机的首要任务是发现一个要与其交互的DHCP
服务器,可通过使用DHCP
发现报文完成,客户通过UDP
分组向端口67
发该发现报文,该UDP
分组封装在一个IP
数据报中.
DHCP
客户端生成包含DHCP
发现报文的IP
数据报,使用广播目的地址255.255.255.255
且使用"本主机"
源IP
地址0.0.0.0
.DHCP
客户将该IP
数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的节点.
(2). DHCP
服务器提供
DHCP
服务器收到一个DHCP
发现报文时,用DHCP
提供报文向客户做出响应,该报文向该子网的所有节点广播,仍使用IP
广播地址255.255.255.255
,在子网中可能存在几个DHCP
服务器,客户也许会发现它处于能在几个提供者之间进行选择的优越位置。
每台服务器提供的报文包含有收到的发现报文的事务ID
,向客户推荐的IP
地址,网络掩码及IP
地址租用期(IP地址有效的时间量).
(3). DHCP
请求
新到达的客户从一个或多个服务器提供中选择一个,向选中的服务器提供DHCP
请求报文进行响应,回显配置的参数.
(4). DHCP ACK
服务器用DHCP ACK
报文对DHCP
请求报文进行响应,证实所要求的参数。
一旦客户收到DHCP ACK
后,交互便完成了,且客户能在租用期使用DHCP
分配的IP
地址。客户可能在该租用期超时后还使用这地址,DHCP
还提供了一种机制以允许客户更新它对一个IP
地址的租用。
网络地址转换
许多家庭网络,使用了相同的地址空间10.0.0.0/24
,在一个给定家庭网中的设备能使用10.0.0.0/24
编址彼此发送分组。转发到家庭网络之外进入更大的全球因特网的分组显然不能使用这些地址(或作为源地址,或作为目的地址),因为有很多网络使用这块地址。
NAT
使能路由器对于外部世界甚至不像一台路由器。NAT
路由器对外界的行为如同一个具有单一IP
地址的单一设备。所有离开家庭路由器流向更大因特网的报文都拥有一个源IP
地址138.76.29.7
且所有进入家庭的报文都拥有同一个目的IP地址138.76.29.7
.本质上讲,NAT
使能路由器对外界隐藏了家庭网络的细节.
路由器从ISP
的DHCP
服务器得到它的地址,且路由器自身又运行一个DHCP
服务器,为位于NAT-DHCP
路由器控制的家庭网络地址空间中的计算机提供地址.
如从广域网到达NAT
路由器的所有数据报都有相同的目的IP
地址(特别对NAT
路由器广域网一侧的接口),路由器怎样知道它应将某个分组转发给哪个内部主机。NAT
路由器上一张NAT
转换表,表项包含了端口号及其IP
地址。
NAT
已成为因特网的一个重要组件,称为所谓中间盒.中间盒运行在网络层,不执行传统的数据报转发,而执行诸如NAT
,流量流的负载均衡,流量防火墙等。
检查数据报:防火墙,和入侵检测系统.
对抗恶意分组攻击的两种流行的防御措施是防火墙和入侵检测系统.
网络和因特网间的防火墙,防火墙检查数据报和报文段首部字段,拒绝可疑数据报进入内部网络,基于源和目的IP地址及端口号阻挡分组.
Ipv6
Ipv6数据报格式
(1). 扩大的地址容量
IPv6
将IP
地址长度从32
比特增加到128
比特。除了单播与多播外,IPv6
还引入了一任播地址。使数据报交付给一组主机中的任意一个。
(2). 简化高效的40
字节首部
40
字节定长首部允许路由器更快地处理IP
数据报,一种新的选项编码允许更灵活的选项处理.
(3). 流标签
IPv6
有一个难捉摸的流定义。该字段可用于"给属于特殊流的分组加上标签,特殊流是发送方要求进行特殊处理的流".
(4). 版本
IPv6
该字段值设为6
,4
比特.
(5). 流量类型
8
比特.
(6). 流标签
20
比特.用于标识一条数据报的流,能对一条流中的某些数据报给出优先权,或它能用来对来自某些应用的数据报给出更高优先权.
(7). 有效载荷长度
16
比特.作为一个无符号整数,给出了IPv6
数据报中跟在定长的40
字节数据报首部后面的字节数量.
(8). 下一个首部
该字段标识数据报中的内容(数据字段)需交付给哪个协议(如TCP
或UDP
...).该字段使用与IPv4
首部中协议字段相同的值.
(9). 跳限制
转发数据报的每台路由器对该字段内容减1
,如跳限制到0
,数据报被丢弃.
(10). 源地址和目的地址
IPv6 128
比特地址的各种格式描述见RFC 4291
.
(11). 数据
IPv6
数据报的有效载荷部分,数据报达到目的地时,有效载荷就从IP
数据报移出,交给在下一个首部字段中指定的协议处理.
IPv4
中存在,IPv6
中不存在的几个字段:
(1). 分片/重新组装
IPv6
不允许在中间路由器上进行分片和重新组装,如路由器收到的IPv6数据报太大,而不能转发到出链路路由器丢弃该数据报,向发送方发回一个分组太大的ICMP
差错报文即可.于是,发送方能使用较小长度的IP
数据报重发数据.
(2). 首部检验和
因特网中的运输层和数据链路层协议执行了检验操作,网络层移除,以便加快处理速度.
(3). 选项
可能出现在IPv6
首部中由"下一个首部"
指出的位置上.就如TCP/UDP
协议首部可为下一个首部一样,选项字段也可为下一个首部.
从IPv4到IPv6的迁移
在实践中广泛采用的IPv4
到IPv6
迁移的方法包括建隧道.
建隧道依据的基本思想如下:
假定两个IPv6
节点,要使用IPv6
数据报进行交互,但它们经中间IPv4
路由器互联,将两条IPv6
路由器中间IPv4
路由器的集合称为一个隧道,借助于隧道,在隧道发送端的IPv6
节点可将整个IPv6
数据报放到一个IPv4
数据报的数据(有效载荷)字段中.该IPv4
数据报的地址设为指向隧道接收端的IPv6
节点,再发给隧道中的第一个节点,隧道中间的IPv4
路由器在它们之间为该数据报提供路由,像对待其他数据报一样,隧道接收端的IPv6
节点收到该IPv4
数据报,确定该IPv4
数据报含有一个IPv6
数据报,从中取出IPv6
数据报.再为该IPv6
数据报提供路由.