每个网络应用都是基于客户端-服务器模型的,一个应用是由一个服务器进程和一个或者多个客户端进程组成.服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务.例如,一个Web服务器管理着一组磁盘文件,它会代表客户端进行检索和执行.客户端-服务器模型中的基本操作是事务.一个客户端-服务器事务由以下四步组成:
1.当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务.例如,当Web浏览器需要一个文件时,它就发送一个请求给Web服务器.
2.服务器收到请求后,解释它,并以适当的方式操作它的资源.例如,当Web服务器收到浏览器发出的请求后,它就读一个磁盘文件.
3.服务器给客户端发送一个响应,并等待下一个请求.例如,Web服务器将文件发送回客户端.
4.客户端收到响应并处理它.例如,当Web浏览器收到来自服务器的一页后,就在屏幕上显示此页.
认识到客户端和服务器是进程,而不是常提到的机器或者主机,这是很重要的.一台主机可以同时运行许多不同的客户端和服务器,而且一个客户端和服务器的事务可以在同一台或是不同的主机上.
对主机而言,网络只是又一种I/O设备,是数据源和数据接收方,一个插到I/O总线扩展槽的适配器提供了到网络的物理接口.从网络上接收到的数据从适配器经过I/O和内存总线复制到内存,通常是通过DMA传送.相似的,数据也能从内存复制到网络.
物理上而言,网络是一个按照地理远近组成的层次系统.最低处是LAN(局域网),在一个建筑或者校园范围内.目前最流行的局域网技术是以太网.一个以太网端包括一些电缆和一个叫做集线器的小盒子.每根电缆一端连接到主机的适配器,而另一端则连接到集线器的一个端口上.集线器不加分辨地将从一个端口上收到的每个位复制到其他所有的端口上.因此,每台主机都能看到每个位. 每个以太网适配器都有一个全球唯一的48位地址,它储存在这个适配器的非易失性存储器上,一台主机可以发送一段位(帧)到这个网段内的其他任何主机.每个帧包括一些固定数量的头部位,用来标识此帧的源和目的地址以及此帧的长度,此后紧随的就是数据位的有效载荷.每个主机适配器都能看到这个帧,但是只有目的主机实际读取它.使用一些电缆和叫做网桥的小盒子,多个以太网可以连接成较大的局域网,称为桥接以太网.在一个桥接以太网里,一些电缆连接网桥与网桥,而另外一些连接网桥和集线器. 在层次的更高级别中,多个不兼容的局域网可以通过叫做路由器的特殊计算机连接起来,组成一个互联网络.每台路由器对于它所连接的每个网络都有一个端口.路由器也能连接高速点到点电话连接,这是称为WAN. 互联网络至关重要的特性是,它能采用完全不同和不兼容技术的各种局域网和广域网组成.每台主机和其他每台主机都是物理相连的,但是如何能够让某台源主机跨过所有这些不兼容的网络发送数据位到另一台目的主机呢? 解决办法是一层运行在每台主机和路由器上的协议软件,它消除了不同网络之间的差异.这个软件实现一种协议,这种协议控制主机和路由器如何协同工作来实现数据传输.这种协议必须提供两种基本能力.
1.命名机制.不同的局域网技术有不同和不兼容的方式来为主机分配地址.每台主机会被分配至少一个这种互联网络地址,这个地址唯一地标识了这台主机
2.传送机制.在电缆上编码位和将这些位封装成帧方面,不同的联网技术有不同的和不兼容的方式.互联网络协议通过定义一种把数据位捆扎成不连续的片(包)的统一方式,从而消除了这些差异.一个包是由包头和有效载荷组成的,其中包头包括包的大小以及源主机和目的主机的地址,有效载荷包括从源主机发出的数据位
每台因特网主机都运行实现TCP/IP协议.因特网的客户端和服务器混合使用套接字接口函数和UnixI/O函数来进行通信,TCP/IP实际是一个协议族,其中每一个都提供不同的功能.例如,IP协议提供基本的命名方法和递送机制.IP机制从某种意义上而言是不可靠的,因为,如果数据报在网络中丢失或者重复,它并不会试图修复.TCP是一个构建在IP之上的复杂协议,提供了进程间可靠的全双工连接.我们可以把因特网看做一个世界范围的主机集合,满足以下特性:
1.主机集合被映射为一组32位的IP地址
2.这组IP地址被映射为一组称为因特网域名的标识符
3.因特网主机上的进程能够通过连接和任何其他因特网主机上的进程通信
因特网客户端和服务器通过在连接上发送和接收字节流来通信.从连接一对进程的意义上而言,连接是点对点的.从数据可以同时双向流动的角度来说,它是全双工的.一个套接字是连接的一个端点.每个套接字都有相应的套接字地址,是由一个因特网地址和一个16位的整数端口组成的,用“地址:端口”表示.当客户端发起一个连接请求时,客户端套接字地址中的端口是由内核自动分配的,称为临时端口.然而,服务器套接字地址中的端口通常是某个知名端口,是和这个服务相对应的.例如,Web服务器通常使用端口80.