第十一章 网络编程
我们需要理解基本的客户端-服务端
编程模型,以及如何编写使用因特网提供的服务的客户端-服务端
程序。
最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web
服务器,能够为真实的Web
浏览器提供静态的和动态的文本和图形内容。
11.1 客户端 - 服务器编程模型
每个网络应用程序都是基于客户端 - 服务器模型
的
采用这种模型,一个应用是由一个
服务器
进程
和一个或多个客户端进程
组成。服务器
管理某种资源,并且通过操作这种资源为它的客户端提供某种服务。WEB
服务器,代表客户端
检索,执行磁盘内容。FTP
服务器,为客户端
进行存储和检索。电子邮件
服务器,为客户端
进行读和更新。
客户端-服务器
模型中的基本操作是事务(transaction)
.- 一个
客户端-服务器
事务由四步组成
- 客户端需要服务的时候,向服务器发送请求,发送一个
事务
。 - 服务器收到请求后,解释它,并以适当方式操作它的资源。
- 服务器给客户端发送一个
响应
,并等待下一个请求。 - 客户端收到
响应
并处理它。
- 客户端需要服务的时候,向服务器发送请求,发送一个
- 一个
11.2 网络
客户端
和服务端
通常运行在不同的主机上,并且通过计算机网络
的硬件和软件资源来通信。
- 对于一个主机而言,
网络
只是又一种I/O
设备,作为数据源和数据接收方。
对于物理上而言,网络是一个按照地理远近组成的层次系统。
最低层是
LAN(Local Area Network,局域网)
:在一个建筑或校园范围内。迄今为止,最流行的
LAN
技术是以太网(Ethernet)
.由
Xerox PARC
公司在20世纪70年代中期提出。以太网
被证明是适应力极强的,从3 MB/s
到10 GB/s
。
一个
以太网段(Ethernet segment)
包括一些
电缆(通常是双绞线)
和一个叫做集线器
的小盒子。- 每根
电缆
都有相同的最大位带宽
- 典型的是
100MB/s
或者1GB/S
. - 一端连接在主机的
适配器
,一端连接到集线器的一个端口
。
- 典型的是
集线器
不加分辨地将从一个端口收到的每个位复制到其他所有端口上。
- 因此每台主机都能看到每个位。
- 每根
以太网段
通常跨越一些小的区域。- 例如某建筑物的一个房间或一个楼层。
扩展介绍以太网
每个以太网适配器(网卡)
都有一个全球唯一的48
位地址,它存储在这个适配器的ROM
上(MAC
)。
一台主机可以发送一段
位
,称为帧(frame)
,到这个网段
内其他任何主机。每个
帧
包括- 一些固定数量的
头部(header)
位
- 用于表示此
帧
的源,和目的地址以及此帧
的长度。
- 用于表示此
- 此后就是数据位的
有效载荷
。
- 一些固定数量的
每个主机适配器都能看到这个
帧
,但是只有目的主机实际读取它。
使用一些电缆
和叫做网桥(bridge)
的小盒子,多个以太网段
可以连接称较大的局域网,称为桥接以太网(bridged Ethernet)
。
- 一些
电缆
连接网桥与网桥,或者 网桥与集线器。
- 这些电缆的带宽可以是不同的。
在层次的更高级别,多个不兼容的局域网可以通过叫做路由器(router)
的特殊计算机连接起来,组成一个internet(互联网络)
Internet和internet
我们总是用小写字母的internet
表示一般概念,大写的Internet
表示一种具体实现,如全球IP因特网。
WAN
(Wide-Area Network
,广域网)