技术标签: 学习 经验分享 笔记 网络 网络协议 TCP/IP网络协议原理与分析
开放最短路径优先OSPF(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的。
OSPF是一种基于链路状态选路算法的路由协议。
思科路由器中OSPF协议计算代价的方法是:100Mb/s除以链路带宽
计算结果小于1的值仍记为1,大于1且有小数的,舍去小数。
使用OSPF的每个路由器都会产生链路状态通告LSA(Link Siate Adverisement),包含以下内容:
优点:
标准:
为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若千个更小的范围,叫做区域(Area)。
区域:一组网络和连接到任一网络的路由器接口。
如果一个路由器的多个接口属于不同区域,它要为每个区域都运行一个链路状态选路算法,即OSPF协议实例。
例如图示网络中的R3、R4、R5和R8,都分属于两个区域,因而都要运行两个OSPF协议实例。
32
位的编号,可用类似于 IP 地址的点分十进制法表示,也可用一个十进制数表示。
0.0.0.0
是一个特殊的区域:主干区域(backbone area)。所有的非主干区域都要连接到主干区域上。主干区域和非主干区域通常采用星型结构连接:主干区域作为中心节点,非主干区域是边缘节点。
根据作用不同,路由器被划分为 4 种类型:
一台路由器可以同时属于多种类型。
虚拟链路:
自治系统内的路由分为两个层次:区域内路由和区域间路由
使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。
OSPF 支持 5 种网络类型:
图示网络中,路由器RT1和RT2通过点到点网络连接。在链路状态数据库中,可以表示为RT1连接到RT2、RT2连接到RT1两条链路。图中的‘X’表示连接关系及其传输代价。
点到点网络的两个接口可以不用分配IP地址,如果分配了IP地址,OSPF就在链路状态数据库中增加相应的“末端链路”(stub link)。这里末端链路实际上表示的就是点到点网络上的对方。
OSPF可以把非广播网络当作点到多点网络或非广播多址接入网络。区别是点到多点网络中,并非每对节点间都能直接通信(即有连接关系);而非广播多址接入网络中,每对节点都可以直接通信,但不支持在所有节点之间的广播通信。
图示网络中,四台路由器连接到点到多点网络N2上。链路状态数据库表示了它们之间的连接关系:RT3、RT6与所有路由器都有连接;RT4和RT5不与对方连接,但与其余路由器有连接。路由器与点到多点网络的连接接口也被OSPF表示成末端链路。
图示网络被抽象成伪节点N2。在链路状态数据库中,路由器都连接到伪节点N2,N2也连接到各路由器。这里有一点需要注意,从路由器到伪节点的传输代价是网络的传输代价,但从伪节点到路由器的传输代价则是 0。原因是在广播网络上,所有节点都是可以直接通信的,并不需要伪节点的转发。
概念:可看作连接到区域边界路由器的一个末端网络。
对于区域外部的网络,区域边界路由器将到这些网络的路由汇总后注入到所属区域的OSPF协议实例中。对OSPF来说,这些外部网络可以看作是连接到区域边界路由器上的一个末端网络(stub-network),在链路状态数据库中也可用一个伪节点表示。
这里是从RFC 2328中摘录的一个例子。左侧是某个OSPF区域抽象所得的有向加权图,右侧是相应的链路状态数据库。其中‘RT’表示路由器,‘N’表示网络,‘H’表示主机。列上的数字表示链路的传输代价。
OSPF 路由器在有向加权图上计算一个以自己为根(root)的最短路径树,并据此建立自己的路由表。
OSPF 路由器定期向所有邻居路由器发送 HELLO 报文。
报文中包含了最近一段时间内发送过 HELLO 报文的邻居路由器。
10
秒40
秒未收到来自邻居路由器的 HELLO 报文,则认为该邻居路由器不可达如果路由器在邻居发送的 HELLO 报文中发现了自己的标识符,就表明这两个邻居路由器之间建立了双向通信链路。
OSPF 路由器的两种关系:
邻居关系的建立:
HELLO 协议在不同类型网络上的工作过程不同:
广播网络或 NBMA 网络上每台路由器都清楚网络的链路状态。
若每台路由器都发送网络的链路状态,会有很多重复发送。OSPF 协议规定:
当路由器连接到广播网络或 NBMA 网络上的接口启动时:
0-255
,默认值是1
OSPF 邻接路由器之间的链路状态数据库同步大体上可分为三步:
OSPF 路由器定期与邻接路由器交换链路状态数据库摘要:
发送和接收数据库描述报文的过程称为“数据库交换过程” ,其中:
两个邻接路由器的链路状态数据库达同步后,称它们之间建立了完全邻接关系(fully adjacent)。
路由器监测其所有链路,若有链路的状态发生改变:
OSPF 协议定义了一种可靠的洪泛(reliable flooding)机制,用于在 OSPF 路由域中快速扩散链路状态的变化。
可靠是指收到链路状态更新报文后要发送确认,收到重复的更新报文无需再次转发,但要发送一次确认。
路由器接收到链路状态更新报文后,逐个检查其中的 LSA:
通过各路由器洪泛法发送封装有自己LSA的LSU报文,各路由器的LSDB最终达到一致
使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各种到达其他各路由器的最短路径,即构建各自的路由表。
例子:
我们通过一个例子来理解OSPF如何实现网络中所有路由器的链路状态数据库同步。
Down
:此状态还没有与其他路由器交换信息。首先从其ospf接口向外发送hello报文。Init
:表明收到了Hello包,但是2-Way通信仍然没有建立起来。two-way
:双向会话建立,而RID彼此出现在对方的邻居列表中。ExStart
:信息交换初始状态,在这个状态下,本地路由器和邻居将建立Master/Slave关系,一般情况下, 路由器ID大的成为Master。Exchange
:信息交换状态,本地路由器和邻居交换一个或多个DBD报文。Loading
:信息加载状态,收到DBD后,将收到的信息同LSDB中的信息进行比较。如果DBD中有更新的链路状态条目,则向对方发送一个LSR,用于请求新的LSA 。Full
:完全邻接状态,邻接间的链路状态数据库同步完成。89
,发往组播地址224.0.0.5
。OSPF 报文24
字节的固定首部:
2
。1
个字节,指明了报文的类型。OSPF 协议定义了 5
种类型报文。2
字节,指明整个OSPF报文(包括首部)的长度,单位是字节。4
字节,是报文发送方路由器的标识符。每个运行OSPF协议的路由器都有一个32
位的标识符,在自治系统中唯一地标识了该路由器。4
字节,是OSPF报文所属区域的标识符。OSPF报文只在某个特定的区域中发送。如主干区域就是0.0.0.0
2
字节,是整个OSPF报文(除8字节认证数据外)的校验值。计算方法与IP首部校验和相同。2
字节,指定了要使用的认证机制,包括:不进行认证(0
),简单的密码认证(1
),加密认证(2
)。8
字节。
OSPF 协议定义了 5 种类型报文:
报文类型 | 名称 | 英文 | 用途 |
---|---|---|---|
1 | HELLO 报文 | Hello | 发现邻居并监测与邻居链路的状态; 选举网络的指定路由器和备份指定路由器 |
2 | 数据库描述报文 | Database Description(DBD) | 与邻接路由器交换链路状态数据库摘要 |
3 | 链路状态请求报文 | Link State Request (LSR) | 向邻接路由器请求具体的链路状态 |
4 | 链路状态更新报文 | Link State Update (LSU) | 向邻接路由器发送具体的链路状态 |
5 | 链路状态确认报文 | Link State Acknowledgement (LSACK) | 对接收到的链路状态通告进行确认,以实现可靠的链路状态传输 |
OSPF 路由器周期性在所有接口(包括虚拟链路)上发送 HELLO 报文。
2
字节,用于指定路由器发送 HELLO 报文的间隔时间,单位是秒。1
字节,用于OSPF路由器交换各自的能力等级。1
个字节,用于在广播网络或非广播多址接入网络上选举指定路由器和备份指定路由器。如果为 0
,表明发送方路由器不参加选举。4
字节,指明在确认对方路由器发生故障前应等待的时间,单位是秒。0
地址表示网络上还没有指定路由器和备份指定路由器。数据库描述报文描述了链路状态数据库的摘要信息。
1
,表明本报文是描述链路状态数据库摘要的第一个数据库描述报文。1
,表明后续还有其他数据库描述报文。1
,表明本路由器在数据库交换过程中是主方,否则是从方。4
字节,用于对描述链路状态数据库摘要的一组数据库描述报文进行编号。第一个报文中该字段是一个随机数,后续报文的序号在随机数的基础上顺序递增。链路状态请求报文用于向邻接路由器请求特定链路的状态。
链路状态更新报文用于向邻接路由器发送特定链路的状态。
链路状态确认报文用于对接收到的链路状态通告(LSA)进行确认。
设备名 | 端口 | ip地址 | 掩码 | 区域ID |
---|---|---|---|---|
R1 | f0/0 | 192.168.2.1 | 255.255.255.0 | 10 |
f0/1 | 192.168.1.1 | 255.255.255.0 | 0 | |
R2 | f0/1 | 192.168.1.2 | 255.255.255.0 | 0 |
f0/0 | 192.168.3.2 | 255.255.255.0 | 20 | |
R3 | f0/0 | 192.168.2.3 | 255.255.255.0 | 10 |
R4 | f0/0 | 192.168.2.4 | 255.255.255.0 | 10 |
R5 | f0/0 | 192.168.2.5 | 255.255.255.0 | 10 |
R6 | f0/0 | 192.168.3.6 | 255.255.255.0 | 20 |
f0/1 | 192.168.4.6 | 255.255.255.0 | 20 | |
R7 | f0/1 | 192.168.4.7 | 255.255.255.0 | 20 |
实验步骤:
一、在R1上配置OSPF
(1)启动OSPF路由协议
R1(config)#router ospf 1
其中1
是路由器上的OSPF进程号,进程ID只在路由器内部有效,不同路由器的OSPF进程ID可以相同。通常网络管理员会在整个AS中保持相同的进程ID。
(2)指定直连网段
R1(config-router)#network 192.168.1.0 0.0.0.255 area 0
R1(config-router)#network 192.168.2.0 0.0.0.255 area 10
其中0.0.0.255
是通配符掩码,使用网络地址掩码的反码,即为0的位需要匹配,为1的位不需要匹配。
二、在R2上配置OSPF
(1)启动ospf
R2(config)#router ospf 1
(2)指定直连网段
R2(config-router)#network 192.168.1.0 0.0.0.255 area 0
R2(config-router)#network 192.168.3.0 0.0.0.255 area 20
三、在R3上配置OSPF
(1)启动ospf
R3(config)#router ospf 1
(2)指定直连网段
R3(config-router)#network 192.168.2.0 0.0.0.255 area 10
四、在R4,R5,R6(除f0/1口)外进行OSPF配置
注:在本次实验中配置OSPF顺序为R1,R3,R4,R5,R2
五、抓包分析邻居发现及维护过程
(1)在区域10的以太网的任一网络接口启动分组捕获。在wireshark显示过滤器输入“ospf.msg.hello && ip.src==192.168.2.1”
(2)观察产生的数据包
从分组列表窗口可以看到,R1周期性(约10s)发送HELLO报文,报文的目的地址是所有OSPF路由器组播地址224.0.0.5
。
选择一个HELLO报文,在分组首部详细信息窗口查看其首部字段值。注意OSPF报文封装在IP分组中。
查看OSPF报文详细信息,可以看到OSPF报文由三部分组成:OSPF首部(OSPF Header)、HELLO报文(OSPF HELLO Packet)以及本地链路信令数据块(LLS (Local-Link Signaling) Data Block)。
注:由于优先级相同,则标识符(IP地址)更大者胜出,但由于在实验中,按R1,R3,R4,R5的顺序启动路由器ОSPF进程,因此R1成为指定路由器,而R3成为备份指定路由器。已经选举出来的指定路由器不会再重新选举,除非故障。
六、抓包分析备份指定路由器选举过程
(1)在区域10的以太网的任一网络接口启动分组捕获。在R3中输入以下指令:
R3#clear ip ospf process # 重启OSPF进程,用来模拟选举过程
(2)在wireshark显示过滤器输入“ospf.msg.hello && ip.addr ==192.168.2.3”
R3的OSPF进程重启后,将首先查询网络上的指定路由器和备份指定路由器。这通过发送(组播)一个指定路由器和备份指定路由器均为0.0.0.0
的 HELLO报文实现
网络中当前的指定路由器收到查询报文后,向查询路由器发送(单播)一个响应HELLO报文,其包含当前的指定路由器和备份指定路由。
由于原来的备份指定路由器(R3)重启,其余路由器进行了新备份指定路由器选举。路由器从其当前邻居中选择优先级最高或路由器标识符最大(优先级相同时)的路由器作为新备份指定路由器。实验中,在这些路由器中R5的路由器标识符最大(所有路由器的优先级相同,均为1),成为新备份指定路由器。R3向指定路由器发送(单播)一个确认HELLO报文,其中包含R3的当前邻居(R1)。此后,R3将周期性组播发送HELLO报文。
七、抓包分析指定路由器选举过程
(1)在区域10的以太网的任一网络接口启动分组捕获。在R1中输入以下指令:
R1#clear ip ospf process
(2)在wireshark显示过滤器输入“ospf.msg.hello && ip.addr ==192.168.2.1”
R1的OSPF重启后﹐首先查询网络中的指定路由器和备份指定路由器。R1发送(组播)一个HELLO报文,其指定路由器和备份指定路由器均为0.0.0.0
。网络的所有路由器都向R1发送(单播)一个HELLO报文。由于原指定路由器R1失效,R3和R4认为原备份指定路由器(R5)变为指定路由器,而备份指定路由器仍是R5。
R5发送的HELLO报文如图所示。R5是原备份指定路由器,当原指定路由器(R1)失效后,R5将成为新的指定路由器,并从其当前的邻居中选择优先级最高或路由器标识符最大(优先级相同时)的路由器(R4)作为新的备份指定路由器。
R1收到R5、R4、R3 发送的响应HELLO报文后,分别向各自发送(单播)确认HELLO报文。
八、抓包分析链路状态数据库同步过程
(1)先后在R6的f0/1口和R7的f0/1口启动ospf路由协议。在R6和R7中输入以下指令:
R6(config)#router ospf 1
R6(config)#network 192.168.4.0 0.0.0.255 area 20
R7(config)#router ospf 1
R7(config)#network 192.168.4.0 0.0.0.255 area 20
(2)在R6和R7、R2和R6、R1和R2、R1和SW1间抓包,在wireshark显示过滤器输入“ospf && not ospf.msg.hello”
数据库描述报文有两种:空数据库描述报文和包含LSA首部信息的数据库描述报文。当两个路由器相互收到HELLO Seen报文(即路由器包含在HELLO报文中的邻居字段列表中)之后,它们开始互相发送空数据库描述报文。
空数据库描述报文用来确定通信过程中的主从关系。通常以路由器标识符较大的路由器作为主方。
主从关系确立后,从方使用主方的序号(6047)向主方发送第一个包含若干LSA首部信息的数据库描述报文;
主方在收到从方的数据库描述报文后发送自己的序号加1的数据库描述报文(包含LSA首部信息),作为对收到从方报文的确认。如果还有更多的链路状态,从方、主方将继续发送数据库描述报文。
在这个交换过程中,只有主方可以更改序号,从机使用主方确定的序号。
交换完数据库描述报文后,R7与R6相互请求其缺失的链路状态信息。这通过发送链路状态请求和链路状态更新报文实现。
R7和 R6之间链路的更新会在区域20中进行洪泛。可以看到R6与R7都在组播。
区域20中R6和R7间链路状态的更新将被在区域0和区域10中通知。在区域0中,路由器R2以网络摘要LSA方式通知该链路状态的更新,即网络192.168.4.0。在区域10中,区域边界路由器R1组播发送网络摘要。
转载请注明出处
作者:HinsCoder
博客链接: 作者博客主页
文章浏览阅读3.2w次,点赞16次,收藏90次。对于这个问题我也是从网上找了很久,终于解决了这个问题。首先遇到这个问题,应该确认虚拟机能不能正常的上网,就需要ping 网关,如果能ping通说明能正常上网,不过首先要用命令route -n来查看自己的网关,如下图:第一行就是默认网关。现在用命令ping 192.168.1.1来看一下结果:然后可以看一下电脑上面百度的ip是多少可以在linux里面ping 这个IP,结果如下:..._linux桥接ping不通baidu
文章浏览阅读512次。小妹在这里已经卡了2-3天了,研究了很多人的文章,除了低版本api 17有成功外,其他的不是channel null 就是没反应 (channel null已解决)拜托各位大大,帮小妹一下,以下是我的程式跟 gradle, 我在这里卡好久又没有人可问(哭)![image](/img/bVcL0Qo)public class MainActivity extends AppCompatActivit..._android 权限申请弹窗 横屏
文章浏览阅读1.4k次,点赞4次,收藏6次。valid padding(有效填充):完全不使用填充。half/same padding(半填充/相同填充):保证输入和输出的feature map尺寸相同。full padding(全填充):在卷积操作过程中,每个像素在每个方向上被访问的次数相同。arbitrary padding(任意填充):人为设定填充。..._cnn “相同填充”(same padding)
文章浏览阅读790次,点赞29次,收藏28次。手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长![外链图片转存中…(img-Qpoc4gOu-1712656009273)][外链图片转存中…(img-bSWbNeGN-1712656009274)]
文章浏览阅读469次。Date对象取得年份有getYear和getFullYear两种方法经 测试var d=new Date;alert(d.getYear())在IE中返回 2009,在Firefox中会返回109。经查询手册,getYear在Firefox下返回的是距1900年1月1日的年份,这是一个过时而不被推荐的方法。而alert(d.getFullYear())在IE和FF中都会返回2009。因此,无论何时都应使用getFullYear来替代getYear方法。例如:2016年用 getFullYea_getyear和getfullyear
文章浏览阅读182次。Unix传奇(上篇) 陈皓 了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技术,而应该是去 —— 认认真真地了解和回顾历史。 Unix是目前还在存活的操作系_unix传奇pdf
文章浏览阅读308次。哈希算法:将字符串映射为数字形式,十分巧妙,一般运用为进制数,进制据前人经验,一般为131,1331时重复率很低,由于字符串的数字和会很大,所以一般为了方便,一般定义为unsigned long long,爆掉时,即为对 2^64 取模,可以对于任意子序列的值进行映射为数字进而进行判断入门题目链接:AC代码:#include<bits/stdc++.h>using na..._ac算法 哈希
文章浏览阅读952次,点赞13次,收藏27次。由于觉得Qt的编辑界面比较丑,所以想用vs2022的编辑器写Qt加MySQL的项目。_在vs中 如何装qt5sqlmysql模块
文章浏览阅读1k次。选择题题目:下面的哪个调研内容属于经济环境调研?()题目:()的目的就是加强与客户的沟通,它是是网络媒体也是网络营销的最重要特性。题目:4Ps策略中4P是指产品、价格、顾客和促销。题目:网络市场调研是目前最为先进的市场调研手段,没有任何的缺点或不足之处。题目:市场定位的基本参数有题目:市场需求调研可以掌握()等信息。题目:在开展企业网站建设时应做好以下哪几个工作。()题目:对企业网站首页的优化中,一定要注意下面哪几个方面的优化。()题目:()的主要作用是增进顾客关系,提供顾客服务,提升企业_画中画广告之所以能有较高的点击率,主要由于它具有以下特点
文章浏览阅读1k次,点赞2次,收藏5次。以爬取CSDN为例子:第一步:导入请求库第二步:打开请求网址第三步:打印源码import urllib.requestresponse=urllib.request.urlopen("https://www.csdn.net/?spm=1011.2124.3001.5359")print(response.read().decode('utf-8'))结果大概就是这个样子:好的,继续,看看打印的是什么类型的:import urllib.requestresponse=urllib.r_urlopen the read operation timed out
文章浏览阅读304次。修正sina.com/sina.cn邮箱获取不到联系人,并精简修改了其他邮箱代码,以下就是升级版版本的介绍:完整版本,整合了包括读取邮箱通讯录、MSN好友列表的的功能,目前读取邮箱通讯录支持如下邮箱:gmail(Y)、hotmail(Y)、 live(Y)、tom(Y)、yahoo(Y)(有点慢)、 sina(Y)、163(Y)、126(Y)、yeah(Y)、sohu(Y) 读取后可以发送邮件(完..._通讯录 应用读取 邮件 的相关
文章浏览阅读213次。云计算及虚拟化教程学习云计算、虚拟化和计算机网络的基本概念。此视频教程共2.0小时,中英双语字幕,画质清晰无水印,源码附件全课程英文名:Cloud Computing and Virtualization An Introduction百度网盘地址:https://pan.baidu.com/s/1lrak60XOGEqMOI6lXYf6TQ?pwd=ns0j课程介绍:https://www.aihorizon.cn/72云计算:概念、定义、云类型和服务部署模型。虚拟化的概念使用 Type-2 Hyperv_云计算与虚拟化技术 教改