1.tracert工作原理&路由原理
2.å¦ä½å®è£
Trace32软件
3.用trace工具 trace trace工具
4.一文分析DPDK跟踪库tracepoint源码
tracert工作原理&路由原理
1:1 <1 ms <1 ms <1 ms proxy.huayuan.hy [...1]
2 * ms ms ..2.3
3 ms ms ms ...
4 ms ms ms ..7.
5 ms ms ms ..3.
6 ms ms ms ..3.
7 ms ms ms xd--5-a8.bta.net.cn [...5]
Trace complete.
看一下上面这个过程 应该不用解释了
下面我们来分析一下 我们是码下怎么看到这个回显的
大家都知道我们所发送的tracert数据包 属于icmp数据包的一种
关于ttl的概念不知道能否理解
ttl 就是生存时间的意思 也就是我们所发送的数据包 在转发过程中的寿命问题
很好理解 如果寿命为0的话 就不能到达目的地 每经过一个三层设备我们的数据包的
ttl值都会减一 如果减到0 就证明不能到达就会给我们的源主机一个回应显示
并告知源主机 在哪个三层设备将这个生存值置0的 然后将这个三层设备的ip地址转发给
源主机
上面我们说的是ttl的一个原理和作用
下面我们来说 tracert包的原理
我们发送TRACERT包时 第一次的包的ttl值为1 这样到第一个三层设备那就会给
源主机一个回应 并告知其IP
依次类推 第二次发送的时候的TTL值等于2
第三次为3 默认最大hop为
也就是说ttl最大升到
这样我门就能清楚的看到 我们的数据包是怎么到达目的地的
2:当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,码下对方就能收到。码下而要送给不同IP子网上的码下主机时,它要选择一个能到达目的码下子网上的路由器,把IP分组送给该路由器,码下无敌精准指标源码由路由器负责把IP分组送到目的码下地。如果没有找到这样的码下路由器,主机就把IP分组送给一个称为“缺省网关(default gateway)”的码下路由器上。“缺省网关”是码下每台主机上的一个配置参数,它是码下接在同一个网络上的某个路由器端口的IP地址。
路由器转发IP分组时,码下只根据IP分组目的码下IP地址的网络号部分,选择合适的码下端口,把IP分组送出去。码下沉梦免授权源码同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直接把分组通过端口送到网络上,否则,也要选择下一个路由器来传送分组。路由器也有它的缺省网关,用来传送不知道往哪儿送的IP分组。这样,通过路由器把知道如何传送的IP分组正确转发出去,不知道的IP分组送给“缺省网关”路由器,这样一级级地传送,IP分组最终将送到目的地,送不到目的永久免费客服系统源码地的IP分组则被网络丢弃了。目前TCP/IP网络,全部是通过路由器互连起来的,Internet就是成千上万个IP子网通过路由器互连起来的国际性网络。网络称为以路由器为基础的网络(router based network),形成了以路由器为节点的“网间网”。在“网间网”中,路由器不仅负责对IP分组的转发,还要负责与别的路由器进行联络,共同确定“网间网”的路由选择和维护路由表。路由动作包括两项基本内容:寻径和转发。寻径即判定到达目的地的最佳路径,由路由选择算法来实现。由于涉及到不同的路由选择协议和路由选择算法,要相对复杂一些。灵魂潮汐傲慢源码图鉴为了判定最佳路径,路由选择算法必须启动并维护包含路由信息的路由表,其中路由信息依赖于所用的路由选择算法而不尽相同。路由选择算法将收集到的不同信息填入路由表中,根据路由表可将目的网络与下一站(nexthop)的关系告诉路由器。路由器间互通信息进行路由更新,更新维护路由表使之正确反映网络的拓扑变化,并由路由器根据量度来决定最佳路径。这就是路由选择协议(routing protocol),例如路由信息协议(RIP)、开放式最短路径优先协议(OSPF)和边界网关协议(BGP)等。
转发即沿寻径好的最佳路径传送信息分组。路由器首先在路由表中查找,判明是源码 emui记事本否知道如何将分组发送到下一个站点(路由器或主机),如果路由器不知道如何发送分组,通常将该分组丢弃;否则就根据路由表的相应表项将分组发送到下一个站点,如果目的网络直接与路由器相连,路由器就把分组直接送到相应的端口上。这就是路由转发协议(routed protocol)。
路由转发协议和路由选择协议是相互配合又相互独立的概念,前者使用后者维护的路由表,同时后者要利用前者提供的功能来发布路由协议数据分组。
å¦ä½å®è£ Trace软件
1ï¼è¦å¨ Make Menuconfig éæå¼ -g é项ï¼è¿æ ·è¾åºç vmlinux ä¼å å«æºä»£ç ä¿¡æ¯ã
2ï¼ å æ ¸ç¼ºçä½¿ç¨ -O2/Os æ¥ç¼è¯ï¼ æ¹ä¸ºO0æ¶ä¼ç¼è¯åºéã æ们åªè½éèæ±å ¶æ¬¡ï¼ å¨éè¦è°è¯çç®å½çMakefile ä¸ï¼ æ·»å EXTRA_CFLAGS += -O0, 注æ该设置ä¸è½åºç¨å°åç®å½ã
æè ï¼ä¹å¯ä»¥ä¿®æ¹å个æ件çç¼è¯é项ï¼æ¯å¦ï¼ CFLAGS_kft.o := -O0
è¿æ ·ï¼å°±å¯ä»¥ Step by Step è°è¯ C ç¨åºäºã å½ç¶ï¼ ä½ è¿è¦ trace é ç½®æä»¶ï¼ è¿ä¸ªå°±è·ç¡¬ä»¶å¹³å°ç¸å ³äºã
用trace工具 trace trace工具
深入探讨了使用trace工具理解eBPF(eBPF)和trace工具的方法。首先,理解了使用eBPF工具进行调试以及trace工具理解trace原理的两种方式:从代码细节入手,或是先勾画大概,再深入细节。在复杂系统中,直接查看所有代码变得困难,尤其是在云环境中,此现象普遍。接下来,以`reallocarray`为例,创建了一个uprobe。
在探究如何通过trace-bpfcc生成uprobe时,通过strace工具发现使用了`perf_event_open`进行注入。进一步关注`perf_event_open`内部参数`struct perf_event_attr`,了解了`config1`和`config2`的作用:`config1`类似uprobe的路径名,而`config2`是特定偏移量。通过尝试不同方法,最终确认`config1`指向`libc.so`文件路径,`config2`为`reallocarray`在`libc-2..so`中的偏移。
创建uprobe后,编写了小程序来触发其执行。eBPF与uprobe的关联通过`trace trace-bpfcc`实现,最终调用`__uprobe_register`。对于`__uprobe_register`的实现,通过进一步查找代码获取信息。`mymem`触发uprobe的机制大致为程序加载或执行过程中会触发先前创建的uprobe,通过`ftrace`的`function_graph`功能筛选并打印调用函数链。
通过分析uprobe_mmap的调用栈,可以了解到在操作vma时会触发uprobe_mmap。uprobe_mmap内部的关键调用有助于理解其工作流程。总结以上trace分析,得出理解uprobe的实现和工作原理,主要通过trace和源码分析相结合的方式,掌握工具和方法是关键。
通过trace过程演示了使用trace工具的能力和方法,更多关于uprobe的实现细节,可以通过进一步的trace或阅读源码进行深入探索。这一过程展示了如何利用trace工具理解复杂系统中的特定功能和行为,为深入学习和调试提供了一条有效路径。
一文分析DPDK跟踪库tracepoint源码
在DPDK跟踪库tracepoint的源码分析中,关键流程包括rte_eal_trace_thread_remote_launch以及初始化过程。初始化流程由`eal_trace_init`执行,挂载`tracepoint`,其核心在于`RTE_TRACE_POINT_DEFINE`宏与`RTE_TRACE_POINT_REGISTER`定义的转换。rte_eal_trace_thread_remote_launch函数定义于`lib\librte_eal\include\rte_eal_trace.h`文件,是远程线程操作的函数。
接着观察`__rte_trace_point_emit_header_generic`函数,通过分析其流程可以看出其主要分为两部分:获取内存区域与填充函数指针、arg指针等数据。在调用这个宏时,内存区域将用于存储时间戳及标志位等信息,然后填入由宏提供的数据类型,包括函数指针、arg指针、bits的slave_id和int型rc变量。这些操作在`rte_eal_remote_launch`函数中执行时完成,DPDK的tracepoint功能最终实现。
为了深入理解这些细节,建议参考相关资源,如《全网讲的最好的DPDK,由简到精,系统学习,资深老师带你聊透DPDK 为什么说实现CM的挑战不在硬件而在软件》等材料,并且实际操作学习DPDK的tracepoint实现方法,通过实践深化对源码的理解。
参考资料链接:t.csdn.cn/NhKEJ