【问题标题】:How bind works internally in kernel space?bind 如何在内核空间内部工作?
【发布时间】:2015-08-28 14:37:36
【问题描述】:

任何人都可以帮助我在套接字编程中跟踪bind() 系统调用。我想知道在内核空间中调用bind() 时会发生什么。比如它更新了哪些结构,底层调用了哪些函数

【问题讨论】:

标签: c linux sockets networking


【解决方案1】:

bind(2) 系统调用仅配置本地端的地址参数,一旦您连接(或sendto(2)),套接字将使用这些参数。如果你不使用它,内核会根据底层协议为其选择默认值。

bind(2) 遵循的确切过程取决于您正在处理的协议系列,因为如果您使用的是 PF_UNIXPF_INETPF_PACKETPF_XNS 等,绑定的行为会有所不同。

例如,在 Unix 套接字中,您会将套接字关联到文件系统中的一个 inode(当然,这是一个支持 unix 套接字的 inode),因此客户端有一个连接路径(在 Unix 套接字中,地址是文件系统中的路径)。在 TCP/IP 套接字中,您可以固定本地 IP 地址或您的套接字可以侦听的本地 IP 端口(以接受连接),或者您可以强制 IP 地址和/或端口连接到服务器。

为了更深入地了解网络套接字的内部结构,我建议您阅读 W.R. Stevens 的优秀书籍“TCP/IP Illustrated Vol 2. The implementation”, 描述了 BSD 套接字在 NET2 中的实现。它很旧,但仍然是有史以来最好的解释。为了很好地介绍 BSD 套接字系统调用的使用,还有一本 W.R.Stevens 的优秀书籍(长期以来它确实也是 BSD unix 系统调用的最佳系统调用参考):"UNIX 网络编程,卷1(第 2 版):套接字 API。” 两者都是每个人在工作中都应该拥有的两件珍宝。

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 2012-01-06
    • 2015-12-19
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多