關於Ping Tracroute 和ICMP的那點事

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章