UDP套接字状态列表?

Sam*_*tch 2 sockets linux ip udp linux-kernel

我目前正在写一个脚本中提取数据/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
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经找到了这个答案,它向我指出了相关的内核头文件,但是没有匹配udp_states.h或任何内容udp.hip.h.

在哪里可以找到UDP套接字的连接状态列表?

mxt*_*tie 5

UDP'连接'是无状态的.从iptables手册:

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

请参阅此udp编程教程,该教程还有助于解释为什么命令ss -ua将udp服务器套接字显示为UNCONN(对于tcp连接也称为CLOSE).

总而言之,我确实相信/ proc/net中显示的udp'状态'是从tcp连接状态中回收的,但它们的含义略有不同.


6EQ*_*UJ5 4

在 Xubuntu 上,我目前正在查看这些状态

/usr/src/linux-headers-3.13.0-24/include/net/tcp_states.h
Run Code Online (Sandbox Code Playgroud)

您可能会发现 UDP 只是重用相同的枚举,请查看内部/usr/src/linux/net/ipv4/udp.c并查找sk_state.

该函数udp4_format_sock()实际上会产生您正在查看的输出。

  • 情况似乎是这样,但对我来说仍然没有意义,因为“07”翻译为“TCP_CLOSE”。 (3认同)