![](https://csdnimg.cn/release/download_crawler_static/86328167/bg7.jpg)
第十二章
网络
– 453 –
(2)socket 是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体。
(3)在 Linux 系统中,socket 属于文件系统的一部分,网络通信可以被看作是对文件的
读取,使得我们对网络的控制和对文件的控制一样方便。
12.3.2 套接字接口的种类
Linux 支持多种套接字种类,不同的套接字种类称为“地址族”,这是因为每种套接字
种类拥有自己的通信寻址方法。Linux 所支持的套接字地址族见表 12.3。
Linux 将上述套接字地址族抽象为统一的 BSD 套接字接口,应用程序关心的只是 BSD 套
接字接口,而 BSD 套接字由各地址族专有的软件支持。一般而言,BSD 套接字可支持多种套
接字类型,不同的套接字类型提供的服务不同,Linux 所支持的部分 BSD 套接字类型见表
12.4,但表 12.3 中的套接字地址族并不一定全部支持表 12.4 中的这些套接字类型。
表 12.3 Linux 支持的套接字地址族
套接字地址族 描述
UNIX UNIX 域套接字
INET 通过 TCP/IP 协议支持的 Internet 地址族
AX25 Amater radio X25
APPLETALK Appletalk DDP
IPX Novell IPX
X25 X25
表 12.4 Linux 所支持的 BSD 套接字类型
BSD 套接字类型 描述
流(stream)
这种套接字提供了可靠的双向顺序数据流,可保证数据不会在传输过程
中丢失、破坏或重复出现。流套接字通过 INET 地址族的 TCP 协议实现
数据报(datagram)
这种套接字也提供双向的数据传输,但是并不对数据的传输提供担保,
也就是说,数据可能会以错误的顺序传递,甚至丢失或破坏。这种类型
的套接字通过 INET 地址族的 UDP 协议实现
原始(raw)
利用这种类型的套接字,进程可以直接访问底层协议(因此称为原始)。
例如,可在某个以太网设备上打开原始套接字,然后获取原始的 IP 数
据传输信息
可靠发送的消息 和数据报套接字类似,但保证数据被正确传输到目的端
顺序数据包 和流套接字类似,但数据包大小是固定的
数据包(packet)
这并不是标准的 BSD 套接字类型,它是 Linux 专有的 BSD 套接字扩展,
可允许进程直接在设备级访问数据包
下面我们以 INET 套接字地址族、流套接字类型为例,详细介绍套接字的工作原理和通
信过程。