2024年4月16日发(作者:)

实验六 基于ICMP协议的ping程序设计实验

一、实验目的

 分析ICMP协议报文,理解和掌握ICMP协议报文头各字段的含义和作用;

 熟悉原始套接字编程;了解网络结构与网络传输底层协议。

二、实验时数:4小时

三、实验环境

 连通的局域网络、若干PC机、Windows XP /2000等操作系统、Visual C等编

程软件等。

四、实验要求

 掌握ICMP协议报文格式和各字段含义;

 在WINDOWS环境下设计与实现基于ICMP协议的PING程序,该程序可以

用于测试网络连通性。具体要求如下:

在命令提示符下输入:

PING ***.***.***.***

其中***为目的主机的IP地址;不要求支持域名,对是否带有开关变量也

不做要求,当不带开关变量时,要求返回4次响应。

返回信息的格式:

REPLY FROM ***.***.***.***

REQUEST TimeOut (无法PING通的情况)

五、实验原理

1、PING的工作原理

ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,

表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送ICMP回送请求消

息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。

如果源主机在一定时间内收到应答,则认为主机可达。

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

因此,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是

ICMP(网络控制报文)协议。

当传送IP数据包发生错误,比如主机不可达,路由不可达等等,ICMP协议将会

把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这也就是为什么

说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和

8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。

PING利用ICMP协议包来侦测另一个主机是否可达。其原理是用类型码为0的

ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔

时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。

2、RAW模式的SOCKET编程

PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来

工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET

编程。

熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等。

3、ICMP协议

网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据

传输失败。位于网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的

故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息

传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。

ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议,它

的报头长8字节,结构如下图所示:

比特0 7 8 15 16 比特31

类型(0或8)

标识符

数据

代码(0) 检验和

序号

ICMP协议提供的诊断报文类型如下表所示:

类型

0

3

4

5

8

9

10

11

12

13

14

15

16

17

18

描述

回应应答(Ping应答,与类型8的Ping请求一起使用)

目的不可达

源消亡

重定向

回应请求(Ping请求,与类型8的Ping应答一起使用)

路由器公告(与类型10一起使用)

路由器请求(与类型9一起使用)

超时

参数问题

时标请求(与类型14一起使用)

时标应答(与类型13一起使用)

信息请求(与类型16一起使用)

信息应答(与类型15一起使用)

地址掩码请求(与类型18一起使用)

地址掩码应答(与类型17一起使用)

ICMP提供多种类型的消息为源端节点提供网络层的故障信息反馈,它的报文类型