Ping和Traceroute原理[通俗易懂]

Ping和Traceroute原理[通俗易懂]Ping和Traceroute原理

大家好,又见面了,我是你们的朋友全栈君。

Ping和Traceroute原理

两者都是ICMP来完成的,ICMP的主要功能是确认IP包是否成功送达⽬标地址、报告发送过程中IP包被废弃的原因和改善⽹络设置等。ICMP是基于ip协议的,ICMP报文直接封装在ip数据报中来传输。

在这里插入图片描述

Ping

当执行ping命令的时候,源主机首先会构造一个ICMP回送请求数据包,其中包含两个字段:类型,指明该ICMP的类型(此时为8);序号,主要用于区分连续ping的时候发出的多个ICMP数据包,每发出一个Ping消息,序号就会自动加1。此外,为了能够计算RTT,还会在ICMP数据包中附加上当前时间。然后将该ICMP数据包封装在ip数据报中发送给目的主机。

当目的主机接收到该ip数据报后,从ip首部中提取出协议类型字段,从而判断出是一个ICMP类型的报文。此时目的主机会构造一个ICMP回送应答数据报,类型为0,序号为接收到的ICMP回送请求数据包中的序号。然后封装到ip数据报中发送给源主机。

在规定的时间内,如果源主机没有收到ICMP的应答包,则说明目标主机不可达;如果收到了应答数据包,则目标主机可达,并且用当前时间减去数据包最初从源主机上发送出去的时刻就是ICMP数据包的时间延迟(RTT)。

Traceroute

Ping命令利用的是ICMP的查询报文类型,而Traceroute利用的是ICMP的差错报文类型。

作用一:追踪去往⽬的主机时沿途经过的路由器

原理:利用一个数据包每被一个路由器转发就会将TTL减1,如果TTL减为0,路由器就会抛弃该数据包,然后向源主机发送一个ICMP差错报文。

具体来说,源主机循环发送UDP数据包,并且将它们对应的ip数据报中的TTL字段从1开始递增,比如说TTL为2的字段在经过两个路由器转发后TTL变为0,此时该路由器会发送一个类型为超时的ICMP差错报文给源主机,其中包含了该路由器的ip地址。故通过这种方式源主机可以得到去往目的主机路径上的所有路由器。

何时结束循环,即如何判断一个UDP报文段到达了目的主机?可以将UDP报文的目的端口设置为一个不可能的端口号,这时目的主机收到UDP报文段后就会向源主机发送一个ICMP差错报文,类型为端口不可达。所以当源主机收到端口不可达类型的ICMP差错报文时就可以知道到达了目的主机,可以结束循环了。

作用二:确定到目的主机路径上的最小MTU

原理:源主机设置ip数据报首部的分⽚禁⽌标志位设置为1,则路径上的路由器不会对ip分片,故如果数据包的长度大于MTU,则会将该数据包丢弃,然后向源主机发送一个ICMP差错报文,类型为需要进⾏分⽚但设置了不分⽚位,并且在该报文中附带了该链路的MTU。源主机每次收到ICMP报文后将减小数据包的大小,再次去探测路径上的最小MTU,从而得到可以通过该路径把数据包发送给目的主机的MTU。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162539.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Redis 雪崩、穿透、击穿「建议收藏」

    Redis 雪崩、穿透、击穿「建议收藏」一、缓存雪崩:概念:缓存雪崩是指缓存中key大批量到过期时间,而这时大量请求同时打过来,引起数据库压力过大甚至down机实际生产中举例:以秒杀活动为例,QPS达到5000,这时,如果这5000个请求同时访问过来,在redis的缓存没有失效时,这个量级的qps,redis是可以承受住的。但是如果这时,所有的key都在某一个时间点失效了,而后台还没来得及重新刷缓存(缓存一般是定时任务主动刷新或修改时才刷新),那么这时,所有的请求就将会都直接打入MySQL数据库。可以想象,MySQL

    2022年9月14日
  • 光流法原理与实现「建议收藏」

    光流法原理与实现「建议收藏」以下内容摘自一篇硕士论文《视频序列中运动目标检测与跟踪算法的研究》:1950年Gibson首先提出了光流的概念,光流(opticalflow)法是空间运动物体在观测成像面上的像素运动的瞬时速度。物体在运动的时候,它在图像上对应点的亮度模式也在做相应的运动,这种图像亮度模式的表观运动就是光流。光流的研究就是利用图像序列中像素的强度数据的时域变化和相关性来确定各自像素位置的“运动”。光流表达

    2022年7月23日
  • NAT配置实验_隧道模型受力及模型实验理解和认识

    NAT配置实验_隧道模型受力及模型实验理解和认识Iodine介绍Iodine,直译过来就是碘。碘元素在元素周期表中序号为53,正好是DNS使用的端口号。该工具用于建立DNS隧道,其分为服务端和客户端两部分(也常称为主控端和被控端),客户端对服务器端发送DNS请求建立连接。这两部分都是用C语言编写,支持EDNS、base32、base64、base128等多种编码规范。DNS隧道常分为中继和直连两种类型,中继是指DNS通过外网DNS服务器转发到服务端,直连是指直接通过服务端IP进行连接。Iodine对这两种类型都有支持。同时,Iodine支持多种DN

    2022年10月24日
  • 请简述list,set,map类型的集合的各自特点(简述三种不同的继承方式下)

    1.集合类型主要有3种:set(集)、list(列表)和map(映射)。2.三者关系3.Setset接口时Collection接口的一个子接口,是无序的,set中不包含重复的元素,也就是说set中不存在两个这样的元素a1.equals(a2)结果为true。又因为Set接口提供的数据结构是数学意义上的集合概念的抽象,因此他支持对象的添加和删除。Set的接口继承Collectio…

    2022年4月13日
  • Java快速入门的六个技巧[通俗易懂]

    Java快速入门的六个技巧[通俗易懂]学习目标:Java入门该学习什么?Java如何快速入门?Java快速入门的六个技巧,帮你顺利入门Java!学习内容:需要掌握:1、掌握静态方法和属性2、重现接口3、学好集合框架4、例外捕捉5、多线程需要理解机理6、了解网络编程学习目录:文章目录学习目标:学习内容:学习目录:一、掌握静态方法和属性二、重现接口三、学好集合框架四、例外捕捉五、多线程需要理解机理六、了解网络编程一、掌握静态方法和属性静态方法和属性用于描述某一类对象群体的特征,而不是对单个对象的特征。Jav

    2022年5月29日
  • Google资深工程师深度讲解Go语言-迷宫的广度优先搜索(十二)「建议收藏」

    Google资深工程师深度讲解Go语言-迷宫的广度优先搜索(十二)

    2022年2月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号