Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189263
  • 博文数量: 71
  • 博客积分: 2990
  • 博客等级: 少校
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-29 14:04
文章分类

全部博文(71)

文章存档

2011年(1)

2009年(1)

2007年(6)

2006年(42)

2005年(21)

我的朋友

分类: 系统运维

2005-03-29 15:43:03

 

PING:

ping程序是利用icmp的回复请求来探测远端主机是否可达。
(并不能继续判断端口是否可达。要想查看端口,就要使用扫描器了)

ping有一个R选项,用来记录经过的路由(ping  -r 5)记录经过的5个路由器。
按照分析,根据所在环境限制最多可以记录8~9个项目。

除了回显请求外,还可以利用icmp来实现时间请求。
在icmp的数据包中可以包含发送时间,目的主机收到后再附上自身当时时间才发回。
这样可以做一个时间校验,并可以判断源与目的之间的通讯速度。

一般用ping的时候只是用了它的最简单的功能:检查主机能不能连到。
其实使用它所提供的其他选项,可以实现许多细节上的控制,例如数据包长度,TTL,路由记录,宽/严路由经过路由等。

============================================

TRACETROUTE:
也就是 trace route,跟踪路由。
主要的原理是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数据报是没有用处的。
因此traceroute程序发送一个UDP包来试探。
对路由器来说,UDP数据报只是IP数据报的一种,它并不关心UDP数据报的具体内容。
直到这个包到达目的端的主机,目的主机的内核会解析UDP数据报,并查找数据报中要求端口是否已经有进程在使用。
如果找到,则通知进程有数据到达。而如果找不到,则发送一个“目的端口不可达”的ICMP错误数据回到源主机。

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

============================================

注:这篇文章我参考了jlbnet的Blog。原文http://dev.csdn.net/article/65/article/38/38293.shtm

TO BE CONTINUED

阅读(957) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~