计算机网络Socket编程概述

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

尽管这听起来像是互联网软件开发的另一个特征,但套接字技术早在Web之前就已存在。 而且,当今许多最流行的网络软件应用都依赖于套接字。

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

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

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

套接字API和库

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

套接字API相对较小且简单。 许多函数与文件输入/输出例程(如 read() write() close() 。 实际的函数调用依赖于选择的编程语言和套接字库。

套接字接口类型

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

  • 套接字是最常见的类型,它要求通信双方首先建立一个套接字连接,然后通过该连接传递的任何数据将保证以它发送的相同顺序到达 - 所谓的面向连接的编程模型。
  • 数据报套接字提供“无连接”语义。 对于数据报,连接是隐含的而不是显式的,就像流一样。 任何一方只需根据需要发送数据报,然后等待另一方回应; 消息可能会在传输过程中丢失或无法接收,但这是应用程序的责任,而不是插座来处理这些问题。 与使用流套接字相比,实现数据报套接字可以提供一些应用程序的性能提升和额外的灵活性,这证明了它们在某些情况下的使用。
  • 第三种套接字 - 原始套接字 - 绕过了对TCPUDP等标准协议的库内置支持。 原始套接字用于定制低级协议开发。

Socket支持网络协议

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

要通过Internet进行通信,IP套接字库使用IP地址来识别特定的计算机。 Internet的许多部分都使用命名服务,以便用户和套接字编程人员可以通过名称( 例如 ,“thiscomputer.wireless.about.com”)而不是地址( 例如 208.185.127.40)与计算机一起工作。 流和数据报套接字也使用IP 端口号来区分多个应用程序。 例如,Internet上的Web浏览器知道将端口80用作与Web服务器的套接字通信的默认值。