粉丝3.7万获赞14.3万

今天我们给大家带来的是经验分享啊,嗯,我们之前讲过一个阿萨斯啊,阿萨斯的一些基本的一些命令吊用啊, 然后这节课的话我们介绍一下他比较常用的一个工具指令,就是一个吹一次啊,然后这个吹一次呢,可以用来干嘛呢?他就是可以在你没有打印日日的情况下,他能够去把你整个的一个方法的调用链过程给你打印下来啊。 好,具体的话我们等会一起看一下啊。好,然后呢进入之前的课程的话,如果大家不清楚的话,可以看一下咱们这个上面有啊,有这个, 嗯,叫什么?阿萨斯线上代码调试神器啊,然后这一个代码的话就是,嗯,给大家介绍了如果去安装阿萨斯啊,然后还有一个阿萨斯的进门使用啊。好,这几个的话,我们主要的一个目的就是给大 来实战一下吹死的一个指令。好,首先我们需要去写一下这个我们的一些测试代码啊。嗯,我们可以先看一下咱们这个代码啊, 这是一个一个接口的啊,暴露一个接口。然后这里面的一个方法呢,我们看一下啊,首先他接收一个参数啊,是一个 a 参数啊,这都无所谓啊,大家要定一个啊,然后他这里面有一些衣服判断啊, 因为我们平时打那个踹死的话,看那吊运链的话,肯定是看他走了哪一个分支,然后就掉了哪些方法,对吧? 然后锤子,然后我们经常这个锤子会结合这个窝起窝起这个指令去使用的啊,好,然后呢他这里面会去进行一些判断啊,如果他这个是为空的话,我们就会返回处理为空,然后给他返回一个 n p d, 对吧?然后 n p d 一个值,嗯,然后他这里面的话,如果是他为一的话,那么 我就会去处理一个一一套,就好像一个四个塞斯啊,否则也会返回四个塞子啊。啊?这个返回纸咱们不关注,咱们主要去关注他这个方法他走到哪一步了?然后调用到哪些方法,对吧?好, ok, 然后呢我们这里现在需要做的就是把这个进行一个打包放到我们的服务器上面去啊,好,我们来打个包, 然后我们点一下拍个, 哎,咱们的包已经打好了,对吧?打好了,咱们然后来看一下 这里面,然后我们我们到这里面,我们把这个文件给他挪过来。好,咱们打包的包是在这里面,我们给他改一下名字啊, 我们把这个后缀去掉, 给他去掉的吧。然后呢咱们放到我们服务器啊,我这个是本地通过那个 money pass 构建的一个训练机。啊。好,首先呢我们把原有的给他删掉啊,因为我之前这里面已经有了,我们把这些给他删除掉, 我们杠 f。 然后我们把这个阿萨斯呆萌,我们把这个删掉啊 删掉。然后我们现在就是需要的就是把我们的这给他传过来,我们通过这个 sftp 啊给他传过来, 然后来我们怎么弄呢?我们直接给他拖动过来啊,拖过来就行了, 已经过来了,对吧?嗯,阿瑟戴帽,对吧?阿瑟戴帽。然后呢我们现在需要做的就是这个啊,我们首先我们需要把那个阿萨斯给他下下来啊, 下下来如果大家,嗯,不知道怎么去下的话,我们这里也给大家进行演示一下。可以,因为我们后面很多项目啊,他都是放在这个容器里面跑的,他有可能一个容器跑完之后,下次跑的话他二次就不见了,我们需要给他手动去把这些二次的给他,可以把他下下来啊, 我们看一下啊。 ok, 然后我们去去这里面找一下啊, 这里面啊咱们有一个这个指令啊,这个指令是那个阿萨斯给我们提供,官网给我们提供的,就是 curr 去下载这个命令。好, 我们首先我们把我们现有的这个阿萨斯给他清空掉,给大家演示一下啊。好,已经删除了,是不是我们现在这里面是没有阿萨斯这个阿萨斯这个加包的?我们首先来执行一下这个命令啊, 看一下啊,下载是很快的,我们能拿到阿萨斯布特,对不对?然后我们现在怎么去做呢?我们首先去,我们首先去把我们的一个阿萨斯这个戴帽给他起起来啊,我们首先把他起起来,然后我们直接加我干架就行了啊,阿萨斯刚戴帽, 我们等待启动啊,我们等待启动之后,我们来看一下这个能不能正常访问啊?我的服务器的话是幺二九点幺六八点六四点二,我们看下来这个人能正常访问的,对不对?这个能正常访问的, 然后我们再去看一下这个 gps 啊,看看能打印出来,对吧?好,然后我们现在就是去启用我们的一个阿萨斯这个 这个项目啊,阿萨斯布坦,这是我们刚才下载下来的。好,首先我们能够看到他这里面把所有的一个家伙建成给列出来了,可以看到阿萨斯刚呆吗?就是我们刚才启动的那个,然后我们选择建成一,我,然后我建成一的话,我们就开启进去了啊, 好,然后我们可以看到啊,他这里面长这样啊,好,然后我们现在需要做的就是什么?就是需要输入我们今天的一个主题,就是踹死这个指令啊,踹死指令, 然后拆字,纸巾怎么去拿呢?这肯定不是我们不需要我们手中写的呀,对吧?然后我们通过 iad 二给我们装的一个阿萨斯这个插件啊。嗯,听过,我第一节课的话,就是以前讲过的阿萨斯的一个 课程的话的同学们应该知道啊,咱们装过这样的一个插件啊,叫阿萨斯刚 id 二啊,阿萨斯的一个对于 id 二的做的一个插件,然后直接我们去做。怎么做呢?我们直接是踹死啊阿萨斯,然后安装之之后,我们重启一下,会出现一下这个一个菜单栏,然后我们点击我们的踹死啊,点击我们的踹死。 好,然后我们把这个复制过来,就复制复制到这里来,然后回车,回车大家可以看到啊,他这里面已经监听了,已经完成这个监听了,然后我们现在再去请求一下借口,看他会发现什么啊?我看这请求完成了,我,我们可以看到啊, 我们把这个往那边拖一点啊,放大眼看一下啊,咱们看一下这个吊用链啊,首先他会去吊,他吊用了一个胎死方法,是不是进入到这个咱们的一个胎死的一个入口,然后会掉用孩子胎死。 十三行,我们进了十三行啊,进走到十三行到这里来了,然后我们看他继续怎么走,然后又到十四行,十四行是在这里面,说明他这里面是满足条件了,他是没有这个文本的,不对,这个三是为空的,所以进到这里面到十四行,然后我们再看到十四行之后他又去哪?到二十一行去了 二十一行咱们是到这一行代码了,对吧?到这一行他们又进行判通判空,如果孩子他是走位空的话,看他又去哪了,然后就去二十二行了,对吧?二十二行就到这里面了,然后这一步就返回掉了, 直接就返回掉了,对吧?直接返回掉这里面都没走啊,对不对?都没走了啊?然后我们再去看一下啊,这个其实就是已经一个掉链完成了,然后我们现在去切换一下咱们这个参数啊,看一下会有不同的,我把它放成一,他打赢的是 hello 四三四十八,所以他对反馈者是变了, 所以整个钓鱼竿也是一个变更的,他首先进行判断的,太太死的也是同样的去十三行了,我们找到十三行到这个方法了,然后我们再去看一下他到十五行去了。十五行去了十五行是什么原因呢?肯定是这条这个条件他不满足,然后继续到了二次应付里面去,然后继续判断他是唯一, 然后我们到十六行可以看到他这个,因为我们传的就是一才是我一,对吧?所以呢?他进入到了这里面去,然后再看他去哪了,到了二十一行,二十一行就是这个方法,汉德一是吧?汉德一到这里面,呃,也没有去。他对,他到汉德一了,汉德一了。然后我们看一下啊, 十五、十六、二十一、二十二的吧,他其实他也没有去走的吧?十六二十一二十一行,十六行进来了,然后到了二十一行 啊,因为他为什么不走呢?为什么不不往下走呢?因为他们这个的话就直接惹烫了啊,惹烫了啊,他是没有去就没有去出力了啊。 ok, 然后我们再看一下啊,再看一下他走,走到哪了呢?然后到最终他就就二十一,二十二行啊,同样的二十一、二十二行走了,对吧?他如果是还是泰克斯,他是有文本的,所以呢?他是有值的,所以呢他就直接返回了。好,然后我们再去走一个还是泰克斯的,我们去另外一个值啊,看他的 另外一个 a 等于二的吧,他等于二,他走的是个 s 啊,看他整的这个调零调零练什么样的啊?首先他进入太子峰嘛,然后呢,他这里面直接去了一个十三的吧,十三行,然后又去了一个十五行,是吧?看一下他这里面十三行到这里面了,到这里面他是呃不为空,然后又去了十五行, 数行到这里面是长这样的,看他怎么走的,哎,感觉这个是不完整的,我们重新把它。这个是不完整的啊,我们刷新一下, ok, 可以看到咱们他到了十五行之后就直接返回了,呃,直接返回了,我们看一下为什么他是一块四为一,为什么会是一呢? a 点一块二,四为一,为什么到了十五行就直接返回了呢?啊?他到了十五行之后,然后直接应该是直接走了,二四二四就直接返回回去了,他,所以他这里面是个 size 就变成这样了啊, 如果他有的他是直接走的那一步,就直接是一个条件就直接走了,并没有在那个条件里面还有分支,所以呢他就直接给他返回了,所以咱们可以看到这个过程啊,是能够把你整个 教练过程去做的。那么我们什么时候会去使用这个 chess 呢?就是当我们这个没有日日进行的记录啊,然后又不知道他为什么我们传一个纸进来之后, 嗯,我们虽然用握起指令能够看到它传进来什么值,但是我们并不知道它整个的一个调用量的一个过程是什么样的,就是它为什么会进入这个分支?为什么会返回给我们?我们跟我们日期不一样的一个值啊,我们都可以结合踹死指令和握起指令 呃,两个进行结合,然后我们就可以去第八个我们的一些代码了啊,好,今天的分享就到这里,大家也可以结合这个视频,然后还和之前我们录过的一阿嫂子这个视频啊进行一个呃,一起看一下啊。好,今天的分享就到这里,谢谢大家。

trace 这组词怎么记?上一组?我们记了词跟 t, r, a, c, t 相关的单词,这一组再来记三个和它长得很像,意思也相近的词, trace, track 和 trail 这三个词的核心都和踪迹有关,所以直接打包放在一起记。怎么理解呢?踪迹的迹其实就是物体在地上拖动后留下的痕迹, 但这三个词各有侧重,怎么区分它们呢?我们从发音入手, 先听 trace 的 尾音,像丝一丝丝的痕迹,所以 trace 表示的是非常微弱的踪迹,蛛丝马迹或者微量。它做动词时表示追踪察探,也表示描摹。 仔细体会一下,都是非常轻柔细微的动作。再听 track 的 尾音, 清脆的你可以想象成火车开过铁轨时发出的咔哒咔哒声。所以 track 的 意思往往更重更明显,比如车辙,铁轨或者清晰的足迹。 做动词时,它表示紧随其后的跟踪追踪。最后来看 trail, 发挥一下拼写上的想象力, 把中间的字母 i 看作一个人,后面的 l 就 像是这个人走过的一段路。 这样一想, trail 代表的就是路径小路,作动词时表示拖拖曳,就好像在身后拖出了一条长长的小路,你记住了吗?

好,这节我们来讲一下 linux 下面这个 tracer, tracer road 这个命令哈,它跟那个 road 命令有点像啊, road 命令,不过它是主要显示的是 这个静态路由表相关的一些信息啊,正如大家眼前所见,这课件我已经发布到我账号同名的 csdn 博客,有需要的话可以访问获取。那这个炊事肉色,它主要就是显示数据包到主机间的这样一个路径啊。 呃,他默认发送的这个数据包的大小是四十字解啊,那通过 tracero 的我们可以知道,信息是从这个计算机到你到目标的这个主机走的是怎么样一个路径。 当然,每次数据包都有某一同样的这个出发点,就是一个硕士到达某一个同样的一个目的地,他走的路径可能不一样 啊,这是很正常的,因为调大了通透妈妈是吧?但是基本上来说,呃,大部分时候所所的所所走的这个路由是相同的。呃,他这个直到其返回就是发送发送数据包的目目标设备, 直到其返回啊,来测量其需要多长时间。那一条路径上的这个每个设备 tristro 的要测三次啊,输出结构当中包括每次测试的这个时间啊,设备名称啊,如果有的话啊,或者是以及他的一个 ip 地址,那 tristro 的使用啊, 我们来看一下。这是到啊,某某某网站啊,当然已经过期了的一个网站哈,他的一个,呃, tristrot 啊, 他一个路径,我们可以看到从第一条到第,呃,到第十二条,你看都是他要经过的一个路径啊,经过的这个节点你可以见人忘关也好啊。 啊,吓一跳,一般来说都是一个个的王冠啊,那每每个记录这十二条啊,十二条,这就是,呃,每个记录就是一一个一跳啊,就是这名数字叫一跳,每跳表示一个王冠。我们可以看到每行有三个时间,单位是毫秒, 就是杠 q 啊,如果我们指定这个,上面我们来看一下,再来集合看一下这里面的这个参数。这个选项啊,杠 q 其实就是指定的就是这个啊,时间啊,我看一下啊,当然在这在这里面 我并没有把它整理整理过来,嗯,也就是说,呃,杠 q 哈,也就是上每像呃, 向每个探测数据包,向每个网关发送三个数据包啊,每行有三个时间,这三个时间就是这个刚 q 啊,默认就是刚 q 三啊。呃,那网关响以后返回的 就是这三个时间,就是这个 conquer 三嘛,默认你如果不指定它就是 conquer 三,返回来这三个响应的一个时间。如果用 trace rotor conquer 四啊,那就是说发送四个数据标与这四个数据标,它就呃 返回的一个时间啊,三个数据标 一一次就要三个收益包啊,你如果四刚刚扣四,那就发四个收益包,那就四个时间。 这个是我们在吹丝洲的一台主机的时候会看到啊,一行是以信号表示的,出现这样的情况,有可能是防火墙封掉了 smp 的返回信息,我们经常会看到这样的是信号啊,所以我们得不到任何相关的一个数据包的返回数据。 有时候我们在某一网关处延时比较长,也可能是某台网关比较足色啊,也可能是物理设备本身的原因,当然如果某台 ds 出现问题的时候,不能解析主机名、域名的时候,也会有延 啊,延时的这样的一个现象啊。通过杠铃也可以避免 ds 解析啊,以 ip 的这个格式输出数据啊, 那这里有个例子就是杠 m 十,那这个就是我多少跳,刚刚我们看到有十二条,那里杠 m 十,我们可以看到从第三行到第十二行,这里有序号,就一到十,他就只会跳十下啊, 那默认这个时间我没有指定杠 q 啊,指定多少,所以它是三个发送,三个数据包,三个数据包的一个啊,响应的一个时间啊,包括这里还有一些其他的案例可以帮助大家理解啊,这个 tractor 的一个使用啊, 那我们还可以跟踪特定的一个 ip port, 然后我们就是到某个某个 ip 地址,某个端口的这样的一个啊,它的一个网络诊断,我需要诊断一下啊,那 可以用这个 just road, just road, 杠 p 啊,杠 p。 后面就是比方说,哎,你部署了一个加号应用,这个叫呃, smart boot, 一个应用八零八八,它间起在这个八零八八这个端口哈, 主机啊,幺九二幺零八一百零幺零幺啊,那就是在这个这个 ip 下面的这个八零八八,那你就是杠批八零八八幺九二幺零八一百零幺零幺啊, 那这就是针对某个端口的啊,好,这是这一节内容,我们主要讲的这个 trace rose 是命运的一个使用。

我们之前读过 openai 和 deepmind 的 工程师的博课,他们都在强调一个趋势, agent 的 上限越来越取决于 harness, 而不是模型本身。今天开始精读 lanchen 的 这篇博课, improving deep agents with harness engineering。 他 们在不改变模型基座的前提下, 通过调优 harness, 让 deep agents 的 跑分从五十二点八提升到了六十六点五,从榜单第三十开外一路进到前五。他们刻意把 harness 优化空间压缩到三类 系统提示词、工具体系,以及围绕模型和工具调用的中间件。中间件是 line chain 使用的术语,本质上就是挂在模型和工具调用周围的 hook。 这三类改动都属于 harness。 lanchin 认为 harness 的 目标是把模型那种监次式不稳定的智能塑造成适合完成特定任务的稳定执行系统,在模型外围打造系统结构,去优化任务表现、 token、 效率、延迟等指标。那他们是如何发现 agent 在 哪里出了问题? agent 跑偏报错超时之后,留下的是成千上万行运行轨迹,人工逐行排查成本极高,几乎不可能形成快速迭代。 于是 langchain 把读日制找问题这件事儿做成了 trace analyzer skill。 这个 skill 流程分为三步,第一步,抓取数据,从 langsmith 日制平台把这次实验里所有 agent 的 运行轨迹原始数据全部拉下来。第二步,并行分析。 系统按批次把这些 trace 切分开,同时启动多个分析子 agent 并行跑,每个子 agent 负责一批,专门做错误分析。找到报错点之后,所有子 agent 的 结论汇总到一个主 agent 那 里,由主 agent 统一提炼成结构化的发现和改进建议。第三步,人工审查。 主 agent 给出的是下一次实验要改什么的完整建议清单,工程师在这里参与核对建议是否合理,批准后才进入下一轮改动。有一点很重要,改动必须是通用的, 对特定任务过度拟合的修改可能让其他题目的表现退步。这三步加在一起,把原来需要几个小时的日制排查压缩成一个可以快速循环的工程流程追踪记录,也就是 trace 是 整个改进闭环的核心信号。很多所谓模型不够聪明的问题, 其实是系统没有在合适的时机把正确的上下和约束交给模型,没有 trace 就 无法定位这种缺口问题只会被归结为模型能力不足。 lincoln 做的这套实验,本质上是在证明一件事, agent 的 提升不只是模型能力问题, 更是系统设计问题。本期我们梳理了它们的实验框架和诊断机制。下一期我们来看在这些 trace 分 析之后, linkchain 具体做了哪些 harness 设计真正提升了 agent 的 表现。这里是慢学 ai, 我 们下期见。

来看一个网络诊断工具 mtr, 如果你不知道它的用法,那么在后面加上杠杠靠谱,那么这里就罗列出它所有的可选参数以及它的用法, 那么这里我们常用的有这一个参数就是杠 r, 一 般来说在工作中用上这一个基本上就够了,下面我们来演示一下 mtr, 杠 r 后面跟着的是网址或者是 ip 地址都可以。 我们来看一下这些输出项都是什么意思。首先是第一个,它是每一跳的丢包率,那么这里一跳你就可以理解为这样的一条记录,那么这里一共有十四条,就是十四跳。第二个是发送的数据包数量, 那么这一个是最后一个包的相应时间,单位是毫秒,这个是所有包的平均相应时间,单位也是毫秒。一般情况下我们更关注这个相应时间,这个是最短的相应时间,单位是毫秒, 这个是最长的相应时间,单位也是毫秒。最后这一个是相应时间标准差,如果这个值越大,那么表示各个包的相应时间差越大, 如果这个差异值很大,那么我们就需要重新来审视一下这个平均相应时间他的这个值是否可靠,然后再看看这两个值, 就最长相应时间和最短相应时间,然后我们再来确认他这个平均相应时间是否真的可靠,那么有没有其他的因素来干扰。一般情况下网络诊断工具我们常用的是聘这个命令,另外的话也还有一个就是吹 root, 这个也命令也可以,大家感兴趣的话可以自己去试一下这个吹 root, 这个它 linux, 它它没有自带的,那么大家的话需要自己去安装,就是使用 yam, 这样就可以把这个安装上, 我这里已经安装过了,然后的话 mtr 也是一样的,如果你的没有安装,那么也是这样来安装。

嘿,大家好,今天咱们来干件特别有意思的事,一起当一回网络侦探,来破解一个几乎我们每一个人都头疼过的谜题。 你有没有过这种体验?就是感觉家里的网速,哎,好像总是在跟你开玩笑,有时候快如闪电,有时候呢,开个视频会议卡的像缓灯片,打个游戏延迟高到让人抓狂。这到底是咋回事呢?问题到底出在哪了? 其实啊,这背后藏着一个挺有意思的谜团,今天我们就来把它搞个明明白白好了,我们来深入聊聊。 很多人可能觉得,上网吗?不就是一根线从我家连到服务器吗?但实际上啊,完全不是这么回事。互联网啊,它其实是一张由数不清的路由器和交换机组成的一张巨大又复杂的网。 你的数据要想从你这跑到目的地,那得经过一站又一站的接力赛。这个过程就特别像一次长途自驾游。 你想想你家门口的路好好的,目的地的车场也空着,但这并不代表你一路顺畅啊,问题可能出在几百公里外的某一段高速公路上,哗,那堵成了一锅粥。网路问题也是一个道理,瓶颈啊,往往就卡在中间的某个节点上。 那么,既然要当侦探,总得有几件趁手的工具,对吧?在网络世界里,几十年来,有两个最经典最基础的工具,那就是 pin 和 trace route。 这可以说是所有网络技术人员入门的侦探二人组,也是我们调查的第一个线索。 这位侦探呢,分工非常明确, ping 这位侦探呢,比较直接,他就问两个问题,喂,你在那儿吗?还有,你回我一下,花了多长时间, 他能告诉我们两点之间通不通,还有反应有多快?而另一位 chase root 侦探呢,就更细致了,他会问,要去你那儿,我得拐几个弯,走哪几条街?他能把数据走的完整路径,一站一站地都给你划出来。但是啊,问题也来了, ping 只关心终点,对中间发生了什么一无所知。 trace route 呢?他只负责画地图,告诉你路线是啥,但他可不管这条路现在堵不堵。 那如果我们想要一份嗯,就像是实时更新的,拿导图,能同时告诉我整条路线上每一段的实时路况,那该怎么办呢? 哎,这时候,咱们今天的超级英雄,也就是终极网络侦探 m t r 就 该闪亮登场了,它非常巧妙地把前面那两位侦探的优点合二为一了。 那 m t r 到底是个啥呢?说白了,它就像是给绘画地图的 trace route 侦探,又配上了一个能不断计时的秒表, 它不仅能找出数据走的完整路径,还能持续地一遍又一遍地去测量路径上每一个路口的通行速度和拥堵情况,简直就是个全能选手。 好,那现在一个真正有意思的问题来了, m t 二到底是怎么做到这么聪明的,能把这张复杂的网络地图给绘制出来的呢? 这背后的原理啊,可以说用了一个非常巧妙的小诡计。这个过程啊,特别聪明,你可以想象, m t r 先派出一个侦察兵数据包,但给他一张只能走一站路的通行证,这个通行证在句数上叫 t t l, 也就是生存时间, 这个侦察兵到了第一个路口,也就是第一个路由器,通行证就过期了,这个路口就会给 m t 二发个消息说,嘿,有个家伙到我这就走不动了。 接着 m t 二再派第二个侦察兵,这次给他一张能走两站的通行证,以此类推,一站一站地增加通行证的部署,直到走完成。这样一来,整条路线上的每一个点不就都暴露身份了吗?一张完整的网络地图就这么划出来了。 好了,原理咱们找懂了,那光说不练假把式,我们来看看在实际中怎么用它,以及最重要的怎么从它给出的那份详细报告里找出我们想要的答案。 你看,这就是一个非常典型的 m t r 命令。我知道这一长串字母可能看起来有点吓人,但你别担心,这东西比它看起来要简单多了,我们马上把它掰开揉碎了看, 我们来把它拆解一下。 m t r 这个好理解,就是命令本身二的意思是报告模式,就是让它跑完了直接给我一份总结报告干脆利落, m c 三十呢, m c 代表 count 数量,就是告诉 m t r 往路径上的每个节点都发三十个测试包,多测几次数据才准嘛,对吧?最后那串数字就是咱们这次要调查的目标地址,你看是不是很简单? 那么报告到手了,我们要重点看什么呢?记住,关键就三个指标。第一个叫丢包率,顾名思义,就是你发出去的包裹有多少百分比,直接寄丢了,有去无回。 第二个叫延迟,就是数据跑一个来回需要多少毫秒,但最最关键的是要去寻找那个突然恶化的节点,也就是在哪一跳这个丢包率或者延迟突然一下子变得特别高,那很可能就是问题的根源。 咱们举个例子,假如你在报告的某一行看到丢包率那一栏儿嚯一下子翘到了百分之十五甚至更高, 那这绝对是一个非常非常危险的信号。这七本就可以断定这里就是事故现场了,你的数据包八成就是在这里被卡住或者被丢弃了。所以你看,学会了 m t r 之后,你就相当于拥有了一项诊断网络的超能力, 以后再碰到网络卡顿,你就不再是那个只会重启路由器或者干着急的人了。你现在可以真正地看清互联网那些隐藏在地下的路径。 真的有了 m t r, 你 就再也不是对网络问题两眼一抹黑了。你手里有了一张关于你的数据旅程的实时地图,可以清清楚楚地看到了哪些城市,又是在哪个路口遇到了交通大拥堵。 那么最后留给你一个好玩的问题,此时此刻你观看我这个内容的数据包,它正经历着一场怎样不为人知的奇妙旅程呢? 有了 m t r 这个强大的工具,现在你可以亲自去发现这个答案了。

