博客
关于我
Linux网络协议栈(一)——Socket入门(2)
阅读量:433 次
发布时间:2019-03-06

本文共 1191 字,大约阅读时间需要 3 分钟。

BSD套接字与INET套接字实现

1. BSD套接字核心数据结构

BSD套接字在Linux内核中提供了统一的接口,隐藏了各个协议之间的差异。其核心数据结构是struct socket,包含以下关键成员:

  • socket_state:表示套接字的状态,如SS_FREESS_UNCONNECTED等。
  • flags:套接字的标志位,用于表示各种操作模式。
  • proto_ops:操作函数集合,定义了套接字的各种操作,如绑定、连接等。
  • fasync_list:用于异步IO的文件异步结构。
  • file:与套接字关联的文件对象。
  • sk:套接字的内部结构,与具体协议簇相关。
  • wait:等待队列,用于处理套接字事件。
  • type:套接字的类型,如SOCK_STREAMSOCK_DGRAM等。

2. BSD套接字系统调用

Linux内核提供了一个与套接字相关的系统调用sys_socketcall,所有套接字操作 ultimately映射到这个系统调用。该系统调用通过copy_from_user函数从用户空间拷贝参数,并根据调用类型执行相应操作,如sys_socketsys_bindsys_connect等。

3. INET套接字数据结构

INET套接字是支持Internet地址族的套接字,位于TCP协议之上。其核心数据结构sock包含以下成员:

  • __sk_common:公共部分,包含套接字的基本信息,如sk_familysk_statesk_reuse等。
  • sk_bound_dev_if:套接字的绑定设备接口。
  • sk_node:套接字的节点信息。
  • sk_protocol:套接字的协议类型,如TCP、UDP等。
  • sk_rcvbufsk_wbuf:接收和发送缓冲区大小。
  • sk_backlog:接收回滞队列。
  • sk_error_queue:错误队列。
  • sk_policy:套接字的策略信息。
  • sk_user_data:用户数据。
  • sk_owner:套接字的拥有者信息。

4. INET套接字初始化

inet_init函数在系统初始化时被调用,负责注册Internet协议簇,并初始化相关协议如TCP、UDP、ICMP等。函数通过sock_register注册协议簇,并添加基本协议。

5. sock_register函数

sock_register函数用于注册协议簇信息。函数首先检查协议簇的有效性,然后通过net_family_write_lock确保并发安全,注册协议簇到net_families数组中。

6. INET套接字创建

inet_create函数用于创建INET套接字。函数通过遍历inetsw数组查找匹配的协议组合,并根据协议初始化套接字的相关参数。最终返回创建成功的套接字。

通过以上实现,Linux内核提供了完整的套接字支持,兼容多种网络协议和应用场景。

转载地址:http://gyfyz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现Length conversion长度转换算法(附完整源码)
查看>>
Objective-C实现Levenshtein 距离算法(附完整源码)
查看>>
Objective-C实现levenshteinDistance字符串编辑距离算法(附完整源码)
查看>>
Objective-C实现lfu cache缓存算法(附完整源码)
查看>>
Objective-C实现LFU缓存算法(附完整源码)
查看>>
Objective-C实现linear algebra线性代数算法(附完整源码)
查看>>
Objective-C实现linear congruential generator线性同余发生器算法(附完整源码)
查看>>
Objective-C实现linear discriminant analysis线性判别分析算法(附完整源码)
查看>>
Objective-C实现linear regression线性回归算法(附完整源码)
查看>>
Objective-C实现linear search线性搜索算法(附完整源码)
查看>>
Objective-C实现Linear search线性搜索算法(附完整源码)
查看>>
Objective-C实现LinearSieve线性素数筛选算法 (附完整源码)
查看>>
Objective-C实现LinkedListNode链表节点类算法(附完整源码)
查看>>
Objective-C实现LinkedList链表算法(附完整源码)
查看>>
Objective-C实现local weighted learning局部加权学习算法(附完整源码)
查看>>
Objective-C实现logistic regression逻辑回归算法(附完整源码)
查看>>
Objective-C实现logistic sigmoid函数(附完整源码)
查看>>
Objective-C实现longest Common Substring最长公共子串算法(附完整源码)
查看>>
Objective-C实现longest increasing subsequence最长递增子序列算法(附完整源码)
查看>>
Objective-C实现longestCommonSubsequence最长公共子序列算法(附完整源码)
查看>>