首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么traceroute发送UDP数据包而不发送ICMP?

首先,我们需要了解什么是 traceroute 以及它的工作原理。

Tracert(traceroute)是一种网络诊断工具,用于检查网络中的数据包从发送端到接收端所经过的路径。它通过发送小的数据包到目标主机,并根据 ICMP 响应或超时来测量网络延迟。Tracert 输出包含每个跃点的时间和 IP 地址,从而帮助用户找到网络中的瓶颈和故障。

为什么 Tracert 只发送 UDP 数据包而不发送 ICMP?

Tracert 使用 ICMP 协议进行工作,但是也可以发送 UDP 数据包。选择发送 UDP 而不是 ICMP 的原因在于 UDP 是一种无连接的、不可靠的协议,而 ICMP 是有连接的、可靠的协议。

  1. 无连接:UDP 不需要在发送数据包之前建立连接。因此,它可以在不受连接限制的情况下发送数据包,并在没有确认的情况下接收响应。
  2. 不可靠:UDP 是不可靠的,因此它不会保证数据包一定会到达目的地。这意味着,如果某个数据包在某个节点上丢失,将不会收到任何错误消息。
  3. 更快:由于 UDP 是无连接的,因此它不需要像 ICMP 那样进行握手和建立连接。这意味着它可以更快地发送数据包,尤其是在网络繁忙的情况下。

因此,虽然 ICMP 是 Tracert 的基础,但 UDP 的无连接和不可靠特性使其成为快速测量网络延迟的理想选择。

在腾讯云中,Tracert 的原理和实现基于云原生技术,包括容器、微服务、服务网格、弹性伸缩等技术,以提供更加稳定、可靠、高效的网络诊断工具。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UDP发送大型文件_丢包

先上图 1:如果对文件要求不高的话 ,可以使用UDPUDP在实际测试中,丢包还是听验证的,但是效率高 2:如果文件必须完整,还是使用TCP 。...Im来实现即时通讯的,利用外网来发送文件, 那么问题就来了 ,这么大 ,要多久才能发完 ,那就用局域网来发送文件吧 ,第一个想到的就是UDP来实现 ,测试中发现DUP丢包问题特别明显,当时死活都找不到原因...,后来把发送的次数和接受的次数对比打印了一下 ,命名发送了2k次,接收端只接受了500次,OK ,问题就是发送太快了 ,那么就让发送端发慢一点, Thread.sleep(10); 一般设置5就OK...,接收的对象,用来更新界面 package com.example.administrator.canchatdemo.entity; /** * UDP文件发送状态 */ public class...'}'; } } 5:另一个对象 package com.example.administrator.canchatdemo.entity; /** * UDP

4.6K20
  • CC++ 运用Npcap发送UDP数据包

    UDP 数据包结构: UDP 数据包由报头和数据两部分组成。 报头(Header): 源端口号(16 位): 指定发送端口。 目标端口号(16 位): 指定接收端口。...适用于广播和多播: UDP 支持广播和多播通信,可以通过一个发送操作同时向多个目标发送数据。...创建UDP数据包函数 创建一个UDP数据包,该代码是一个简单的网络编程示例,用于创建和发送UDP数据包。其中,UDP数据包的内容和头部信息都可以根据实际需求进行定制。...返回数据包: 函数执行完毕后,生成的UDP数据包保存在FinalPacket中,可以将其用于发送到网络。 需要注意的是,这段代码中的硬编码可能需要根据实际需求进行修改,例如协议类型、标识、生存时间等。...发送UDP数据包 代码演示了如何打开网卡,生成UDP数据包,并通过pcap_sendpacket函数发送数据包到网络。需要注意的是,数据包的内容和地址是硬编码的,实际应用中可能需要根据需要进行更改。

    94410

    Linux内核网络udp数据包发送(一)

    前言 本文首先从宏观上概述了数据包发送的流程,接着分析了协议层注册进内核以及被socket的过程,最后介绍了通过 socket 发送网络数据的过程。 2....数据包发送宏观视角 从宏观上看,一个数据包从用户程序到达硬件网卡的整个过程如下: 使用系统调用(如 sendto,sendmsg 等)写数据 数据穿过socket 子系统,进入socket 协议族(protocol...内核初始化的很早阶段就执行了 inet_init 函数,这个函数会注册 AF_INET 协议族 ,以及该协议族内的各协议栈(TCP,UDPICMP 和 RAW),并调用初始化函数使协议栈准备好处理网络数据...这和用户程序直接调用 sendmsg 不是 sendto 发送数据差不多,这之所以可行,是因为 sendto 和 sendmsg 底层都会调用 sock_sendmsg。...sendmsg()函数作为分界点,处理逻辑从 AF_INET 协议族通用处理转移到具体的 UDP 协议的处理。 5. 总结 了解Linux内核网络数据包发送的详细过程,有助于我们进行网络监控和调优。

    4.2K51

    Linux内核网络udp数据包发送(二)——UDP协议层分析

    前言 本文分享了Linux内核网络数据包发送UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调优。...setsockopt 可以在socket 级别设置发送包的 IP_TTL和 IP_TOS。辅助消息允许在每个数据包级别设置 TTL 和 TOS 值。...Linux 内核会使用一个数组将 TOS 转换为优先级,后者会影响数据包如何以及何时从 qdisc 中发送出去。...一些类型的错误计数并不是只出现在一种计数中,可能是出现在多个计数中。...总结 本文重点分析了数据包在传输层(UDP协议)的发送过程,并进行了监控和调优,后面数据包将到达 IP 协议层,下次再分享,感谢阅读。

    5.8K51

    能ping通traceroute不通

    比如允许 DNS/DHCP/SNMP 等 注意: Linux下traceroute程序默认发送的探测包为UDP协议,windows下tracert、mtr,以及Linux下mtr默认都发送的是icmp...处于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为返回各种 ICMP 报文,其余路由器或交换机也可能被管理员主动修改配置变为返回 ICMP 报文。...因此 Traceroute 程序不一定能拿到所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增发出下一个数据包。...第五跳时,发送的 request 数据包 TTL 值为5,在到达第5个路由节点后,TTL减为0,则不继续传递,返回一个 ICMP 超时报文,这时客户端获取到了第5个路由节点IP,与traceroute测试信息相符...总结: Linux 下 traceroute 默认发送的时 udp 协议 request 包,很多路由节点上会丢弃该部分数据包不做响应;windows 下 tracert、mtr 以及 Linux 下

    13.6K13

    traceroute详解

    traceroute的原理是非常非常的有意思,它收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包经过的第一个路由器收到这个数据包以后,就自动把TTL减1,TTL变为0以后,路由器就把这个包给抛弃了...traceroute发送的是端口号大于30000(真变态)的UDP报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。...出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为返回各种ICMP报文,其余路由器或交换机也可能被管理员主动修改配置变为返回 ICMP报文。...依据上述原理,利用了UDP数据包traceroute程序在数据包到达真正的目的主机时,就可能因为该主机没有提供UDP服务简单将数据包抛弃,并不返回任何信息。...总结一下,traceroute主要利用IP数据包的TTL字段值 + ICMP来实现,它发送的用于探测网络路径的数据包的IP之上的协议可以是 UDP、TCP或ICMP

    10.5K10

    路由与交换 入门3 ICMP与Trace

    Traceroute工作原理是什么答:Traceroute发送UDP数据包到目的地,并逐渐增加存活时间(TTL),首3个UDP包TTL值是1,之后3个是2,如此类推。...当目的地收到UDP报文,由于该端口上没有运行应用程序,返回ICMP Port Unreachable报文。源端收到此报文,判断UDP已到达目的地,结束Traceroute。...即意思是当主机收到 ICMP Time Exceeded,知道发送数据包的TTL值设置太小,在下次发送数据时增大TTL值。 5....答: 源端发送UDP探测包被路由器和目的服务器丢弃并返回ICMP消息是Traceroute成功操作的关键,只有源端接收到此消息才能得知此UDP探测包所到达的路由器地址和RTT值,并判断是否到达目的端。...使用TTL可以防止环回,源端设置TTL值,网络中路由器收到数据包后将TTL域减1。当路由器收到TTL=0或1时的数据包时,就丢弃该包,并发送一个ICMP Time Exceeded报文给最初的发送者。

    1.1K10

    Tracert原理_traceroute命令工作原理

    使用“端口不可达”消息判断是否到达目的主机: traceroute程序发送一份UDP数据报给目的主机。...当数据包到达目的地后,该主机则不会送回ICMP time exceeded消息,一旦到达目的地,由于tracert通过UDP数据包向不常见端口(30000以上)发送数据包,因此会收到「ICMP port...ICMP exceeded超时信息,目的地发的是ICMP echo reply的包。...traceroute原理各个所发的包描述: 发起方:一开始,发送一个TTL=1,高端口号的UDP包,之后TTL递增。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.6K10

    三十天学不会TCP,UDPIP网络编程-TraceRoute的哲学

    第二行就是TTL为2的回复,而这一行全是星号,这是因为有的网关/路由器不会返回ICMP超时报文,甚至为了安全考虑,很多带有防火墙的路由器返回各种ICMP报文,所以你会看到上面输出的星号,而这种暂时的返回并不妨碍继续向更深的一层探测...Linux上traceroute程序就是使用traceroute这个命令,看起来像句废话,linux上追踪数据包路径的方法是采用的UDP不是ICMP的echo消息。...而在linux上会在这个UDP消息中使用一个30000以上端口号,这样当时数据包到达目的主机的时候,由于对方主机并没有打开这个UDP端口,所以ICMP会返回一个端口不可达的消息,这样发送端收到端口不可达的时候就知道不需要继续探测...这里我想要稍微更多的介绍一下端口不可达的ICMP消息之中的data部分了,这个部分包含IP数据头和IP数据包的前8个字节,那么如果发送发送的是UDP消息的话,回一下前面介绍的UDP头的格式,前8个字节正好...UDP的头部,其中含有发送端的Port的到达端的Port,UDP是IP的data部分,所以说发送端就可以从这个ICMP的错误消息中得到更多的信息。

    1.1K90

    traceroute和tracert原理

    目标主机收到tracerouteUDP探测包回复ICMP(type=3,code = 3,端口不可达)。Linux上称之为 traceroute,Windos类似的功能为tracert。...linux 上 traceroute 运行过程: traceroute 连续发送TTL从1开始递增的UDP包,目标端口 30000+,相同的目标地址,每个TTL相同的UDP包默认发送三个,端口依次递增...当收到目标地址回的 ICMP包(端口不可达),traceroute 停止发包,否则继续发送,默认最多发送 30 个,每个包大小 60Byte(IP+UDP+Data)。...默认情况下,traceroute是向目的地址的某个端口(大于30000)发送UDP数据报,tracert是向目的地址发出ICMP请求回显数据包。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    2.9K20

    Traceroute原理学习

    Traceroute可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。 曾经介绍过IP记录路由的选项RR,为什么不使用这个选项另外开发一个新的应用程序Traceroute呢?...Traceroute使用ICMP报文和IP首部中的TTL字段。TTL字段是由发送端初始设置的一个8bit的字段,推荐值为64,。...当路由器收到一个IP数据包时,如果其TTL字段是0或者1,则路由器转发该数据报,而是将该数据包丢弃,并给信源机发送一份ICMP超时信息,Traceroute程序的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的...Traceroute程序的操作过程:它发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将T TL值减1,丢弃该数据报,并发回一份超时ICMP报文。...Traceroute程序发送一份U DP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30 000),使目的主机的任何一个应用程序都不可能使用该端口。

    39920

    traceroute工作原理

    在通信中,IP层仅仅负责数据的路由与传 输,并不处理数据包的内容。比如ICMP,或TCP,UDP,这些协议是依赖IP层的传输功能来传送数据的。...直接的IP数据报是没实用处的(win2000的驱动层能够直接使用IP报不须要加上其它协 议,可是通常是不会这样用的)。因此traceroute程序发送一个UDP包来试探。...trcertroute建立一个UDP数据包,不断改动TTL值并发送出去,假设收到”超时错”,表示刚刚到达的是路由器,假设收到的是”port不可达”错误,表示刚刚到达的就是目的主机。...假设目的主机上正好有进程在使用这个port,接收这个包并按正常方式处理,这样traceroute就收不到”port 可达”的错误了。...由于沿途经过的关卡太多,遇上黑洞路由器,转发这些信息的话,那就一点办法也没有了。    书中还提到原来的traceroute里有一个选项,能够指定数据包经过的路由器。

    86720

    ping和tracert的原理_ping和tracert的作用是什么

    在通信中,IP层只负责数据的路由与传输,并不处理数据包的内容。例如ICMP,或TCP,UDP,这些协议是依赖IP层的传输功能来传送数据的。...直接的IP数据报是没有用处的(win2000的驱动层可以直接使用IP报不需要加上其他协议,但是一般是不会这样用的)。因此traceroute程序发送一个UDP包来试探。...如果找不到,则发送一个”目的端口不可达”的ICMP错误数据回到源主机。   这样就可以完全确定下来。...trcertroute建立一个UDP数据包,不断修改TTL值并发送出去,如果收到”超时错”,表示刚刚到达的是路由器,如果收到的是”端口不可达”错误,表示刚刚到达的就是目的主机。...因为沿途经过的关卡太多,遇上黑洞路由器,转发这些信息的话,那就一点办法也没有了。   书中还提到原来的traceroute里有一个选项,可以指定数据包经过的路由器。

    1.5K10

    互联网医生-ICMP协议

    在某些情况下,源主机需要确定另一个主机或者路由器是否是活跃的,对于活跃的主机,就没有必要再向它发送数据报了,因为这是徒劳的。...为什么还需要装载引起差错的数据报数据区的前8个字节呢?因为这8个字节恰好覆盖了TCP报文或UDP报文中的端口号字段,IP层能够根据这个端口号把ICMP报文传递给具体的上层处理。...Traceroute的原理是非常非常的有意思,它收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP(UDP后面文章讲解)数据包经过的第一个路由器收到这个数据包以后,就自动把TTL减1,...wireshark抓包显示,IP为192.168.0.105的PC首先发送了TTL为1的ICMP数据包。 ?...traceroute发送的是端口号>30000(真变态)的UDP报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。

    80220

    Ping和traceroute的原理

    Traceroute原理:其实Traceroute的原理很简单,他收到目的主机IP后,首先给目的主机发送一个TTL=1(TTL指生存时间)的udp数据包经过的第一个路由器收到这个数据包之后,自动把TTL...减去1,TTL变为0之后,路由器就将这个数据包抛弃了,并同时产生一个主机不可达的ICMP超时数据报给主机。...这样Traceroute就可以拿到所有路由器的IP,从而避开IP头只能记录有限路由的IP地址。 那么我们怎么知道UDP到没到达目的主机呢?...这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,普通的网络程序只监控少数的几个号码较小的端口,比如说80,比如说23,等等。...traceroute发送的是端口>30000(真变态)的UDP报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道目的主机到了。

    3.4K00

    Linux traceroute 命令详解

    traceroute 指令可以追踪你发送数据包在网络中传输的路由途径,主要显示走了什么路,到了什么站。 其预设的数据包大小是40bytes,该值可以另设。...探测 数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 XXX表示向每个网关发送4个数据包。...有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。 出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。...traceroute 客户端根据收到的返回信息是TTL超时还是端口不可达来判断数据包是否到达目标主机。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    3K120

    ICMP 协议分析

    目标主机在收到一个 ICMP 回显请求数据包后,它会交换源、目的主机的地址,然后将收到的 ICMP 回显请求数据包中的数据部分原封不动地封装在自己的 ICMP 回显应答数据包中,然后发回给发送 ICMP...如果校验正确,发送者便认为目标主机的回显服务正常,也即物理连接畅通。 4.2 Traceroute 程序 Traceroute 程序主要用来侦测源主机到目的主机之间所经过的路由的情况。...其原理很简单,开始时发送一个 TTL 字段为 1 的 UDP 数据报,而后每次收到 ICMP 超时后,按顺序再发送一个 TTL 字段加 1 的 UDP 数据报,以确定路径中的每个路由器,每个路由器在丢弃...UDP 数据报时都会返回一个 ICMP 超时报文,最终到达目的主机后,由于 ICM P选择了一个不可能的值作为 UDP 端口(大于30000)。...5.产生ICMP的情况: 1.ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送) 2.目的地址是广播地址或多播地址的IP数据报。

    1.5K10

    linux网络95值工具,Linux下网络故障排查工具之ping|traceroute和tcptraceroute|mtr工具

    -c 数目:在发送指定数目的包后停止。LINUX的ping不会自动终止如果指定这个参数就需要手动按ctrl+c终止 -i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。...tcptraceroute则是使用tcp协议,现代网络广泛使用防火墙,导致传统路由跟踪工具发出的(ICMP应答(ICMP echo)或UDP)数据包都被过滤掉了,所以无法进行完整的路由跟踪。...通过发送TCP SYN数据包来代替UDP或者ICMP应答数据包,tcptraceroute可以穿透大多数防火墙。...使用UDP包或ICMP “Echo”包,这两种包都可能会被防火墙拦截。...mtr -s 用来指定ping数据包的大小 mtr -a 来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的 mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒 mtr -4

    1.5K30

    你知道ping命令是如何工作的吗?

    二、为什么需要ICMP?...ICMP的数据部分根据类型和代码不同不同,如果是请求与响应的数据包,那么数据部分由16位的标识符、16位的序号以及数据组成。...目标协议不可达报文情况当你给目标主机发送UDP报文时,目标主机的防火墙禁止UDP协议数据包进入,于是ICMP通知目标协议不可达。...目标端口不可达报文是你的数据包要进入目标主机的22端口,建立SSH连接,目标主机的22端口没有开放,这时候ICMP就会返回目标端口不可达报文给源主机。...那么Traceroute怎么知道自己发送UDP包到达目的主机呢? 思路也很骚啊!!! 它用不可能出现的值作为UDP的端口号,数据报达到目的主机,就会返回ICMP 差错报文,类型为端口不可达。

    37030
    领券