基于Wireshark的OSPF路由协议分析与仿真
2019-05-21吴征远张小进阮志强
王 炅,张 华,吴征远,张小进,阮志强
(1.闽江学院计算机与控制工程学院,福建 福州 350108;2.福建省信息处理与智能控制重点实验室,福建 福州 350108)
路由选择协议作为互联网中路由器之间进行交互的语言,用于实现网络可达信息的共享,不仅需要执行路径的判断还需要进行路由表的更新,而且还要在最优路径不可达时进行备用路径的选择,其地位在网络学习中显得尤为重要。对于初学者,路由协议本身就非常抽象而难以理解,因此在学习过程中,通过GNS3网络仿真软件搭建实验环境,利用Wireshark网络协议分析工具,直接与真实网卡进行桥接,从网络中实时捕获路由协议数据包并进行分析,显示详细的网络数据包信息,这样对理解抽象的网络概念有很大的帮助,显著提高了学习效果。
1 Wireshark协议分析工具和GNS3网络仿真软件简介
1.1 Wireshark协议分析工具
Wireshark是目前使用人群最多的一款开源网络协议分析工具,它能够在多个平台上(Windows、Mac和Linux等)抓取和分析网络数据包,它的图形化界面非常友好,可以显示出非常详细的网络数据包字段数据,可以用来学习网络协议相关知识、为新的通信协议排错、检查信息安全相关问题等。Wireshark不仅支持鼠标操作,也可以通过TShark命令行形式进行操作,使用起来可以满足不同用户人群的需求。Wireshark网络协议分析工具见图1,界面主要分为3部分:
1)菜单栏和工具栏:主要有文件、捕获、分析等菜单、可以选择侦听网卡、根据条件筛选捕获数据包的类型、保存数据包、调整显示字体大小等功能;
2)捕获的数据包:根据不同的筛选条件捕获的数据包,结果可以根据源IP地址、目标IP地址、协议类型进行排序;
3)TCP/IP 4层模型:主要是不同数据包的网络协议,数据链路层的Ethernet v2协议,网络层的IP协议、ARP协议、ICMP协议等,传输层的TCP协议、UDP协议、OSPF协议、EIGRP协议等,应用层的HTTP协议、FTP协议、DNS协议、DHCP协议等。
图1 Wireshark网络协议分析工具Fig.1 Wireshark network protocol analysis tool
1.2 GNS3网络仿真软件
GNS3(图形化网络模拟器)是一款可以仿真复杂网络的图形化网络模拟器,它是一款开源软件,无需付费就可以允许在运行Windows、Linux的系统上模拟仿真Cisco的IOS(互联网操作系统),对于想要通过Cisco的CCNA、CCNP和CCIE认证考试的学生来说是一款非常好的实验工具,它支持的路由器平台、防火墙平台(PIX)的类型非常丰富。
2 OSPF路由协议的基本概念
2.1 OSPF的基本特点
OSPF是一个典型的内部网关协议(IGP),主要用在自治系统(AS)内部进行路由选择[1]。它是链路状态型路由协议,比距离矢量型路由协议的机制更好,可控性会更强;而且它和其他无类高级路由协议一样,也支持VLSM(可变长子网掩码)和CIDR(无类别域间路由)[2]。
2.2 OSPF的封装方式
OSPF是一个典型的3层协议,封装在IP报文中,没有4层端口号,因为封装在IP报文中,因此OSPF在IPv4中有一个协议号89。它与RIP(routing information protocol,路由信息协议)协议的封装不一样,RIP是一个标准的7层协议[3],RIP封装在传输层的UDP协议中,端口号是520。OSPF的封装格式见图2。
图2 OSPF数据包的头部格式Fig.2 Header format of OSPF data packet
2.2.1 Type
指OSPF的数据包类型,一共有5种类型,分别是:1)Hello;2)DBD;3)LSR;4)LSU;5)LSAck,这5种类型的数据包接下来会通过GNS3搭建实验环境,通过Wireshark协议分析软件详细介绍。
2.2.2 Router ID
用来唯一标识OSPF域内的路由器,Router-ID的格式为IPv4地址(X.X.X.X),它的选举方式有3种:1)手工指定:优先级最高,可以任意指定IP地址,保证在OSPF域内唯一即可;2)自动选取逻辑IP地址:优先级其次,开启OSPF进程后,会自动选择Loopback口最大的IP地址;3)自动选取物理地址:优先级最低,开启OSPF进程后,会自动选择物理接口中最大的IP地址。
2.2.3 Area ID
指发送OSPF报文的路由器所在的区域,Area ID表示形式有2种:1)点分十进制表示,X.X.X.X;2)十进制表示,0-232。
2.2.4 Authentication Type
指OSPF的认证类型,一共有3种:1)无认证;2)明文认证;3)密文认证(MD5)。
2.3 DR与BDR的概念及其选举规则
在MA(多路访问)环境下,OSPF域内每台路由器需要通过发送Hello报文来建立邻居关系。为了减少不必要的OSPF报文发送,提高链路带宽利用率,路由器会自动选举DR(指定路由器)和BDR(备份指定路由器 ),剩余的路由器就是DROTHER,它们相互之间不会发送Hello报文,只会将OSPF传递给DR和BDR。
DR,BDR选举规则是通过判断路由器接口的优先级和Router-ID,哪台路由器的优先级最大,它就成为DR,优先级相同的情况下,则选择Router-ID大的路由器成为DR。DR和BDR一旦选举完成则不会再次选举,除非重启OSPF进程。
2.4 SPF算法
图3 SPF算法示例图Fig.3 Example diagram of SPF algorithm
SPF(shortest path first,最短路径优先)算法也被称为Dijkstra算法,是由荷兰计算机科学家狄克斯特拉于1959年提出的。首先,运行OSPF路由协议的路由器相互发送Hello报文,构建邻接关系;其次,这些路由器通过泛洪LSA构造一个全网一致的拓扑图;最后,每台路由器以自己为根运行SPF算法来计算到网络拓扑中的每一台目的路由器的最短距离,计算过程如果有多跳路由则需要累加Cost值,并最终保存在路由表中。
图3描述了由7个节点构成的一个网络拓扑图,以节点A为例,描述SPF算法的过程:
1)在初始化阶段,节点A选择自己为根,然后为网络拓扑中的每个节点指定最短路径,如果与节点A没有直接相连,则最短路径值为无穷大(∞);
2)在SPF算法步骤1中,节点B被选中了并加入到最短路径中,最短距离在考虑到节点B的情况下再进行相应的更新,节点C和节点E的最短距离改变了但是拓扑图中剩余节点F和G则保持不变。在每次循环运行SPF算法时,具有最小距离的节点被选定作为下一个节点并加入到相应的路径中,而剩余的其他节点则根据刚选定的节点进行更新,循环几次,节点A到网络拓扑中的所有节点的最短路径都被计算出来并添加到路由表中;
…
n)经过若干次的计算,最终节点A的最短路径树构建完毕,节点A到全网所有节点的最短路径被计算出来并添加到路由表中,此时网络达到收敛状态。节点之间通过周期性发送Hello报文来检测与邻居节点之间的连通性,一旦发现邻居节点不能正常回复Hello报文,说明两个节点之间的连通性出现故障,意味着网络拓扑发现变化,此时需要OSPF域内所以节点发送LSA构建新的拓扑数据库,达到收敛状态后再返回第1步初始化阶段。
3 OSPF报文格式及仿真实验
首先,基于GNS3搭建一个网络仿真环境[5-8],并通过Wireshark[9]网络协议分析工具捕捉OSPF数据包来进行分析。
如图4所示,R1和R2两台路由器通过f0/0接口相连,R1路由器上面开启4个Loopback接口(172.16.1.0/24—172.16.4.0/24),R2路由器上面也开启了4个Loopback接口(192.168.1.0/24—192.168.4.0/24)。此时通过Wireshark侦听捕获R1的f0/0接口,然后在R1和R2上分别启动OSPF路由进程,将f0/0接口和4个Loopback接口都宣告进Area 0内,R1和R2通过交互路由信息,Wireshark则可以捕获5种类型的OSFP报文。
图4 GNS3网络拓扑图Fig.4 GNS3 network topological gragh
1)配置R1路由器的接口IP地址
R1>enable
R1#configure terminal
R1(config)#interface f0/0
R1(config-if)#ip address 12.1.1.1 255.255.255.0 //为f0/0接口配置IP地址
R1(config-if)#no shutdown
R1(config)#interfaceloopback0
R1(config-if)#ip address 172.16.1.1 255.255.255.0 //为Loopback0接口配置IP地址
R1(config-if)#no shutdown
……
2)启用R1路由器的OSPF路由进程
……
R1(config)#routerospf 110
R1(config-router)#router-id 1.1.1.1 //指定R1的Router-ID为1.1.1.1
R1(config-router)#network 12.1.1.0 0.0.0.255 area 0 //宣告f0/0接口进入Area 0
R1(config-router)#network 172.16.0.0 0.0.255.255 area 0 //宣告4个Loopback接口进入Area 0
……
3)查看R1路由器的OSPF路由表
R1#show ip route ospf //查看R1的OSPF路由表
192.168.4.0/32 is subnetted, 1 subnets
O 192.168.4.1 [110/2] via 12.1.1.2, 00:44:14, FastEthernet0/0
192.168.1.0/32 is subnetted, 1 subnets
O 192.168.1.1 [110/2] via 12.1.1.2, 00:44:14, FastEthernet0/0
192.168.2.0/32 is subnetted, 1 subnets
O 192.168.2.1 [110/2] via 12.1.1.2, 00:44:14, FastEthernet0/0
192.168.3.0/32 is subnetted, 1 subnets
O 192.168.3.1 [110/2] via 12.1.1.2, 00:44:14, FastEthernet0/0
图5 OSPF数据包类型Fig.5 OSPF data packet types
而后,通过以上的配置命令,完成了OSPF路由协议的正常交互,并基于Wireshark协议分析软件侦听路由器R1的f0/0接口,捕获了OSPF路由协议5种类型的数据包,如图5所示:
(1)Hello:主要是用来进行OSPF邻居间的连通性测试,用来建立和维护邻接关系,为了两个相邻路由器能建立邻接关系,Hello报文中有4个字段必须相同,分别是:1)Hello and Dead Intervals(在MA环境中,Hello时间为10 s);2)Area ID;3)Authentication Password;4)Stub area flag。OSPF Hello报文见图6。
图6 OSPF Hello报文Fig.6 OSPF Hello message
(2)Database Description(数据库描述):主要是用来描述路由器中的路由摘要信息,由于OSPF是一个适合中大型网络的路由协议,每台路由器上面保存的路由条目数很多,两台相邻路由器在交互路由信息时,如果直接发送完整的路由信息会造成带宽的浪费。因此路由器在接收数据库描述数据包时可以判断哪些路由条目是已经包含的,哪些是本路由器不包含的。OSPF Database Description报文见图7。
图7 OSPF DBD报文Fig.7 OSPF database description packet
图8 OSPF LSR报文Fig.8 OSPF LSR message
(3)Link-State Request(链路状态请求):如果两台路由器在交互过程中,收到了数据库描述数据包,路由器会查看有哪些路由条目是本路由器没有的,会将这些路由条目记录在链路状态请求列表中,通过向对方路由器发送链路状态请求数据包以获取相应的路由条目(R1通过对比DBD报文,发现缺少R2上的一些路由信息)。OSPF Link-State Request报文见图8。
(4)Link-State Update(链路状态更新):链路状态更新数据包是用来响应上面链路状态请求数据包的,将邻居路由器需要的路由条目发送给对方(R2路由器将R1请求的路由条目通过LSU报文返回给R1,共5条)。OSPF Link-State Update报文见图9。
(5)Link-State Acknowledgment(链路状态确认):链路状态确认数据包是用来对链路状态更新数据包进行确认的。一台路由器从它的邻居路由器接收到了链路状态更新数据包,都需要通过链路状态确认数据包来进行可靠的显示确认。该数据包除了有一个OSPF报文头部和一个路由条目的列表外,就没有包含其他信息了。OSPF Link-State Acknowledgment报文见图10。
图9 OSPF LSU报文Fig.9 OSPF LSU message
图10 OSPF LSAck报文Fig.10 OSPF LSAck message
4 结语
本文通过对OSPF路由协议的基本特点、数据封装方式、DR和BDR、组播转发地址等概念进行了详细的介绍。并通过GNS3图形化网络仿真软件搭建了实验环境,结合Wireshark网络协议分析工具对OSPF的5类数据包进行捕获分析,了解协议的封装结构、交互过程,对于路由协议的学习有很大的帮助。