《TCP/IP 卷1》笔记:Traceroute程序

Traceroute程序

引言

Traceroute程序是了解TCP/IP协议的工具。可以看到IP数据报从一台主机传到另一台主机所经过的路由。

Traceroute的操作

IP的数据报中,有一个选项字段。IP记录路由选项(RR)。已经有了记录路由选项的功能还要单独开发一个Traceroute程序呢?
因为IP记录路由选项(RR),需要每个路由器把自己的ip放入选项字段,但是IP首部的选项字段最多只能放9个IP地址。这是局限的地方。而且不是所有的路由器都支持选项功能。
IP数据报格式
Traceroute的工作原理:

  1. ip数据报中有TTL字段。该字段表示数据报可以最多能经过的路由数。没经过一次路由,TLL就会减一。当TTL等于0时,路由器就会抛弃IP数据报,并发送ICMP的超时报文。
  2. Traceroute程序会向目标主机发送一份udp协议的ip数据报并设置成不存在的端口,并把ip数据报的TTL字段设置成1,那么就获取到了第一次的路由器地址(从ICMP中获取)。再发送一次,TTL设置成2,又获取到了第二次的地址。直到收到ICMP的端口不可达报文结束。因为,端口不可达就是达到了目标主机。
  3. 汇总的路由信息,就是本机与目标主机的本次路由记录。(多次IP路由不一定一样)

使用traceroute程序
traceroute使用

  • 30 hops max表示traceroute程序设置TTL的最大值。60byte表示IP数据报的大小
  • 会对每个ttl值发送3分数据报。每接收到一份ICMP报文,就计算并打印往返时间。如果5s内没有收到3份数据报的,少一份就打一个*

ICMP超时报文
我们所讨论的ICMP报文是TTL值=0产生的,报文的code=0
主机在组装分片时可能发生超时,它将发送一份````组装报文超时```的ICMP报文。这种报文的code是1

注意事项:

  1. IP是动态路由的,所有两份连续的IP数据报都可能采取不同的路由。不同时会打印不同的地址
  2. 不能保证ICMP的报文路由与发送报文的路由一直。往返时间的时间是请求数据报的去耗时和ICMP响应报文的来耗时的综合。所以RTT不一定准
  3. 返回的ICMP报文中的源ip地址是UDP数据报到达的路由器接口的IP地址。一个路由器有2个以上的接口地址

接口标识
两个路由器通过一个点对点的链路相连。如果我们在左边LAN的一个主机上运行traceroute程序,那么它将
发现路由器的IP地址为if1和if3。但在另一种情况下,就会发现打印出来的IP地址为if4和if2。
if2和if3有着同样的网络号,而另两个接口则有着不同的网络号。

IP源站选路选项
路由器要判断下面该转发到哪个路由器,应用程序不进行控制,也不关心。路由器采取类型traceroute的工具来发现实际的路由
源站选路(source routing)的思想是由发送者指定路由。两种形式:

  1. 严格的源路由选择。发送端指明IP数据报所必须采用的确切的路由。路由器发送指定的下一站不存在时,返回源主机一份“源站路由失败”的ICMP差错报文
  2. 宽松的源站路由。发送端指明了一个数据报经过的IP地址清单。但是两个清单上的的地址可以相隔多个路由器。

IP首部源站路由选项的通用格式

  • IP首部源站路由选项的格式是记录路由选项格式基本一致。
  • 不同之处是,源站选路是发送IP数据报前填充IP地址清单;而记录路由选项是为IP地址清单分配并清空空间,让路由器填充。
  • 对于宽松的源站选路,code是0x83,len表示源站路由选项的长度,ptr表示下一个IP地址的起始位置。初始值是4
  • 对于严格的源站选路,code是0x89,len和ptr含义相同

源站路由选项的实际称呼为“源站及记录路由”(宽松的源站选路叫LSRR,严格的源站选路叫SSRR),这是因为在数据报沿路由发送中,对IP地址清单进行更新。运行过程:

  1. 发送主机从应用程序接受源站路由清单,将第一表项去掉(它是数据报的最终目的地址),将剩余的项移到1个项中,并将原来的目的地址作为清单的最后一项,指针不变,还是4
  2. 每个处理数据报的路由器检查其是否为数据报的最终地址。如果不是,则正常转发数据报。(宽松源站选路则转发,佛则丢弃)
  3. 如果是最终目的,且指针不大于路径的长度,那么1)由ptr所指定的清单中的下一个地址就是数据报的最终目的地址;2)由外出接口(outgoing interface)相对应的IP地址取代刚刚使用的源地址;3)指针加4

IP源路由示例
注意事项
当一个应用程序接收到由信源指定路由的数据时,在发送应答时,应该读出接收到的路由值,并提供反向路由。
HostRequirementsRFC指明,TCP客户必须能指明源站选路,同时,TCP服务器必须能够接收源站选路,并且对于该TCP连接的所有报文段都能采用反向路由。如果TCP服务器下面接收到一个不同的源站选路,那么新的源站路由将取代旧的源站路由。

宽松的源站选路的traceroute示例

宽松的源站选路
使用-g 选项指明中间的路由。最大是8个,因为最后的表目是目的主机

严格的源站选路
使用-G 选项指定中间的路由

  • 第三跳中!S表示收到ICMP“源站路由失败”的差错报文:即图6-3中type=3,code=5。*表示没有返回响应
  • 第三跳是gateway是因为TTL是2的时候,gateway发现没有符合严格的源站选路的路由地址。返回了ICMP的源站路由失败ICMP报文

小结

在一个TCP/IP网络中,traceroute程序是不可缺少的工具。其操作很简单:开始时发送一个TTL字段为1的UDP数据报,然后将TTL字段每次加1,以确定路径中的每个路由器。每个路由器在丢弃UDP数据报时都返回一个ICMP超时报文2,而最终目的主机则产生一个ICMP端口不可达的报文。我们给出了在LAN和WAN上运行traceroute程序的例子,并用它来考察IP源站选路。我们用宽松的源站选路来检测发往目的主机的路由是否与从目的主机返回的路由一样。

习题
8.1当IP将接收到的TTL字段减1,发现它为0时,将会发生什么结果?
:检查是否为目标主机,不是则发送给信源一份不可达的ICMP差错报文

8.2traceroute程序是如何计算RTT的?将这种计算RTT的方法与ping相比较。
:Traceroute是在UDP的数据报中存放请求时间,来计算的。Ping程序是在ICMP报文中存放请求的时间,收到ICMP回显应答时计算RTT。两种方式差不多。traceroute的报文较大

8.3(本习题与下一道习题是基于开发traceroute程序过程中遇到的实际问题,它们来自
于traceroute程序源代码注释)。假设源主机和目的主机之间有三个路由器(R1、R2
和R3),而中间的路由器(R2)在进入TTL字段为1时,将TTL字段减1,但却错误地将该
IP数据报发往下一个路由器。请描述会发生什么结果。在运行traceroute程序时会看
到什么样的现象?

:会丢弃报文吧。没看过源码

8.4同样,假设源主机和目的主机之间有三个路由器。由于目的主机上存在错误,因此,它
总是将进入TTL值作为外出ICMP报文的TTL值。请描述这将发生什么结果,你会看到什
么现象

:如果端口可达的话。应该没啥影响。如果端口不可达,那么信源永远收到不报错。

8.5在图8-8运行例子中,我们可以在sun和netb之间的SLIP链路上运行tcpdump程序。如
果指定-v选项,就可以看到返回ICMP报文的TTL值。这样,我们可以看到进入netb、
butch、Gabby和enss142.UT.westnet.net的TTL值分别为255、253、252和249。
这是否为我们判断是否存在丢失路由器提供了额外的信息?

:应该不能。因为返回的ICMP报文的TTL是返回的路由决定的。不代表请求的路由顺序。

8.6SunOS和SVR4都提供了带-l选项的ping版本,以提供松源选路。手册上说明,该选项
可以与-R选项(指定记录路由选项)一起使用。如果已经进入到这些系统中,请尝试同
时用这两个选项。其结果是什么?如果采用tcpdump来观测数据报,请描述其过程。

:-R选项已经失效。不推荐使用

8.7比较ping和traceroute程序在处理同一台主机上客户的多个实例的不同点。
:ping是像目标主机发送ICMP回显请求,不指定端口。如果不加限制,多个实例发送时无法区分
traceroute是向目标端口发送报文。而且发送的UDP报文中包含了进程和本机端口号,多个实例还是可以区分。
但是我在win10的系统中开2个CMD执行ping www.baidu.com 结果显示正常。估计是ICMP报文中的标识符填写了进程号,就能识别了

8.8比较ping和traceroute程序在计算往返时间上的不同点。
:ping是把发送时间放在ICMP报文中,ICMP回显响应中会携带发送时间,计算RTT。traceroute是把发送请求放在UDP的数据报中,返回时计算RTT

8.9我们已经说过,traceroute程序选取开始UDP目的主机端口号为33453,每发送一个
数据报将此数加1。在1.9节中,我们说过暂时端口号通常是1024~5000之间的值,因此
traceroute程序的目的主机端口号不可能是目的主机上所使用的端口号。在Solaris2.2
系统中的情况也是如此吗?(提示:查看E.4节)

8.10RFC1393[Malkin1993b]提出了另一种判断到目的主机路径的方法。请问其优缺点是什
么?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: TCP/IP调试工具是一种专门用于诊断和调试网络连接和通信的软件工具。它们能够帮助网络管理员或开发人员分析网络通信问题,并找出导致通信故障的原因。 常见的TCP/IP调试工具包括以下几种: 1. Ping工具:Ping工具用于测试与目标主机之间的网络连通性。通过向目标主机发送ICMP回应请求并测量往返时间,可以确定是否能够访问目标主机。 2. Traceroute工具:Traceroute工具用于跟踪数据包在互联网上传输的路由路径。它通过在数据包的TTL字段上逐次增加数值,从而记录数据包在网络中的传输路径和延迟。 3. Netstat工具:Netstat工具用于显示当前网络连接的状态和相关信息,例如本地主机的IP地址和端口号,以及与本地主机建立连接的远程主机的IP地址和端口号。 4. Wireshark工具:Wireshark是一款强大的网络协议分析工具,能够捕获网络流量并分析各种网络协议(如TCPIP、HTTP等)。通过Wireshark,用户可以查看、过滤并分析网络数据包,以便定位网络通信问题。 5. Nmap工具:Nmap是一款网络扫描工具,可用于检测并分析目标主机上开放的端口和服务。它能够帮助用户发现网络漏洞和安全隐患,以及评估网络的安全强度。 综上所述,TCP/IP调试工具是网络管理员和开发人员在分析和解决网络通信问题时的得力工具。通过使用这些工具,用户可以更好地诊断和调试网络连接,提高网络的稳定性和可靠性。 ### 回答2: TCP/IP调试工具是用于诊断和排除与TCP/IP协议相关的网络问题的工具。它们可以帮助网络管理员和工程师快速发现和解决网络故障,确保网络的稳定运行。 常见的TCP/IP调试工具包括以下几种: 1. Ping(Packet Internet Groper):Ping工具用于测试主机之间的连通性。通过向目标主机发送小的探测数据包,检测目标主机是否能够响应和返回数据包。它可以用于测试网络的延迟和丢包情况。 2. Traceroute:Traceroute工具用于追踪数据包从本地主机到目标主机经过的路由器路径。它可以显示数据包在网络中的每个跳跃点上的延迟和IP地址。 3. Netstat(Network Statistics):Netstat工具用于显示本地主机与远程主机之间的网络连接状态。它可以列出当前活动的TCP/IP连接以及监听端口,帮助管理员监控网络连接情况。 4. Wireshark:Wireshark是一个开源的网络分析工具,可以用于捕获和分析网络数据包。它可以提供详细的协议分析和网络流量统计,用于诊断和解决网络故障。 5. Nmap(Network Mapper):Nmap是一个网络扫描工具,用于扫描目标主机的开放端口和服务。它可以用于评估网络的安全性和漏洞,识别潜在的网络威胁。 这些TCP/IP调试工具都有自己独特的功能和用途,可以相互配合使用,帮助管理员和工程师在网络故障和安全问题的处理过程中快速定位和解决问题,确保网络的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值