计算机网络插座编程概述

苹果首席执行官蒂姆库克在苹果商店内停止了一小时的代码研讨会活动

套接字是计算机网络编程的最基本技术之一。套接字允许网络软件应用程序使用内置于网络硬件和操作系统中的标准机制进行通信。

虽然它可能听起来只是互联网软件开发的另一个特性,但是套接字技术早在Web出现之前就存在了。而且,当今许多最流行的网络软件应用都依赖于套接字。

套接字可以为您的网络做什么

套接字表示恰好两个软件之间的单个连接(所谓的点对点连接)。两个以上的软件可以使用多个套接字与客户端/服务器或分布式系统进行通信。例如,许多Web浏览器可以通过服务器上制作的一组套接字同时与单个Web服务器通信。

基于套接字的软件通常在网络上的两台独立计算机上运行,​​但套接字也可用于在一台计算机上进行本地通信(进程间)。套接字是双向的,这意味着连接的任何一端都能够发送和接收数据。有时,启动通信的一个应用程序称为“客户端”,另一个应用程序称为“服务器”,但是这个术语会导致对等网络混淆,并且通常应该避免。

套接字API和库

Internet上存在几个实现标准应用程序编程接口(API)的库。第一个主流软件包–Berkeley套接字库仍然在UNIX系统上广泛使用。另一个非常常见的API是用于Microsoft操作系统的Windows套接字(WinSock)库。相对于其他计算机技术,套接字API非常成熟:WinSock自1993年开始使用,自1982年以来一直在使用Berkeley套接字。

套接字API相对较小且简单。许多函数类似于文件输入/输出例程中使用的函数,例如 读()写(),和 关()。实际调用函数取决于所选的编程语言和套接字库。

套接字接口类型

套接字接口可以分为三类:

  • 流套接字是最常见的类型,它要求两个通信方首先建立套接字连接,然后通过该连接传递的任何数据将保证以与发送方式相同的顺序到达 – 即所谓的面向连接的编程模型。

  • 数据报套接字提供“无连接”语义。对于数据报,连接是隐式的而不是像流一样显式。任何一方只需根据需要发送数据报并等待另一方做出响应;消息可能在传输中丢失或无序接收,但应用程序负责而不是处理这些问题的套接字。与使用流套接字相比,实现数据报套接字可以为某些应用程序提供性能提升和额外的灵活性,从而证明它们在某些情况下的使用。

  • 第三种类型的套接字 – 原始套接字 – 绕过了库对TCP和UDP等标准协议的内置支持。原始套接字用于自定义低级协议开发。

    网络协议中的套接字支持

    现代网络套接字通常与Internet协议(IP,TCP和UDP)结合使用。实现Internet协议套接字的库使用TCP作为流,UDP作为数据报,IP本身作为原始套接字。

    要通过Internet进行通信,IP套接字库使用IP地址来标识特定的计算机。因特网的许多部分使用命名服务,因此用户和套接字程序员可以通过名称(例如,“thiscomputer.wireless.lifewire.com”)而不是通过地址(例如,208.185.127.40)来使用计算机。流和数据报套接字还使用IP端口号来区分多个应用程序。例如,Internet上的Web浏览器知道使用端口80作为与Web服务器进行套接字通信的默认设置。