7306 字
37 分钟
网络原理: 网络层

更新于2024-04-29 20:32:48

不同于电信网络面向连接的通信方式,网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务

也就是说网络层不提供服务质量的承诺

1. 网际协议: IPIP协议#

IPIP协议是用来使互连起来的**许多计算机网络(网络之间,网际)**能够进行通信的。

1.1 虚拟互连网络#

在市面上有很多种性能不同、不同网络协议的网络,供不同的用户选用。

从一般的概念讲,将网络连接在一起需要一些中间设备

​ (1) 物理层使用的中间设备叫做转发器(repeater)。

​ (2) 数据链路层使用的中间设备叫做网桥或者桥接器(bridge)。

​ (3) 网络层使用的中间设备叫做路由器(router)。

​ (4) 在网络层以上使用的中间设备叫做网关(gateway),用网关连接两个不兼容的系统需要在高层进行转换。

网关的使用非常复杂,因此如今使用的很少了。转发器网桥是在物理层和数据链路层拓展网络,但这只是把一个网络扩大了,并没有产生新的网络。

因此讨论网络互联一般就指用路由器进行网络互连和路由选择。

如果参加互连的计算机网络都是用同一种网际协议IPIP​,那么可以忽略这些网络本身客观存在的异构性,而把它们都看成是一个虚拟互连网络相连接的。

IPIP协议使得性能各异的网络看上去就像是一个统一的网络。看不到每个网络具体的细节。

1.2 IPIP地址#

1.2.1 分类的IPIP地址#

把网络分为A,B,C,D,EA,B,C,D,E这5个类。

类别开头网络号范围主机号范围
A0开头,8位网络号[1,126]2812[1,126],2^{8-1}-2个[0.0.1,255.255.254]2242[0.0.1,255.255.254],2^{24}-2个
B10开头,16位网络号[128.1,191.255],21621[128.1,191.255],,2^{16-2}-1个[0.1,255.254]2162[0.1,255.254],2^{16}-2个
C110开头,24位网络号[192.0.1,223.255.255]22431[192.0.1,223.255.255],2^{24-3}-1个[1,254]282[1,254],2^{8}-2个
D1110开头,多播地址--
E1111开头,未用--

注意A,B,CA,B,C类每类第一个网络号[最小的网络号非固定位全0非固定位全0]都是不可用的,并且AA类的127127网络号用作本地软件的环回测试

特别的AA类地址中的网络号为00的网络,名为thisthis,表示这个网络。

主机号全0表示该网络本身。主机号全1表示广播。

特殊的ipip:

网络号主机号是否可做源地址是否可做目的地址用处
全0全0本网络的本主机(this)
全0host-id本网络(this)的host-id主机
全1全1只在本网络上广播
net-id全1在net-id上广播
127非全1也非全0本地软件环回测试(端口转发)

1.2.2 子网的划分#

2级IPIP利用率非常低,原因就在于被分配了某一级地址以后,该级别的地址的主机号往往用不完。另外2级IPIP地址也不够灵活,没办法立刻在一个地区新开一个网络。

于是1985年在原来二级IPIP的基础上增加一个子网号字段。使二级IPIP地址变为33IPIP地址。主要的做法是把一个网络分割成几个小的子网,但是对外仍然表现出同一个大网络的特性。

IP:={<网络号>,<子网号>,<主机号>}IP :=\{<网络号>,<子网号>,<主机号>\}

子网划分是建立在分类IPIP的基础上。这些子网对外仍然表现为一个大网络,然而当数据报传到大网络后,又会被路由器分开送到不同的子网。实现的方式是使用子网掩码(subnet mask)

在子网划分中,子网号一般不全0全1

以划分一个BB类地址为例,假设子网位数是kk位,那么子网个数为2k22^k-2个,主机个数为216k22^{16-k}-2个。总共有(2k2)(216k2)=2162(2k+216k)+4(2^k-2)*(2^{16-k}-2)=2^{16}-2*(2^k+2^{16-k})+4个可分配地址。比不划分子网要少一些

子网划分提升了IPIP分配的灵活性,但是是以减少可以在网络上连接的主机数量为代价的。

1.2.3 无分类编制CIDRCIDR​[构成超网]#

1.2.3.1 CIDRCIDR划分#

无分类编制不基于地址分类,是一种2级IPIP

使用子网掩码把网络IPIP分为:

IP:={<网络前缀>,<主机号>}IP := \{<网络前缀>,<主机号>\}

另外也可以直接用斜线记法,记为IP/前缀位数IP/ 前缀位数这样的记法。

网络前缀都一样的IPIP地址构成一个**CIDRCIDR地址块**。

CIDRCIDR编址就没有子网号全为0这样的概念,因此kk位网络前缀就有2k2^k个网络号,232k2个主机号2^{32-k}-2个主机号

另外,CIDRCIDR编码方式还有其他简写方式:

网络前网络前缀^*

比如10.0.0.0/1010.0.0.0/10可以表示为00001010000000101000^*(把网络前缀用2进制表示后,^*​​表示主机号任意。)

使用了CIDRCIDR划分得到大网络以后,可以继续使用CIDRCIDR进行二级、多级划分

1.2.3.2 地址聚合#

CIDRCIDR也可以继续多级划分,就会造成网络号还是非常多,路由器查找、存储非常慢。地址聚合指的是在路由器表中,路由器往往会把一些处于同一个大的CIDRCIDR网络的并且下一跳都是同一个路由的表项聚合到一起,有效地减少表项

在路由时,如果有很多表项都能够匹配成功,则选择网络前缀最长的那一个表项

网络聚合时往往也是寻找IPIP​的最长公共网络前缀。而且要注意网络聚合的时候不能有父网络和其子网络的聚合[重叠]。不能引入其他的网络。

1.2.3.4 二叉线索查找路由表(trietrie​树)#

具体看书…似乎和trie树几乎一致。

有时会为这棵01trie0-1trie树做压缩,压缩掉公共路径部分,以提高查找速度。

另外,地址聚合实际上就是在这棵树上查询lcalca

1.2.4 IPIP地址和物理地址#

物理地址(MACMAC)是物理层和数据链路层使用的地址,而IPIP​地址是网络层及以上使用的逻辑地址

但从网络层上看,IPIP协议把下层复杂的细节全屏蔽了,只是用单一的、抽象的IPIP地址进行通信,这极大简化了互联网的传输过程。

但数据报在数据链路层进行传输时就变成帧(frame),只能使用物理地址(MACMAC),在跨局域网时会变

另外在数据报传输时有以下几个特点:

  1. 网络层上只能看到IPIP数据报,IPIP源地址和目的地址根本不变
  2. 尽管IPIP数据报中有IPIP源地址,但是路由选择时只看目的地址
  3. 数据链路层中只能看见MACMAC地址,每当从一个主机/路由器转发到另一个主机/路由器时,主机/路由器都要封装帧,把源MACMAC和目的MACMAC都告诉数据链路层。

要解决的问题有:

  1. 主机/路由器如何根据IPIP得到要发送的帧的目的MACMAC(ARPARP协议)
  2. 路由器/主机如何在只知道最终目的IPIP的情况下找到下一跳IPIP(路由表路由表)

1.2.4.1 ARPARP协议#

地址解析协议ARP(Address Resolution Procotol)ARP(Address \ Resolution \ Procotol)通过IPIP地址解析出局域网内的目的MACMAC地址,过去还有逆地址解析协议RARP(Reverse Address Resolution Procotol)RARP(Reverse \ Address \ Resolution \ Procotol),通过MACMAC地址解析出IPIP地址。#

ARPARP协议在每台主机/路由器中都设立一个ARPARP缓冲区,表中存放了IPIP地址向MACMAC​​地址的映射,以及**生存时间**。

1.2.4.1.1 同一局域网下#

当终端(可以是主机,也可以是路由器)AA要向同一局域网中的终端BB发送数据报时,ARPARP​协议的基本工作模式是:

  1. A查找自身的ARP缓冲区bufferbuffer,如果A中ARPARP缓冲区存在B的IPIP表项,则直接根据表映射出BBMACMAC地址,结束
  2. 如果缓冲区bufferbuffer中没有BBIPIP表项,则向局域网内所有终端广播ARPARP请求分组,内容是我的IP地址是xx.xx.xx.xx, MAC地址是XXXXXXXX我的IP地址是xx.xx.xx.xx,\ MAC地址是XX-XX-XX-XX,请问IP地址为B.IPIP地址为B.IP的终端的MACMAC地址是?
  3. BB终端都无视该帧,而BB主机发现此数据报文是发送给自己的,则收下这个数据报,并且回复给AA一个ARPARP单播的响应分组,内容是我的IPIP地址是xx.xx.xx.xx,MACMAC是XX-XX-XX-XX
  4. 主机AA收到BB的响应分组后,就在自己的缓冲区里更新BBIPIPMACMAC的映射,并且BB也知道了AA的相关信息,因此再发送数据报就很方便了!
1.2.4.1.2 不同局域网下#

实际上,不同局域网中的AABB通信时,AA是没办法通过ARPARP协议解析出BBMACMAC地址的,因为没有必要解析的出来AA只需要把数据报转发给可以转发数据报的路由器即可。AA要做的事情应该是根据下一跳的IPIP地址解析出该终端的MACMAC​地址,这个过程还是在同一个局域网下的。

所以每次跳转的时候重复同一局域网下的过程就能完成不同局域网下的ARPARP​协议工作过程。

通过ARPARP协议让网络通信时要完成的复杂物理地址的转换变得很透明,只需要主机AABB的有独立的IPIP,就好像AABB连在同一个网络下。

1.2.5 IPIP数据报的格式#

字段值位数/字节数说明
版本4/0.5IPv4/IPv6IPv4/IPv6通信双方的IP版本必须一致!
首部长度4/0.5指示首部长度为4k4k字节,由于首部至少20字节,所以值域在[5,15][5,15]之间(首部最长60字节!且首部长度一定为4字节的倍数!)
服务类型8/1只有在区分服务(Differentiated Services)下才使用
总长度16/2指示首部+数据部分一共有kk个字节,值域(20,2161](20,2^{16}-1]
标识16/2指示该数据报属于哪一个IPIP数据报,而不是该数据包属于源IPIP数据报的idid
标志3/-分别是MF(More Fragment),DF(Dont Fragment)MF(More \ Fragment),DF(Don't \ Fragment),以及一位空闲。
片偏移13/-指示该数据报的数据部分(只有数据部分)在源IPIP数据报中起始位置处于8k8k字节处,(每个分片大小都是8k8k个字节的整数倍)
生存时间8/1TTLTTL,指示仍能跳的次数,值域为[0,255][0,255]00则丢弃该数据报,1表示该局域网内的数据报
协议8/1用协议idid指示该数据报传输的是上层协议中的哪一种,具体见协议-id表。
首部校验和16/2使用反码算数加法+变为反码的方式算出校验和。使用同样的方式在接收端校验,全0则视为无差错。
源地址32/4IPIP地址
目的地址32/4目的IPIP地址
可选字段0-320/0-40补充字段,可自己选用,但是会影响传输效率一般不用。注意一定要全0填充为4字节的整数倍!!!

IPIP下层的数据链路层帧有最大传送单元MTU(Maximum Transfer Unit)MTU(Maximum \ Transfer \ Unit)的限制,IPIP数据报就不能无限制地长,要通过分片的方式切分数据报文,这也就是数据报首部标识、标志、片偏移标识、标志、片偏移存在的意义。

IPIP数据报尽可能长会让传输效率变大(所需要的首部信息变少所需要的首部信息变少),但是在路由器转发时会让速度下降。数据报长度比较短能在转发时速度变快。

IPIP协议规定,任何主机/路由器都至少能处理576=512+60+4576 = 512+60 + 4字节的数据报,576字节以下的数据报不用分片就一定可以处理,但是576字节以上的数据报就要先了解途径的路由器/主机的处理能力。

数据报中的标志字段有DF,MFDF,MF字段,只有当DF=0(Dont Fragment=0)DF=0(Don't \ Fragment=0)时该数据才允许分段,而MF=1MF=1表示该数据报后还有其他分片数据报。同一个源数据报的不同分组都具有同一标识,并且用片偏移确定当前分片的数据部分在源数据报中的位置。

通过标识和片偏移就能够在接收端恢复出源IPIP​数据报。

请特别注意每个字段的单位是什么:

首部长度: 4字节 总长度: 字节 片偏移: 8字节

另外,还有标识上层协议的协议-idid表:

协议名ICMPICMPIGMPIGMPIPIPTCPTCPUDPUDPIPv6IPv6
协议idid12461741

其中IPIPv6IP和IPv6指的是该IPIP数据报是由IP/IPv6的数据报再封装到IP数据报中IP/IPv6的数据报再封装到IP数据报中,(有2个首部?)

1.3 网络层的分组转发#

1.4 网际控制报文协议ICMP(Internet Control Message Protocol)ICMP(Internet \ Control \ Message \ Protocol)#

ICMPICMP的所有信息都被封装在IPIP数据报内,包括ICMPICMP​自身的首部

ICMPICMP的首部包括类型、代码、校验和,以及额外的4个字节。首部是所有ICMPICMP报文都不变的。

ICMP数据报被封装在IP数据报里

其中ICMPICMP报文的类型主要分**ICMPICMP差错报告报文ICMPICMP询问报文**。

ICMPICMP的校验和校验的是整一个ICMPICMP报文!不是只有首部!

1.4.1 差错报告报文#

主要有:

  1. 报文不可到达
  2. 超时(TLL=0)
  3. 报文参数有误
  4. 重定向

这几种差错。

对于差错报告报文的数据部分,取的是:出错的IPIP数据报的首部[定位该出错IPIP数据报]和该IPIP数据报数据字段的前8字节[TCPTCPUDPUDP协议中的端口号]

然鹅,并非所有出差错的IPIP数据报都需要发送差错报告报文,

比如:

  1. 对装有ICMPICMP差错报文的IPIP数据报不再发送ICMPICMP差错报文
  2. 除了分片的第一个IPIP数据报以外,其余所有后续的数据报都不再发送ICMPICMP数据报
  3. 多播IPIP数据报都不发送ICMPICMP数据报
  4. 具有(应该包括源地址和目标地址)的特殊IPIP地址的数据报都不再发送ICMPICMP数据报。

1.4.2 询问报文#

主要有:

  1. 回送请求和回答报文: 由主机或路由器询问另一台特定目的主机,需要由该目的主机回答自己的有关状态。用这种方式来获得目的主机是否可达和有关状态。
  2. 时间戳请求和回答报文: 请某台特定目的主机回答自己的时间戳,在ICMPICMP时间戳回答报文里有一个3232位的字段,表示从1900.01.011900.01.01到当前经过的秒数。用这种方式进行时钟同步和时钟测量。

1.4.3 ICMPICMP的应用#

1.4.3.1 ping命令#

ping命令是一个应用ICMPICMP回送请求和回答报文的例子。

发起ping的主机一下子发送kkICMPICMP回送请求报文,而接受方响应这个请求报文并且回答报文。

由于往返的ICMPICMP报文都带了时间戳,因此也很容易得出往返时间。

1.4.3.2 tracert命令(UnixUnix中为tracerroute)#

tracert命令主要应用的是差错报告报文中的超时这一种报文。

发送方依次发送TTL=1,TTL=2TTL=1, TTL=2\cdotsUDPUDP报文,并且该UDPUDP报文的端口号是非法的,也就是不能交付的。

TTL=1TTL=1的报文在发送给第一个路由器R1R_1后,TTLTTL变为0,因此由R1R_1发送ICMPICMP超时报文给发送主机。

TTL=2TTL=2的报文在发送给第一个路由器R2R_2后,TTLTTL变为0,因此由R2R_2发送ICMPICMP​超时报文给发送主机。

\cdots

TTL=kTTL=k的报文在发送给最后一个路由器RkR_k后,TTLTTL变为0,因此由RkR_k发送ICMPICMP超时报文给发送主机。

TTL=k+1TTL=k+1的报文在发送给最后路由器RkR_k后,TTLTTL变为1,该报文是可以转发到目的主机上的!但是因为源UDPUDP报文是不可交付的,目的主机收到报文后,会发送一个ICMPICMP目的不可达差错报告报文。

有这个过程,就得到了发送方到目的主机上的所有路由器和最后的目的主机的ipip

1.5 路由选择协议: 路由器中的路由表从何而来#

希望有一个理想的路由选择算法,它:

  1. 必须是正确且完整的
  2. 计算简单
  3. 能够适应网络状况和网络拓扑的变化
  4. 算法应该稳定
  5. 算法公平
  6. 算法在某一种角度下是”最佳”的

路由选择分为静态路由选择策略(人工设置)和动态路由选择策略(自适应路由选择)。

一般路由选择总会分层次,把一个大网络分为较小的自治系统ASAS(Autonomous System)。

自治系统ASAS(Autonomous System)指的是在单一技术管理下的一组路由器。

让一个自治系统ASAS对同层次的ASAS都表现为一个单一的一致的路由选择策略。原因在于:

  1. 网络规模比较大,如果每个路由表中存放了这个大网络的所有网路,那路由表会很大,浪费时间和效率
  2. 某些子网络部分并不希望其他部分知道内部网络的状况,但也希望能连接到互联网上。

在分层次的网络上进行路由选择就有2种形式:

  1. 内部网关协议IGPIGP(Interior Gateway Protocol): 在域内进行路由选择 RIPOSPFRIP、OSPF
  2. 外部网关协议EGPEGP(External Gateway Protocol): 在域间进行路由选择 BGPBGP[注意: 每一个ASAS中至少有一个或多个路由器要运行EGPEGP协议和其他ASAS交换路由]

分层次的路由选择

比如在AS24,AS777,AS46AS 24, AS 777 ,AS 46内部进行路由选择就是域内路由选择

而与其他ASAS相连接的路由器则需要进行域间路由选择

如果一级划分的ASAS仍旧很大,达不到需求,可以进行二级甚至是多级划分。

1.5.1 内部网关协议IGPIGP#

1.5.1.1 路由信息协议RIP(Routing Information Protocol)RIP(Routing \ Information \ Protocol)#

RIPRIP是一种分布式的基于距离向量的路由选择协议。但是很少被使用。它最大的特点是简单,开销很小。

RIPRIP协议定义距离:

  1. 从一路由器到直接连接的网络的距离定义为1。
  2. 从一路由器到非直接相连接的网络的距离定义为经过的路由器数+1。
  3. 定义距离为16及以上就为不可达

RIPRIP​要求路由器不仅记录网络号下一跳地址,还要为每一表项记录到该网络的距离

那么RIPRIP的路由表大致长这样:

网络号[注意:网络号往往携带子网掩码信息]到该网络的距离下一跳地址
netidnet-iddistancedistancexx.xx.xx.xxxx.xx.xx.xx

如此一来,RIPRIP协议就能够选择一条经过最少路由器的一条路径。

1.5.1.1.1 RIPRIP如何交换信息#

交换信息的要点是:

  1. 和谁交换=>=> RIPRIP协议要求每个路由器仅和直接相邻的路由器交换信息。
  2. 交换什么样的信息=>=> 整一个路由表中所有的信息,就是”我到本自治系统中所有网络的(最短)距离,下一跳的地址”。
  3. 什么时候交换 =>=> 按照固定的时间间隔交换信息,比如间隔3030秒,保证路由中的信息是最新的。
1.5.1.1.2 RIPRIP交换信息算法#

得到相邻路由器RR'发送的路由信息

  1. \star先进行”初始化”:把距离都+1,把下一跳地址都改为RR'

  2. 接着对**每一个表项rowrow'**都执行以下过程:

    • 查看该表项对应的网络号是否存在于当前路由表,如果不存在,就把rowrow'直接加入到路由表中。否则执行下一步

    • 该网络号已在路由表中,则查看该表项对应的下一跳地址XX',如果XX'就是路由表中的下一跳地址,则直接更新路由表中的表项为rowrow'[确保路由表中的信息总是最新的]。否则执行下一步

    • 该网络号在路由表中且下一跳地址并不相同,则查看该表项的距离distancedistance',如果distance<distancedistance' < distance才更新[确保路由表中的距离总是最近的],否则就什么也不做,扫描下一个表项。

  3. \star如果某个时间间隔里(3分钟)总接受不到某个相邻路由表的更新报文,就在路由表中把该路由器的表项都设置为不可达(距离为16)。

但是这样的算法会带来一定的问题,比如RIPRIP中最大的问题**“好消息传得快,坏消息传得慢”**。

当一个网络出现故障时,RIPRIP​协议往往要经过比较长的时间才能把这个信息传递给所有的路由器。

但是如果有一个路由器发现了一个更加短的路由,这种信息就传播的很快。

可以考虑以下事件:

坏消息传的慢事件:10.4.0.010.4.0.0到路由器CC的网络不可达从可达变成不可达,CC更新自己的路由表,把到10.4.0.010.4.0.0的表项的距离改为不可达。且在路由器CC把更新的路由表传给BB前,路由器BB先把路由表传递给了CC

1.5.1.1.3 RIPRIP协议报文格式#

RIP2RIP2协议支持子网划分和CIDRCIDR无分类编址网络。

RIP2RIP2协议数据报使用UDPUDP协议进行传输!因此应该是RIP2RIP2数据报文封装在UDPUDP数据报中再封装IPIP数据报里传输。

RIPRIP自身的数据报文由首部路由部分组成。

特别地,由于一个路由部分最多可以放入2525个路由信息,因此一个RIPRIP数据报的最大长度是2520+4=50425*20+4=504字节。

RIPRIP协议还可以进行简单地鉴别功能,使用鉴别功能时将第一个路由信息作为鉴别信息。把地址族标识改为00xFFFFFFFF(全1),而路由标记写入鉴别类型,剩余的16个字节全都可以作为鉴别数据。

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

OSPFOSPF最大的特征是使用了分布式的链路状态协议。它就是为了克服RIPRIP​​协议的缺点而开发的。

OSPFOSPF协议的目的是让每一台路由器都能够维护一个链路状态数据库,也就是全网的带权拓扑图。在这张带权图上跑dijkstradijkstra​​就能找到该路由器到其他路由器的最短路径。

链路状态数据库的同步是指使得不同路由器的链路状态数据库变得一样。

完全邻接指的是相邻的 同步路由器。

OSPFOSPF的另一特征是更新收敛的速度非常快。(RIPRIP比较慢)。

1.5.1.2.1 OSPFOSPF如何交换信息#

交换信息的要点有3条:

  1. 和谁交换信息 =>=> OSPFOSPF协议要求每台路由器和自治系统内的所有路由器都发送信息。使用的方法是泛洪法
  2. 交换哪些信息 =>=> OSPFOSPF协议要求路由器分享和本路由器相邻的所有路由器的链路状态(路由器知道的部分信息)。其中链路状态包括相邻路由器的地址和连接到该路由器的度量(可以被称为是代价)。
  3. 何时交换信息 =>=> OSPFOSPF中无需路由器定时发送自己的链路状态信息。只需要链路状态发生改变时发送链路状态信息即可

由于每台路由器都要和自治系统内部所有路由器都发送信息,想必网络拥塞程度会非常大,为了能让OSPFOSPF可以在大网络上运行,往往会把一个自治系统划分为几个区域(用32位bitbit标识)。并且把泛洪法交换信息的范围从整个AS变为整个区域

把区域分为2大类:

  1. 主干区域(backbone Area): 标识符为0.0.0.00.0.0.0,联通其他区域
  2. 其他区域

并且划分出3类特殊的路由器:

  1. 区域边界路由器(area border router): 处于每个区域和主干区域交接处的路由器。其他区域来的信息都由区域边界路由器进行概括。
  2. 主干路由器(backbone router): 处于主干区域的路由器。
  3. 自治系统边界路由器:处于主干区域中,专门处理本自治系统和其他自治系统之间的路由交换。

层次划分又一次使得网路变得容易在大规模的情况下变得适用。

1.5.1.2.2 OSPFOSPF协议报文格式#

OSPFOSPF协议不再使用UDPUDP协议传输报文,而是直接使用IPIP协议传输报文。

字段位数/字节数描述
版本8/1OSPFOSPF版本,现在为2
类型8/1描述该OSPFOSPF数据报传输哪一种OSPF分组,一共有5种OSPFOSPF分组
分组长度16/2标识该OSPFOSPF分组的长度,若为kk,则长度为kk字节
路由器标识符32/4发送方路由器端口的IPIP地址
区域标识符32/4分组属于哪一个区域
校验和16/2检测分组中的差错,猜测是检验整一个OSPFOSPF数据报
鉴别类型16/2目前只有0(不鉴别),1(鉴别)
鉴别口令64/8如果不鉴别则全0填充,鉴别则可填入88字节(8字符)的口令

OSPFOSPF5种分组是:

类型描述
问候(Hello)分组用以发现和维持相邻站点的可达性
数据库描述(Database Description)分组向邻站给出自己的链路状态数据库的摘要信息
链路状态请求分组请求对方发送某个链路的状态
链路状态更新分组用泛洪法更新链路状态
链路状态确认分组用来确认链路状态更新分组

OSPFOSPF规定每1010秒钟都要交换一次问候分组,以此知晓哪些邻站可达。如果间隔4040秒钟没有收到某个相邻路由器的问候分组,则认为该路由器不可达。

OSPFOSPF协议一般并不采用泛洪法来从空白链路状态数据库建立完整的链路状态数据库,只有在链路状态发生改变的时候才进行泛洪法。

而建立的方法一般是:

  1. 路由器和邻站交换状态数据库的摘要[哪些链路已经被写入数据库]
  2. 向邻站请求缺少的链路状态

以此大大减少了网络的负担。

而当有路由器的邻接链路状态发生改变时,采用可靠的泛洪法(泛洪法+确认信息)来向整个区域内的路由器都通知这个消息。

OSPFOSPF​协议还有以下几个特点:

  1. OSPFOSPF协议允许管理员给一条链路设置不同的度量以适应不同的业务。(比RIPRIP灵活)
  2. OSPFOSPF允许负载均衡的情况,即当多条路径的总度量都一样时,可以允许把起点到终点的数据报分散到这几条路径中去。(RIPRIP只会选其中一条,比RIPRIP高效)
  3. 所有在OSPFOSPF中的链路之间都可以进行鉴别,可以仅在信任的路由器之间同步链路状态
  4. 也可以支持子网划分和CIDRCIDR无分类编址方式。
  5. OSPFOSPF让每一段链路都带上一个**32bit32bit​的序号**,序号越大,链路状态越新
  6. 每隔3030秒,刷新一次链路状态数据库。
  7. 为了更多地减少路由器之间的信息交换,OSPFOSPF又选定某些特殊路由器作为指定路由器(其他所有的路由器的信息都传递给他,由它转交给其他路由器),从两两之间的N(N1)N(N-1)减小到2N2*N
网络原理: 网络层
http://blog.fragments.work/posts/computernetwork/ch4/
作者
Lixin WANG
发布于
2024-04-29
许可协议
CC BY-NC-SA 4.0