Linux内核中的TCP调用流程

时间:2014-08-06 16:47:50

标签: linux sockets tcp linux-kernel

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

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

2 个答案:

答案 0 :(得分:3)

第一个问题:

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?

答案 1 :(得分:1)

流程图?流程图?不是机会。我们很乐意拥有它们,但它们不存在,但您可以查看代码;补丁快乐地回顾。

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