TCP/IP之ICMP(Internet控制报文协议),Ping程序和Traceroute程序
2013-02-21 22:33
991 查看
ICMP简述
ICMP是在rfc792中被定义。我们知道,IP协议是用来进行host-to-host之间的数据传输连接,但是IP数据报在传输中可能出现各种错误,发送方发送某个IP数据报后,如果发送失败,它是希望能够收到出错的反馈信息的,这就出现了ICMP协议。ICMP协议并不是用来保证IP数据报传输的可靠性,它只是对发送出现错误时进行反馈报到,要想保证数据传输的可靠性,需要高层相关协议定义,如TCP协议。ICMP是基于IP协议的,也就是说它利用IP数据报格式传输,所以它的头定义格式和IP协议一样。可参考我前篇文章:IP协议。
ICMP报文格式
type字段指示出错的类型,code字段指示出错的代码。它们两个的组合可以唯一定位出出错点在哪里。如下摘自RFC里面介绍的一些type值:
Summary of Message Types 0 Echo Reply 3 Destination Unreachable 4 Source Quench 5 Redirect 8 Echo 11 Time Exceeded 12 Parameter Problem 13 Timestamp 14 Timestamp Reply 15 Information Request 16 Information Reply
Ping程序
有时间我们想ssh,telnet,ftp,或者通过浏览器器访问某个主机时总是连接不成功,这时我们想确定本台机器是否该连接主机是否连通,这时我们一般这样做:ping baidu.com
其实它就是发送的一个type为0,并且返回为8的ICMP数据报。我们执行上面的ping请求时通过tcpdump拦截的数据可以看得到:
root@tony:/home/tony# tcpdump host 123.125.114.144 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 20:45:03.461241 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 1, length 64 20:45:03.615962 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 1, length 64 20:45:04.462946 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 2, length 64 20:45:04.615983 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 2, length 64 20:45:05.463949 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 3, length 64 20:45:05.617809 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 3, length 64 20:45:06.465749 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 4, length 64 20:45:06.619782 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 4, length 64 20:45:07.466709 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 5, length 64 20:45:07.621152 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 5, length 64 20:45:08.468119 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 6, length 64 20:45:08.622387 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 6, length 64 20:45:09.469352 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 7, length 64 20:45:09.623731 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 7, length 64 20:45:10.470701 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 8, length 64 20:45:10.625282 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 8, length 64 20:45:11.472277 IP tony.local > 123.125.114.144: ICMP echo request, id 2826, seq 9, length 64 20:45:11.627035 IP 123.125.114.144 > tony.local: ICMP echo reply, id 2826, seq 9, length 64
Traceroute程序
traceroute这个程序的目的就是要确立一个IP数据包是怎么到达目的地主机的(经过了哪些路由器网关)。它的工作原理就是利用IP协议中首部中TTL(time to live)这个字段来工作的。在前面的IP协议文章中,我们讲过TTL就是用来设置一个最大的路由中转数的,如果超过了这个值,则会返回一个ICMP数据报进行错误报告,这样我们就可以根据数据报中的首部信息中源IP地址知道此路由器地址。所以,如果中间要经过6个路由器网关的话,则要发送7次IP探测数据包,也返回7次ICMP报文来反馈当前所处的路由器或目的主机IP地址。
另外,我在我本机上进行traceoute命令时,只打印星号标记,在Google上也找不到答案,只是好像说是ICMP的数据包被禁止了还是怎么回事,如果有知道原因的同学,麻烦留言告诉我一下,我的机器环境是:ubuntu12.04 + ADSL上网(电信)
root@tony:/home/tony# traceroute 119.146.200.16 traceroute to 119.146.200.16 (119.146.200.16), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 * * * 4 * * * 5 * * *
可是ping是通的:
root@tony:/home/tony# ping 119.146.200.16 PING 119.146.200.16 (119.146.200.16) 56(84) bytes of data. 64 bytes from 119.146.200.16: icmp_req=1 ttl=54 time=28.1 ms 64 bytes from 119.146.200.16: icmp_req=2 ttl=54 time=28.0 ms 64 bytes from 119.146.200.16: icmp_req=3 ttl=54 time=26.6 ms 64 bytes from 119.146.200.16: icmp_req=4 ttl=54 time=24.6 ms
相关文章推荐
- TCP-IP详解卷1-06:ICMP:Internet控制报文协议(Internet Control Message Protocol)
- TCP/IP详解卷1:协议(五)【ICMP:Internet控制报文协议,Ping程序】
- TCP/IP(6)ICMP Internet控制报文协议
- TCP/IP学习笔记之六 --- ICMP: Internet控制报文协议
- 《TCP/IP具体解释卷2:实现》笔记--ICMP:Internet控制报文协议
- ICMP:Internet 控制报文协议和Ping程序
- TCP,IP详解,卷一:协议学习笔记之第六章 ICMP: Internet控制报文协议
- TCP/IP 第6章 ICMP internet 控制报文协议
- 《TCP/IP 详解 卷1:协议》第 8 章:Internet 控制报文协议
- TCP/IP 原理 -- ICMP:因特网控制报文协议
- TCP/IP(3.5)—网络控制报文协议ICMP
- 利用WireShark分析由Ping产生的Internet 控制报文协议(ICMP)
- ICMP——Internet控制报文协议
- ICMP:Internet控制报文协议
- TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
- ICMP:Internet控制报文协议
- TCP/IP详解卷1:协议(第六章:ICMP:Internet控制报文协议) | (待完善)
- (6)ICMP:Internet控制报文协议
- 《TCP/IP协议详解》第六章 ICMP:Internet控制报文协议
- TCP/IP 学习笔记-ICMP控制报文