网络编程—Traceroute程序实例

上传人:公**** 文档编号:562245038 上传时间:2023-12-19 格式:DOCX 页数:13 大小:284.34KB
返回 下载 相关 举报
网络编程—Traceroute程序实例_第1页
第1页 / 共13页
网络编程—Traceroute程序实例_第2页
第2页 / 共13页
网络编程—Traceroute程序实例_第3页
第3页 / 共13页
网络编程—Traceroute程序实例_第4页
第4页 / 共13页
网络编程—Traceroute程序实例_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《网络编程—Traceroute程序实例》由会员分享,可在线阅读,更多相关《网络编程—Traceroute程序实例(13页珍藏版)》请在金锄头文库上搜索。

1、目录目录11. 问题描述22. 需求分析23. 系统设计23.1. 概要设计23.2. 详细设计43.2.1. Traceroute 的实现原理44. 调试65. 总结76. 附录87. 参考文献138. 设计评语141. 问题描述本次课程设计,我们小组选择了课外的题目,经过讨论,最终我们决定我们小组的课 题为:网络编程Traceroute程序的应用。Traceroute (路由追踪)是一个非常有用的网络工具。在命令提示符下,执行Traceroute 程序,输入必要的参数后即可探测出到达网络中任何一台目标主机中途需要经过哪些路由器 以及每个路由器的信息,比如IP地址等。在网络中进行多播通信或者

2、遇到路由问题时, Traceroute获得的信息就非常有用。2. 需求分析路由是把信息从源穿过网络传递到目的地的行为,在传输过程中,遇到一系 列的中间节点。这些中间节点构成了路由跟踪的依据。路由的话题早已在计算机 界出现,但直到八十年代中期才获得商业成功,这一时间延迟的主要原因是七十 年代的网络很简单,后来大型的网络才较为普遍。而路由跟踪是在路由的基础上 提出的问题,是利用路由跟踪实用程序于确定IP数据报访问目标所采取的路 径。当我们不能通过网络访问目的设备时,网络运行者就需要判断是哪里出了 问题。问题不仅仅会出现在最终目的设备,也可能出现在转发数据包的中间路由 器。解决方法是,了解了 IP数

3、据报访问目标所采取的路径,将发现网络布网简 单拓扑,确定路由断点即可解决网络故障。操作系统中的tracert或 traceroute路由跟踪程序,通过它可以查看到达目标地址所经过的路径。它的 作用与ping有类似之处,使用ping可以检查是否连接,如果不通,一般不好 准确判断哪一个节点出错,而使用tracert则可以准确判断出错的部分。路由 跟踪程序随着网络的发展而发展,现已经较为成熟,不仅在操作系统上有路由跟 踪程序,在中间设备也加入路由跟踪程序,如cisco扩展路由跟踪程序,提供 详细的参数选择。单、多线程路由跟踪程序都已经面世,实现方式也各不相同, 如基于记录路由选项的,基于UDP,基于

4、ICMP Echo Request的路由探测。 本 课题主要基于UDP协议的路由探测方法。系统实现路由的跟踪,每经过一个路由,要求得到经过该路由节点的地址, 也就是说输入目标信息,可以得到本地主机到目标经过的所有中间节点。这些 中间节点用IP地址标识。并要求对跟踪跳数,每一跳等待时间可控。为了让 系统更加完善,首先要测试目标的连通性,系统中也要实现目标探测功能,即 Ping功能。3. 系统设计31概要设计本次编写的Traceroute程序编写环境为在Linux系统下使用C语言进行编 写。当完成编写后,使用gcc编译工具进行编译,测试无误后再次使用arm-linux-gcc进行编译,移植入开发板

5、进行测试。由于Traceroute程序的运行需要有真实的网络环境,需要根据所需的环境 来搭建并且配置路由器,在当前条件下,我们小组使用了 Dynamips模拟器。实验所需的拓扑图如下:s0/0La ptop-PT LinuxEthernet40.0.0.3/8当在Linux系统下运行经过编译的Traceroute程序并输入需要进行追踪的IP 地址,程序会显示出到达目标主机所经过的每一个路由器。Linux系统网络属性配置配置好linux系统中的网络属性,将IP地址设置为与R4同一网段,网关设 置为10.0.0.1,即R4,运行经过编译的Traceroute程序并输入需要进行追踪的 IP地址,程序

6、会显示出到达目标主机所经过的每一个路由器。(详见测试结果)3.2.详细设计3.2.1. Traceroute 的实现原理Traceroute程序的实现主要涉及IP头部生存时间(time to live, TTL) 字段的使用。设置TTL字段的目的是防止数据报由于选路错误或其他软硬件原因从而导 致在网络中无休止的流动,它指定了数据报的生存时间。TTL的初始值由源主机 设置,当一份数据报经过路由器时,处理该数据报的路由器都需要把TTL值减去 数据报在路由器中停留的秒数。但事实上大多数路由器只是简单地将TTL值减1, 因此TTL字段最终被实现为一个跳站计数器。当TTL字段的值被减为0时,路由 器就不

7、会转发该数据报,而是将其丢弃,并产生一份ICMP超时差错报文发往源 主机以通知错误的发生。Traceroute程序的关键就在于返回的这份ICMP超时差 错报文的源地址就是途径路由器的IP地址。由此,通过一次递增TTL字段的值, 就可以得到一份数据报在其传输路径上所经过的路由信息。Traceroute程序在具体实现时,是令其向目的主机发送一个UDP数据包, 并重复递增IP头部TTL字段的值。刚开始的时候TTL等于1,这样当该数据包 抵达途中的第一个路由器时,TTL的值就被减为0,导致发送超时错误,因此该 路由器会返回一个ICMP超时数据包到源主机。随后,主机将数据包的TTL值递 增1,以便IP报

8、文能传递到下一个路由器,下一个路由器将会生成ICMP超时数 据包返回给源主机。依此类推,将返回的每一条ICMP超时消息都收集下来,便 能知道中途都经过哪些路由器,直到最后到达目标主机。当TTL值递增的足够大, 可达到目标主机的时候,便会返回一条ICMP “端口无法访问”的信息,因为目 标主机没有在相应端口等待的进程。至此,Traceroute整个流程便完成了。实现Traceroute程序是可以采取一个简便的方法。只需将圭寸装好的ICMP 数据包发送到目标主机,TTL值初始化为1,此后每次发送的数据包都递增1,程序中只需要一个在TTL值减为0超时的时候,也会返回一条ICMP错误消息。 ICMP类

9、型的原始套接字即可实现。使用UDP协议创建原始UDP包4.调试对编写好的代码进行编译执行编译过后的程序,输入参数运行程序,并输入参数:10.0.0.1,即追踪到目标主机为R1所经过的路由。 根据程序运行结果,我们可以发现,在存在冗余链路存在的情况下,目标主机为 R1所经过的路由器分别依次为:R4-R5-R3-R2-R1,而不是跳数更加少,距 离更加短的R4-R3-R2-R1。分析其原因,在同时存在R4-R5-R3-R2-R1和 R4-R3-R2-R1两条链路的情况下,因为R3、R4、R5之间的物理连接均通过 FastEthernet (高速以太口)相连,而非R1、R2、R3、R4之间使用的Se

10、rial 接口。两者相比,FastEthernet接口的出口代价远远小于Serial接口,因此运 行在路由器上的EIGRP路由协议自动选择了链路中代价较小的一条链路。若此时 断开R4-R5-R3这条链路,则追踪到达R1的路由应为R4-R3-R2-R1。当第二次对程序进行测试时,我们将R4的F0/1 口手工关闭,即断开R4-R5-R3,并观察结果。R4R4R4enR4#confi g tEnter configuration commands, one per line End with cntl/ZR4(config)#!nt fO/1R4(config-if)#shR4(config-if)

11、#shutdownR4(config-if)#*Mar 1 06:20:20346: %dual-5-nbrchange: IP-EIGRP(O) 10: Neighbor 60.0.0.1 (FastEthernetO/1) is down: interface down *Mar 1 06:20:22.186: %link-5-changED: interface FastEthernetO/1, changed state to admirristratively down*Mar 1 06:20:23.186: %lineproto-5-updown: Line protocol on

12、 interface FastEthernetO/1, changed state to down对路由器R4的F0/1 口执行关闭操作It racerouteto1G.G.G.1 (1G.G.G.1)f48hops max,6414G.G.G.135.288ms14.47 ims15.11 ms23G.G.0.146.927ms31.174ms15.491ms32G.G.G.177.636ms48.099ms45.672ms41G.G.G.132.725ms*93.616 msroothanback-desktop:./t raceroute 10.G.0.1roothanback-desk

13、top:File Edit View Terminal Tabs 旦 elpbyte packets断开R4、R5、R3后追踪10.0.0.1的结果观察实验结果,我们发现追踪R1的路由时,途径的路由器为 R4-R3-R2-R1,与我们测试前的预期相同。第三次测试时,我们选择的参数为一条网络中没有的地址,并观察结果。追踪网络中不存在的地址根据实验结果,当输入的参数为网络中不存在的地址时,程序显示出的下一 条将永远为40.0.0.1,即R4。分析其原因,由于在设置linux系统中网卡属性 时,手工配置了与R4同一网段的IP地址,并且将默认网关设置为10.0.0.1, 即R4。因此在linux系统中

14、,所有可以到达的地址皆由R4提供。而R4的路由 表中并没有100.0.0.1的路由条目,因此该地址不可达,发送至100.0.0.1的任 何数据包将在R4停留,直至存活时间为0后被丢弃。5.经过两个礼拜的努力,本课程设计基本完成预定功能。本文从Linux与嵌入式系统中对 于网络底层编程的角度说明路由跟踪系统的开发过程。在设计初期,我组为了设计出一个功 能较为完整,在嵌入式Linux上实现网络的底层开发,我们通过查看了有关书籍和互联网, 结合老师的意见和建议,最终确定本设计现有功能模块。在设计中,我们遇到许多技术上的 问题,但通过查阅资料、网上论坛答疑、请教老师同学等各种方式,问题最终还是得到解决

15、。由于时间和我组水平关系,设计中开发的功能还存在一些不足,比如路由器的模拟器只 能运行在x86机器中而无法在ARM的处理器中运作。从整体来看,本课程设计还是有成功 的一面,它实现了路由的跟踪,每经过一个路由,要求得到经过该路由节点的地址, 也就是说输入目标信息,可以得到本地主机到目标经过的所有中间节点。6.附录代码:/ #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J* #J*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号