通过网络进行信息的传输,实际上就是不同进程间的信息交互。所有的网络应用,都是基于一个叫做Client-Server(客户-服务器)的模型开发的
Client-Server(客户-服务器)模型
在Client-Server模型中,一个应用程序由一个服务器(Server)进程和多个客户(Client)进程(后面会称作host)组成。服务器进程会根据客户进程的请求,对相应的资源进行操作,并将相应的反馈传回给客户,如下图所示:
网络
从硬件上来看,网络可以看做是和USB控制器、图形适配器、硬盘控制器相并列的I/O接口。网络将会通过I/O总线上额外接口处的“网络适配器”接入计算机,如下图所示:
通过网络接入的数据,会顺着I/O总线和内存总线,复制到内存中。反之,数据也可以从内存复制到网络上
将不同的这样的计算机用某些结构的网络连接起来,就可以实现网络通信了
网络连接的结构
在网络连接中,最底层的叫做局域网(local area network, LAN)。通常情况下,LAN的覆盖范围是一栋楼或一所学校。实现局域网的技术有多种,其中最著名的叫做“Ethernet”。在使用Ethernet技术实现的LAN中,每一小块(segment)都是由一个叫做hub的box和一些连线组成的,每条线的另一端都连上了一个host的适配器:
这样的一小块,通常只会覆盖一个房间或一层楼的范围。而多个segment通过叫做bridge的box连接在一起,则能够形成更大的LAN:
再往上,多个不适配的LAN,可以通过被称作router的特殊计算机,连接起来组成互联网:
上层的网络称作广域网(wide area networks, WAN),因为其跨越的空间范围相比于LAN来说非常地大
通过网络传输信息
在不适配的LAN之间传输信息时,由于信息格式的不同,直接识别显然是无法做到的。这个时候,在两个LAN之间的router就可以起到一个转换信息的作用
以上图的信息传输为例,现在要将信息Data从LAN1处的客户A发送到LAN2处的服务器B。首先是从客户A的host处发送出信息Data,随后协议软件会给这个Data附上互联网数据包头(PH)和LAN1对应的帧头(FH1),之后再由LAN1适配器将帧复制到网络。当帧到达router后,router的LAN1适配器会将此帧送往协议软件,随后将帧中的FH1根据要传送到的地方,替换为LAN2的FH2。最后再将替换后的帧按传输到router的方式,反过来传到服务器B处,服务器B将接收到的数据Data存入到虚拟地址空间中
全球IP互联网
互联网可以看作是全球各地的host的集合,它们具有如下特性:
1、这个host集合可以映射到32位IP地址的集合
2、IP地址集合可以映射到一系列网络域名(标识符)的集合
3、通过连接,一个互联网host上的进程可以与任意一个互联网host上的进程进行交流
IP地址
IP地址由32位的无符号型整数表示,此地址还有一种表示方式,就是以8位为一组,形成四组十进制的数字,每组数字之间都以点进行分隔。例如:0x8002c2f2可以表示为128.2.194.242
互联网域名
由于IP地址的记忆是较为困难的,因此便诞生了域名。域名是由一系列的词语组成的,它们和IP地址之间存在映射关系。也就是说,有时候只需使用一些容易记忆的词语,就可以代替难以记忆的IP地址,从而提高网络连接的效率
域名是有分层制度的。如下图所示,域名的分层可以使用树来表示:
每当一个组织机构分配到了某一层的一个域名后,从这个结点开始的所有子结点就都可以自由地开辟
关于域名的映射,是记载在(Domain Name System, DNS)数据库里的。通常情况下,几个不同的域名可以对应着同一组的IP地址
网络连接
网络上的连接,是指一对进程之间的点对点连接。一个socket是连接的一个端点,每个socket都有一个对应的socket地址,这个地址由互联网地址和一个16位整数的port(端口)组成,记为:address:port
每个连接都由两个端点的socket地址进行独一无二的标识:
(cliaddr:cliport, servaddr:serport)