您的位置:首页 > 理论基础 > 计算机网络

TCP/IP协议族【第9章网际控制报文协议ICMP】

2017-11-14 19:47 239 查看

 9.1 引言

IP协议的缺点:IP协议没有差错报告或差错纠正机制;IP协议缺少一种为主机和管理查询的机制;

ICMP为弥补以上缺点而设计,配合IP协议使用.

位置:



ICMP本身是网络层协议,但它的报文首先要封装成IP数据报,再传送给下一层。(IP数据报协议字段为1)



9.2 报文              

ICMP报文分为两大类

类型一:差错报告报文(error-reporting message)

   当路由器或终点主机在处理IP报文时遇到问题。

类型二:查询报文(query message)

   成对出现,帮助网络管理员从一个路由器或主机得到特定信息。



9.2.1 报文格式



ICMP报文由8个字节的首部和可变长的数据部分组成。

9.2.2 差错报告报文

ICMP总是把差错报文报告给原始的数据源。一共有5种差错可处理如图所示:





终点不可达 (Destination Unreachable Message)
当路由器不能给数据报找到路由或主机不能交付数据报时,就丢弃这个数据报,同时发送一个ICMP终点不可达报文。

类型为3,代码0-15(网络不可达、主机不可达、协议不可达、端口不可达、需要分片等。)
其中代码2协议不可达.3端口不可达只能有主机创建,其余为路由器创建。



源点抑制
IP协议没有流量控制或者拥塞控制机制,在ICMP的源点抑制报文就是为了给IP增加了一种流量控制而设计的。源点抑制报文通知源点,由于拥塞,在路由器或目的主机中已经丢弃了数据报,源点必须放慢数据报的发送,直到拥塞程度减轻为止。
类型为4.代码为0



超时
 当路由器收到生存时间字段值为0的数据报时,就丢弃这个数据报,并向源点发送超时报文。

当最后的终点在规定的时间内,没有收到所有的分片时,它就丢弃已收到的分片,并向源点发送超时报文。



类型11,代码:0供路由器使用,表示数据报的生存时间值为零。代码1 :给主机使用,表示不是所有的分片都按时到达了。

这里用哪个抓包工具验证下。



为了模拟超时,我用-i来把ttl设置小一些。
应该是echo request, 4个超时ICMP差错报



然后看一下具体数据,



这是请求的数据。红色的14位是帧头。划蓝色的20位是IP头,接下来黄线的是ICMP首部(8位),剩余的icmp
data32(填充了数据)
一共是74字节。
下面是超时响应的报文。


 
可以看到type是11,code;0是路由器
黄线部分14位是帧头,蓝线部分20位IP头。绿线部分8位是ICMP头,红线部分20位是ICMP报文包含的IP头。剩下的8位是数据报数据的前8个字节。
其中红色部分圈起来的是收到IP的校验码(header checksum).跟请求的校验码0不一样,其余的(包含的source,destnition)一致。
参数问题(parameter-problem)
 存在二义性或缺少字段值,将丢弃数据报。
类型是12.代码为0或者1

代码0:在首部的某个字段中有差错或二义性。这种情况下,指针字段值指向有问题的字节。

代码1:表示缺少所需的选项部分。这种情况下不是用指针

改变路由(direction)
主机在开始工作时只有很小的路由表,这个路由表逐渐增大和更新,完成这项工作的工具之一就是改变路由报文.

类型是5.代码:0-3
代码0:对特定网络路由的改变

代码1:对特定主机路由的改变

代码2:基于指明的服务类型对特定网络路由的改变

代码3:基于指明的服务类型对特定主机路由的改变

改变路由报文是有路由器向同一个本地网络主机发送的。

9.2.3 查询

回送请求(echo-requst)与回答(echo-reply)
回送请求和回送回答组合起来确定了两个系统是否能够彼此通信;

回送请求报文可以由主机或路由器发送,收到回送请求报文的主机或路由器发送回送回答报文;

回送请求和回送回答报文可由网络管理员来使用,用来检查IP协议的工作情况;

用回送请求和回送回答报文可测试某个主机的可达性,通常调用ping命令来完成。





时间戳请求和回答



时间戳请求和时间戳回答报文可用来计算数据报从源点到终点所需的单向时间,以及再返回源点所需的往返时间。所用的公式是:

发送时间=接收时间戳的值-原始时间戳的值

接收时间=分组返回的时间-发送时间戳的值

往返时间= 发送时间+接收时间

9.2.4 校验和

发送端步骤:

1.把校验和字段置0

2.计算16位(首部+数据)之和

3..把得到的和求反码,得到校验和

4. 把校验和存储在校验和字段中。

校验和检测

1计算16位(首部+数据)之和

2. 把所得到的和求反码

3. 判断2的结果是不是0,是0则接受、

书上这里一笔带过,其实要去看看实现的代码有位运算,看不懂。

9.3 排错工具

9.3.1 ping

可以看上面截图,ping会发送请求报文,并且会计算往返时间(round_trip time)RTT.

9.3.2 traceroute

Traceroute功能:用来跟踪一个分组从源点到终点的路径。

实现原理:

1)源主机A向目的主机B分别发送多次UDP分组,将TTL值设为1,2,3…n;

2)每过一跳路由器,TTL减1,利用收到的超时ICMP报文确定所过路由器IP;

3)在UDP报文中封装一个UDP协议不支持的端口,目的主机B收到后,无法交付到相应的应用程序

数据报被丢弃,并向A发送ICMP终点不可达差错报文。(类型3,代码3)。

这里就不截屏了。注意:当traceroute在5秒内收不到响应,会打印星号*,然后试下一跳。

9.4 ICMP软件包 

9.4.1 输入模块

9.4.2 输出模块
补充知识:
网络攻击,DOS攻击。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: