网络层——icmp协议(05)

平原理与ICMP协议

,,<强>

,,,,

原理

,,,, <强> ping ,程序是用来探测<强>主机到主机之间是否可通信强,如果不能平<强> 强到某台主机,表明不能和这台主机建立连接。<强> ping ,使用的是<强> ICMP协议,<强>它发送ICMP回送请求消息给目的主机。<强> ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。强如果源主机在一定时间内收到应答,则认为主机可达只,,,

<强>, ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。

   ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部+ 1472字节<数据大?38字节

    ICMP首部:8位类型+8位代码+16位校验和+(不同的类型和代码,格式也有所不同)

网络层--icmp协议(05)

 网络层--icmp协议(05)

        icmp协议构成的数据包通过抓包发现是有序的随机一段或者几段的字母表





   ,主机路由

  对于request的抓包,可以看到类型为8,代码为0,代表请求回显(ping请求),同时有16位的校验和 


网络层--icmp协议(05)


**************************************************************************************


对于reply的抓包,可以看到类型为0,代码为0,代表回显应答(ping应答)

网络层--icmp协议(05)



附具体的ICMP报文的类型

网络层--icmp协议(05)

 



ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  1. ping查询

  2. 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)

  3. 时间戳查询(可以用来同步时间)

而差错报文则产生在数据传送发生错误的时候。就不赘述了。

  • 2.ICMP的应用,平<强>

<强> ping 可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会平<强> 一下这个网站。<强> ping 会回显出一些有用的信息。一般的信息如下:

从10.4.24.1回复:字节=32 time<1 ms TTL=255
从10.4.24.1回复:字节=32 time<1 ms TTL=255
从10.4.24.1回复:字节=32 time<1 ms TTL=255
从10.4.24.1回复:字节=32 time<1 ms TTL=255

<>强,,,,TTL的值从目的主机到源主机,每经过一个路由减1,实际上也可以通过TTL的大小判断目的主机的系统,默认windows系统是128年,linux系统是64。

<李>

ICMP的应用,Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管平<强> 强工具也可以进行侦测,但是,因为ip头的限制,平<强> 强不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。

Traceroute的<强>原理是非常非常的有意思,它受到目的主机的ip后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到到达目的主机。这样,Traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由ip的问题。

有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,比如说80年,比如说23日等等。而Traceroute发送的是端口号在30000年(真变态)的UDP报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了

网络层——icmp协议(05)