如果我们自己设计一个计算机网络,怎么设计?
- 最简单的,直接用一根线将两台设备连接起来。
- 我发高低电频1010就可以直接表示信号了。
但这种方式有什么问题呢?
- 当我们的网络扩展了,现在有五台设备。
- 计算机网络需要实现两两之间互相通讯,
- 如果我们直接用拉线这种方式,那两两之间都需要拉一根线。
可以看出,线太多了,所以说这种方式肯定是不行的。
集线器:
设计思路
-
设计之初,我们就提出了几个点
- 1.转发思想:从一发到4的数据,能不能先发给3,3帮我发呢?
- 2.标识思想:在一个网络中,我们要表明自己的身份。
-
通过这两个思想,我们继续设计。
- 我们可以专门提出一个设备做转发,其他设备都连接到这个设备上。
- 比如从1发到3的数据,就可以通过这个设备转发。
- 早期网络就是这么做的。
- 这个设备的名字叫做 HUB —> 集线器。
- 他有一个功能就是做消息转发
- 他做消息转发的方式非常暴力。
- 1发送的消息,发到HUB,HUB会做无条件转发给所有设备。
优点
- 这种方式设计起来非常简单,设计成本非常低,线材也比较简单,只需要用简单的双绞线就可以了
载波侦听
- 但是从1发到4,同时也发到了235,这种问题怎么解决呢?
- 发送的时候会带一个标识,4收到数据包之后,发现是发给我的,我才会消费掉,其他的发现不是,就直接丢弃了。
- 但是这样设计有一个问题,如果1和2同时发送数据,集线器只能处理电信号,其实没法分辨这两个信号,他在转发的时候会将两个信号杂糅起来,分别发给了其他设备,这样就可能导致收到的信号是混合起来的,任何一个消息都解析不出来。
- 针对这个问题,提出了一种协议,叫CSMA/CD
- 这个协议的作用就是,在发送前,先进行载波侦听,监听一下这个链路上有没有其他人正在发送数据。
缺点
- 这种设计模式也是网络最初诞生时的一种网络组织形式。
- 这种方式有几个缺点:
- 1.进行数据广播会导致带宽利用率较低
- 2.链路上同时只能一个设备发送数据,导致链路利用率很低
- 如果网络规模不断扩大,如果有一万台设备,可能大多数人一天都等不到机会发送数据。
- 所以他只适用于个位数机器的网络的布置。
交换机:
演变
- 所以提出了第二种设备,就是交换机,简称SW
- 交换机跟集线器的作用非常类似。
- 他也是一个中心的作用,也可以实现转发。
- 但是他还可以记录地址。
- 记录的地址主要是:mac地址和端口的映射关系。
mac地址
- Mac地址长啥样呢?
- 他有六个分段,每个分段8bit,他是有48比特
- Mac地址是出厂的时候就写死了,并且是全球唯一的一个地址(虽然想改也是可以改的)
- 交换机的如何记录mac地址的呢?
- 其实交换机中维系了一张表
- 一个mac地址对应一个端口
-
如果机器1想要跟机器3通讯,
- 他就会将数据发送到交换机
- 交换机会到自己维系的这张地址端口去看,发现mac3对应的是三号口
- 他就会将一号口发过来的消息从三号口发出去
- 3最终就收到这个消息了
-
优化
- 交换机这种工作方式下,我不再需要将这个数据进行广播。
- 第二点,交换机的一个特点是它是全双工的
-
全双工
- 上面提到的集线器大多是双绞线
- 双绞线在工作的时候只能有一台设备进行数据发送的。
- 交换机这里使用的就是我们现在的网线了
- 网线里面是有八根线的,正常情况下至少有四根线在工作。
- 这种方式下,可以实现数据的全双工,
- 在一号发送的时候,同时也可以进行数据的接受,链路上的数据也不会产生冲突。
那么交换机上面的表是怎么建立起来的呢?
-
我们拿到交换机的时候,可以连接一些设备,
- 一开始的时候,交换机里面是没有这张表的,或者是一张空表。
-
那他是怎么建立起映射关系的呢?
- 比如我们首先A要向B发送数据,
- A发送数据上来以后,发现这张表中没有任何数据
- 同时A发送上来以后,他确定一个消息,这个A的地址对应的是一号口,
- 所以他将macA对应一号口这件事情记录到这张表里面。
- 现在他的目的地址是B,他去找B的时候发现找不到,
- 找不到的时候,就往每个端口分别进行发送,
- 其中四号端口是B,B做出了回应,
- 这个时候就会将macB记录到这个表中,他对应的是四号口
- 经过一点时间的记录以后,交换机最终就维护起了一个所有mac地址和端口的映射关系
-
交换机所在的这一层是数据链路层
- 数据链路层的数据分数据头,数据部分
- 数据头中记录了原地址、目的地址,这里的地址指的mac地址
优点
- 这个方式是对集线器巨大的改进,可以看到我们日常生活中其实集线器已经很少见了,因为大多数时候我们都使用交换机,交换机的效率更高
- 交换机还有一个特点,就是可以进行桥接
- 比如我们有两个交换机,我们就可以通过他们上面的两个端口进行桥接
- 桥接之后会产生一个现象
- 假如我们这台设备上有A、B两个设备,另一台有C、D两个设备。
- 经过一段时间,交换机1中就维系了一个表
- A对应1号口,B对应4号口
- A向C发送消息的时候,他其实没有找到,那他就会全部广播发送,
- 广播到最后一个口的时候,就会到第二个交换机,
- 交换机2里面其实已经记录了,C对应4号口,D对应3号口
- 他就找到了C,最终发到了交换机2的4号口。
- 发送完之后,交换机2会记录,A对应1号口,当然之后B也往这边发送数据的时候,他会记录B对应1号
- 交换机1同样会记录
可以看到,多个mac地址可以对应同一个端口
- 我们的家庭交换机一般情况下,表的大小是在几千左右,
- 注意:这里的mac和端口映射的表不是我们通常所说的路由表,因为他还没有到路由那一层,他只是交换机
缺点
那我们看一下,当前设计方式下,还有什么弊端。
- 几千的存储量是比较小的,如果我们想要在全球范围内建立目前的计算机互联网络,几千个端口肯定是不够的,那可能需要几十亿个,如果没有对应的路由信息的话,他就会一直广播,就会导致全球范围内的消息洪泛
- 目前,使用交换机和mac地址结合的这种方式,可以在一个比较小的局域网内达到一个高效的传输,比如说几千个设备组成的局域网,这个网络可能是整个校园网,或者一个工作室或者一个家庭中的网络。
补充
- 网络内部使用交换机,他的效率还是很高的。
- 上面讲的集线器这种其实是在物理层,下面讲的交换机mac地址的这种方式是在数据链路层
- 比较有意思的是,mac地址位于数据链路层,却叫物理地址。
- 物理层是比较早期的一种设计方式,通过电信号,后来我们其实比较关注数据层面,所以就放到了数据链路层
- 每一台设备需要有一个标识,这个标识从概念上来讲确实是一个物理地址。
路由器:
演变
- 上面交换机的方式,他最大的一个优势是在网络内部可以进行高效的传输。
- 当网络扩大以后,比如多个网络合成一个大的网络
- 这个大网络下,可能交换机中的表可能记录不过来,我需要不停地广播,广播的效率又比较低。
- 所以在跨网络的时候,我们提出了一种新的方案,我们定义一个新的设备,通过新的设备连接不同的网络,新的设备我们叫他路由器。有时候也会叫做网关。因为他是在跨两个网络之间的一个连接点。
- 有了路由器之后,我们不同网络之间的设备
- 比如设备1和设备2进行通信的时候,
- 他就是通过路由器进行转发,如果是设备1 和设备3进行通讯,就不需要经过路由器,直接在网络内部进行转发就可以了。
- 网络内部通过这个交换机通讯,他的效率是很高的。所以1和3 的通信直接走交换机。1和2 之间的通讯才会走路由器。
ip
- Ip地址的出现:
- 网络其实是一个比较抽象的概念,并没有说,我划定北京朝阳区是一个网络,我划定北京市海淀区是另一个网络,
- 我们需要标识这个网络,以及网络中的每个设备,就需要提供另一个标识,这个表示就是ip地址,
- IP地址有两个作用:
- 一个是用来标识网络,
- 一个是用来标识设备的,
- 上面是用mac地址标识设备,这里又提出了ip地址
- ip地址主要是用来标识设备在哪个网络下,是为了在抽象网络中做出的一个关联。
- 所以每台地址又有了一个ip地址。
- mac地址:设备唯一性,设备一般不会变
- Ip地址:设备所在网络位置的唯一性,网络位置是会变的,比如搬家换网络了。
- 比如:
- 我家庭的网络是:192.168.0.0/24(这个网络号也是一种类似于IP的形式,他就用来标识我整个网络2)
- 我的设备:我的设备是192.168.0.102(这个ip地址就用来标识我当前的设备)
我ping一下192.168.1.254,发现是可以ping通的。
- 1.254是隔壁老王的ip,我们共用了光猫。
- 能ping通的原因:
- 当前的这个网络中,每一台设备都有自己维护的路由表的,路由器也是有路由表的
- 我的ip是0.102,我自己的路由表自己会记录192.168.0.1,
- 0.1是在什么地方呢?0.1在路由器上。他就会把数据包发到路由器上,
- 这个路由器自己也有一张路由表,因为路由器自己也是也linux系统,
- 他这个路由表中记录了192.168.1.0这个网络的端口,进过这个端口转发到网络1
- 然后1.254和网络1是在同一端口中,所以很容易找到了1.254
-
可以看出路由器工作的主要原理:
- 它既有网络1的ip,又有网络2的ip
-
这里还有两个问题:
- 1.路由表是如何建立的?
- 路由表其实是比上面交换机中的这个地址端口映射表要复杂很多,
- 他用到了很多路由的算法,这里就不展开讲了
- 路由器经过一系列的算法会自动建立出一个完善的路由表
- 2.从路由器转发到网络1后,是怎么到达1.254的?就是网络内的传输是怎么进行的?
- 如果你认为ip地址能直接找到,那是不是不需要mac地址了?
- 有了ip地址,还需要mac地址吗?
- 我们先回到引入路由器的初衷,是为了跨网络的时候进行数据的转发,这个ip其实是一个抽象的ip,ip是不能直接用作通讯的,我们只能使用mac地址进行直接通讯。
- 因为mac地址是一个真实的地址。
- 所以路由器端口到1.254的过程是这样的,
- 首先,他会去查1.254的mac地址,根据一个ip地址去查mac地址,这里其实有个协议叫ARP协议,
- ARP协议其实是去网络中广播谁的ip是1.254,1.254收到以后就会回复mac地址
- 然后就可以在mac层进行传输了。
- 1.路由表是如何建立的?
Mac层又叫数据链路层,路由器这一层又叫网络层,实际上网络传输全都是走的mac地址
- 这个ip层数据包可以对照mac层看一下
- 我们可以把刚才mac的包拿过来
- Mac的数据头有一个源地址,一个目的地址,这里的地址指的是mac地址
- Mac的数据部分就是一整个ip的包
- Ip的包也分头和数据部分
- ip的头部分包的就是ip的源地址、目的地址
- 最终里面才是ip的数据
- 当然越往上还有tcp、http层的头,一层一层往上包,最后才是我们传输的那个数据部分。
- 我们可以把刚才mac的包拿过来
- 我们看整个网络传输的过程 0.102 -> 1.254
- 第一步,0.102 -> 0.1,是先用ARP协议查0.1的mac地址,我的目的地ip是0.102,目的mac地址是1.254的mac地址,这样包可以传到0.1
- 第二步,0.1传到网络1在路由器中记录的端口ip(假设是1.52)虽然是本机,但是也是网卡之间的传输,目的地mac地址变成1.52的mac地址
- 第三部,1.52 -> 1.254,mac目的地址就变成了1.254的mac地址,最终将数据发送过来
发送过程中,ipd 的源、目地址是不变的,只有mac的源、目地址在变
- NAT协议
- 这里有个特例,NAT协议(网络地址转化,私网ip地址转为全球ip地址),
- NAT的时候ip的源、目地址也会进行切换
补充
- 结合一下文章理解更深刻:
根据此视频整理:【网络】半小时看懂<计算机网络>
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END