什么是套接字?


套接字允许同一或不同机器上的两个不同进程之间进行通信。更准确地说,这是一种使用标准 Unix 文件描述符与其他计算机通信的方法。在 Unix 中,每个 I/O 操作都是通过写入或读取文件描述符来完成的。文件描述符只是与打开的文件关联的整数,它可以是网络连接、文本文件、终端或其他东西。

对于程序员来说,套接字的外观和Behave很像低级文件描述符。这是因为 read() 和 write() 等命令使用套接字的方式与使用文件和管道的方式相同。

套接字首先在 2.1BSD 中引入,随后在 4.2BSD 中完善为当前形式。现在,大多数最新的 UNIX 系统版本都提供了套接字功能。

套接字用在哪里?

Unix Socket 用于客户端-服务器应用程序框架。服务器是根据客户端请求执行某些功能的进程。大多数应用程序级协议(如 FTP、SMTP 和 POP3)都使用套接字在客户端和服务器之间建立连接,然后交换数据。

插座类型

有四种类型的套接字可供用户使用。前两种最常用,后两种很少使用。

假定进程仅在相同类型的套接字之间进行通信,但不存在阻止不同类型的套接字之间进行通信的限制。

  • 流套接字- 保证网络环境中的交付。如果您通过流套接字发送三个项目“A,B,C”,它们将以相同的顺序到达 - “A,B,C”。这些套接字使用 TCP(传输控制协议)进行数据传输。如果无法传送,发件人会收到错误指示符。数据记录没有任何边界。

  • 数据报套接字- 不保证网络环境中的传送。它们是无连接的,因为您不需要像流套接字那样拥有开放的连接 - 您可以使用目的地信息构建一个数据包并将其发送出去。他们使用 UDP(用户数据报协议)。

  • 原始套接字- 这些为用户提供对支持套接字抽象的底层通信协议的访问。这些套接字通常是面向数据报的,尽管它们的确切特性取决于协议提供的接口。原始套接字不适合一般用户;它们主要是为那些有兴趣开发新的通信协议或访问现有协议的一些更神秘的设施的人提供的。

  • 顺序数据包套接字- 它们类似于流套接字,但保留了记录边界。此接口仅作为网络系统 (NS) 套接字抽象的一部分提供,并且在大多数严肃的 NS 应用程序中非常重要。顺序数据包套接字允许用户操作一个数据包或一组数据包上的序列数据包协议 (SPP) 或互联网数据报协议 (IDP) 标头,方法是编写原型标头以及要发送的任何数据,或者通过指定与所有传出数据一起使用的默认标头,并允许用户接收传入数据包的标头。

下一步是什么?

接下来的几章旨在加强您的基础知识,并为您使用套接字编写服务器和客户端程序奠定基础。如果你想直接跳转看如何编写客户端和服务器程序,那么可以这样做,但不建议这样做。强烈建议您逐步完成最初的几章,以便在继续进行编程之前奠定基础。