专栏首页howtouselinuxPing和traceroute的原理

Ping和traceroute的原理

ping原理

ping主要是用来探测主机和主机之间是否可以进行通信,如果不能ping到某台主机,表示不能与这台主机建立连接。ping使用的是ICMP协议,他发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机,如果源主机在一定时间内收到应答,表明主机可达。ICMP协议是通过IP协议发送的,IP协议是无连接的,不可靠的数据报协议。

ping是用来检测网络是否畅通或者网络连接速度的命令

在同一网段内:

在主机 A 上运行“Ping 192.168.0.5”后,都发生了些什么呢?

首先,Ping 命令会构建一个固定格式的 ICMP 请求数据包, 然后由 ICMP 协议将这个数据包连同地址“192.168.0.5”一起 交给IP 层协议,IP 层协议将以地址 “192.168.0.5”作为目的地址。本机 IP 地址作为源地址,加上一些其他的控制信息,构建一 个 IP 数据包,并想办法得到 192.168.0.5 的MAC 地址,以便交给数据链路层构建一个数据帧。关键就在这里,IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的 MAC,如果以前两机有过通信,在 A 机的 ARP 缓存表应该 有 B 机 IP 与其 MAC 的映射关系,如果没有,就发一个 ARP 请求广播,得到 B 机的 MAC, 一并交给数据链路层。后者构建一个数据帧,目的地址是 IP 层传过来的物理地址,源地址则是本机的MAC地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送 出去。 主机 B 收到这个数据帧后,先检查它的目的地址,并和本机的MAC地址对比,如符合, 则接收;否则丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层 协议。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议,后者处理后,马上构建 一个 ICMP 应答包,发送给主机 A,其过程和主机 A 发送 ICMP 请求包到主机 B 一模一样。

在不同网段内:

在主机 A 上运行“Ping 192.168.1.4”后,开始跟上面一样,到了怎样得到 MAC 地址时,IP 协议通过计算发现 D 机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的 MAC 取过来,至于怎样得到路由的 MAC,跟上面一样,先在 ARP 缓存表找,找不到就广播吧。路由得到这个数据帧后,再跟主机 D 进行联系,如果找不到,就向主机 A 返回一个 超时的信息。

Understanding Ping Command and ICMP with Examples

Traceroute原理

Traceroute是用来侦测由源主机到目的主机所经过的路由的情况的重要工具,也是最简洁的工具,尽管ping可以进行侦测,但是ping受到IP头的限制(IP首部字段最多只能放9个IP地址),ping不能完全记录所经过的路由器,所以才会引入Traceroute。

Traceroute原理:其实Traceroute的原理很简单,他收到目的主机IP后,首先给目的主机发送一个TTL=1(TTL指生存时间)的udp数据包,而经过的第一个路由器收到这个数据包之后,自动把TTL减去1,而TTL变为0之后,路由器就将这个数据包抛弃了,并同时产生一个主机不可达的ICMP超时数据报给主机。主机收到这个ICMP数据报以后,会发送一个TTL=2的数据报给目的主机,然后刺激第二个路由器给主机发送ICMP数据报,如此反复,直到到达目的主机。这样Traceroute就可以拿到所有路由器的IP,从而避开IP头只能记录有限路由的IP地址。

那么我们怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,比如说80,比如说23,等等。而traceroute发送的是端口>30000(真变态)的UDP报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道目的主机到了。

————————————————

understanding traceroute

Exploring ICMP Protocol with Examples

Understanding Ping Command and ICMP with Examples

What is ICMP type?

icmp port

原文链接:https://www.howtouselinux.com/post/ping-icmp

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [TCP/IP] ping traceroute和TTL

    1.Time To Live是生存时间的意思,就是说这个ping的数据包能在网络上存在多少时间。当我们对网络上的主机进行ping操作的时候,我们本地机器会发出一...

    陶士涵
  • Linux命令详解:ping 和 traceroute命令

    Linux命令有很多,今天跟大家介绍常用的两个命令ping 、traceroute命令,按照工具的作用,原理,用法三个维度来理解。

    程序IT圈
  • Linux命令之ping、traceroute、mtr——查看网络状态

    ping、traceroute、mtr这三个都是Linux下查看本机或服务器网络状态等所用的命令,下面一一介绍:

    浩Coding
  • 网络诊断方案选型

    一个app的表现,往往和网络状态密切相关。这里的网络诊断主要是针对特定的域名或者ip,也就是说app的网络诊断是对当前网络到域名指向的服务端的连通性和带宽情况。

    jerrypxiao
  • ping, tracert, traceroute, netstat命令详解

    ping可以测试计算机名和计算机的 ip 地址,验证与远程计算机的连接,通过将 icmp 回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机...

    阳光岛主
  • 可视化网络路径探测HashTrace

    引子 长期以来,探究网络质量和探索网络路径是广大网络工作者监控网络的必备工作,ping用于探究网络质量和traceroute用于探索路径。对于探测结果似...

    鹅厂网事
  • ICMP协议分析-ping和traceroute

    日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了。 那你知道 ping 命令是怎么工作的吗...

    用户8418197
  • 当你「ping 一下」的时候,你知道它背后的逻辑吗?

    我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗?

    奎哥
  • 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

    老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天、实时音视频等)时,如果发现网络连接超时,第一时间想到的就是使用Ping命令Ping一下服务器看看通...

    JackJiang
  • 当你「ping 一下」的时候,你知道它背后的逻辑吗?

    我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗?

    Bug开发工程师
  • 当你「ping 一下」的时候,你知道它背后的逻辑吗?

    我们在遇到网络不通的情况,大家都知道去 ping 一下,看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗?知道它是如何实现的吗?

    纯洁的微笑
  • 关于网络的总结-命令篇1

    通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(d...

    用户8851537
  • 盘点一款强大的网络工具集------netwox

    netwox 是由 lauconstantin 开发的一款网络工具集,适用群体为网络管理员和网络黑客,它可以创造任意的 TCP、UDP 和 IP 数据报文,以...

    Python进阶者
  • HCNP学习笔记之ICMP协议与ping原理以及用Python实现ping

    Jetpropelledsnake21
  • Salesforce诊断网络问题以排除性能下降

    有时,它们可能是由一些看似无害的事情引起的,比如安装一个新的包、实现一个新的共享规则或启用一个特性。

    首席架构师智库
  • Linux网络检测相关工具用法(ping/netstat/ss/ethtool)

    当新的Linux主机完成了网络配置,即可以正常接入网络后,我们可以通过Linux自带的相关工具进行网络相关检测。如最常用的ping,netstat,ss,tra...

    Leshami
  • 互联网医生-ICMP协议

    在《IP协议详解》入门文章中,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是网...

    用户8611941
  • 用侦察兵的故事趣讲ICMP和Ping,看完想忘都难!

    无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题。那台机器明明就在那里,你甚至都可以通过机器的终端连上去看。它看着好好的,可是就是...

    网络技术联盟站
  • 网络扫描利器Fing之Linux版本使用教程

    Fing是一款好用的网络监测扫描管理软件,这款软件能够很好的去帮助用户查看当前网络的信息等,且能够方便的管理超多样的设备,整合了大量的网络管理功能,使用起来也相...

    yuanfan2012

扫码关注云+社区

领取腾讯云代金券