icmp是属于的协议.docx
《icmp是属于的协议.docx》由会员分享,可在线阅读,更多相关《icmp是属于的协议.docx(8页珍藏版)》请在冰点文库上搜索。
icmp是属于的协议
竭诚为您提供优质文档/双击可除
icmp是属于___的协议.
篇一:
icmp协议协议概述
1icmp协议>ping,ping仅是icmp(0、8)的一种应用。
icmp比ping丰富。
ip协议是一种不可靠的协议,无法进行差错控制。
但ip协议可以借助其他协议来实现这一功能,如icmp。
icmp(internetcontrolmessagesprotocol,网间控制报文协议)允许主机或路由器报告差错情况和提供有关异常情况的报告。
一般来说,icmp报文提供针对网络层的四项大的功能:
错误诊断、
拥塞控制、
路径控制
查询服务
如,当一个分组无法到达目的站点或ttl超时后,路由器就会丢弃此分组,并向源站点返回一个目的站点不可到达的icmp报文。
2icmp报文类型2.1icmp报文类型
icmp报文大体可以分为两种类型:
icmp差错报文
icmp询问报文。
但细分又可分为很多类型,如表1所示。
表1icmp报文类型
2.2icmp回射请求和应答报文头部格式
icmp报文被封装在ip数据报内部传输。
如图1所示,是icmp回射请求和应答报文头部格式。
图1icmp回射请求和应答报文头部格式
各种icmp报文的前32bits都一样,它们是:
8bits类型和8bits代码字段:
一起决定了icmp报文的类型。
常见的有:
类型8、代码0:
回射请求。
类型0、代码0:
回射应答。
类型11、代码0:
超时。
16bits校验和字段:
包括数据在内的整个icmp数据包的校验和,其计算方法和ip头部校验和的计算方法是一样的。
对于icmp回射请求和应答报文来说,接下来是16bits标识符字段:
用于标识本icmp进程。
最后是16bits序列号字段:
用于判断回射应答数据报。
2.3icmp目标不可达报文
如图2所示,是icmp目标不可达报文头部格式。
图2icmp目标不可达报文头部格式
其中代码字段的不同值又代表不同的含义,如,0代表网络不可达、1代表主机不可达等,见表1。
2.4icmp超时报文头部格式
如图3所示,是icmp超时报文头部格式。
图3icmp超时报文头部格式
其中:
类型11+代码0:
表示传输期间生存时间为0。
类型11+代码1:
表示数据报组装期间生存时间为0。
由于篇幅有限,这里不再分析其他类型icmp协议数据包的格式。
3ping命令
ping命令利用icmp回射请求报文和回射应答报文来测试目标系统是否可达。
icmp回射请求和icmp回射应答报文是配合工作的。
当源主机向目标主机发送了icmp回射请求数据包后,它期待着目标主机的回答。
目标主机在收到一个icmp回射请求数据包后,它会交换源、目的主机的地址,然后将收到的icmp回射请求数据包中的数据部分原封不动地封装在自己的icmp回射应答数据包中,然后发回给发送icmp回射请求的一方。
如果校验正确,发送者便认为目标主机的回射服务正常,也即物理连接畅通。
在windows9x、windows2000等操作系统的ping命令中,icmp包中的数据长度默认为32字节,其内容为英文小写字母循环系列(abcdefg…wabcdefghi),如图4所示。
在cisco路由器、交换机设备中,icmp包的缺省内容模式是0xabcd,如图5所示。
图4windows下的ping包内容图5cisco设备中的ping包内容4icmp应用分析-icmp重定向
icmp虽然不是路由协议,但是有时它也可以指导数据包的流向(使数据流向正确的网关)。
icmp协议通过icmp重定向数据包(类型5、代码0:
网络重定向)达到这个目的。
图6icmp重定向
如图6所示,主机pc要ping路由器r2的loopback0地址:
192.168.3.1,主机将判断出目标属于不同的网段,因此它要将icmp请求包发往自己的默认网关192.168.1.253(路由器r1的e0接口)。
但是,这之前主机pc首先必须发送arp请求,请求路由器r1的e0(192.168.1.253)的mac地址。
当路由器r1收到此arp请求包后,它首先用arp应答包回答主机pc的arp请求(通知主机pc:
路由器r1自己的e0接口的mac地址)。
然后,它(路由器r1)将此icmp请求转发到路由器r2的e0接口:
192.168.1.254(要求路由器r1正确配置了到网络192.168.3.0/24的路由)。
此外,路由器r1还要发送一个icmp重定向消息给主机pc,通知主机pc对于主机pc请求的地址的网关是:
192.168.1.254。
路由器r2此时会发送一个arp请求消息请求主机pc的mac地址,而主机pc会发送arp应答消息给路由器r2。
最后路由器r2通过获得的主机pc的mac地址信息,将icmp应答消息发送给主机pc。
icmp重定向包的内容如图7、图8所示。
注意图7icmp包头中的type和code字段的值和含义。
图7icmp重定向包
图8icmp重定向包-续
如果还有后续的icmp请求包,则除了arp消息,所有的事件序列和上面的叙述相同。
如图9所示。
篇二:
icmp协议详解
icmp协议详解
一.什么是icmp协议
icmp全称internetcontrolmessageprotocol(网际控制信息协议)
提起icmp,一些人可能会感到陌生,实际上,icmp与我们息息相关。
在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,ip层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于ip数据报的网络体系中,网关必须自己处理数据报的传输工作,而ip协议自身没有内在机制来获取差错信息并处理。
为了处理这些错误,tcp/ip设计了icmp协议,当某个网关发现传输错误时,立即向信源主机发送icmp报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。
二.ICMP报文格式
Icmp所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。
。
类型字段可以有15个不同的值,以描述特定类型的icmp报文。
某些icmp报文还使用代码字段的值来进一步描述不同的条件。
表示icmp头部的数据结构
typedefstructicmp_hdr
{unsignedcharicmp_type;//消息类型
unsignedcharicmp_code;//代码
unsignedshorticmp_checksum;//校验和
unsignedshorticmp_id;//id号
unsignedshorticmp_sequence;//序列号
unsignedlongicmp_timestamp;//时间戳
}icmp_hdR,*picmp_hdR;
三ICMP报文的类型
各种类型的icmp报文如图所示,不同类型由报文中的类型字段和代码字段来共同决定。
图中的最后两列表明icmp报文是一份查询报文还是一份差错报文。
因为对icmp差错报文有时需要作特殊处理,因此我们需要对它们进行区分。
例如,在对icmp差错报文进行响应时,永远不会生成另一份icmp差错报文(如果没有这个限制规则,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,这样会无休止地循环下去)。
当发送一份icmp差错报文时,报文始终包含ip的首部和产生icmp差错报文的ip数据报的前8个字节。
这样,接收icmp差错报文的模块就会把它与某个特定的协议(根据ip数据报首部中的协议字段来判断)和用户进程(根据包含在ip数据报前8个字节中的tcp或udp报文首部中的tcp或udp端口号来判断)联系起来。
6.5节将举例来说明一点。
下面各种情况都不会导致产生icmp差错报文:
1)icmp差错报文(但是,icmp查询报文可能会产生icmp差错报文)。
2)目的地址是广播地址或多播地址的ip数据报。
3)作为链路层广播的数据报。
4)不是ip分片的第一片。
5)源地址不是单个主机的数据报。
这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。
这些规则是为了防止过去允许icmp
差错报文对广播分组响应所带来的广播风暴。
下面是几种常见的icmp报文:
1.响应请求
我们日常使用最多的ping,就是响应请求(type=8)和应答(type=0),一台主机向一个节点发送一个type=8的icmp报文,如果途中没有异常(例如被路由器丢弃、目标不回应icmp或传输失败),则目标返回type=0的icmp报文,说明这台主机存在,更详细(icmp是属于___的协议.)的tracert通过计算icmp报文通过的节点来确定主机与目标之间的网络距离。
2.目标不可到达、源抑制和超时报文
这三种报文的格式是一样的,目标不可到达报文(type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回type=3、code=3的icmp报文,它要告诉我们:
“嘿,别连接了,我不在家的!
”,常见的不可到达类型还有网络不可到达(code=0)、主机不可到达(code=1)、协议不可到达(code=2)等。
源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于icmp没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。
最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发icmp超时报文的产生。
超时报文的代码域有两种取值:
code=0表示传输超时,code=1表示重组分段超时。
3.时间戳
时间戳请求报文(type=13)和时间戳应答报文(type=14)用于测试两台主机之间数据报来回一次的传输时间。
传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以type=14的报文格式返回,发送方计算这个时间差。
一些系统不响应这种报文。
四.ICMP协议的运用
1icmp地址掩码请求与应答
icmp地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。
系统广播
它的icmp请求报文(这一过程与无盘系统在引导过程中用RaRp获取ip地址是类似的)。
无盘
系统获取子网掩码的另一个方法是bootp协议。
如图
icmp报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。
这样,发送端就可以把应答与请求进行匹配。
我们可以写一个简单的程序(取名为icmpaddrmask),它发送一份icmp地址掩码请求报
文,然后打印出所有的应答。
由于一般是把请求报文发往广播地址,因此这里我们也这样做。
目的地址(140.252.13.63)是子网140.252.13.32的广播地址。
sun%icmpaddrmask140.252.13.63
receivedmask=ffffffe0,from140.252.13.来3自3本机
receivedmask=ffffffe0,from140.252.13.来3自5bsdi
receivedmask=ffff0000,from140.252.13.来3自4svr4
在输出中我们首先注意到的是,从svr4返回的子网掩码是错的。
显然,尽管svr4接口已经设置了正确的子网掩码,但是sVR4还是返回了一个普通的b类地址掩码,就好像子网并
不存在一样。
svr4%ifconfigemd0
emd0:
flags=23
inet140.252.13.34netmaskffffffe0broadcast140.252.13.63
sVR4处理icmp地址掩码请求过程存在差错。
我们用tcpdump命令来查看主机bsdi上的情况,输出如图6-5所示。
我们用-e选项来查看
硬件地址。
发到广播地址的icmp地址掩码请求
注意,尽管在线路上什么也看不见,但是发送主机sun也能接收到icmp应答(带有上面“来自本机”的输出行)。
这是广播的一般特性:
发送主机也能通过某种内部环回机制收到一份广播报文拷贝。
由于术语“广播”的定义是指局域网上的所有主机,因此它必须包括发送主机在内。
接下来,bsdi广播应答,而svr4却只把应答传给请求主机。
通常,应答地址必须是单播地址,除非请求端的源ip地址是0.0.0.0。
本例不属于这种情况,因此,把应答发送到广播地址是bsd/386的一个内部差错。
RFc规定,除非系统是地址掩码的授权代理,否则它不能发送地址掩码应答(为了成为授权代理,它必须进行特殊配置,以发送这些应答。
参见附录e)。
但是,正如我们从本例中看到的那样,大多数主机在收到请求时都发送一个应答,甚至有一些主机还发送差错的应答。
最后一点可以通过下面的例子来说明。
我们向本机ip地址和环回地址分别发送地址掩码请求:
sun%icmpaddrmasksun
receivedmask=ff000000,from140.252.13.33
sun%icmpaddrmasklocalhost
receivedmask=ff000000,from127.0.0.1
上述两种情况下返回的地址掩码对应的都是环回地址,即a类地址127.0.0.1。
发送给本机ip地址的数据报(140.252.12.33)实际上是送到环回接口。
icmp地址掩码应答必须是收到请求接口的子网掩码(这是因为多接口主机每个接口有不同的子网掩码),因此两种情况下地址掩码请求都来自于环回接口。
2icmp时间戳请求与应答
icmp时间戳请求允许系统向另一个系统查询当前的时间。
返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(coordinateduniversaltime,utc)(早期的参考手册认为utc是格林尼治时间)。
这种icmp报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间(如某些unix系统提供的rdate命令)只能提供秒级的分辨率。
由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的一个缺陷。
icmp
时间戳请求和应答报文格式如图所示。
请求端填写发起时间戳,然后发送报文。
应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。
但是,实际上,大多数的实现把后面两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答的时间)。
篇三:
ip协议和icmp协议
这是主机b发出的ip数据报
这是e接受到的ip数据报
观察:
ttl128ttl127
结论:
变化的字段有:
“生存时间”和“首部校验和”。
原因:
主机b为路由器,数据包每经过一路由器“生存时间”字段的值就会减1,并重新计算校验和。
现象:
主机e捕获不到
经过路由器“生存时间”字段的值就会减1,当“生存时间”字段的值减至为0时,路由器将该报文丢弃不进行转发。
设置好,并在过滤器面板启用
直接广播地址包含一个有效的网络号和一个全“1”的主机号,一个直接广播的单一拷贝被发送到一个指定网段的网络,它被广播到该网络中的所有终端.
路由器会阻断不同分组中直接广播(路由器没有开启定向广播功能)
受限的广播地址为255.255.255.255.可以用在计算机不知道自己ip地址的时候,比如向dhcp服务器索要地址时、pppoe拨号时等。
在任何情况下,路由器都不转发目的地址为受限地址的数据报。
这样的数据报仅出现在本地的网络中。
127.0.0.1称为环回地址,常用于本机上软件测试和本机上网络应用程序之间的通信地址,分组永远不离开这个机器。