首页 > 代码库 > ICMP协议-路由交换原理4-【HCNA笔记】

ICMP协议-路由交换原理4-【HCNA笔记】

1、ICMP数据包格式

    ICMP协议属于网络层,是TCP/IP协议族的一个子协议,ICMP数据包被封装在IP报文中。网络中传递的ICMP包示意如下,:

ICMP数据包格式
帧头IP报头Data(ICMP包)FCS


TypeCodeChecksumdata



8位8位16位按需要

Type:消息类型。

Code:消息类型的具体参数。

Checksum:校验字段,用于检查消息是否完整;在ICMP重定向消息中用于指定网关IP地址;在Echo Reply消息中这个字段包含标识符和序号。

data:数据字段,根据不同使用需求,内容不一样。


2、ICMP消息格式

ICMP消息格式(加粗部分为常用)

Type

Code描述备注
00Echo Reply回显应答(ping应答)
3
0Network Unreachable网络不可达
31Host Unreachable

主机不可达

32Protocol Unreachable协议不可达(不支持该协议号)
33Port Unreachable端口不可达(主机没有开放该端口)
34Fragmentation needed but no frag.bit set需要进行分片但设置不分片比特
35Source routing failed源站选路失败
36Destination network unknown目的网络未知
37Destination host unknown目的主机未知
38Source host isolated (obsolete)源主机被隔离(作废不用)
39Destination network administratively prohibited目的网络被强制禁止
310Destination host administratively prohibited目的主机被强制禁止
311Network unreachable for TOS由于服务类型TOS,网络不可达
312Host unreachable for TOS由于服务类型TOS,主机不可达
313Communication administratively prohibited by filtering由于过滤,通信被强制禁止
314Host precedence violation主机越权
315Precedence cutoff in effect优先中止生效
4
0Source quench源端被关闭(基本流控制)
50Redirect for network对网络重定向
51Redirect for host对主机重定向
52Redirect for TOS and network对服务类型和网络重定向
53Redirect for TOS and host对服务类型和主机重定向
80Echo Request回显请求(Ping请求)
90Router advertisement路由器通告
100Route solicitation路由器请求
110TTL equals 0 during transit传输期间生存时间为0
111TTL equals 0 during reassembly在数据报组装期间生存时间为0
120IP header bad (catchall error)坏的IP首部(包括各种差错)
121Required options missing缺少必需的选项
130Timestamp request (obsolete)时间戳请求(作废不用)
140Timestamp reply (obsolete)时间戳应答(作废不用)
150Information request (obsolete)信息请求(作废不用)
160Information reply (obsolete)信息应答(作废不用)
170Address mask request地址掩码请求
180Address mask reply地址掩码应答


3、ICMP功能

    ICMP用于在主机、路由器之间传递控制消息,包括错误报告、交换受限控制和状态信息等。通常的应用场景是主机向远端发送数据而路由找不到远端,于是向主机发送一个ICMP报文告知其错误情况,我们称之为差错报文,需要注意ICMP的唯一功能是报告问题而不是纠正错误。另一种情况是主机向路由或远端发送一个ICMP请求报文,并获取ICMP回复报文以获取当前网络情况等信息,这种称之为询问报文。

    ICMP差错报文共5种:

ICMP差错报文
终点不可达包括网络不可达、主机不可达、协议不可达、端口不可达、需要分片但DF比特已置为1、源路由失败六种情况,当出现上述六种情况时就向源站发送终点不可达报文。
源站抑制当路由器或主机由于拥塞而丢弃数据时,就向源站发送源站抑制报文使源站知道应当将数据报文的发送速率放缓。
超时

当路由器收到生存时间为0的数据,或目的站在预先规定的时间内没有收到一个数据报的全部数据报片段均判定为超时,则丢弃数据并向源站发送超时报文。

参数问题路由器或目的站收到的数据报首部的字段存在值不正确则丢弃该数据,并向源站发送参数问题报文。
重定向
当路由器检测到源站使用非优化路由时就会向该主机发送一个ICMP重定向报文,请求主机改变路由。

    为避免ICMP差错报文对广播分组响应所带来的广播风暴,以下五种情况都不会导致ICMP差错报文的产生:

    1)路由器或主机在收到异常的ICMP差错报文时不会产生新的差错报文。

    2)目的地址是广播地址或多播地址的IP数据报。

    3)作为链路层广播的数据报。

    4)不是IP分片的第一片,避免每个分片都产生一个新的差错报文。

    5)源地址不是单个主机的数据报。

    ICMP询问报文有四种:

ICMP询问报文
回送请求和回答ICMP回送请求报文是主机或路由器向一个特定目的端发出的询问,收到报文的目的端必须发送ICMP回送应答报文给源端。目前在于测试目的端是否可达并了解其有关状态。
时间戳请求和回答源端可以发送一个ICMP时间戳请求报文向另一个系统查询当前的时间,该报文的好处是可提供毫秒级的时间分辨率。
掩码地址请求和回答主机使用ICMP掩码地址请求报文可向子网掩码服务器得到某个接口的掩码地址。
路由询问和通过主机将路由器询问报文进行广播或多播,收到询问的路由器就使用路由器通过报文广播其路由选择信息。通过这种方式主机可了解连接在本网络上的路由器是否正常工作。

    

4、ICMP应用

    Ping:

    Ping是检测网络连通性的常用工具,同时也能收集其他相关信息。用户可以在Ping命令中指定不同参数,常用配置参数说明如下:

-a source-ip-address指定ICMP报文的源IP地址
-c count指定发送报文的次数,缺省发送5个
-h ttl-valuse指定TTL的值,缺省是255
-t timeout指定等待应当报文的超时时间

    Tracert:

    源主机想知道访问目的主机的路径,它向第一个路由器发送一个TTL值为1的ICMP包且使用一个目的主机无法识别的端口,第一个路由器A收到该包后先将TTL值减1发现此时TTL=0于是不再转发并返回一个ICMP包给源主机,其中就包含了路由器A的地址。主机A收到路由器A的应答知道了路由器A的地址,便再次发送一个TTL值为2的ICMP包,路由器A收到该包后会向下转发则路由器B会收到该包,由于TTL=0则路由器B会返回一个ICMP包给源主机。通过这种方法层层传递到目的主机,目的主机发现该包端口太大无法识别于是向源主机回复一个目的不可达的ICMP包,源主机收到这个回复的包就知道自己发送的包已到达目的主机。则整个路径的IP就被源主机获悉。


【需要分片但DF比特已置为1】路由器收到一份需要分片的数据报,而其IP首部中的DF字段被置为1,表明不需要分片,此时路由应向源主机发送一个ICMP差错报文。


ICMP协议-路由交换原理4-【HCNA笔记】