在linux内核中关闭TCP-socket和tcp_fin()

时间:2012-04-13 09:20:21

标签: linux tcp linux-kernel

我遇到tcp_fin()功能问题。它应该使用FIN标志处理传入的TCP段,但是当我在此函数的开头添加tracepoint或只是printk时,此tracepoint处理程序永远不会调用(或者没有来自printk的任何消息)。

我的行动:

  1. 将跟踪点或printk添加到tcp_fin()
  2. 构建&启动新内核
  3. 运行类似这样的内容:

    #!/bin/bash
    
    nflows=50
    
    on_int()
    {
        echo "$nflows skeeped"
        exit 0
    }
    
    trap 'on_int' INT
    
    while [ $nflows -ne 0 ]
    do
        iperf -n 5M -c X.X.X.X
        nflows=$(( $nflows - 1))
        echo "======================"
        echo $nflows
        echo "======================"
    done
    
  4. 结果我应该观察tcp_fin()的调用,但没有任何反应。

1 个答案:

答案 0 :(得分:0)

正如我几天前写的那样,tcp_fin()处理了传入的FIN段,但与RFC-793相反,并非每个连接都以两个FIN段(A-> B,B-> A)结束。因此,在某些情况下,我们只有传出的FIN而不是更多。