前言
对于非计算机专业出身的开发,往往工作许久对网络还是一知半解。查找文章又常是专业性极强的说明文,读了又读,还是难以形成一个系统的概念。知识需要框架,让我们自下而上,一块聊聊网络。
共享局域网
我们都知道计算机是通过收发信号进行通信的,但是信号是如何找到目标的呢?
最初的计算机网络通信的方法很简单:"共享"!
好比大家坐在一个屋子,发言人只要说话,大家就能听到。同样的道理,只要把所有的计算机用"一根线(集线器)"连在一起,这就是一个简易的网络;这时任何一台计算机如果需要发消息,只需要把消息发出去,所有计算机就都收到了。
这是最早的网络,也叫做"共享局域网"。模型很简单,缺点也很明显:
- 所有用户都能收到其他所有人的信息;连接的用户越多,收到的无用消息就越多;
- 如果多台计算机同时发送数据,可能会导致"数据碰撞" ------ 也就是互相干扰导致发送失败,形成一个"冲突域";
- 为了避免上面的情况出现,CSMA/CD协议规定:同一时间内只有一台计算机可以在"共享局域网"中发送消息。
以上缺点就好比开会时,每次只许一个人发言,其他人想说话?等当前发言者结束才行。这就决定了网络规模不能太大,否则用户越多,等待别人通信结束的时间就越长,效率太低。
这怎么办呢?
我们可以设想:如果我们有这样一台设备,它有多个端口,每个端口连一台或多台电脑,端口之间是隔离的。同一个端口上的电脑发消息依然是共享,但如果想要发消息给另一个端口上的电脑,就需要通过这台设备将消息转发到对应的端口。这个设备叫做"交换机"。
这里是一台交换机示意图,电脑1、2、3处于同一个共享局域网。1发消息,2、3都会收到,如果1想要发消息给4,就需要交换机将消息从端口1转到端口2,这样电脑4、5就接收到了消息;此时端口3中的设备不受影响。
这样就能形成多个独立的"共享局域网**",**彼此可以同时独立工作,非必要时不会互相影响,能有效减少数据碰撞的发生,提高效率。
交换式局域网
通过交换机连接形成的网络叫做"交换式局域网"。交换机有多个端口,每个端口连接着数量不等的设备;每台设备都有着自己的名字(MAC地址)。交换机将哪台设备连接着哪个端口都一一"记录在案",成为一张"MAC地址-端口表";当一个设备试图发消息给另一个设备时,交换机会根据"MAC地址-端口表"进行查找:如果两个设备位于同一个端口就什么都不做;如果属于两个不同的端口就将消息进行转发;如果是个没有记录的"黑户",就对所有端口"泛洪"发送。
这样在一定程度上扩大了网络的规模;但是,交换机有很多使用限制,例如:
-
交换机MAC地址表容量有限,而交换机如果发现"MAC地址-端口表"中找不到目标电脑,就会进行全部端口的"泛洪"发送数据,可能引起网络拥塞。
-
交换机端口数量有限,大型网络需要交换机互联,但大规模交换机网络的维护、监控和安全管理也较为复杂。
广域网
数量众多的局域网通过各种方式连在一起就形成了广域网,比较常见的连接方式是通过路由器 进行连接。交换机可以接入路由器,路由器又连接其他路由器等设备,网上的所有设备都是网络节点。
与交换机类似,路由器也有多个端口,内部也存储着一个"小本本"------路由表。路由表上记录着到达其他网络设备的路线图。你想要访问的任何设备的IP如果在路由表中能找到,路由器会算出到达该目标要经过的最佳"网络节点路线",然后将信息传递给下一个路由器,下一个路由器以同样步骤向下传递。这样,路由器通过"口口相传",直到将信息送到目的地。
如上图所示,电脑4如果想要发消息给电脑5,首先将消息发给路由器4,路由器4通过路由表查到路线应为 "路由器1->路由器2->电脑5",然后路由器4将消息转给路由器1。
与普通的交换机通过MAC地址寻址方式不同的是,路由器是通过IP地址在网络中查找目标,而根据IP地址查找的效率要高很多。
IP地址
目前常用的IP地址是由4个0~255的整数数字表示的,例如:192.168.0.1。如果有人说他的IP地址是192.168.10.256,那肯定是错的。
为了方便寻址,每个IP地址都包含了两部分:网络号与主机号,同一个网络上的所有主机使用同一个网络号 ,每个主机 都有自己的主机号。网络号将设备分了组,寻找一台设备先根据他的IP找到他所在的组,就能大幅缩小搜索范围。
以下是常见的3种网络的参数:
由于IP是用4个0-255的数字表示的,最多可以表示255*255*255*255台设备,大约是42亿,但实际可用的地址比42亿要少。而手机、电脑、路由器、交换机、监控摄像头等大大小小的设备都需要IP地址并且设备数量还在不断增多,IP地址早就已经不够用了。
其实很早之前人们就发现了这个趋势,为了解决这个问题,想出了一种方案:大网再分割成小网络,每个小网中的IP可以自行划分管理,跟大网的IP互不干涉;好比原本用0-9最多能表示10个人,现在改为表示10个分组,每个分组可以再划分10个编号;这样不就能表示100个人了嘛。
子网掩码
根据上面的方案,我们可以将大网的主机号范围 通过特别的规则继续划分成子网的网络号+主机号。
可以这样简单理解:编号"9527"原本只能表示一个人,现在我们在编号后增加一个数字,范围是1~3,如:"9527/1"表示"9组527号";"9527/2"表示"95组27号";"9527/3"表示"952组7号"。
增加的这个数字对编号9527进行了"二次划分",将其分割成了两部分:组别+编号。原本只能表示一个人的编号"9527"现在可以用来表示3个人,并且还分了组:"9527/1"跟"9528/1"都是9组,"9527/1"跟"9527/2"就分属9组跟95组......
子网掩码 就可以简单理解为上面这个增加的数字,他将大网IP的主机号范围二次分割成子网的网络号+主机号。现在大网就叫做"公网",子网就叫做"内网",我们常说的"内网IP"就是在子网中独立划分管理的IP,是无法拿到公网中使用的,而各个子网中的IP是独立划分管理的,因此可以彼此相同,互不干扰。
子网掩码使得IP地址紧张问题得到了有效缓解。
域名
我们上网,实际就是在访问网络中不同的服务器。无论是刷网页,还是搜索我们想要的信息,实际都是在向网络中某个服务器的发送消息请求,服务器收到我们的请求,将我们需要的信息发送给我们。那么我们的消息是如何到达对应的服务器的?
服务器也是电脑,也有自己的IP地址;访问一台服务器需要知道他的IP地址,但是IP地址太难记了,人们为了方便记忆,创造了"域名"。我们所熟悉的网址http://www.baidu.com/xxx
,其中的www.baidu.com
就叫做域名,每个域名都有其对应的IP地址,"域名-IP表"则存在域名服务器上。
当我们在浏览器上输入网址http://www.baidu.com/xxx
时,浏览器会自动解析出域名www.baidu.com
并去"域名服务器"上查找其对应的IP地址,然后再去该IP地址的服务器上获取我们需要的资源,这样我们就完成了愉快的"网上冲浪"。
结束语
上面的例子都是大幅简化后的模型;经过多年的演化,互联网早已经达到了十分惊人的复杂度。其每一步流程都包含了大量前人的智慧,甚至演化出相关的专业;有兴趣的小伙伴可以进一步了解互联网的相关知识。