什么是网络?
为防误解,与因特网(或互联网)区分
网络的英文为network,而我们日常生活中提到的网络常常为因特网(Internet)。很明显这两者是有区别的。
网络,用比较官方的说法就是:一组具有通信能力的设备相互连接形成的。这里的设备即可以是主机(host),比如笔记本电脑,台式机,手机等;也可以是各式各样的连接设备,比如路由器,交换机,调制解调器等。
写者注
Internet:虽然说比较官方的翻译是因特网,但实际生活中常用的是用互联网去指代Internet。与其区别的是开头字母小写的internet–互连网。但我个人习惯还是用因特网去指代Internet,所以这个概念建议自行区分。
所以网络不仅仅局限于“计算机联网”这个概念。手机通过USB数据线接到电脑上,构成的网络规模虽然很小,但这也算是一个网络。而这里的USB数据线,又或者是WiFi,都属于链路(Link)。
链路(Link)与节点(Node)
计算机连接到网络的方式。
链路,简化来说就是你的网线或WIFI。你的电脑也好,手机也好,又或者是其他的硬件设备也好,通过网线或WIFI链接到网络,那么你的设备就变成了节点。链接到网络的物理介质就是(物理)链路。
写者注
这里默认“链路”为物理链路。比如光纤网线,wifi,甚至USB这些都属于(物理)链路。还有一种链路的概念为“数据链路”,这点在以后的文章中会提到。
而链路也分为几种,如下:
- 点到点(point to point,即p2p)链路:一条物理链路+仅存在一对节点。上面提到的手机-USB-电脑,就是点到点链路。
- 多路访问(multiple-access)链路:一条链路+多个节点共享该链路。最经典的例子就是WiFi。
顺带一提,这里的多路访问如果用电脑+网线的例子来说,通俗的讲就是五台电脑接线直接接到同一条电缆上,中间没有路由器也没交换机。很久以前的网络就采用的是这种方式。
举个例子会比较好理解。比如ABCDE五台电脑直接连接到一条公共的电缆上。A要发张色图给E,那这张色图还会经过BCD三台电脑,只不过是BCD认为”我没有必要接收”,于是把这张色图(或叫数据包)给丢弃了。这过程听着就很低效,所以我们引入了”交换网“的概念。
交换网(switched network)
电路交换和分组交换
可以看到,通过链路直接相连有着明显的限制。比如你家里的WiFi,只有你一个人连接的时候感觉网络很流畅;但是当有十个人甚至一百个人蹭你家WiFi时,网速马上就下去了。此时这一百个人中,如果有一个人想发一张大小仅有5kb的图片给你,可能都要等上几个小时。
又或者是你的电脑只有一个USB接口,而你有两部手机要连接到电脑上传输一些文件。那你只能等一部手机的传输完成后,再接上另一部手机。
如果网络上的所有节点,都只能通过一个公共的链路彼此直接相连,要么能连接的节点数目非常有限;要么这条公共的链路为了能支撑起大量节点,很快就会变的臃肿昂贵且难以控制。
不过两个节点相连,并不只有物理意义上的直接相连这一种方式。我们还可以利用交换网来进行间接联通。
电路交换(circuit switched)
比如电话网络
以前是座机所用的就是电路交换网络。比如座机ABC连接到交换机a,交换机a再通过通信线路连接到交换机b,交换机b与座机DEF相连。如图所示,有点简陋不过能看就行了。
当没有座机要进行通信时,交换机ab中间的通信线路(也称为电路)处于非活跃状态。当有座机要进行通信时,交换机便激活电路使其变为活跃状态。
接下来看两种情况。
情况一:假设交换机ab中间的通信线路,刚好能处理3条语言通信。如果ABC分别打电话给DEF(即通信),那么交换机ab之间的通信线路就刚好被完全使用。
情况二:如果整个网络只有AD两台座机进行通信,那意味着这条通信线路只有三分之一的容量被使用了,剩下的容量处于浪费状态。但我们又不能减少通信线路的容量,否则当情况一发生时会导致其他电话的通信失败。
总结:电路交换网在通信时会建立一条专用链路。然后允许发起通信的节点通过这条链路将比特流发送给另一个节点,这个过程是连续的。
分组交换(packet switched)
目前计算机网络常用的交换网。
分组交换的示意图其实和电路交换的图差不多,把座机改为计算机,交换机改为路由器就差不多了。这里就不再作图了。
而和电路交换的连续通信不同的是:在分组交换中,两个计算机使用的是被称为分组(packet)的数据块进行通信。
写者注
分组交换这个概念,非常的具有迷惑性。首先我们在日常生活中,经常把”分组“作为动词使用。这里则将其作为名词使用,初次接触可能有点懵。
同时在某黑书的某一章中,提到可以把分组称为报文(message),并说这两个术语在该章节内可以互用。但实际上分组和报文是不同的概念。最直观的区别就是报文可以是 任意大小的,而分组的大小是 被分组交换网所限制的。
除此之外,“packet”这个词还可以翻译成“包”。所以分组,数据包,包都可以指向“packet”这个词。
由于分组是一个实体的数据块,而数据块可以被存储,也可以被发送给别人(就像信件)。那么节点间就可以使用某种区别于电路交换那种连续交换的策略–存储转发来进行通信。
存储转发(store-and-forward)
先接收存储,再转发
顾名思义,既然路由器能存储转发分组,那么当两台路由器之间的通信线路被阻塞时,路由器就可以先将分组存储起来,并按照它们到达的次序进行转发,从而使通信线路的容量可以一定程度上的进行削减,所能连接的计算机数量也要比电路交换多。不过“存储”再“转发”这个过程也会产生新的问题:延迟。这点会在后面的文章中提到。