说起网络,它给我们的第一印象是丰富的网络应用。这里从网络最高层——应用层——出发,介绍网络应用层的构成与网络数据是如何在Internet上传输的。
网络应用
我们大多通过网络应用了解互联网,例如
- 万维网 World Wide Web
- 在线游戏
- 电子邮件
- ……
在应用层上运行了一些协议,例如
- URL(uniform resource locator)
- HTTP(hypertext transfer protocol), HTTP可以看作是网络架构第四层的协议,它能够提供可靠的服务
- TCP(transmission control protocol)
以URL为例,在网络上为了发送一个URL请求,我们需要发送多达17条信息:
- 6条用于寻找IP地址
- 3条用于建立TCP连接
- 4条用于发送HTTP请求与确认
- 4条用于结束TCP连接
术语
为了进一步了解网络连接,了解一些常用术语必不可少。
link: 设备之间的“连接”,可以是无线的,也可以是有线的
node: 设备节点
point-to-point: 点对点
multiple access: 在一个multiple access的网络里,每个设备都可以接受发送的资讯
switched network: 交换网络,switch是交换机的意思。在这样的网络中,设备通过交换机建立连接。又可以细分为circuit switched(例如,两个电话之间由交换机建立了线路)与packet switched(将资料切成封包,丢进网络)
store-and-forward: 路由器、交换机处理网络封包的一种技术,在推送消息之前将消息储存起来
下面的图展现了由交换机连接的网络与由路由器连接的子网络。
在图中,不同的主机(hosts)通过交换机(switches)连接成一个局域网络,然后通过路由器(router/gateway)多个局域网串联成一个大的网络(internetwork)。
注意在一个网络中,一份消息从一个主机传送到另外一个主机的路径有很多条,具体如何传送是路由器根据网络情况自动为消息分配的(routing)。
发送消息的手段有多种,通常可以分为
- unicast: 将消息发给特定的对象
- multicast: 将消息发送给一群对象
- broadcast: 将消息发送给所有对象
通常路由器会过滤掉broadcast请求,以保证大网络的稳定。
网络根据规模由小到大可以分为:
- LAN: Local Area Networks
- MAN: Metropolitan Area Networks
- WAN: Wide Area Networks
封包在网络上的传输
封包从一个主机传送到另外一个主机的过程如上图所示。左上角的设备将多个封包丢进局域网(LAN),通过路由器的计算,为封包设计一个合适的路径。
但是由于网络情况会不断变化,会导致封包被丢弃。例如有些路由器会阻塞,这样就导致封包被派遣到其它路径。每次封包进入一个路由器,该封包的一个特定的计数器就会减1,当计数器变为0时,该封包就会被丢弃。另外一种情况是信息进入路由器与出路由器的速度不匹配,进的快出的慢,导致封包被丢弃。
另一个需要注意的是,不同的路由器会有不同的“最大信息长度”。如果一个超大封包进入一个路由器,该路由器会将封包的信息分割成小块,并为每个子信息复制一份header。这些子信息不一定会同时到达终点,因此需要有一些组装(assemble)的机制。
因此,Internet是一个不稳定(unreliable)的服务。
在网络上共享资源
网络上的资源指link与node。
比如现在有交换机A直接连着a1,a2,a3,交换机B直接连着b1,b2,b3,ai与bj(i,j=1,2,3)之间没有直接连接,只有A与B之间有连接。现在的问题是ai,bi如何共享A与B之间的link资源。
A收集来自ai信息的过程叫做multiplexing,B接收来自A的信息并分发的过程叫做de-multiplexing。
主要有三个方法:
FDM: Frequency Division Multiplexing
交换机将link资源的频率段分割成多分,每个使用者使用特定的频段。这种方法很类似电台的频道(channel)。
TDM: Synchronous Time-division Multiplexing
这种方式将时间分割成多份,每个使用者轮流使用,但是可以使用整个频率段。
Statistical Multiplexing
虽然上面的两种方式可以达到公平的目的,但是并不是很高效。有些用户可能有大流量需求,而某些用户几乎没有流量需求,使用上面两种方法可能导致资源的浪费。
Statistical Multiplexing根据传输的流量(flow)来确定服务的分配。常见的一些方法如:
- FIFO: 首先传输先到的传输请求
- Round-Robin: 每次传输队列中每个传输请求的一个封包,然后循环。
- Priorities(Quality-of-Serverce(QoS)): 先服务重要的请求
网络稳定性
前面谈到了internet是一个不稳定的服务,它面临的一些稳定性问题诸如:
- bit error: 例如0变为1,少量的此类错误可以通过纠正码勘测与纠正
- burst errors: 大量的bit error
- 封包丢失
- 节点与连接失效
- 信息延迟
- 封包接收顺序不是发送顺序
- 第三方可能篡改信息