traceroute工作原理
的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数据报,并查找数据报中要求port是否已经有进程在使用。假设找到,则
通知进程有数据到达。而假设找不到,则发送一个"目的port不可达"的ICMP错误数据回到源主机。
这样就能够全然确定下来。trcertroute建立一个UDP数据包,不断改动TTL值并发送出去,假设收到"超时错",表示刚刚到达的是路由器,而假设收到的是"port不可达"错误,表示刚刚到达的就是目的主机。这样路由跟踪完毕,程序结束。
有几个细节:
1.局域网的路由是相对稳定的,因此用traceroute打印出来的响应时间相差不大。而假设用来跟踪广域网的路由,因为广域网的路由信息是动态变化的,并且并不能确定是发送路径耗时还是返回路径耗时较多,因此时间与路由信息仅仅能做为參考。
2.TTL 的选择。假设把TTL设得足够大,是不是一定能够打印出全部路由,比方一个数据包经过300个路由器才到达目的端。当然在现有网络环境下不太可能出现要经 过这么多路由的情况。而TTL信息在IP数据报中仅仅有一个字节,也就是最多能设定到255(256以后又又一次从0開始)。设定这个信息的目的,就是防止一 些僵而不化的数据报在网络漫上无目的的游荡而不消失。数据报每经过一个路由器,路由器就把TTL减1(或在该路由器被处理前经过的秒数),总有一个时候会 被减到1,然后路由器会把它丢弃。
3.traceroute的是以收到"port不可达"为标志来结束的。前提是发出的UDP数据报中要求 的port在目的主机上没有进程在使用。而假设目的主机上正好有进程在使用这个port,接收这个包并按正常方式处理,这样traceroute就收不到"port不 可达"的错误了。为了避免出现这样的情况,UDP数据报的port非常高(书中的实现是初始值33435,以后每发送一次再加1,port号最大能够到65535)。 普通程序一般不会使用这些高port。问题是假如真的存在这样的情况时,traceroute会怎么处理?而好像Solaris系统可能会使用高port,这时又怎
么样。
4. 在发送过程中,要经过很多的路由,到达目的主机前,可能还要经过网关,防火墙,以及其它比如IDS的过滤,发送包能不能到达目的主机还是个问题。而即使到 达了,发送的ICMP信息能不能返回也是个问题。由于沿途经过的关卡太多,遇上黑洞路由器,不转发这些信息的话,那就一点办法也没有了。
书中还提到原来的traceroute里有一个选项,能够指定数据包经过的路由器。假设是宽路由,则仅仅要经过指定的路由就可以。而假设是严路由,则必须按 指定的顺序经过指定的路由器。由于这个选项可能导致某个固定的路由处理信息太多,在发布的源代码里已经取消了。可是能够找到补丁,还是能够用起来的。从比較 的结果看,似乎指定路由器反而不如让路由器採用默认路由处理得快。而对于严路由来说,要成功就要更难一些,由于并不一定你指定的路由器正好有条目到接下来 的路由器。
7)记录经过的7个路由器。依照分析,依据所在环境限制最多能够记录8~9个项目。
除了回显请求外,还能够利用icmp来实现时间请求。在icmp的数据包中能够包括发送时间,目的主机收到后再附上自身当时时间才发回。这样能够做一个时间校验,并能够推断源与目的之间的通讯速度。因为详细的内容部分比較烦,类型太多,一下子记不住各个类型的意思。
一般用ping的时候仅仅是用了它的最简单的功能:检查主机能不能连到。事实上使用它所提供的其它选项,能够实现很多细节上的控制,比如数据包长度,TTL,路由记录,宽/严路由经过路由等。
traceroute工作原理的更多相关文章
- Ping、Traceroute工作原理
在工作开发过程中,我们经常会使用到ping和traceroute.在这里,我们将细述其工作原理,让你在会用的基础之上理解其内部工作过程. ICMP应用实例--Ping Ping 是 ICMP 的一个重 ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- 代码管理工具 --- git的学习笔记二《git的工作原理》
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
随机推荐
- C#线程应用实例(part1) 之 BeginInvoke和EndInvoke
最近这个公司是做 winfrom 开发的 , 这段时间就好好的学学WCF , 公司框架什么的自己去琢磨! 这里主要写一些 winfrom 中 用到的一些陌生 技术 1.BeginInvoke 以前B ...
- python成长之路15
一:JavaScript: JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的 ...
- 《算法导论》读书笔记之排序算法—Merge Sort 归并排序算法
自从打ACM以来也算是用归并排序了好久,现在就写一篇博客来介绍一下这个算法吧 :) 图片来自维基百科,显示了完整的归并排序过程.例如数组{38, 27, 43, 3, 9, 82, 10}. 在算法导 ...
- 块元素block,内联元素inline; inline-block;
block:块元素的特征 div ol li 等: 1.只有高度不设置宽度的时候默认撑满一行: 2.默认块元素不在一行: 3.支持所以CSS命令: inline:内联元素的特征 span i stro ...
- javascript模块加载框架seajs详解
SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加载).SeaJS可以和jQuery完美集成,使用 ...
- GridView用法的修改和删除
(前台) <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="Fa ...
- dubbo 服务化
当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等. 当服务越来越多时,服务的URL地址信息就会爆炸式增长,配置管理变得非常困难,F5硬件负载均衡器的单点压力 ...
- kinect for windows - DepthBasics-D2D详解之二
通过上篇文章,我们了解了在视频图像从kinect开发包传输到应用程序之前的一系列初始化工作,那么这篇文章主要来叙述,如何将一帧图像数据获取到,并显示出来的. 更新窗口是在Run函数消息处理中,当Kin ...
- Fedora 17 安装 完全 指南
一.了解Fedora 17先来了解一下Fedora吧.它是由Red Hat赞助的一个全球性开源项目,秉承“自由”.“友爱”.“杰出”.“前卫”宗旨. 1.Fedora 17的主要系统改进内核:采用3. ...
- .NET通用权限系统快速开发框架源代码
有兴趣的朋友欢迎加群讨论:312677516 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援最新Win 8) 2.Microsoft Visual Studio 201 ...