我试图在Linux内核中获得3.8版的TCP调用流,以用于不同的用户空间API(例如,connect,bind,listen和accept)。谁能给我提供流程流程图?我能够使用send和recv API查找数据流。

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

最佳答案

第一个问题:

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_builted”)遍历表。

更多信息在这里:

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

10-04 11:54
查看更多