• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    快速排序和随机化快排学习
    P1330 封锁阳光大学 DFS
    P2577 [ZJOI2005]午餐 状压DP
    M. Subsequence 南昌邀请赛
    P1441 砝码称重 DFS回溯+DP
    P2661 信息传递 二分图的最小环
    P1196 [NOI2002]银河英雄传说 带权并查集
    P2024 [NOI2001]食物链 并查集
    F. Shovels Shop 背包DP
    P1514 引水入城 DFS
  • 原文地址:https://www.cnblogs.com/Brake/p/14546893.html
Copyright © 2020-2023  润新知