1、概述
套接字的原始版本是BSD套接字[1],它是通信端点的抽象。可用于同一机器上的进程间通信,典型应用为Unix域套接字[2];也可用于通信网络上任何体系结构的计算机之间的通信,典型应用为互联网套接字[3]及在此基础上的TCP/IP协议栈[4]实现。
1983年,4.2 BSD发布了基于套接字技术的第一个TCP/IP协议栈API实现,它成为此后其它系统TCP/IP实现的基础。POSIX的socket(7)标准是在4.4 BSD的基础上制定,微软则于1990年代初期在成功移植BSD套接字的基础上开发了winsock[5],此外使用TCP/IP技术进行通信的各种嵌入式系统也有诸多基于Socket API的移植版本。
套接字是在文件I/O机制的基础上实现的,包括匿名和有名两种文件形式。典型的有名套接字是/dev/log,它使用的是Unix域套接字,守护进程syslogd(8)使用它和使用系统日志服务的客户进程通信。下面的内容除非特别注明,否则“套接字”特指匿名套接字。
用于分析TCP/IP协议的经典Unix工具包括netcat(1)和tcpdump(1)。前者被称为网络瑞士军刀,可以建立任意基于TCP/IP的网络连接并进行输入输出;后者可以把所在网络上的数据流转储到当前的标准输出,这些输出可通过管道线连接到一些文本过滤器之类的程序进行分析。
本章只讲述套接字的建立、设置、数据收发等基本接口。关于套接字机制与TCP/IP实现细节可参考:
- TCP/IP Illustrated Volume 2: The Implementation
中文译名《TCP/IP详解 卷2:实现》。基于4.4 BSD-Lite的套接字机制讲述TCP/IP实现;
- The Design and Implementation of 4.4BSD
中文译名《4.4 BSD 设计与实现》。讲述包括Sockets机制在内的4.4 BSD设计原理与实现细节;
- Understanding Linux Network Internals
中文译名《深入理解Linux网络技术内幕》。包括Linux环境的网络实现细节及解决方案。暂无简体中文版。
关于TCP/IP协议及应用可参考:
- TCP/IP Illustrated Volume 1: The Protocols
中文译名为《TCP/IP详解 卷1:协议》。讲述TCPIP协议族的体系结构及细节;
- UNIX Network Programming
中文译名为《UNIX网络编程》。其中第二版分为两卷,第一卷The Sockets Networking API(中文译名:《套接口API》)讲述了Sockets编程的细节;
- Internetworking With TCP/IP Vol Ⅲ:Client-Server Programming And Applications
中文译名为《用TCP/IP进行网际互联 第三卷:客户-服务器编程与应用》。讲述C/S程序设计的典型模型与应用;
- RFC



