工作以來,接觸上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實現是一樣的,現在總算是明白了。