16.1 引言
最常用的软件服务器是Web服务器。一台机器里放一些网页或web应用程序,然后启动服务。这样的服务器的任务就是接受客户端的请求,把网页发给客户端(如用户计算机上的浏览器),然后等待下一个客户端请求。
16.2 套接字:通信端点
16.2.1 什么是套接字
套接字是一种具有之前所说的“通信端点”概念的计算机网络数据结构。
16.2.2 套接字地址:主机与端口
如果把套接字比作电话的插口——即通信的最底层结构,那主机与端口就像区号与电话号码的一对组合。
合法的端口号范围为0~65535.其中,小于1024的端口号为系统保留端口。
16.2.3 面向连接与无连接
1. 面向连接
无论你使用哪一种地址家族,套接字的类型只有两种。一种是面向连接的套接字,即在通信之前一定要建立一条连接。面向连接的通信方式提供了顺序的、可靠的、不会重复的数据传输,而且也不会被加上数据边界。每一个要发送的信息,可能被拆分为多份,每一份会不多不少地正确地到达目的地。然后被重新按顺序拼接起来,传给正在等待的应用程序。
实现这种连接的主要协议就是传输控制协议(即TCP)。要创建TCP套接字就得在创建的时候指定套接字类型为SOCK_STREAM。TCP套接字采用SOCK_STREAM这个名字,表达了它作为流套接字的特点。由于这些套接字使用网际协议(IP)来查找网络中的主机,所以这样形成的整个系统,一般会由这两个协议(TCP和IP)名的组合来描述,即TCP/IP。
2. 无连接
与虚电路完全相反的是数据报型的无连接套接字。这意味着,无需建立连接就可以进行通讯。但这时,数据到达的顺序、可靠性及不重复性就无法保证了。数据报会保留数据边界,这就表示,数据是整个发送的,不会像面向连接的协议这样被先拆分成小块。
实现这种连接的主要协议就是用户数据表协议(即UDP)。要创建UDP套接字就得在创建的时候指定套接字类型为SOCK_DGRAM。由于这些套接字使用网际协议来查找网络中的主机,这样形成的整个系统,一般会由两个协议(UDP和IP)名的组合来描述,即UDP/IP。