zoukankan      html  css  js  c++  java
  • 学习笔记---ICMP

    数据报定义:面向无连接的数据传输,工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。
    数据报组成:sour port、des port、length、checksum、app date
    ---------------------------------------------------------------------------------------

     

    ICMP


      ICMP:国际控制报文协议,设计为弥补IP协议缺少主机和管理查询所需要的机制。


      《1》定义:icmp不属于哪一层,也不属于哪个应用,它归属于网络层,是依靠于网路层的一种协议。


      《2》报文组成:32位组成,分别为8位类型+8位代码+16位校验和+首部其他内容(一般为0)+数据部分


      《3》封装过程: 当设备需要发送差错报文时,首先将原始数据的<IP首部+数据报>保留,加上imcp的<类型+代码+校验和>,最后再加上回包给源主机所需要指向的IP首部;


                                                                                        (原始数据包)IP首部+数据报       ---上下共8字节
                                    (imcp)icmp首部:类型8bit+代码8bit+校验和16bit                                     ---上下共8字节    
    (发送给源主机)IP首部  --20字节



      所以一份icmp报文的大小为: 8字节imcp首部+ 20字节源IP首部+8字节源数据报;

      如果是整个数据报,则为: 20字节IP首部+36字节Icmp报文;

      



      《4》imcp报文内容:

        分为两大类:查询和差错报文。
        查询报文总是成双成对出现,它帮助主机或网络管理员从某个路由器或对方主机那获取特定信息
        差错报文:报告了路由器或主机在处理IP数据报时可能遇到的问题。
        
        种类                类型           报文
        查询报文             8或0         回送请求或回答
                              13或14       时间戳请求或回答
                        
        差错报告报文         3           终点不可达
                            4          源点抑制
                            11         超时
                            12         参数问题
                            5            改变路由
        
        
        常用的报文主要如下:
        类型8代码0---请求回显
        类型0代码0---回显应答
        
        类型3代码1 主机不可达
        类型3代码3 端口不可达
        类型3代码4 设置了df位不分片但需要分片
        类型3代码13 协议被过滤        
        类型11代码0  ttl超时


    《5》报文详解:

    差错报文的5种具体报文-----

      <1>终点不可达(类型type=3,代码code=0~15)
    当路由器无法为一个数据报找到路由或主机无法交付一个数据报时,该数据将丢弃,然后又路由器或主机向发送这个数据报的源主机返回一个终点不可达报文。



      <2>源点抑制(类型type=4,代码code=0)
    IP协议是无连接协议。在产生数据报的源主机和转发数据报的路由器及处理数据报的目的主机之间没有任何通信联系这种却缺乏通信所引起的一个问题件就是缺乏流量控制和拥塞控制。当路由器或主机因拥塞而丢弃数据报时,发送源点抑制报文提醒源点:<1>数据报已丢弃、<2>警告源点,中途路径发生拥塞,请源点放慢(抑制)发送。


      <3>超时报文(类型type=11,代码code=0或1)
    两种情况:一是分组在传输时路由器收到ttl=1减到1后等于0,将发送差错报文给源主机;另外一种就是当组成一个报文的所有分片未能在某一个时段内全部到达主机,主机也会发送超时报文-----当主机收到第一个分片时,会启动计时器,如果在计时器内没有收到所有报文,将会丢弃已收到的分片报文。



      <4>参数问题(类型type=12,代码code=0或1)
    当数据报经过因特网传输时,其首部中出现的任何二义性都可能会产生严重的问题,如果路由器或目的主机发现了这种二义性,或者在数据报的某个字段中缺少某个值,就会丢弃这个数据报,并发生参数问题报文
    -----报文格式中增加”指针“内容:



      <5>改变路由(类型type=5,代码code=0~3)
    主机在刚开始工作时只有一张很小的路由表,这个路由表逐渐增大或更新,完成这项任务得工具之一就是改变路由报文。
    虽然改变路由报文被认为是一种差错报告报文,但它与其他差错报文不同。路由器并不会丢弃数据报,而是将数据报发送给合适的路由器。
    可了解交换机上关于 imcp Redirect  思科查看: show int +端口

     






    查询报文的5种具体报文-----

      <1-2>会送请求(echo-request)与回答(echo-reply)
                type=8,code=0            type=0,code=0
         该双报文为诊断网络而设计,组合起来确定两个系统之间是否能彼此通信,

      <3-4>时间戳请求(timestamp-request)  和回答(timestampe-reply)
                    type=13,code=0                    type=14,code=0
          两个机器可以使用时间戳请求和回答报文来确定IP数据报在这两个机器之间来回所需要的往返时间,也可用于同步两个机器的时钟。
          比较冷门,这里不详细讲。


    《6》校验和
    图片截图,有需要自己再深入了解:



    《7》重点:当发生icmp差错报文时,报文始终包含IP的首部和产生icmp错误报文的ip数据报的前8个字节。(这8个字节很重要,他包含源目端口号,可以间接告诉主机是哪个应用出现问题)

    最后备注报文类型总表:

  • 相关阅读:
    【原】使用Spring自带的JdbcTemplate。
    【原】MyBatis执行DDL:create table,drop table等等
    【转】java获取当前路径的几种方法
    【原】Java程序调用远程Shell脚本
    [转载] 使用Kettle进行数据迁移(ETL)
    appium原理
    python之global关键字的用法
    python之selenium定位(xpath)
    android 稳定性monkey测试
    python之selenium随记(几种等待的用法)
  • 原文地址:https://www.cnblogs.com/key-network/p/13194989.html
Copyright © 2011-2022 走看看