1 服务器基础架构
1.1 背景知识
Web 服务器使用 HTTP 协议与客户端(即浏览器)通信,而 HTTP 协议又基于 TCP/IP 协议。因此我们要做的工作就是利用 Linux 系统提供的 TCP 通信接口来实现 HTTP 协议。
而 Linux 为我们提供了哪些网络编程接口呢?没错,就是 socket(套接字),我们会在后面详细介绍该接口的使用方式。 另外我们应该清楚 Linux 的系统 I/O 和文件系统的关系。在 Linux 中,所有 I/O 设备都被看作一个个文件,I/O 设备的输入输出被认做读写文件。网络作为一种 I/O 设备,同样被看作文件,而且是一类特殊的文件,即套接字文件。
我们还要对网络通信协议 TCP/IP 有一个大致的了解,知道 IP 地址和端口的作用。
1.2 客户端和服务器编程模型
客户端-服务器编程模型是一个典型的进程间通信模型。客户端进程和服务器进程通常分处两个不同的主机,如下图所示,客户端发送请求给服务器,服务器从本地资源库中查找需要的资源,然后发送响应给客户端,最后客户端(通常是浏览器)处理这个响应,把结果显示在浏览器上。通信示意图如下图所示:
这个过程看起来很简单,但是我们需要深入具体的实现细节。我们知道,TCP 是基于连接的,需要先建立连接才能互相通信。在 Linux 中,socket 为我们提供了方便的解决方案。
每一对网络连接称为一个 socket 对,包括两个端点的 socket 地址,表示如下:
(cliaddr : cliport, servaddr : servport
其中,cliaddr 和 cliport 分别是客户端 IP 地址和客户端端口,servaddr 和 servport 分别是服务器 IP 地址和服务器端口。客户端-服务器配对过程如下图所示:
这对地址和端口唯一确定了连接的双方,在 TCP/IP 协议网络中就能轻松地找到对方。
1.3 HTTP 基础知识
HTTP 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于 1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。
HTTP 协议的主要特点可概括如下: 1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP 协议是无
评论前必须登录!
注册