Skip to content
Go back

5-网络层(下)

Published:  at  09:30 PM

链路状态路由选择

距离矢量路由法由于不能从全局把握问题,只能从邻居节点获取信息导致了无穷计数,路由环等问题

这些问题可以通过链路状态路由选择加以解决

LS主要思想

  1. 发现:发现邻居节点,了解它们的网络地址
  2. 设置:设置规定到每个邻居的成本度量
  3. 构造:构造分组,包含所了解到的所有信息
  4. 发送:将这个分组发送给其他路由器
  5. 计算:计算到每个路由器的最短路径

发现

发现邻居节点

当一个路由器启动时,会向每条点对点线路发送一个特别的HELLO分组,收到HELLO分组的路由器会回送一个应答,应答中包含自己的名字(采用全球唯一的一个名字Globally Unique Name)

设置

设置链路成本(开销/量度/代价)

可以自动发现设置或是采用人工设置,常见的量度是设置为与链路带宽成反比

延迟也可以作为量度

构造

构造链路状态分组:Link State Packet/Adevertisement(LSP/LSA),分组内包含的信息有:

构造链路状态分组的时机

周期性的构造分组,或者在有特殊事件发生时构造,例如某条线路或邻居DOWN掉了,这就是我们所说的触发更新

发布/分发

发布链路状态分组,这一步操作关系着LSA/LSP能否分发到所有的路由器,如果这一步出现差错导致LSP不能分发给所有路由,会导致路由器构造的拓扑图不完整,即对网络认识不完整

基本算法:

每个分组都包含一个序列号,序列号随新分组发送而递增,路由器会记录下它所看见的所有(源路由器,序列号)有序对

当一个新分组到达路由器时,路由器会结合源路由器与序列号进行判断:

  1. 如果序列号大于当前已经存在的最大序列号,则该分组被当作新分组向其他所有路由器转发(泛洪广播)
  2. 如果序列号与当前已经存在的最大序列号相等,则路由器抛弃当前分组选择新到达的分组(喜新厌旧)
  3. 如果序列号小于已经存在的最大分组,则被认定为过时分组而被丢弃

基本算法遇到的问题

解决方法

序列号回转问题的解决方法就是采用32位序列号,这样在有限的时间内,机器不可能发生序列号回转的情况,而是一直处于递增状态

解决路由器崩溃和序列号损坏问题就利用到了分组中的年龄,当分组到达路由器后,年龄随时间逐秒递减1,直至年龄归0时,如果仍没有符合顺序新分组到达,则该分组被丢弃。而一般情况下每十秒会有一个新分组到达,假如超出时限,很可能是DOWN机或超过六个分组丢失,所以,成功解决了路由器崩溃的情况。而如果新到达的分组序列号与之前留存的分组序列号不是相邻的,则年龄倒计时不会停止,直到归0,所以也成功解决了序列号损坏的问题

算法改进

计算

当一个路由获得了全部链路状态分组就可以构造出全网络的拓扑图来了,这种拓扑图一般采用最短路径算法(例如:狄克斯特拉算法)来计算。计算的最终结果是一棵树,会存储在路由表种,用来引导分组的转发

L-S路由算法特点:

优点缺点
路由器认识一致路由器需要较大的存储空间
LSP构造的图完全一样计算负担很大
收敛快
适合在大型网络种使用

单区域OSPF

开放的最短路径优先协议(Open Shortest Path First)

链路状态路由典型实例,在TCP/IP协议种,OSPF位于IP协议之上,OSPF是一种基于开放标准的链路状态路由协议,是目前IGP中应用最广,性能最优的协议

OSPF特点

OSPF基本概念

Internet由很多不同组织运营的独立网络或自制网络系统构成,早期的资质系统内部(也称域内),运行着RIP协议,目前大多是OSPF协议

OSPF

对于有些庞大的资质系统AS,会将系统划分为多个区域Area,每个区域内单独运行OSPF,且每个系统中必然存在一个0号区域,作为骨干区域,所有区域都必须连接到骨干区域上,在一个区域中运行OSPF称作单区域OSPF ,一个AS如果不划分区域运行OSPF,则只有一个0号区域。

区域

单区域OSPF运行时部分术语

OSPF使用带宽(10810^8/BW)作为代价判断标准

例如,10M的以太链路,对应的代价=108/1010610^8/10*10^6=10.

为了适应带宽增长,有些厂商的代价计算公式是可以配置的

OSPF分组类型

OSPF数据包类型作用
Hello数据包与邻居建立和维护毗邻关系(keep alive)
数据库描述包(DD)描述一个路由器的链路状况数据库的内容(链路状况数据库储存了路由器的收到的所有LSP,DD数据报包含了它们分组的头部信息)这样在交换数据库信息时就不需要交换全部信息,只需摘要即可
链路状态请求(LSR)请求邻居路由器发送其链路状况数据库中的具体条目
链路状态更新(LSU)向邻居路由器发送链路状态通告,或是网络中发生一些事件例如出现DOWN机时,都会导致感知到的路由器主动将这些信息通过LSU封装后转发给其他路由器
链路状态确认(LSAck)确认收到了邻居路由器的LSU后,回发给源路由器

OSPF运行步骤

  1. 建立路由器毗邻关系
  2. 选举DR和BDR
  3. 发现路由
  4. 选择最佳路由
  5. 维护路由信息

建立路由器毗邻关系(全毗邻关系)

OSPF运行中最重要的一步

全毗邻

达到全毗邻状态的两个路由器,它们内部LSP数据库内容完全一致,当两个路由器交换DD报文后发现数据库内容本来就完全一致时,就会跳过交换完整数据库内容的过程,直接成为全毗邻状态,建立全毗邻关系的过程叫做同步

同步可能是个冗长的过程,在同步期间,网络社会是不安定的。

选举

如图中的网络拓扑结构所示,如果两两节点之间逐个进行同步,则n个路由器需要进行n*(n-1)/2次的同步,但如果,选出一个特殊路由器作为指定路由器DR(Designated Router),所有路由器只与它进行同步,则同样能获取到全网的拓扑信息并且同步次数缩减至n-1次

指定路由器DR通过选举得出,选举过程如下:


无类域间路由 CIDR

IP协议面临的两大问题

1. 分类造成了数百万个地址浪费

C类地址含有256-2=254个可用地址,B类含有约65000个可用地址,假如我目前需要的地址数在500左右,而C类无法满足需求,B类空闲地址过多,就会导致我不得不使用较大的B类,这也就造成了地址的浪费

2. 路由表膨胀

随着互联网的发展,路由表动辄上万条,这导致信息传递的速度变慢,增加了通信过程中端到端的延迟。

为解决上述问题,就提出了CIDR技术

CIDR

Classless Inter Domain Routing,即无类域间路由,CIDR缓解了地址枯竭的趋势,尤以其中的B类地址枯竭趋势见著。控制甚至缩减了路由表的开销

CIDR基本思想

分配地址的方法:按需分配,不再采用A类B类来分配 (例如:在CIDR出现之前假设一个用户需要2000个IP地址只能申请B类地址,但这会造成60000多个地址的浪费,CIDR出现后,就可以按需分配,2000个地址,最接近2048,所以需要11个主机位,所以网络位个数就是21,因此,可以分配一个块地址x.x.x.x/21给用户,就可以满足需求,并且除了两个不可以地址还有46个地址可扩展)

有了CIDR之后,路由表必须增加一组数据,就是地址的32位子网掩码用于寻径,即每个路由表都至少需要记录一个三元组(目的IP地址,子网掩码,输出线路)

过程

当一个分组到达路由器,路由器会提取其中的目的IP地址和子网掩码,进行按位与后确定目标网络,然后查找路由表,假如路由表中有多条线路与之匹配,则选择网络位最长的(IP地址的最长匹配前缀),例如地址为196.168.24.1遇到表中有能够匹配的两个地址(196.168.10.0/19,196.168.10.0/22)则会选择其中网络位更长的地址,因为网络位越长,说明网络越小,越接近我们寻找的目标网络

缩减路由表规模-聚合

CIDR

如图,中间路由不需要记录12条路由的全部信息,只需要记录三条汇总的路由就可以。而最右边路由则只需要记录中间路由即可

这些都依靠路由的聚合完成,路由聚合必须保证子网地址是连续的,关键是确定新的聚合空间中网络位个数(网络位就是聚合的几个网络中不变的位)

聚合结果:超网

聚合的前提条件:

- 子网构成的地址空间是连续的
- 下一跳一定是相同的

CIDR还带来了额外的好处:隔离了路由翻动


网络地址翻译NAT

提出NAT的原因

为了解决上述问题,就需要使用到私人地址,私人地址是不可路由的地址,可以用于广域网链路上。私人地址不具备唯一性,在IPv4的三类地址中都保留了一部分地址作为私人地址

ClassRFC 1918 Internal Address RangeCIDR Prefix
A10.0.0.0 - 10.255.255.25510.0.0.0/8
B172.16.0.0 - 172.31.255.255172.16.0.0/12
C192.168.0.0 – 192.168.255.255192.168.0.0/16

由于私人地址不具备唯一性,无法连接至互联网,就需要用到上文所提的网络地址翻译NAT(net address translate),NAT负责私人IP地址与公有IP地址之间的转换(一种类似的技术:PAT,port address translate(超载)可以将多个私有IP地址影射到同一个公有IP地址的不同端口)

NAT

NAT是一个IP地址耗尽的快速修补方案(RFC3022中描述),内部网络使用私人地址,当内部网络需要和外网进行通信时,私人地址转换为合法的公网IP。NAT转换器负责完成这种转换过程。

NAT转换器

功能:

位置:

NAT转换器可以是一个专用的服务器,也可以运行在内网的边界路由器上,也可以在家用路由器(AP)上

工作原理:

NAT工作原理如下图所示,首先内外内的主机将信息封装,此时封装的分组内第一层是源地址(内网地址),第二次是目的地址(公网地址)第三层两个参数分别是源和目的的端口号,当分组到达NAT转换器时,NAT转换器将分组进行解封装,提取其中的源地址和端口,将其替换为公网地址和端口,并将这组变化信息记录在地址转换器上,然后将其发往目的地址,目的地址收到分组后,假如需要重新返回一个分组(做出应答),只需要调换源和目的的位置就可以返回该分组,分组再次到达NAT转换器时,转换器同样首先解封装,然后检索地址转换表,查找目的端口对应的内网地址,并替换掉公网地址和端口,随后将分组转发到对应的内网地址

NAT工作原理

问题:

优点:


互联网控制信息协议ICMP

IP提供的是尽力传送的服务,分组可能会遭遇拥塞,丢弃,找不到目的机等等问题。因此,我们经常需要知道一条到目的机的路是否通达,延时大小等等。因此我们设计了IP协议的姊妹协议ICMP协议

ICMP互联网控制信息协议

(Internet Control Message Protocol)

ICMP整个作为载荷封装到IP分组的数据域中 ICMP

ICMP类型

类型TYPE代码CODE用途/描述 Description查询类Query差错类Error
00Echo Reply——回显应答(Ping应答)x
30Network Unreachable——网络不可达x
31Host Unreachable——主机不可达x
32Protocol Unreachable——协议不可达x
33Port Unreachable——端口不可达x
34Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特x
35Source routing failed——源站选路失败x
36Destination network unknown——目的网络未知x
37Destination host unknown——目的主机未知x
38Source host isolated (obsolete)——源主机被隔离(作废不用)x
39Destination network administratively prohibited——目的网络被强制禁止x
310Destination host administratively prohibited——目的主机被强制禁止x
311Network unreachable for TOS——由于服务类型TOS,网络不可达x
312Host unreachable for TOS——由于服务类型TOS,主机不可达x
313Communication administratively prohibited by filtering——由于过滤,通信被强制禁止x
314Host precedence violation——主机越权x
315Precedence cutoff in effect——优先中止生效x
40Source quench——源端被关闭(基本流控制)
50Redirect for network——对网络重定向
51Redirect for host——对主机重定向
52Redirect for TOS and network——对服务类型和网络重定向
53Redirect for TOS and host——对服务类型和主机重定向
80Echo request——回显请求(Ping请求)x
90Router advertisement——路由器通告
100Route solicitation——路由器请求
110TTL equals 0 during transit——传输期间生存时间为0x
111TTL equals 0 during reassembly——在数据报组装期间生存时间为0x
120IP header bad (catchall error)——坏的IP首部(包括各种差错)x
121Required options missing——缺少必需的选项x
130Timestamp request (obsolete)——时间戳请求(作废不用)x
14-Timestamp reply (obsolete)——时间戳应答(作废不用)x
150Information request (obsolete)——信息请求(作废不用)x
160Information reply (obsolete)——信息应答(作废不用)x
170Address mask request——地址掩码请求x
180Address mask reply——地址掩码应答x

ICMP应用

PING

使用ping命令(即调用ping过程)时,将向目的站点发送一个ICMP回声请求报文(包括一些任选的数据),如目的站点接收到该报文,必须向源站点发回一个ICMP回声应答报文,源站点收到应答报文(且其中的任选数据与所发送的相同),则认为目的站点是可达的,否则为不可达。

PING的作用

tracert

当ping不通某个接口时,假如我们想知道是哪个地方失败,就需要用到tracert工具

tracert会逐个发送ICMP分组,TTL从1开始递增,首先发送TTL=1的分组,分组到达第一跳,TTL减为0,分组被丢弃,,此时目的路由器就会返回一个应答分组,源路由器可以通过应答分组获知ICMP分组成功到达第一跳,依次会发生TTL=2,3…的分组,知道收到一条错误应答,说明该路径在这个环节不可达。也就找到了错误的源头。tracert最大支持30跳。

PMTU

利用(Type = 3 , code = 4)的ICMP消息

路径MTU(Path Maximum Transimition Unit),动态发现互联网上任意一条路径最大传输单元的技术,每个网络都有各自的MTU也就是最大承载能力,常见的以太网的MTU是1500byte,传输的数据一旦超过这个大小就需要进行分片操作,但是分片操作消耗大,安全隐患多,消除这种问题的方法就是在一开始就探明这条路径的最大传输单元

PMTU算法/PMTU技术

PMTU


一般来说,ICMP消息仅发送给源机,由于ICMP是封装在IP分组中发送的,所以有一条规定:ICMP消息不生成自己的错误报告。这样的理由是假如某处发生拥塞,若ICMP生成自己的差错报告,则新生成的ICMP也会在此处拥塞,故而新的ICMP再次生成差错报告,如此往复,拥塞越来越严重


地址解析协议ARP

(Address Resolution Protocol)

ARP是一个运行在局域网中的协议,它将,目标机的IP地址映射到MAC地址上。

工作原理

ARP工作原理

当主机A只有主机E的IP地址而没有MAC地址时,主机A就会发出广播给局域网内所有主机,寻找主机E,其他主机在收到广播后不作应答,主机E在收到广播后返回自己的MAC地址

如果每一次发送数据都要来回发送ARP请求帧和返回帧,是非常耗费资源的,所以,有诸多的优化措施:

ARP请求帧是二层广播帧,目标机只有跟源机在同一个LAN中才能收到请求帧,假如目标机是一个远程机(不在同一个局域网内部),则ARP无法找到目标MAC地址。此时源机会先寻找整个网络中的默认网关,然后由默认网关找到目标机的MAC地址并最终返回源机

为了减少ARP请求次数,每个设备包括路由器都有各自的ARP表,ARP表是IP地址到MAC地址的映射表,存储在存储器内存中,自动维护,一旦掉电故障,表内信息全部消失。表中内容是自动更新和维护的

维护ARP表(arp -a 查看)


拥塞控制

一个网络能够承载的数据流量是有限制的,在待传输分组不多,轻载的时候,发出的分组都能够顺利发送

拥塞

当一个子网,或子网的一部分出现太多分组时,网络性能急剧下降,导致拥塞(拥塞出现时,分组被丢弃,重传,网络吞吐量严重下降,甚至无法传输分组)

控制拥塞的方式:

开环:

开环控制试图用良好的设计从根源解决问题,本质就是保证问题从一开始就没有发生的可能性。开环决策不考虑网络当前状态,而是提前考虑

问题在于事物发展过快,任何一个曾经良好的开环设计随着时间推移都会被加速淘汰,开环设计很难准确的估计需求,即使超前的设计随着时间推移,也会越来越吃力

闭环:

基于上文所述的问题,更多采取闭环设计。

闭环控制建立在反馈环路的概念上,分三个步骤解决问题

检测拥塞:

确定拥塞的量度,数值越大表示拥塞的程度越重:

传递拥塞

传递拥塞有多种方式。

最常见的就是向源机返回一个拥塞警告分组,但由于当前路径拥塞,这个警告分组有可能根本无法到达源。

还可以设置每个分组保留一位或一个字段作为警告位,当拥塞度量超过阈值时,路由器就对这个位或者这个域填充位以此警告它的邻居。

还有一种方法,主机或路由器周期性向外发送探询,即probe分组,显式的询问有关拥塞的情况,然后在有拥塞的地方利用回收的信息路由流量

解决拥塞

拥塞产生的根本原因无非是发送了过多的分组,超过了资源承载的能力。(拥塞根源:负载>资源),因此要解决拥塞就是要扭转这个不等式,所以可以从两方面入手

增加资源

可以在某些点间增加更多的通道,提升带宽,增加资源承载能力以解决问题。

降低负载

以上几种方法的反应顺序与速度

反应速度

数据报子网中的流量限制方法

处于警告状态后,可以采取抑制分组措施来解决问题。

抑制分组原理:

当发生拥塞后,路由器向源机发送ICMP抑制分组,源机在收到抑制分组后,削减发送到目的机的流量,并在一段时间内丢弃目的机发送的抑制分组,以避免过度削减流量。一段时间后,源机继续检测是否仍有抑制分组,如果不再收到抑制分组,就逐渐增加流量大小

逐跳抑制分组:

当网络拥塞或是距离过远时,直接发送抑制分组的效果并不好,这时可以采用逐跳抑制分组的方式,对目的机上游的路由器逐个进行抑制,这样可以快速解决拥塞问题,但这大大增加了上游路由器所需要的缓存空间

负载脱落/载荷脱落

处理拥塞最极端,最有效的方法。面对超载时,就会选择丢弃一部分分组,丢弃部分分组的决定方式有:

分组丢弃策略:

随机早期检测(RED)

(Random Early Detection)

在情况恶化,无可救药之前,采取一定措施的检测方式,就是在拥塞早期对分组进行处理。根据路由器维护的最早的队列,平均长度来决定何时开始丢弃分组(拥塞处理开始)


流量整形

用户产生的数据总是忽大忽小的,具有突发特性。而流量整形就是调节数据平均传输速率(和突发数据流),以减少突发带来的拥塞,缓存溢出以及丢包等等问题。

流量整形算法主要有漏桶,令牌桶两种

漏桶

算法效果

主机内用户进程产生的分组流往往是一个不稳定的流,漏桶可以让它输出到网络时变成一个稳定流,抹平了突发尖峰,极大地减少了发生拥塞的机会。

缺点

漏桶满了之后数据将被丢弃,不能大量的突发数据

令牌桶

令牌桶是改进的漏桶算法

和漏桶算法相比:

令牌桶

计算最大突发时间

B+RS=MSB+RS=MS S=BMRS=\frac{B}{M-R}

Suggest Changes

Previous Post
6-数据链路层-介质访问控制子层
Next Post
1-区块链基础概述