ICMP协议

ICMP协议

 

前言

 

今天去学车,已累成狗,,回来还打了一会儿篮球,虽然累,但是心情不错啊,这几天好好研究研究如何不被人阴,别再让别人限速了还傻傻的不知道,发现一个不错的小软件,叫做按键精灵,想学学啊.

 

 

 

ICMP协议

 

ICMP(Internet Control Message Protocol)是介于网络层和传输层的协议.它的主要功能是传输网络诊断信息.

 

ICMP传输的信息可以分为两类,一类是错误信息,这一类信息可用来诊断网络故障.我们已经知道,IP协议的工作方式是”best effort”.如果IP包没有被传输到目的地,或者IP包发生错误,IP协议本身不会做进一步的努力.但是上游发送IP包的主机和接力的路由器并不知道下游发生了错误和故障,它们可能继续发送IP.通过ICMP,下游的的路由器和主机可以将错误信息汇报给上游,从而让上游的路由器和主机进行调整,需要主要的是,ICMP只提供特定类型的错误汇报,它不能帮助IP协议成为”可靠(reliable)”的协议.另一类信息是咨询性质的,比如某台计算机询问路径上的每个路由器都是谁,然后各个路由器同样用ICMP包回答.

 

备注:ICMP基于IP协议,也就是说,一个ICMP包需要封装在IP包中,然后在互联网传送.ICMPIP套装的必须部分,也就是说,任何一个支持IP协议的计算机,都要实现ICMP.

 

ICMP包的结构:

 

 

...有点复杂,但是那是注释,内容不复杂,下面看我给大家一一道来:

 

ICMP包都会有Type,Code,Checksum三部分.Type标识ICMP包的大的类型,Code是一个Type之内细分小类型.针对不同的错误信息或者资讯信息,会有不同的TypeCode.从上面我们可以看出,ICMP支持的类型非常多,由多种多样的功能.Checksum IP协议的header Checksum相类似,但与IP协议中checksum只校验头部不同,这里的Checksum所校验的是整个ICMP(包括头部和数据)

 

余下的ICMP包格式根据不同的类型不同.另一方面,ICMP包通常是由某个IP包触发的.这个触发IP包的头部和一部分数据会被包含在ICMP包的数据部分.

 

ICMP协议是实现ping命令和traceroute命令的基础.这两个工具常用于网络排错.

 

 

 

常见的ICMP包类型

 

回音(Echo)属于资讯信息.ping命令就是利用了该类型的ICMP.当使用ping命令的时候,将向目标主机发送Echo-询问类型的ICMP,而目标主机在接收到该ICMP包之后,会回复Echo-回答类型的ICMP,并将询问ICMP包包含在数据部分.ping命令是我们进行网络排查的一个重要工具.例如一个IP地址可以通过ping命令收到回复,那么其他的网络协议通信方式也很有可能成功.

 

源头冷却(source quench)属于错误消息.如果某个主机快速的向目的传送数据,而目的地主机没有匹配的处理能力,目的主机可以向出发主机发出给类型的ICMP,提醒出发主机放慢发送速度.

 

目的地无法到达(Destination Uncreachale)属于错误信息.如果一个路由器接收到一个没办法进一步接力的IP,它会想出发主机发送该类型的ICMP.比如当IP包到达最后一个路由器,路由器发现目的地主机down,就会向出发主机发送目的地无法到达(Destinaton Unreacherable)类型的ICMP.目的地无法到达还有其他可能的原因,比如不存在接力路径,比如不被接收的端口号等等.

 

超时(Time Exceded)属于错误信息.IPV4中的Time to Live(TTL)IPV6中的Hop Limit会随着经过的路由器而递减,当这个区域值减为0,就认为该IP包超时(Time Exceeded).Time Exceeded就是TTL减为0时路由器发给出发地主机的ICMP,通知它发生了超时错误.

 

traceroute就利用了这种类型的ICMP.traceroute命令用来发现IP接力路径上的各个路由器.它向目的地发送IP,第一次的时候,TTL设为1,引发第一个路由器的Time Exceeded错误.这样,第一个路由器恢复ICMP,从而让出发主机知道途径的第一个路由器的信息.随后TTL被设置为2,,3,4...直到到达目的主机.这样,沿途的每个路由器都会向出发主机发送ICMP包来汇报错误.tracerouteICMP包的信息打印在屏幕上,就是接力路径的信息了.

 

重新定向(redirect)属于错误信息.当一个路由器收到一个IP,对照其routing table,发现自己不应该受到该IP,它会向出发主机发送重新定向类型的ICMP,提醒出发主机修改自己的routing table.比如下面的网络:

 

 

假如145.1发送到145.15IP,结果被中间的路由器通过145.17NIC收到.那么路由器就会发现,根据自己的routing table,这个IP包要原路返回.那么router就可以判断出145.1routing table可能有问题.所以路由器会向145.1发送redirect类型的ICMP.

 

 

 

IPV6Neighbor Discovery

 

ARP协议用于发现周边的IP地址和MAC地址的对应.然而,ARP协议只用于IPV4,IPV6并不使用ARP协议.IPV6包通过邻居探索(ND,Neighbor Discovery)来实现ARp的功能.ND的工作方式与ARP类型,但它基于ICMP协议.ICMP包邮Neighbor Solicitatin Neighbor Advertisement类型.这两个类型分别对应ARP协议的询问和回复信息,

 

 

 

总结

 

ICMP协议是IP协议的排错助手,它可以帮助人们及时发现IP通信中出现的故障.基于ICMPpingtraceroute也构成了重要的网络诊断工具.然而需要注意的是,尽管ICMP的设计是出于好的意图,ICMP却经常被黑客借用进行网络攻击,比如利用伪造的IP包引发大量的ICMP回复,并将这些ICMP包导向受害主机,从而形成DoS攻击.redirect类型的ICMP包可以引起某个主机更改自己的routing table,所以也被用做攻击工具.许多站点选择忽视某些类型的ICMP包来提供自身的安全性.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值