11.1 客户端-服务器编程模型
服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务
11.2 网络
以太网:最流行的局域网技术,通常跨越一些小的区域。
桥接以太网:使用一些电缆和叫作网桥的小盒子,多个以太网段跨越连接成较大的局域网,称为桥接以太网。
互联网络(小写的internet):多个不兼容的局域网通过叫作路由器的特殊计算机连接起来,组成一个互联网络
互联网络特性:能由采用完全不同和不兼容技术的各种局域网和广域网组成。
特性的实现:如何在不兼容的网络传输数据?
●命名机制(从哪发到哪,怎么标识):定义统一的主机地址格式
●传送机制(发什么):定义一种把数据位捆扎成不连续的片(包)的统一方式
数据传输步骤:
11.3 全球IP因特网
11.3.1 IP地址
类型:一个IP地址就是一个32位无符号整数
不足:将标量地址放在结构中,是套接字接口早期实现的不幸产物,应该再定义一个标量类型
格式:通常以点分十进制表示法来表示,可以用hostname来确定自己主机的点分十进制地址
扩展:处理大端小端法、IP和点分十进制转换见书
11.3.2因特网域名
由来:IP地址不太好记
映射:通过DNS实现
映射规则:一对一、多个域名映射同一个IP地址、多个域名映射同一组的多个IP地址
11.3.3因特网连接
连接的属性:连接是点对点的,是全双工的,也是可靠的
套接字:套接字是连接的一个端点
套接字地址:是由一个因特网地址和一个16位的整数端口组成的,用“地址:端口”表示
端口:客户端套接字的端口是内核自动分配的,称为临时端口;服务器的端口通常是某个知名端口,如web使用80
套接字对:(cliaddr:cliport,servaddr:servport)
11.4套接字接口 (看书)
概念:是一组函数,和Unix I/O结合起来,用以创建网络应用
11.5 Web服务器
11.5.1 Web基础
HTTP协议:超文本传输协议
HTML:超文本标记语言
11.5.2 Web内容
两种方式:每个服务器有自己的规则选择哪种方式
●取磁盘文件:通过URL通用资源定位符来区主机上的文件,最小的URL后缀是“/”字符,代表默认主页,缺失时浏览器自动添加
●运行可执行文件:URL中在文件名后包括程序参数。“?”字符分割文件名和参数,每个参数用“&”隔开
11.5.3 HTTP事务
●HTTP请求
URI是URL的后缀,包括文件名和可选的参数
GET / HTTP/1.1
请求行:method URI version
Host:www.123.com
请求报头:header-name:header_data
●HTTP响应
HTTP/1.0 200 OK
响应行:version status-code status-message
11.5.4 服务动态内容
CGI:通用网关接口
CGI由来:服务器和客户端间动态内容的提供较为复杂,如如何传参,服务器如何传递给子进程信息。用CGI解决这些问题
1、客户端如何将程序参数传递给服务器
在URI中传递
2、服务器如何传递参数给子进程
在调用execve之前,子进程将CGI环境变量QUERY_STRING设置为参数,程序在运行时可以用getenv引用
3、服务器如何将其他信息传递给子进程
4、子进程将它的输出发送到哪里
一个CGI程序将动态内容发送到标准输出,在子进程加载并运行CGI程序之前,它使用dup2函数将标准输出重定向到客户端相关联的已连接描述符,所以CGI写到标准输出的内容会直达客户端。