zoukankan      html  css  js  c++  java
  • 第7章 网络层协议(2)_ICMP协议

    2. ICMP协议

    2.1 ICMP报文(Internet Control Message Protocol)的类型

    报文类型

    类型值

    代码

    描述

    请求报文

    8

    0

    请求回显报文

    响应报文

    0

    0

    回显应答报文

    差错报告报文

    3

    (终点不可到达)

    0

    网络不可达

    1

    主机不可达

    2

    协议不可达

    3

    端口不可达

    4

    需要进行分片但设置了不分片

    13

    由于路由器过滤,通信被禁止

    4

    0

    源端被关闭

    5

    (改变路由)

    0

    对网络重定向

    1

    对主机重定向

    11

    0

    传输期间生存时间(TTL)为0

    12

    (参数问题)

    0

    坏的IP首部

    1

    缺少必要的选项

    (1)ICMP报文用于在IP主机、路由器之间传递控制消息。如网络通不通、主机是否可到达、路由是否可用等网络本身的消息

    (2)ICMP差错报文共5种

      ①终点不可到达:当路由器或主机没有到达目标地址的路由时,就丢弃该数据包,给源点发送终点不可到达报文。

      ②源点抑制:当路由器或主机由于拥塞而丢弃数据包时,就会向源点发送源点抑制报文,使源点知道应降低数据包的发送速率。

      ③时间超时:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据片时,就把己收到的数据报片都丢弃,并向源点发送时间超时报文。

      ④参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

      ⑤改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)

    2.2 ICMP报文格式

    (1)ICMP报文格式

     

    (2)ICMP差错报文

     

      ①ICMP差错报文中的数据字段具有同样的格式,即ICMP数据部分=收到的IP数据报的首部和数据字段的前8个字节)

      ②提取数据报中数据字段的前8个字节为了得到传输层的端口号(对于TCP和UDP)以及传输层报文的发送序号(对于TCP)。这些信息对源点通知高层协议是有用的。

      ③整个ICMP差错报文=ICMP的前8个字节+ICMP数据部分,作为IP数据报的数据字段发送给源点。

    2.3 ICMP差错报告报文:路由重定向

     

    (1)PC1的网关设置为R1的f0/0接口地址(192.168.1.1)。当PC1给PC3发送数据包时,会发送给R1,再经R1转发给R3。这样效率不高。

      ①三层交换机端口默认为二层口,接口配置模式下使用不带参的switchport命令把一个接口设置为2层模式。如果需要启用三层功能就需要在此端口输入no switchport命令。

      ②在配置R3路由器的f1/0地址前,要执行no swichport命令,才可以进一步配置接口地址。

    (2)当出现这种现象时,路由器R1会把第1个数据包转发给R3,然后给PC1发送一个ICMP重定向数据包,告诉PC1到达主机192.168.2.2,下一跳为192.168.1.254.这样PC1增加一条到192.168.2.2的路由,下一跳指向192.168.1.254(注意,是到一个主机,而不是到192.168.2.0/24整个网段的路由)。以后的数据包就直接发到R3的f0/0的接口。

     

    (3)主机和路由器对于重定向报文的不同处理原则

      ①路由器一般会忽略ICMP重定向报文

      ②主机对于重定向报文的处理取决于操作系统。对于Windows操作系统,从网关返回的ICMP重定向报文,会在计算机的路由表中添加一条到主机的路由

      ③也可以人工添加到一个主机地址的路由:如c:Windowssystem32>route add 10.7.1.35 mask 255.255.255.255 10.7.10.254(注意,子网掩码是4个255)

    2.4 ICMP差错报告报文:给程序返回错误消息

    (1)实验环境

     

      ①VM使用虚拟机WinXP充当,连接到VMnet1网络。

      ②R1和R2默认路由互相指定对方。

      ③然后从WinXP的浏览器访问http://59.46.80.160,这个TCP数据包会在两个路由器之间往复转发,直到TTL耗尽。然后路由器返回给WinXP主机ICMP差错报文数据包,如下图。

    (2)抓包分析

     

      ①当WinXP浏览http://59.46.80.160时,使用的是TCP协议,源端口和目标端口分别为1058和80。

      ②从上图可知R2产生ICMP差错报文给WinXP。该ICMP报文中包含了传输层首部的8个字节指明了出现差错的数据包的协议、源端口和目标端口

    2.5 使用ICMP排除网络故障

    (1)使用ping命令诊断网络故障

      ①当ping某个IP时,出现大多数请求超时,只是偶尔会有ICMP响应数据包时,说明网络很不畅通。

      ②这种请求超时的产生主要原因是网络拥塞,导致发送一个ICMP请求数据包在一段时间内没有得到ICMP响应数据包或针对该ICMP请求数据包的差错报告数据包。

      ③可以检查导致网络拥塞的原因,比如恶意软件大量发送广播包占用了网络带宽。

    (2)使用tracert跟踪数据包路径

      ①ping和-i参数跟踪数据包

     

      ②tracert命令的工作原理就是使用上述方法,通过给目标地址发送TTL逐渐增加的ICMP请求,根据返回的ICMP差错报文来确定沿途经过了哪些路由器

    (3)使用pathping跟踪数据包路径

      ①pathping是一个基于TCP/IP的命令行工具,该命令不但可以跟踪数据包从源主机到目标主机所经过的路径,还可以统计计算机网络延时以及丢包率。其跟踪数据包路径的原理和tracert命令一样。

     

      ②图中的“跃点”指的是路由器,D处表示路由器转发数据包的丢包率。E处的表示从跃点9到跃点10链路上的丢包率。

  • 相关阅读:
    sql语句的删除
    JDK 11中的ZGC-一种可扩展的低延迟垃圾收集器
    强大的IDEA开发工具
    微信H5支付证书过滤
    statusText 报错parsererror
    python 爬取页面数据,生成词云和网络图
    springboot 跳转页面
    org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'xxx' is not present 报错解决
    airtest 中报错 'gbk' codec can't encode character 'xa5' in position 170: illegal multibyte sequence
    Error:(5, 45) java: 程序包org.springframework.boot.test.context不存在 解决
  • 原文地址:https://www.cnblogs.com/5iedu/p/7134371.html
Copyright © 2011-2022 走看看