【问题标题】:TCP call flow in Linux KernelLinux内核中的TCP调用流程
【发布时间】:2014-08-06 16:47:49
【问题描述】:

我正在尝试使用 3.8 版在 Linux 内核中获取 TCP 调用流,以用于不同的用户空间 API,例如连接、绑定、侦听和接受。任何人都可以为我提供流程调用的流程图吗?我能够使用 send 和 recv API 找到数据流。

另一个问题,当客户端连接到服务器时,服务器会为accept API 返回的特定连接创建一个到该客户端的新套接字。我的问题是Linux内核是否在某个哈希绑定表中维护监听套接字和从它派生的套接字之间的任何关系?

【问题讨论】:

  • 这是一个很好的问题,我也对答案很感兴趣
  • Rs 你的第二个问题,没有理由这样做。一经接受。套接字是独立的。
  • 如果你对调用流非常感兴趣,我建议使用systemtap、ftrace等工具来理解代码流。对于 ftrace linuxseekernel.blogspot.com/2014/05/…

标签: linux sockets tcp linux-kernel


【解决方案1】:

第一个问题:

http://www.danzig.jct.ac.il/tcp-ip-lab/ibm-tutorial/3376c210.html

Haifux 的所有讲座都是经典:

http://www.haifux.org/lectures/172/netLec.pdf

http://www.haifux.org/lectures/217/netLec5.pdf

这是来自 linux 网络的原作者/维护者本人:

http://vger.kernel.org/~davem/skb.html

http://vger.kernel.org/~davem/tcp_output.html

http://vger.kernel.org/~davem/tcp_skbcb.html

第二个问题:是的,所有现有连接都维护在一个关键表中:tcp_hashinfo。它的内存地址可以从 /proc/kallsyms 中读取。 “关键”,因为读取它需要锁定,所以即使你有地址也不要尝试走桌子。改用“inet_lookup_listener”或“inet_lookup_established”等全局导出的符号来遍历表。

更多信息在这里:

How to identify a specific socket between User Space and Kernel Space?

【讨论】:

    【解决方案2】:

    流程图?流程图?不是机会。我们很想拥有它们,但它们不存在,但您可以查看代码;愉快地审查了补丁。

    一个套接字返回一个文件描述符;进程文件描述符表维护套接字和其他内核数据结构之间的关联。文件描述符使这是一个简单的数组索引操作,不需要散列。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2012-02-09
      • 2014-01-17
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多