zoukankan      html  css  js  c++  java
  • ICMP介绍以及traceroute和ping的实现原理

    ICMP介绍

    ICMP(Internet Control Message Protocol)用于主机或者路由器报告差错情况和提供有关异常的情况报告,和IP协议同时处于网络层,但是ICMP会使用IP,最终由IP来传输其信息(everything is over ip)

    常规ICMP报文格式截图:

    主要分为两大类:差错报告报文和询问报文。

    ICMP报文类型 类型对应的值 ICMP报文的类型
    差错报告报文 3 终点不可达:路由器或者主机发现信息不可达时
    11 时间超时(TTL):当路由器收到TTL为1,然后-1后是0,则丢弃数据的同时向源主机发送
    12 参数问题
    5 改变路由:默认路由器发现有跟好的路由线路
    询问报文 8或者0 回送请求或回答
    13或者14 时间戳请求或回答

    ICMP的差错报告报文中,会把收到的需要进行差错报告的IP的数据提取出来作为ICMP报文的数据部分。

    可以看到icmp内部包含了一个完整的IP数据包。

    典型的ICMP的应用是trace route 和ping应用,这两个应用直接通过ICMP从而跳过了传输层协议(TCP or UDP)。

    ICMP看上去像高层协议,实际上不是,是IP层的协议。

    trace route应用

    有地方介绍是源主机向目的主机发送不可达的udp报文,然后路由器通过TTL变为0后返回给源主机ICMP报文,但是实际抓包发现trace route给目的主机发送的也是icmp报文。

    源主机向目标主机发送ICMP报文:

    第一次发送时IP的TTL设置为1,第一个路由器收到后,把TTL减1,丢弃该数据,并且向源主机发送一个超时的ICMP报文(code为11),这样源主机就得到了第二个路由器的IP地址。

    第二次发送时IP的TTL设置为2。得到第二个路由器的IP地址。

    。。。

    一直发送后直到如果收到一个常规的ICMP回答(code为0),则认为找到了最后一个路由器。(如果某次ICMP请求在固定时间内没有返回,则显示超时,继续下一条的路由查找【上图中标红的case】)。

    最终的IMCP回答报文,标志着traceroute结束

    应答报文截图。

    ping应用

    ping使用icmp的回送请求和回送应答报文。

    抓包

    可以看到分别发送了4次request,同时得到了4次reply,和cmd console中展示的效果一致。

    回送请求报文示例,type为8。

    回送应答示例,type为0,同时返回了耗时15ms,和cmd console里面展示的温和。

    作者:iBrake
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    动画 与 缓存
    flex 弹性布局
    JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
    java web总结(1)----入门
    面试系列-java(1)
    面试英语——题外话------笔记(1)
    面试内容的概览(1)-笔记
    菜鸟教程-设计模式简介-笔记
    java基础知识回顾-笔记(微学苑)
    mysql学习总结-笔记(总结的不怎么样)
  • 原文地址:https://www.cnblogs.com/Brake/p/14546893.html
Copyright © 2011-2022 走看看