Traceroute的实现有两种:

基于UDP实现

traceroute向目的主机发送一系列普通IP数据报,但每个数据报携带一个不可达UDP端口号的UDP报文,TTL分别为1,2,3...TTL过期时,路由器丢弃数据报并发送ICMP告警报文给源主机。如何得知何时停止发送UDP报文?目的主机会发送端口不可达的ICMP报文,中间路由器则发送ICMP超时报文。

基于ICMP实现

直接发送一个ICMP回显请求(echo request)数据包,服务器在收到回显请求的时候会向客户端发送一个ICMP回显应答(echo reply)数据包,在这之后的流程还是跟第一种方案一样。这样就避免了我们的traceroute数据包被服务器的防火墙策略墙掉。

In Unix/Linux, the source sends a series of UDP packets to the target destination using an unlikely destination port number;

in Windows, the source sends a series of ICMP packets to the target destination.

For both operating systems, the program sends the first packet with TTL=1, the second packet with TTL=2, and so on.

在Windows系统中也有traceroute程序,它的名字叫做tracerttracert就是用基于这种方法采用ping来实现的。

相关实现代码见以下参考链接

摘自Traceroute(路由追踪)的原理及实现

附:

ICMP与IP同属于网络层,但同TCP, UDP类似,被IP封装。

ICMP虽然被IP封装,但不代表ICMP属于传输层。

网络层的层次并不是通过A封装了B,A就在B的下一层来区分的。

最新文章

  1. tyvj1192 迎春舞会之集体舞
  2. Spring 学习笔记 7. 尚硅谷_佟刚_Spring_Bean 的作用域
  3. 重温WCF之构建一个简单的WCF(一)(2)通过Windows Service寄宿服务和WCF中实现操作重载
  4. Android目标大纲
  5. Win7下Maven的安装与配置
  6. Android 向系统添加一个联系人信息contact
  7. 轻应用 lapp
  8. 不能交换到解决jenkins用户的问题
  9. .NET图平台下的图像处理工具---强大的Emgucv
  10. MS SQL批量生成作业脚本方法介绍总结
  11. [matlab] 1.拟合
  12. centos下添加git
  13. Java基础-JDBC访问数据库
  14. C# 4种方法计算斐波那契数列 Fibonacci
  15. BeyondCompare3 提示许可证密钥已被撤销解决方法
  16. Go基础篇【第8篇】: 内置库模块 bytes [二]
  17. SVN 服务器端的搭建-及多仓库管理-OK
  18. python 16 进程和线程
  19. 事件(Application Event)
  20. 蓝桥--2n皇后问题(递归)--搬运+整理+注释

热门文章

  1. Linux系统扫描技术及安全防范
  2. Centos7 搭建Go语言编译环境
  3. 5213 Exp3 免杀原理与实践
  4. HQL语句的3个小技巧
  5. mfc CListCtrl
  6. [BZOJ4144][AMPPZ2014]Petrol[多源最短路+MST]
  7. Please restart this script from an administrative PowerShell
  8. AngularJS + CoffeeScript 前端开发环境配置详解
  9. WinForm 随手记
  10. swift学习:第一个swift ui程序