【TCP/IP】【调试】丢包、流不通、错包等问题查证手段系列之一——日志方式

前言

  • 在进行TCP/IP相关的开发过程中,经常需要查证丢包、错包、流不通等问题。由于TCP/IP转发面涉及软件和硬件、并且软件流程上函数多、分支多,无论是增加打印或是分析流程,都比较困难。
  • 本系列文章会将常用的定位手段,做一简单的总结和说明,各位可根据问题的情况,选取一种或结合使用。

日志方式简介

  • 虽然打印这种方式比较Low,但在有的情况下反而是最直接和有效的方式,有的情况下更是开发人员的杀手锏。

直接打印报文

  • 直接在需要的地方调用类似下面的print_skb的函数即可。

值得一提的是,在有的内核版本中,上述代码打印不全,skb->data需要换成skb->mac_header。
另外,这种打印方式,如报文太多,会刷屏,可能将系统打宕机。

条件打印

  • 根据报文中特定字段进行打印,需要在skb结构体中增加一个字段:

具体在某个位置,首先判断某skb是否需要被打印,比如要跟踪DHCP报文,则在某个入口或点的位置识别DHCP报文并将该标志位置上,具体可参考下面的代码段:

之后,在后续其他点上,就可以直接根据这个flag来控制打印:

开关控制打印

  • 通过某proc文件修改内核某变量,然后根据该变量来控制打印。

代码中的具体控制:

ratelimit限速打印

  • 限速判断函数可以用net_ratelimit或printk_ratelimit;

这种打印,有个缺陷,有可能会被限速抑制掉而打印不出来,此时会有下面这种打印出现:

具体的限速参数,可使用下面方式修改:

自定义限速打印

  • 也可以根据需要,使用系统时间来自行控制打印,比如下面代码段可控制每秒最多打印一个报文:

以上。

如本文对你有些许帮助,欢迎打赏:
支付宝及微信打赏方式

文章知识点与官方知识档案匹配,可进一步学习相关知识网络技能树首页概览22097 人正在系统学习中

来源:花神庙码农

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月15日
下一篇 2022年1月15日

相关推荐