套接字socket 的地址族和类型、工作原理、创建过程

本文介绍了套接字socket的工作原理,包括地址族和类型的分类,以及创建过程。内容主要源自《深入分析linux内核源代码》及其它相关资料,旨在澄清系统编程和网络编程中的概念问题。尽管书中分析的内核版本为2.4.16,部分概念可能与最新内核版本有所不同,但仍是理解socket编程的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友自己参考相关资料。此书出版较早,分析的版本为2.4.16,故出现的一些概念可能跟最新版本内核不同。

此书已经开源,阅读地址 http://www.kerneltravel.net


一、套接字socket

(一)、套接字在网络中的地位和作用


socket 在网络系统中的作用如下。
(1)socket 位于网络协议之上,屏蔽了不同网络协议之间的差异。
(2)socket 是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体。
(3)在Linux 系统中,socket 属于文件系统的一部分,网络通信可以被看作是对文件的 读取,使得我们对网络的控制和对文件的控制一样方便。

(二)、套接字接口的种类

Linux 支持多种套接字种类,不同的套接字种类称为“地址族”,这是因为每种套接字 种类拥有自己的通信寻址方法。Linux 所支持的套接字地址族见表12.3。 Linux 将上述套接字地址族抽象为统一的 BSD 套接字接口,应用程序关心的只是 BSD 套 接字接口,而 BSD 套接字由各地址族专有的软件支持。一般而言,BSD 套接字可支持多种套 接字类型,不同的套接字类型提供的服务不同,Linux 所支持的部分 BSD 套接字类型见表 12.4,但表12.3 中的套接字地址族并不一定全部支持表12.4 中的这些套接字类型。



(三)、套接字的工作原理

INET 套接字就是支持 Internet 地址族的套接字,它位于TCP 之上,BSD 套接字之下, 如图12.8 所示,这里也体现了Linux 网络模块分层的设计思想。

INET 和 BSD 套接字之间的接口通过 Internet 地址族套接字操作集实现,这些操作集 实际是一组协议的操作例程,在include/linux/net.h 中定义为struct proto_ops:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
struct proto_ops
{
     int family;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值