一、客户端——服务器编程模型
1、每个网络应用都是基于客户端——服务器模型的。一个应用是由一个服务器进程和多个客户端进程组成。服务端管理某种资源,并通过操作这种资源来为它的客户端提供某种服务。
2、该模型中的基本操作是事务,事务由四步构成的,如下图:
3、客户端和服务器指进程,而不是机器或主机。
二、网络
1、一个网络主机的硬件组成
对于主机而言,网络是一种I/O设备,一个插到I/O总线扩展槽的适配器提供了到网络的物理接口。从网络上接收到的数据从适配器经过I/O和存储器总线拷贝到存储器。
2、物理上而言,网络是一个按照地理远近组成别的层次系统。最低层是LAN(局域网),最流行的局域网技术是以太网。
以太网段结构图如下:
集线器不加分辨地将从一个端口上收到的每个位复制到其他所有的端口上。
桥接以太网如下图所示:
局域网的概念视图:(为了简化局域网的表示,把集线器和网桥以及连接他们的电缆画成一根水平线)
多个不兼容的局域网可以通过路由器连接起来:
三、全球IP因特网
IP协议提供主机间不可靠通信;UDP稍稍扩展了IP协议,提供进程间不可靠通信;TCP提供进程间可靠的全双工通信。
1、IP地址。
一个IP地址是一个32位的无符号整型,网络程序讲IP地址存放在如下IP地址结构中:
网络字节序(大端字节顺序);主机字节顺序是小端序。大端序意思是高位数字放在低地址上。
以下是主机字节序和网络字节序转换的函数:
IP地址通常以点十进制的形式表示。如,128.2.194.242是0x8002c2f2的点十进制表示形式。以下函数实现IP地址和点十进制字符串之间的转换:
2、因特网域名
因特网域名层次结构如下图所示:
一旦一个组织得到了一个二级域名,就可以在这一子域中创建任何新的域名了。
因特网定义了域名集合和IP地址之间的映射,这个映射通过DNS来维护,DNS数据库有上百万的主机条目结构组成:
因特网通过以下两个函数从DNS数据库中检索任意主机条目:
四、套接字
套接字接口描述如下图所示:
1、套接字结构地址
2、相关函数
客户端和服务器端都是用的函数:socket函数创建一个套接字描述符:
客户端函数,connect函数:
把以上两个函数封装为如下open_clientfd函数: int open_clientfd(char *hostname, int port);
服务器端:bind、listen、accept函数:
把bind和accept封装成一个函数,即open_listenfd函数:
一个简单的echo客户端和服务器的示例:
五、web服务器
1、web基础
web客户端和服务器之间的交互用的是一个基于文本的应用级协议,叫HTTP(超文本传输协议)。
web服务和常规的文件检索服务(例如FTP)的区别在于,web内容可以用HTML(超文本标记语言)语言编写。
2、web内容
web服务器以两种不同的方式向客户端提供内容:
取一个磁盘文件,并将它的内容返回给客户端。静态内容,静态服务。
运行一个可执行文件,并将它的输出返回给客户端。动态内容,动态服务。
3、HTTP事务
请求:
响应:
六、综合实例:TINY Web服务器