UDP套接字状态列表?

5
我是一名正在编写脚本从/proc/net/tcp/proc/net/udp中提取数据的程序员。我需要将连接状态从十六进制代码转换为有意义的内容。
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
  37: 00000000:2710 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 862948 2 ffff8800109dbac0 0
  54: 00000000:00A1 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 2055110 2 ffff8800109db780 0

到目前为止,我已经找到了此答案,它指向相关的内核头文件,但是在udp.hip.h中都没有匹配的udp_states.h或任何东西。
我在哪里可以找到UDP套接字连接状态列表?
2个回答

6
"UDP '连接' 是无状态的。来自 iptables 手册

UDP 连接本身并不是有状态的连接,而是无状态的。有几个原因,主要是因为它们不包含任何连接建立或连接关闭;最重要的是它们缺乏排序。按特定顺序接收两个 UDP 数据包并不能说明它们发送的顺序。然而,在内核中仍然可以对连接设置状态。

请参阅此 udp 编程教程,它还有助于解释为什么像 ss -ua 这样的命令将 udp 服务器套接字显示为 UNCONN(对于 tcp 连接则为 CLOSE)。
总之,我相信在 /proc/net 中显示的 udp '状态' 是从 tcp 连接状态回收的,但它们具有稍微不同的含义。"

我发现一个使用 ctstate NEW 规则的 iptables,针对的是 udp dpt:ntp;那么这样做有意义吗? - U. Windl

4

我目前正在查看的Xubuntu中存在以下状态:

/usr/src/linux-headers-3.13.0-24/include/net/tcp_states.h

你可能会发现UDP只是重复使用同一个枚举值,在 /usr/src/linux/net/ipv4/udp.c 中查找 sk_state 的用法。

函数udp4_format_sock() 实际上生成了你所看到的输出。


3
似乎是这样,但对我来说仍然不合理,因为“07”翻译成“TCP_CLOSE”。 - Sammitch
@6EQUJ5,请问您能否将Xubuntu的代码路径链接包含在内。谢谢。 https://github.com/torvalds/linux/blob/master/net/ipv4/udp.c - txs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接