个人博客:http://blog.kunpw.cn/
网络层存在于网络中所有主机和路由器中(路由器具有截断的协议栈,没有网络层以上的部分),由数据平面和控制平面两部分组成。
数据平面:是网络层中属于每台路由器自身的功能,决定到达路由器输入链路的数据报(网络层分组)如何转发到该路由器某一个具体的输出链路。
控制平面:是网络范围内的逻辑,控制数据报沿着从源主机到目的主机的端到端路径中路由器的路由方式。
如图所示:
转发:当一个分组到达路由器的一条输入链路时,该路由器必须将该分组移动到合适的输出链路,这是一个路由器本地动作,发生时间很短,通常用硬件实现。转发是数据平面实现的唯一功能。分组有可能被现有的路由器阻拦(例如该分组来源于一个已知的恶意主机或者该分组发向一个被禁止的目的主机),或者可能是冗余的并经过多条出链路发送出去。
路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,计算这些路径的算法被称作路由选择算法,这是一个端到端路径的网络范围处理过程,但路由选择发生时间相对很长,通常用软件实现。
每台网络路由器本地存有有一个关键元素转发表,路由器检查到达的分组首部中一个或多个字段,进而使用这些首部值在其转发表中索引,转发分组至相应的输出链路。转发表配置方式有两种:
但因特网的网络层只提供了尽力而为服务,即不保证任何服务,ATM网络体系结构提供了确保按序时延、有界时延和确保最小带宽。
分组交换机:指一台通用分组交换设备,根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组
路由器体系结构:
路由器的输入端口、输出端口、交换结构几乎总使用硬件实现。
两种转发:
详细输入处理视图:
假设一个入分组基于目的地址交换到输出端口,又假设路由器具有四条链路0-3如图:
对于该链路,转发表如图:
查找方法:
通过查找确定某分组的输出端口后,该分组就进入交换结构,如果来自其它输入端口的分组当前正在使用该交换结构,则该分组可能会在输入端口处阻塞排队,并等待稍后被及时调度以通过交换结构。
输入端口除执行查找动作外,还必须执行以下三项动作:
交换结构位于一台路由器的核心位置,常用三种方式如图:
输出端口处理取出已存放在输出端口内存中的分组并将其发送到输出链路上:
假定输入线路速度和输出线路速度(传输速率)是相同的,均为**Rline每秒分组数,并且有N个输入端口和N个输出端口。还假设所有分组具有相同的固定长度,分组以同步的方式到达输入端口。定义交换结构传输速率Rswitch**为从输入端口移动到输出端口移动分组的速率。
如果Rswitch=N×Rline,这时输入端口的排队时延微不足道。
考虑纵横式交换结构:
假定①所有链路速率相同;②Rswitch=Rline;③ 分组以FCFS先到先服务的方式从输入队列移动到输出队列;
线路前部阻塞(HOL):如果一个输入队列中前一个分组被阻塞,则后面的分组要去往的输出端口即使空闲也会被阻塞。
依然考虑纵横式结构,且Rswitch=N×Rline,到达N个输入端口的每个分组的目的地是相同的输出端口,但由于输出端口每次只能传输一个分组,所以这N个分组必须排队等待,而每次传输一个分组的时间中每个输入队列又会新增一个分组到达,这时排队的数量足够大,就会耗尽输入队列的可用内存。
当没有足够的内存来存储一个分组时(有时候在缓存填满之前就会丢弃一个分组或者在其首部加上标记,这会向发送方提供拥塞信号),有两种方式解决:
所有处理分组丢弃和标记的策略被称作主动队列管理(AQM)算法,其中随机早期检测(RED)算法是最广泛研究和实现的AQM算法之一。
对于整个路由器而言,用来缓存所有的排队分组的大小该是多少呢?
仅考虑分组到达输出链路的排队问题,不考虑分组丢弃问题。
在非抢占式优先权排队规则下进行,一旦分组进行传输,不能被打断。
每个优先权类通常拥有自己的队列,当选择一个分组传输时,优先权排队规则将从队列非空的最高优先权类中按照FIFO规则传输分组。实践中,携带网络管理信息的分组能获得超过用户流量的优先权,基于IP的实时语音分组也可能获得超过非实时流量的优先权。
例如,分组1,3,4属于高优先权类,2,5属于低优先权类:
在循环排队规则下,分组像使用优先权排队那样被分类,但是类与类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。一个保持工作排队规则不允许链路保持空闲。
例如,分组1,2,4属于第一类,3,5属于第二类:
加权公平排队规则(WFQ):
i
被分配权 w i w_i wi ,在类i
有分组要发送的任何时间间隔内,第 i 类将确保接收到的服务部分等于 w i / ( ∑ w j ) w_i/(\sum w_j) wi/(∑wj) ,其中分母中的和是计算所有有分组排队等待传输的类别得到的;R
的链路,第 i 类总能获得至少为 R ∗ w i / ( ∑ w j ) R*w_i/(\sum w_j) R∗wi/(∑wj) 的吞吐量;关键字段:
一个IP数据报首部总长为20字节(无选项时),如果承载一个TCP报文段,则每个数据报总共承载40字节首部以及应用层报文;
不是所有链路层协议都能承载相同长度的网络层分组,因此有时需要对数据报进行分片处理
最大传送单元(MTU):一个链路层帧能承载的最大数据量。
当某条链路接收到一个IP数据报,通过检查转发表确定出链路,并且该出链路的MTU比该IP数据报的长度要小,这时如何将这个过大的IP数据报挤进链路层帧的有效载荷字段呢?
解决方法是将IP数据报中的数据分片成两个或更多个较小的IP数据报,再通过出链路发送这些数据报,每个这种较小的数据报都被称作片(fragment)。片在其到达目的地运输层以前需要进行重组。
分片格式:
主机和路由器通过链路连接到网络中,而这个主机与物理链路之间的边界又叫做接口,一台主机通常只有一个接口,但是一台路由器往往有多个接口。从技术上讲,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器关联!
IPV4中每个IP地址长度为32字节,采用点分十进制记法每8个比特的十进制等价数使用句点.
符号分割,如193.32.216.9
的二进制记法就是11000001 00100000 11011000 00001001
。
子网:如图所示一台路由器具有三个接口,互联七台主机
223.1.1.0/24
而言,其中的/24
记法就被称作子网掩码,指示了比特中最左侧24定义了子网地址;对于路由器而言,它只需要匹配IP地址前24位即可分发分组至相应链路,而后32-24
位地址则由链路分发给它所连接的其它主机;除此之外,再来看一个路由器互联的案例:
无类别域间路由选择(CIDR):32比特的IP地址按照a.b.c.d/x
格式被划分成两部分,其中x位最高比特构成了IP地址的网络部分,该部分又被称为**(网络)前缀(prefix)**,当该组织外部的一台路由器转发一个数据报,且该数据报的目的地址位于该组织的内部时,仅需要考虑该地址前x位比特,这能够大大减少这些路由器中转发表的长度。
对于使用CIDR协议的ISP组织而言,外界的其它部分不需要关注该ISP内部是否再次进行划分地址或者划分了多少主机,这种使用单个网络前缀通告多个网络的能力又被称为地址聚合、路由聚合或路由摘要。
因特网名字和编号分配机构(ICANN):非盈利,功能主要包括:
ISP通过与ICANN联系并获得一块IP地址(通过x确定),ISP再将自己的大块地址分配给向它发起请求的组织,如图所示:
当某组织获得一块地址之后,它如何为本组织内的主机与路由器分配IP地址呢?系统管理员一般手动配置路由器中的IP地址,并使用DHCP自动为主机配置地址
动态主机配置协议(DHCP):DHCP允许主机自动获取一个IP地址,而DHCP又可以被网络管理员手动配置,使得每次分配给一台主机相同IP或者分配临时IP。DHCP也可以获得主机信息,如:
DHCP又被称为即插即用协议或零配置协议。
DHCP又是一个客户-服务器协议,客户通常是新到达的主机,它要获得包括自身使用的IP地址在内的网络配置信息。在最简单场景中,而每个子网都要拥有一台DHCP服务器,如果某子网中没有服务器,则需要一个DHCP中继代理(通常是一台路由器),这个代理知道用于该网络的DHCP服务器的地址。
DHCP分配新地址步骤:
255.255.255.255
和本机源地址0.0.0.0
255.255.255.255
(使用广播的原因是可能有多个服务器共客户选择最优);一旦客户接收到 DHCP ACK 后,交互分配即成功,该客户能在租用期内使用该DHCP分配的IP地址。由于可能过期,DHCP还提供了一种机制允许客户更新它对一个IP地址的租用。
DHCP缺陷:每当节点连接到一个新子网,要从DHCP重新获取IP,当移动节点在子网与子网之间移动时,就不能维持IP与远程应用之间的TCP连接。
考虑家庭路由器以及小型办公室路由器的情形,在这些情形中,ISP显然是不会为每个路由器分配一块区域,太过浪费。这时就有一种广泛使用的**网络地址转换(NAT)**路由器出现了
地址空间10.0.0.0/8
是保留的专用网络/具有专用地址的地域,专门配置给家庭网络:
10.0.0.1
这种IP地址进行的;10.0.0.1
这个公共内部地址,这时就需要NAT使能路由器发挥作用了;NAT使能路由器(如图所示):
具有一个接口,被DHCP分配IP地址为138.76.29.7
,这个IP地址仅在对外访问连接时使用,并且连接在这一台路由器上的所有主机设备都使用这一台链路传输数据;
NAT转换表:将接收到的来自内部主机的源IP统一替换为路由器IP地址,并为该数据报生成一个新的尚未使用的端口号,旧端口号为具体主机使用的源端口号,这样一来,当接收到外部传入的数据包时,再次进行匹配转换最后再传给具体主机;
NAT缺点:
又被称作中间盒,功能如下:
拓展:检查数据报:防火墙和入侵检测系统(IDS)
对抗恶意分组攻击的两种方式:
与IPV4相较的变化:
IPV6字段:
不再存在于IPV6上的几个字段:
IPV6使能系统能向后兼容,即能发送、路由和接收IPV4数据报,但已经部署的具有IPV4数据报能力的系统却不能处理IPV6数据报
实践可行的解决方案是建隧道,其基本思想是:假定两个IPV6节点要使用中间IPV4节点进行互联,则将该中间IPV4路由器称为一个隧道。在隧道发送端,IPV6节点将整个IPV6数据报放到一个IPV4数据报的数据字段中,在隧道接收端,IPV6节点最终接收到该IPV4数据报,并通过确认其首部协议号字段值为41,从中取出IPV6数据报并为该数据报提供路由。
通用转发用来提供多种网络层功能以及某些链路层功能,进而解决多种第三层中间盒独立发展配置的问题
先将第三层基于目的地转发的特征总结为两个步骤:
通用转发就整合这两个步骤,形成新的“匹配加动作”范式,该设备又被称为分组交换机:
如图显示了位于每台分组交换机中的一张匹配加动作表,该表由远程控制器计算、安装和更新:
OpenFlow是一个得到高度认可和成功的通用转发的标准,已经成为匹配加动作转发抽象、控制器以及更为一般的SDN革命等概念的先驱,后续对通用转发的讨论也将基于OpenFlow。
匹配加动作转发表在OpenFlow中被称作流表,它的每个表项包括:
OpenFlow的匹配抽象允许对来自三个层次的协议首部所选择的字段进行匹配,但基于功能复杂性,并非一个IP首部所有的字段都能被匹配,如OpenFlow并不允许基于TTL字段或数据长度字段的匹配。
入端口是指分组交换机上接收分组的输入端口,运输层源和目的端口号字段也能匹配。
流表项也可有通配符,如128.119.*.*
格式,每个流表项也具有相应的优先权。如果一个分组匹配多个流表项,选定的匹配和对应的动作将是其中优先权最高的那个。
每个流表项都拥有零个或多个动作,如果有多个动作,它们以在表中规定的次序执行,其中最重要的动作是:
例:该网络具有六台主机(h系列)以及三台分组交换机(s系列),每台交换机具有四个本地接口(1-4)
第一个例子:简单转发
假定希望的转发行为是:来自h5/h6的发往h3/h4的分组从s3转发到s1,再从s1转发到s2
第二个例子:负载均衡
来自h3发往10.1.*.*
的数据报经过s1和s2之间的直接链路转发,同时来自于h4发往10.1.*.*
的数据报经过s2和s3之间的链路转发
第三个例子:充当防火墙
s2仅希望接收到来自与s3相连的主机所发送的流量
AN/CDNBlog/Img/ComputerNetWorking/107.png" alt=“image-20201118212245271” style=“zoom:80%;” />
第二个例子:负载均衡
来自h3发往10.1.*.*
的数据报经过s1和s2之间的直接链路转发,同时来自于h4发往10.1.*.*
的数据报经过s2和s3之间的链路转发
第三个例子:充当防火墙
s2仅希望接收到来自与s3相连的主机所发送的流量