MTR(运行TCP协议)如何计算丢包率?

MTR(运行TCP协议)如何计算丢包率?

我认为 TCP 协议本身将保证在连接时不会丢失任何字节。关于这个观点,请参考

https://stackoverflow.com/questions/23841896/will-tcp-connection-lose-packets

让我困惑的是mtr(使用TCP协议运行)如何计算loss? TCP只有段而不是数据包。那么,“Snt”是什么意思?

[root@ ~]# mtr --report --tcp --port=443  stackoverflow.com

在此输入图像描述

这里,如果一些中间主机根本不想回复,因此Loss% = 100.0,其中一些回复ACK,因此Loss% = 0.0,那么如何解释跳#14 loss% = 25.0%?

答案1

分析

从我通过查看文档和谷歌收集到的信息来看,它看起来像是mtr通过发送流量来跟踪数据包丢失本身,然后跟踪由于网络拥塞而发生的任何丢失。

例如,Linode 教程标题为:使用 MTR 诊断网络问题陈述如下:

选项i标志以更快的速度运行报告,以揭示仅在网络拥塞期间可能发生的数据包丢失。该标志指示 MTR 每 n 秒发送一个数据包。默认值为 1 秒,因此将其设置为零点几秒(0.1、0.2 等)通常会很有帮助。

此流量的本质是 ICMP ECHO 请求。

-i SECONDS
--interval SECONDS

  Use this option to specify the positive number of seconds between ICMP ECHO
  requests. The default value for this parameter is one second.

这种衡量损失的方法就是你可能遭受损失的原因。mtr不使用 TCP 来测量任何丢失,而是使用 ICMP,ICMP 可能并且确实有数据包被丢弃或超时。

那么圣特呢?

该列Snt告诉您已“发送”了多少 ICMP ECHO 数据包。

相关内容