zoukankan      html  css  js  c++  java
  • tcpprobe ——监听TCP信息的内核模块

    1 tcpprobe模块的加载与卸载

    1) 用modprobe加载tcpprobe

    // 如果是通过修改.config来编译tcpprobe的,可以使用modprobe加载

    # modprobe tcp_probe port=5001 // 监听所有本地端口是5001的TCP流,仅在cwnd变化时捕捉信息

    # modprobe tcp_probe full=1 port=5001 // full选项表示每次收到数据包都捕捉信息

    2) 用insmod加载

    // 如果是普通内核模块形式编译的,则使用insmod加载

    # insmod tcp_probe.ko full=1 port=5001

    3 )卸载tcpprobe

    // 卸掉tcpprobe模块的命令也很简单,只要当前没有任务在使用tcpprobe模块即可卸载

    # rmmod tcp_probe

    2  tcpprobe模块的使用

    加载tcpprobe模块后,会新增一个/proc/net/tcpprobe的接口,可以通过这个接口获取tcpprobe捕捉的信息。

    # cat /proc/net/tcpprobe > data.out &    // tcpprobe捕捉的信息是持续性的,因此读这个接口可以放到后台读  
    # pid=$!   // 保存上一个读命令的pid,用于结束读tcpprobe接口  
    # iperf -c otherhost    // 使用iperf建立一个TCP流  
    # kill $pid 

     记录在data.out中的数据大致是这个样子:

    11.172120204 193.168.0.2:8089 193.168.0.25:54320 32 0x842ccad 0x84299c5 10 168 14608 143

     每行的各列分别为:

    timestamp   //时间戳
    saddr:port  // 源IP及端口,我的数据是在发送端捕捉的,所以port是固定的8089    
    daddr:port  // 目的IP及端口  
    skb->len    // 收到的数据包skb大小,收到的都是ACK包,所以len都比较小。  
    snd_nxt     // 下一个待发送数据的序列号  
    snd_una     // 待确认数据的序列号  
    snd_cwnd    // 拥塞窗口大小  
    ssthresh    // 慢启动阈值  
    snd_wnd     // 接收窗口大小  
    srtt        // smoothed RTT  

     参考:http://perthcharles.github.io/2014/12/19/tcp-probe-intro/

  • 相关阅读:
    vue2.0之render函数
    vuex学习笔记
    js小知识点
    vue2.0路由进阶
    vue2.0使用slot插槽分发内容
    js事件机制
    firefox在引入vue.js后不支持e=e||window.event的解决办法
    qs.js使用方法
    除了使用URLSearchParams处理axios发送的数据,但是兼容性不好,其他的兼容方法
    定义设置滚动条
  • 原文地址:https://www.cnblogs.com/zflibra/p/4184369.html
Copyright © 2011-2022 走看看