工作以来,接触上Linux后,网络上调优都少不了 Ping Traceroute 这几个命令
但对它的工作原理其实知道少之又少。
最近在工作中遇到一些怪事,我才发现原来 ICMP 这个协议挺有意思。
一、原理介绍
百度百科的:http://baike.baidu.com/view/30564.htm
关于Ping Traceroute的: http://bbs.51cto.com/thread-349458-1-1.html http://blog.chinaunix.net/space.php?uid=9967220&do=blog&id=1995585
二、遇到的问题
有一台服务器的 IP ,在Linux下(注意不是Windows)用ping检测不通,但Traceroute 是通的
我的疑问是 ,这2个东西的主要都用到ICMP协议,为什么会出现 这样的差异?
三、解决的思路
因为遇到这个问题,所以才认真的去了解了一下Ping 和Traceroute的工作原理和ICMP协议
不看不知道啊,原来他们还真有不同!
1 Traceroute 和 Ping 整个过程中 发/送的包虽然都有ICMP协议的包,但ICMP的消息包有多种,而这2个软件使用的ICMP包的类型 却不太一样。
2 常用的ICMP协议包 类型有:
A TTL exceeded(类型11): 这个在路由器上回应请求端会用到
B Echo Request和Reply(类型8 / 0): 这是ping常用的
C port unreachable(类型3) : 这是traceroute用的;
看到这里,就应该明白了:这次的问题是Linux下做的,因此判断:机房至少封掉了类型0,而保留了类型3
另外:Traceroute 更有意思:它有使用两种方式来实现发送端的处理:ICMP的和使用UDP的。
在Windows 下 使用ICMP,而其它包括unix和cisco router都使用UDP.
以前我还以为WIN和LINUX下的 ping实现是一样的,现在总算是明白了。