Traceroute 原理分析

 Traceroute 原理分析

traceroute 用于查看IP数据报从一台主机传到另一台主机所经过的路由。其实,在IP数据报的头部的选项字段有一个 IP记录路由选项(RR),它也可以记录路由。为什么不直接用它而是另外弄出个traceroute工具,这是因为:

  • 1)IP首部长度限制,导致记录的IP地址最多9个 ,远远不够。

  • 2)并不是所有路由器都支持记录路由选项,因此某些路径无法使用。

traceroute 用到ICMP协议和TTL字段。TTL字段是数据报的生存周期,初始值通常默认是64,每个处理数据报的路由器都需要把TTL值减去1或者数据报在路由器停留的秒数(因为绝大多数路由器转发数据报时延都小于1秒,因此通常都是减去1,而且很多路由器的实现即便超过1秒也是减去1,因此可以把TTL看做一个跳站计数器)。路由器接收到一份IP数据报时,如果TTL为0或者1,则路由器不转发该数据报,而是丢弃并给源机器发送一份ICMP超时报文,而ICMP信息中的IP报文中源地址正是路由器的IP地址。

traceroute的原理就是:

  • 先发送一份TTL为1的报文,这样第一个路由器会将TTL减1然后丢弃该报文,并发回一个ICMP超时报文,这样就得到了第一个路由器的IP地址;接着发送一个TTL为2的报文,可以得到第二个路由器的IP地址;继续该过程直到目的主机。

  • 但是目的主机即便收到TTL为1的报文,它也不会丢弃该数据报并发回一份ICMP超时报文,因为此时数据报已经到了目的地。为了判断是否到达目的主机,traceroute发送的报文采用了UDP数据报,它选择一个很大的端口值如30000以上的,以保证没有其他应用程序使用该端口,然后目的主机会返回一个端口不可达的ICMP报文,这样就可以知道什么时候结束。

  • traceroute针对每个TTL会发3次UDP报文,并打印每次的往返时间。如果5秒内没有收到3次报文中任何一个的响应,则打印*号继续下一个TLL的报文发送。3次报文选择的UDP目的端口分别是 33435,33436,33437,UDP报文数据长度为24字节,内容为全0(macOS环境)。

实例分析

运行 traceroute 119.75.217.109,可以看到wireshark抓包的前几跳信息,TTL最开始是1,然后是2...,端口是33435到33437,每个TTL发3次报文,在没有达到目的主机前,返回的是ICMP超时报文。到达主机后,则会返回ICMP端口不可达报文。

traceroute 请求的UDP报文

traceroute 响应的ICMP超时报文

traceroute 目的主机响应的ICMP端口不可达报文

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值