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。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 用计算机算组合数_计算组合数

    用计算机算组合数_计算组合数计算组合数最大的困难在于数据的溢出,对于大于150的整数n求阶乘很容易超出double类型的范围,那么当C(n,m)中的n=200时,直接用组合公式计算基本就无望了。另外一个难点就是效率。对于第一个

  • idea 查看已经填写的激活码_最新在线免费激活[通俗易懂]

    (idea 查看已经填写的激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html1STL5S9V8F-eyJsaWNlbnNlSWQi…

  • 通俗易懂的Mybatis工作原理[通俗易懂]

    作为半自动的ORM框架,Mybatis被越来越多的企业接受。搞清楚它的工作原理以及底层实现,对于开发者可事半功倍。很多文章都是使用大批量的源码流程去分析原理。对于有源码阅读功底的开发者,也许还能招架住,但还是不直观。我以前的很多文章都是这么做的,后来有朋友私信建议说,这些文章类似于个人笔记,只能自己阅读,不利于分享,所以,本文将尝试采用通俗易懂的白话文带领大家认识一下Mybatis的工作原理。(PS:大家可以设想,如果自己在开发Mybatis,该如何设计好Mybatis的功能呢?)一...

  • leetcode归并排序_什么是区间

    leetcode归并排序_什么是区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals = [[1,4],[4,5

  • C语言浮点数表示法 / float表示法(浮点数表示方法)

    C语言浮点数表示法 / float表示法(浮点数表示方法)一直不太清楚C语言中浮点数是怎么表示的,这篇文章能回答我的问题?浮点表示法float共计32位(4字节)由最高到最低位分别是第31、30、29、……、0位31位是符号位,1表示该数为负,0反之30~23位,一共8位是指数位(-128~127)22~0位,一共23位是尾数位后更。。…

  • 体验vSphere 6之7-为虚拟机启用容错

    体验vSphere 6之7-为虚拟机启用容错

发表回复

您的电子邮箱地址不会被公开。

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