linux ip路由不可达原理,traceroute原理

linux ip路由不可达原理,traceroute原理traceroute 也就是 traceroute 跟踪路由 这个程序最早是 VanJacobson 实现的 源码在网上可以找到 不过我还没有去找 主要的原理是 IP 路由过程中对数据包 TTL TimetoLive 存活时间 的处理 当路由器收到一个 IP 包时 会修改 IP 包的 TTL 及由此造成的头部检验和 checksum 变化 每收到一个包 检查这个的 TTL 是否是 0 或 1 如果是 表明这个包还没有

traceroute, 也就是 trace route,跟踪路由。这个程序最早是Van Jacobson实现的。源码在网上可以找到,不过我还没有去找。主要的原理是IP路由过程中对数据包TTL(Time to Live,存活时间)的处理。当路由器收到一个IP包时,会修改IP包的TTL(及由此造成的头部检验和checksum变化)。每收到一个包,检查这个 的TTL是否是0或1。如果是,表明这个包还没有到达目的地,而且剩余时间不多了,肯定是到不了目的地了。这样路由器就简单地丢弃这个包,并给源主机发送 ICMP通知,说这个包已经超时了。ICMP的通知信息里包含当前路由器发送时所用的IP。

这样就可以通过构造数据包,来间接检查到 达一个主机时经过了哪些路由。一开始发送一个TTL为1的包,这样到达第一个路由器的时候就已经超时了,第一个路由器就发通知说包超时,这样就可以记录下 所经过的第一个路由器的IP。然后TTL加1,安全通过第一个路由器,而第二个路由器的的处理与第一个相同,丢包,发通知说包超时了,这样记录下第二个路 由器IP,由此可以一直进行下去,直到这个数据包到达目标主机,由此打印出所有经过的路由器。

在通信中,IP层只负责数据的路由与传 输,并不处理数据包的内容。例如ICMP,或TCP,UDP,这些协议是依赖IP层的传输功能来传送数据的。在通信双方的主机中,收到这些协议的数据包 后,一般在通信的对应主机上,会有程序来处理这些数据。而直接的IP数据报是没有用处的(win2000的驱动层可以直接使用IP报而不需要加上其他协 议,但是一般是不会这样用的)。因此traceroute程序发送一个UDP包来试探。对路由器来说,UDP数据报只是IP数据报的一种,它并不关心 UDP数据报的具体内容。直到这个包到达目的端的主机会,目的主机的内核会解析UDP数据报,并查找数据报中要求端口是否已经有进程在使用。如果找到,则 通知进程有数据到达。而如果找不到,则发送一个”目的端口不可达”的ICMP错误数据回到源主机。

这样就可以完全确定下来。traceroute建立一个UDP数据包,不断修改TTL值并发送出去,如果收到”超时错”,表示刚刚到达的是路由器,而如果收到的是”端口不可达”错误,表示刚刚到达的就是目的主机。这样路由跟踪完成,程序结束。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177322.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:47
下一篇 2026年3月26日 下午7:47


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号