因特网属于什么拓扑结构,因特网属于广域网还是局域网

  

  一. ICMP简介   

  

  IP协议是一种不可靠的无连接协议。当数据包通过多个网络传输时,可能会出现错误、目的主机无响应、数据包拥塞和数据包丢失等问题。为了处理这些问题,在IP层引入了另一种协议,ICMP(互联网控制信息协议)。有两种类型的ICMP消息:错误消息和查询消息。ICMP消息封装在IP消息中传输。IP协议、传输层协议(TCP或UDP)和用户进程可以使用ICMP消息。ICMP和IP一样,是不可靠的传输,ICMP的信息可能会丢失。为了防止无限制的连续发送ICMP报文,对于ICMP报文传输中的问题,将不发送ICMP错误报文。   

  

  二、ICMP报文格式   

  

  ICMP由一个8字节的internet控制消息协议报头和一个可变长度的数据部分组成。如下图所示,第一个字段是ICMP的类型,它定义了报文类型。第二个字段是代码字段,它指示发送这种特定消息类型的原因。校验和字段为互联网控制消息协议提供错误检查。对于不同类型的互联网控制消息协议,ICMP报头的最后4个字节的格式不同,具体格式将在下面讨论。   

  

  错误消息的数据部分包含导致错误的原始数据。查询的数据部分携带基于查询类型的附加信息。   

  

     

  

  图4-1 ICMP消息的一般格式   

  

  类型:8位字段,用于描述ICMP报文的具体类型。 Code: 8位字段,进一步描述某些ICMP报文的具体描述。校验和:16位字段,包含该ICMP报文的校验和。三。ICMP封装   

  

  ICMP消息封装在IP数据报中。具体封装方法如下图所示:   

  

     

  

  图4-2 ICMP封装   

  

  四、ICMP报文类型   

  

  ICMP消息可以分为两类:错误消息和查询消息,如下图所示:   

  

     

  

  图4-3 ICMP消息的类型   

  

  错误报告路由器或主机在处理IP数据报时遇到的问题。查询成对出现,这有助于主机或网络管理员从一台路由器或另一台主机获取特定信息。例如,主机使用ICMP回应请求和回应回复消息来发现它们的邻居。下表列出了每种类型的ICMP消息。   

  

  表4-1 ICMP消息   

  

     

  

  5.ICMP查询消息ICMP查询消息可以获取特定主机或路由器的信息,并可以诊断一些网络问题。ICMP查询报文包括四对不同类型的报文,分别是echo请求和回复报文、时间戳请求和回复报文、地址掩码请求和回复报文以及路由器查询和公告报文,如下图所示。   

  

     

  

  图4-4查询消息   

  

  1.回应请求并回复   

  

  回应请求消息和回应回复消息用于确定两个节点(主机或路由器)是否可以正常通信。用户可以使用这对消息来查找网络问题。或者主机路由器可以向另一台主机或路由器发送回应请求消息。收到回应请求消息的主机或路由器会生成回应回复消息,并将其返回给原始发送方。回应请求和回应回复消息可用于确定在IP级别是否可以进行通信。因为ICMP消息封装在IP数据报中,所以发送回应请求的主机在收到回应回复消息时,可以使用IP数据报在发送方和接收方之间进行通信。此外,它还证明了链路中的路由器可以接收、处理和转发数据报。回应请求和回应回复消息也可用于检查是否可以到达另一台主机。用户可以调用packet internet searcher (ping)命令来完成此操作。现在,大多数系统都提供了ping命令,它可以生成一系列echo请求或echo回复消息。Echo请求和echo回复消息也可以用来验证一个节点是否正常工作。可以向被测节点发送echo请求消息,该消息的数据字段包含一条信息。如果被测节点在echo回复消息中准确地重复了这条信息,就说明该节点工作正常。不然就是这个节点有问题。下图显示了回应请求和回应回复消息的格式。值8表示回应请求消息,值0表示回应回复消息。并且标识符和序列号字段在协议中没有正式定义,可以由发送者任意使用。   

  

     

  

  图4-5 ICMP回应请求和回复消息   

  

  2.时间戳请求和响应   

  

  两台机器(主机或路由器)可以使用时间戳请求和时间戳回复消息来确认IP数据报在这两台机器中。   

之间传输所需要的时间,也可以用作两个机器时钟的同步。这两个报文的格式如下图所示。其中,类型值为13表示时间戳请求报文,类型值为14表示时间戳应答报文。

  

  

图4-6 时间戳请求和应答报文

  

在报文格式中3个时间戳字段的长度都是32位。每一个字段都保存一个整数,代表从通用时间(格林尼治标准时间)的午夜起测量出的时间,以毫秒为单位。 源节点在时间戳请求报文的原始时间戳字段填入它的时钟所显示的通用时间。其它两个时间戳字段都填入零。 收到时间戳请求报文后,终点将生成时间戳应答报文。终点把请求报文中的原始时间戳字段值复制到应答报文的同一个字段中。然后在接收时间戳字段中填入收到这个请求报文时其时钟所显示的通用时间。最后,终点在应答报文将要发送时在发送时间戳字段中填入其时钟所显示的通用时间。 时间戳请求和时间戳应答报文可以用来计算数据报从源点到终点所需的时间,还可以用于计算数据报再返回到源点所需的时间。3.地址掩码请求和应答 要得到掩码,主机应该向局域网上的路由器发送地址掩码请求报文。若主机知道路由器的地址,它就把请求直接发送给该路由器。若主机不知道路由器的地址,则它就广播地址掩码请求报文。路由器收到地址掩码请求报文后,用地址掩码应答报文进行响应,向主机提供所需的掩码。 地址掩码请求和地址掩码应答报文的格式如下图所示。其中,类型值为17表示地址掩码请求报文,类型值为18表示地址掩码应答报文。在请求报文中,地址掩码字段填入全0。当路由器把地址掩码应答发回给主机时,这个字段就包含真正的掩码。

  

  

图4-7 地址掩码请求和应答报文

  

无盘工作站在启动时是需要地址掩码的,它会使用RARP协议查找完整的IP地址,在收到IP地址以后,无盘工作站就可使用地址掩码请求报文找出地址掩码,从而确定IP地址的哪一部分定义了子网号,哪一部分定义了主机号。4.路由器询问和通告 主机若想把数据发送给另一个网络上的主机,就需要知道连接到该网络上的路由器的地址。此外,这个主机还需要知道这些路由器是否正常工作。路由器询问报文和路由器通告报文可以完成这项工作。主机可把路由器询问报文进行广播(或多播)。收到询问报文的一个或几个路由器就使用路由器通告报文广播其路由选择信息。甚至在没有主机询问时,路由器也可周期性地发送路由器通告报文。路由器发送出通告报文时,它不仅通告了自己的存在,而且也通告了它所知道的所有在这个网络上的路由器。下图给出了路由器询问报文的格式。

  

  

图4-8 路由器询问报文

  

下图给出了路由器通告报文的格式。生存期字段表示这个报文在多长时间内是有效的。在通告报文中每一个路由器的项目有两个字段:路由器地址和地址优先级。地址优先级定义了路由器的等级。优先级用来选择某个路由器作为默认路由器。若地址优先级为零,则这个路由器就被认为是默认路由器。若地址优先级是0x80000000,则这个路由器永远不能被选为默认路由器。

  

  

图4-9 路由器通告报文

  

六、ICMP差错报文

  

ICMP差错报文用来报告差错。虽然现代的技术已经制造出很可靠的传输媒体,但差错仍然存在,因而必须进行处理。正如在实验三中所讨论的,IP是个不可靠的协议。这就表示IP不考虑差错校验和差错控制。ICMP就是为了补偿这个缺点而设计的。然而ICMP不能纠正差错,它只是报告差错,差错纠正留给高层协议去做。ICMP使用源IP地址把差错报文发送给数据报的源点(发出者)。 一共有5种差错报文:目的端不可达、源点抑制、超时、参数问题以及改变路由,如下图所示。

  

  

图4-10 差错报文

  

差错报文的数据字段包括原始数据报(引起差错的报文)的首部和原始数据报数据部分的前8个字节。包括原始数据报首部的目的是为了向差错报文的原始信源给出关于数据报本身的信息。包括数据的前8个字节是因为这前8个字节提供了关于端口号(UDP和TCP)和序号(TCP)的信息。根据这些信息,源点可以把差错情况通知给上层协议。1.目的端不可达

  

当路由器不能够为数据报找到路由或主机,就丢弃这个数据报,然后向发出这个数据报的源主机发送目的端不可达报文。下图给出了目的端不可达报文的格式。这种类型的代码字段指明了丢弃该数据报的原因。

  

  

图4-11 目的端不可达报文

  

2.源点抑制 IP协议是无连接协议,因此通信缺乏流量控制。ICMP源点抑制报文就是为了给IP增加一种流量控制而设计的。当路由器或主机因拥塞而丢弃数据报时,它就向数据报的发送端发送源点抑制报文。第一,它通知发送端,数据报已被丢弃。第二,它警告发送端,在路径中的某处出现了拥塞,因而源端必须放慢发送过程。源点抑制报文的格式如下图所示:

  

  

图4-12 源点抑制报文

  

3.超时 超时报文是在以下两种情况下产生的: ● 数据报的生存时间字段值被减为0时,路由器丢弃这个数据报,并向发送端发送超时报文。 ● 当组成报文的所有分段未能在某一时限内到达目的主机时,也要产生超时报文。当第一个分段到达时,目的主机就启动计时器。当计时器的时限到了,目的主机就将所有分段丢弃,并向发送端发送超时报文。超时报文格式如下图所示:

  

  

图4-13 超时报文

  

4.参数问题 当数据报在Internet上传送时,如果路由器或目的主机发现数据报首部中出现了二义性问题,或在数据报的某个字段中缺少某个值,它就丢弃这个数据报,并向发送端发送参数问题报文。下图给出了参数问题报文格式。代码字段指明了丢弃数据报的原因。

  

  

图4-14 参数问题报文

  

● 代码为0时表示在首部的某个字段中有差错或二义性。指针字段值指向有问题的字节。 ● 代码为1时表示缺少所需的选项部分。这种情况下不使用指针。5.重定向 为了提高效率,主机不参与路由选择更新过程,因此,主机可能会把某数据报发送给一个错误的路由器。这时,收到这个数据报的路由器会把数据转发给正确的路由器,同时向主机发送重定向报文,告诉主机正确路由器的地址。下图给出了重定向报文的格式。

  

  

图4-15 改变路由报文

  

七、ICMP校验和 ICMP的校验和的计算覆盖了整个ICMP报文(首部和数据)。1.校验和的计算 发送端按以下步骤使用反码算术运算计算校验和: (1)把校验和字段置为零。 (2)把报文按照16位长度分段,使用反码算术运算计算所有分段之和。 (3)把得到的和求反码,得到校验和。 (4)把校验和存储在校验和字段中。2.校验和的测试 接收端按以下步骤使用反码算术运算来测试校验和的正确性: (1)把报文按照16位长度分段,使用反码算术运算计算所有分段之和。 (2)把得到的和求反码。 (3)若结果是全0,则接受这个报文;否则就拒绝这个报文。

  

【实验步骤】

  

练习1 运行Ping命令

  

各主机打开工具区的"拓扑验证工具",选择相应的网络结构,配置网卡后,进行拓扑验证,如果通过拓扑验证,关闭工具继续进行实验,如果没有通过,请检查网络连接。

  

本练习将主机A、B、C、D、E、F作为一组进行实验。 实验开始前主机B首先执行命令"staticroute_config"启动静态路由。

  

1.主机B、E、F启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取 ICMP协议)。

  

2.主机A ping 主机E(172.16.0.2)。 主机C ping 主机F(172.16.0.3)。3.主机B、E、F停止捕获数据,察看捕获到的数据,并回答以下问题: ● 捕获的报文对应的"类型"和"代码"字段分别是什么? ● 分析报文中的哪些字段保证了回显请求报文和回显应答报文的一一对应?

  

练习2 ICMP查询报文

  

本练习将主机A、B、C、D、E、F作为一组进行实验。

  

1.主机A启动协议编辑器,编辑一个ICMP时间戳请求数据帧发送给主机C(172.16.1.3)。

  

MAC层: 目的MAC地址:C的MAC地址。 源MAC地址:A的MAC地址。 协议类型或数据长度:0800。 IP层: 总长度:包含IP层和ICMP层长度。 高层协议类型:1。 校验和:在其它字段填充完毕后计算并填充。 源IP地址:A的IP地址。 目的IP地址:C的IP地址。 ICMP层: 类型:13。 代码字段:0。 校验和:在ICMP层其它字段填充完毕后,计算并填充。 其它字段使用默认值。2.主机C启动协议分析器进行数据捕获,并设置过滤条件(提取ICMP协议)。3.主机A发送已编辑好的数据帧。4.主机C停止捕获数据。察看主机C捕获到的数据,并填写下表:

  

表4-2 实验结果

  

  

【思考问题】

  

1.能否根据时间戳计算出当前的时间?2.使用时间戳得到的时间比从系统得到的时间有什么好处?

  

练习3 ICMP差错报文

  

本练习将主机A、B、C、D、E、F作为一组进行实验。1.目的端不可达 (1)主机A、B、C、D、E、F启动协议分析器捕获数据,并设置过滤条件(提取ICMP)。 (2)主机A、C、D、E、F ping 172.16.2.10(不存在的IP地址)。 (3)主机A、B、C、D、E、F停止捕获数据。察看捕获到的数据,并回答以下问题: ● 捕获到的是哪一种目的端不可达报文?2.超时

  

(1)主机A、C、D分别启动协议编辑器,编写一个发送给主机F(172.16.0.3)的ICMP数据帧。其中:

  

MAC层: 目的MAC地址:主机B的MAC地址(172.16.1.1接口的MAC)。 源MAC地址:本机的MAC地址。 协议类型或数据长度:0800。 IP层: 总长度:包含IP层和ICMP层长度。 生存时间(TTL):0。 高层协议类型:1。 校验和:在其它字段填充完毕后,计算并填充。 源IP地址:本机的IP地址。 目的IP地址:F的IP地址。 ICMP层: 类型:8。 代码字段:0。 校验和:在ICMP其它字段填充完毕后,计算并填充。 其它字段使用默认值。

  

(2)主机E、F分别启动协议编辑器,编写一个发送给主机D(172.16.1.4)的ICMP数据帧。其中:

  

MAC层: 目的MAC地址:主机B的MAC地址(172.16.0.1接口的MAC)。 源MAC地址:本机的MAC地址。 协议类型或数据长度:0800。 IP层: 总长度:包含IP层和ICMP层长度。 TTL:0。 高层协议类型:1。 校验和:在其它字段填充完毕后,计算并填充。 源IP地址:本机的IP地址。 目的IP地址:D的IP地址。 ICMP层: 类型:8。 代码字段:0。 校验和:在ICMP其它字段填充完毕后,计算并填充。 其它字段使用默认值。

  

(3)主机B启动协议分析器,网卡b1(172.16.1.1)、网卡b2(172.16.0.1)分别捕获数据,并设置过滤条件(提取ICMP协议)。

  

(4)主机A、C、D、E、F各自发送已编辑好的数据帧。

  

(5)主机B停止捕获数据,察看并分析捕获到的数据。

  

(6)主机B在命令行方式下输入recover_config命令,停止静态路由服务。

  

【思考问题】

  

1.为什么要设置TTL字段?2.为什么要限制由失效的ICMP差错报文再产生一个ICMP报文?

  

3.什么样的ICMP报文是由路由器发送出的?什么样的ICMP报文是由目的主机发送出的?

  

4.主机A向主机B发送数据报,主机B从未收到该数据报,而主机A也从未收到出问题的通知。试给出可能发生情况的两种不同解释。

相关文章