Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1755433
  • 博文数量: 413
  • 博客积分: 8399
  • 博客等级: 中将
  • 技术积分: 4325
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-09 10:44
文章分类

全部博文(413)

文章存档

2015年(1)

2014年(18)

2013年(39)

2012年(163)

2011年(192)

分类: C/C++

2011-12-21 20:07:59

网际协议:差错与控制报文(ICMP)
Internet Protocol: Error And Control Messages (ICMP)

1. If a router cannot route or deliver a datagram, of if the router detects an unusual condition that affects its ability to forward the datagram, the router needs to inform the original source to take action to avoid or correct the problem.

本章介绍主机和路由器之间用来传递“控制或差错”信息的机制——ICMP,路由器使用该机制来报告问题,主机使用该机制来测试目的站是否可达。

2. 网际控制报文协议(Internet Control Message Protocol——ICMP)
除了通信线路和处理器故障之外,当目的机器临时或永久断开网络连接、生存时间计时器或者中间路由器拥塞的无法处理进入的通信量时,IP交付数据报就会失败。为了路由器可以报告差错或提供关于意外情况的信息,设计人员给TCP/IP协议补充了一个特殊用途的报文机制——ICMP,它是IP不可缺少的一部分。虽然ICMP报文是使用IP来封装和发送的,但它不是高层协议,它是IP的一个必要组成部分。

与所有其它通信类似,ICMP报文被放在IP数据报的数据部分,通过互联网进行传送。ICMP报文的最终目的地不是一个应用程序,也不是目的机器上的用户,而是目的机器上的网际协议软件(即IP软件

ICMP允许路由器向其它路由器或主机发送差错或控制报文;ICMP是让一台机器上的IP软件与另一台机器上的IP软件之间提供通信。(IP软件  <<----->> ICMP <<----->> IP软件)

最初的ICMP是为了允许路由器向主机报文交付出错的原因,但是ICMP的使用并不局限于路由器,一台主机可以用ICMP与路由器或另一台主机通信。

3. ICMP并没有完全为每个可能的差错指明采用何种措施。当一个数据报产生错误时,ICMP只能向数据报的最初源站报告错误情况;源站的IP软件必须把错误告诉一个单独的应用程序或采取其它措施来纠正问题。

大多数的差错出自最初源站,但并非所以。ICMP只能向最初的源站报告问题,不能用来把问题通知该中间路由器。

4. ICMP Message Delivery(CIMP报文的交付)
ICMP数据报文,是用IP数据报来交付的,没有额外的可靠性或优先级。因此,ICMP报文本身也可能会丢失或被丢弃。如果携带ICMP的IP数据报文产生了差错,则差错处理过程会产生异常。产生异常是为了避免出现有关差错报文的差错报文。

5. ICMP报文格式
尽管每种ICMP报文有自己的格式,但它们开头的三个字段都是相同的:
1)一个8字节的报文类型字段(TYPE)用来标志报文
2)一个8字节代码CODE)字段提供有关报文类型的更多信息;
3)一个16位校验和字段CHECKSUM),ICMP使用和IP相同的加法校验和算法,但是ICMP校验和的计算
     只包括ICMP报文(也就是说它不管IP数据报文的部分)。

4)报告差错的ICMP报文总是包括从产生问题的IP数据报中取出来的首部一些数据部分的字节
ICMP报文返回出错数据报的首部外还加上一些数据部分的字节的原因是:
为了让接收方能够更准确的判断是哪个或哪些协议以及哪个应用程序负责该数据报。
因为:TCP/IP协议族中的更高层协议被设计为:将最终要的信息编码到IP首部之后的前64位
     Type Field             ICMP Message Type
-------------------------------------------------------------------------------------
         0                        Echo Reply       (Echo应答)
         3                        Destination Unreachable  (目的站不可达)
         4                        Source Quench (源站抑制)
         5                        Redirect (change a route)     (重定向)
         8                        Echo Request   (Echo请求)
         10                      Router Solicitation (obsolete)
         11                      Time Exceeded for a Datagram
         12                      Parameter Problem on a Datagram
         13                      Timestamp Request
         14                      Timestamp Reply
         15                      Information Request (obsolete)
         16                      Information Reply (obsolete)
         17                      Address Mask Request (obsolete)
         18                      Address Mask Reply (obsolete)


5.1 Ping——测试目的站的可达性和状态
TCP/IP 协议提供了一些工具来帮助网络管理员或用户识别网络问题。最常用的调试工具之一是使用ICMP的echo请求和echo应答报文(ping命令)。

主机或路由器向某个指明的目的站发送ICMP回送请求报文。任何收到回送请求的机器形成一个回送回答,并把它返回给最初的发送方。回送请求包含一个可选的数据区,回答中含有在请求中所发送数据的一个副本。回送
请求及其关联的回答可用来测试目的站是否可达和是否响应。

5.2 目的站不可达的报告
当路由器无法转发或交付一个IP数据报时,它向最初源站发回一个目的站不可达(destination unreachable)的报文。

5.3 拥塞和数据报流量控制——源站抑制(source quench)
当一些数据报到达得太快,以至于主机或路由器无法处理时,它们就临时在内存中排队。如果通信量继续产生,主机或路由器最终会耗尽内存,从而必须放弃到达的其他数据报。机器使用ICMP源站抑制(source quench)报文向最初的源站报告数据报被丢弃的情况。源站抑制报文是发给源站的一个请求,请求它减慢当前的数据报传输速率。

5.4 来自路由器的改变路由情况——(Redirect)
主机一开始只有最少的信息开始,依靠路由器来更新它的路由表。在一种特殊情况下,当路由器检测到一个主机在使用非优化的路由时,它向该主机发送一个称为重定向(redirect)的ICMP报文,请求该主机改变其路由。路由器也把原来的数据报转发给它的目的站。

5.5 ICMP超时报文——(time exceeded)
一旦路由器因为某个数据报的跳计数器递减到0,或因为等待数据报分片时出现超时而丢弃它,路由器就向数据报的源站发回一个ICMP超时(time exceeded)报文。

5.6 报告其它问题
当路由器或主机发现一个数据报出现问题,而该问题又不属于前面提到的ICMP差错报文的范畴,它就向最初源站发送一个参数问题(parameter problem)报文。

5.7 时间同步和传输时间估计——(timestamp request)
CP/IP 协议族包含几个能够用来同步时钟的协议。一种最简单的技术是使用ICMP报文从其他机器获取时间。请求的机器向另一台机器发送一个ICMP 时间戳请求(timestamp request)报文,请求它返回当前日期的时间值。接收的机器给发出请求的机器返回一个时间戳回答(timestamp reply)报文。

5.8 不再需要的较早的ICMP报文类型
起初,ICMP定义了一组报文,主机在启动时使用这些报文确定其IP地址、路由器的地址以及在网络上使用的地址掩码。现在,称为DHCP的协议提供了一次交换中所需的全部信息,较早的ICMP报文现在已不再使用。

阅读(1108) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~