Networking 理解';结构原型';和';结构原型操作&x27;在内核中

Networking 理解';结构原型';和';结构原型操作&x27;在内核中,networking,linux-kernel,Networking,Linux Kernel,我正在研究tcp/ip实现,特别是套接字层,对于一些结构我还不太了解 我知道“struct proto_ops”用于定义操作,例如bind/connect/accept,每个套接字都有一个指定的proto_ops 另一方面,“struct proto”定义了新的协议,该结构还定义了accept/bind/setsockopt/getsockopt/etc.方法的函数指针 我在$linux/net/中读了很多代码,我不知道它在哪里使用了通过“struct proto”定义的操作,所以我不确定这些方

我正在研究tcp/ip实现,特别是套接字层,对于一些结构我还不太了解

我知道“struct proto_ops”用于定义操作,例如bind/connect/accept,每个套接字都有一个指定的proto_ops

另一方面,“struct proto”定义了新的协议,该结构还定义了accept/bind/setsockopt/getsockopt/etc.方法的函数指针

我在$linux/net/中读了很多代码,我不知道它在哪里使用了通过“struct proto”定义的操作,所以我不确定这些方法在代码中是如何使用的

有人能帮我澄清一下吗?
谢谢。

你可以这样想象。有三层:

BSD sock->inet sock->tcp/udp sock
相应的行动:

BSD api->proto_ops->proto
如果您阅读sys_socket()和sys_read(),您将得到相同的答案


希望这能帮助您:-)

我认为当新手尝试创建新协议时,这个问题是最令人头痛的问题

解释: 这两种结构都有名称相似的成员元素,尽管它们表示不同的函数

  • 结构保护操作:用于套接字层和传输层之间的通信
  • struct prot:用于与系统调用通信
示例: 在用户空间中调用系统调用时,首先调用exconnect()、prot_ops_connect()

  • 在函数prot_ops_connect()中,我们需要调用sk->sk_prot->connect()
  • sk->sk_prot->connect()将自动调用proto_connect()
希望这有帮助