ICMP

   http://blog.csdn.net/weikanghuan/article/details/50825762?locationNum=6&fps=1

曾经看过这样的一道面试题,icmp报文是基于什么传输层协议进行传输的?顺着他的思路传输层的两个主要协议tcp和udp,区别也就是在于是否保障可靠性的传输。当时还没有系统的学习过ICMP的报文结构和组成,因此也没有过多思考,基于tcp。然而实际上来说,ICMP报文是不基于传输层的协议进行传输的,它只是对ip功能的一个补充。

        ICMP报文通过ip报文发送,ICMP报文当做是ip数据包的数据部分,而IP数据包又被放倒了以太网的数据帧中的数据区。

        我们知道ip数据报的首部有一个协议类型的字段,这个部分封装的是传输层的协议的类型,当ip数据部分为ICMP报文时,这里的首部协议类型字段也将改为1,表示为ICMP报文。

                                                                   

        那么,ICMP到底是什么样的报文,它有什么用处吗?

        首先,ICMP报文分为了三类:差错控制类,请求/应答类,通知类。这三类报文包括了所有的ICMP报文的类型。

        我们先看看ICMP报文的结构:

                                                            

        icmp的不同的报文的类型中,首部的结构是确定的。其中校验和部分和ip首部的校验和的计算方法相同,并且这个计算方法贯穿于整个的icmp报文中。

        类型1:差错空中类报文

                 发送差错控制类的报文的规则如下:

                                                          1. icmp差错控制报文的数据区包括发生差错的ip数据包的首部和数据区的至少前64bite。

                                                           2.仅能向数据包的源端发送差错控制报文,不能向中间的路由器报告差错。

                                                           3.当携带差错控制的报文发生差错时,不再报告差错。

                                                           4.对于进行了分片的ip数据包,紧能对第一个分片应用icmp协议。

                  1.目的站不可达

                                当路由器无法转发或者交付数据时,使用icmp报文通知数据包的发送者,并且告诉不可达的原因。

                  2.超时报文

                                发送超时报文的两种情况:1 TTL值为0   

                                                                                 2 数据报分片重组超时。

                  3 参数错误报告

                                  不是以上两种情况的错误时,就会向源主机报告此报文。

        类型2:请求/应答类报文

                   1.回送请求和回送应答报文

                                  测试网络的连通性的时候,可以用这种类型的报文,ping 的应用。

                    2.地址掩码请求和应答报文

                                  当主机使用子网编码时,为了知道本网络中的子网掩码,主机可以向路由器发送地址掩码请求报文,路由器收到这个报文后,发送携带有掩码的应答报文。

                                  (此时,主机可能知道路由器的IP地址,这时就直接发给路由器,也肯那个不知道ip地址,这时就要以广播的方式进行发送,路由器收到后再单播给主机。)

                    3.时戳请求和应答报文

                                 

                     4.路由器通告和路由器恳求报文

                                   通告报文:是路由器在网络中定时的向主机发送自己存在的通告,告诉主机自己还在正常的运行着。

                                  恳求报文:这个报文是主机发送的,用于需找默认的路由

                                  (注意,这两种报文都是可以主动发送的,当一种报文发送后,另外的一种报文在接收方作为响应报文发送给发送方。)

        类型3:单向通知控制类报文

                     1.源站抑制报文

                                   这种报文产生的原因是:路由器接收的数据是有上限的,不能无限的接收,当路由器中缓冲区快满时,路由器会向源主机发送这种类型的报文,告诉主机要降低发送速度。如果一段时间内,源主机没有收到源站抑制的报文,就会提高发送速度。

                      2.重定向报文

                                 路由器选路时,不一定都选择最近的路,优化路由选路。

         我们回到开始提出的问题,icmp到底是基于什么传输层的协议的,答案是它根本不基于传输层的协议,只是封装在了ip数据包中。

         icmp报文的应用:ping    traceroute等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值