网络应用随处可见:有趣的是,所有的网络应用都是基于相同的基本模型,有着相似的整体逻辑结构,并且依赖相同的编程接口。
11-1:客户端-服务器模型:
- 每个网络应用都是基于客户端-服务器模型的。采用这个模型,一个应用是由一个服务器进程和一个或多个客户端进程组成的。
- 客户端向服务器发送请求,发起一个事务
- 服务器端确认请求,并且解释执行
- 服务器给客户端发送响应。
- 客户端接受响应并处理
11-3:全球IP-internet
- 每台主机都运行TCP/IP协议
- 客户端和服务器混合使用套接字接口函数(Socket)进行通信。SOCKET典型的作为会陷入内核的系统调用实现。
- IP协议提供基本的命名方法和传送机制;从某种意义上来说是不可靠的,因为,如果丢失或者重复,并不会试图恢复。
- UDP扩展IP协议,包可以在进程间而不是主机间进行传输。
- TCP提供了进程之间可靠地全双工的连接。
11-3-1:
- IP地址:一个IP地址就是一个32位无符号整数
- TCP/IP网络字节顺序为大端字节顺序。主机一般都是小端法
- IP地址通过点分十进制表示
11-3-2:因特网域名
- 域名映射:例如:128.2.194.242 映射为kittyhawk,这是通过DNS来维护的。
- 每个主机条目都是一个域名和IP地址的等价类。
- 本地回送地址:127.0.0.1.它为运行在同一台机器上的客户端和服务器提供了一种便利和可移植的方式,可以用来调试。
- 域名和IP地址的映射基本是一对一的,但是也有多对一和一对多 的。
11-3-3:因特网连接:
- 连接是点对点的
- 一个套接字是链接的一个端点;每个套接字都有相应的套接字地址,用"地址:端口"表示。
- 临时端口:客户端发起请求时,内核自动分配
- 知名端口:服务器套接字端口。
- 一个连接由它两端的套接字地址唯一确定;这一对地址叫做套接字对(socket pair)(cliaddr:cliport,servadde:servport)
- 例如((238.2.194.242:51213),(208.216.181.15:80))
11-4:套接字接口:
- 套接字接口是一组函数:见图11-14
- 从客户端:SOCKET---------------------------->CONNECT--> WRITE->READ->CLOSE
- 从服务器端:SOCKET->BIND->LISTEN->ACCEPT-->READ-->WRITE-->CLOSE(-->ACCEPT).
- 其中,主要是socket的描述符:socketfd。
- SOCKET的作用是创建一个套接字描述符:
- CONNECT和制定地址和端口的服务器建立连接
- BIND将套接字描述符和服务器套接字地址联系起来(即和自己的IP等信息)
- LISTEN是告诉内核,这是一个主动套接字,并且使用主动连接描述符。
- ACCEPT返回给客户端一个已连接描述符,使用已连接描述符客户端可以和服务器端进行通信。
- 监听描述符和已连接描述符的意义在于可以创建并发的服务器端程序。
11.5 Web服务器:
- Web客户端(浏览器)和服务器之间的交互使用HTTP协议。HTTP是一个简单的协议:一个Web库换段打开一个到服务器的因特网连接,并且请求某些内容。服务器响应请求内容,关闭连接,浏览器读取内容,并且显示在屏幕上。