从0开始建立一个互联网(物理层-数据链路层-网络层)

如果我们自己设计一个计算机网络,怎么设计?

  • 最简单的,直接用一根线将两台设备连接起来。
  • 我发高低电频1010就可以直接表示信号了。

image.png

但这种方式有什么问题呢?

  • 当我们的网络扩展了,现在有五台设备。
  • 计算机网络需要实现两两之间互相通讯,
  • 如果我们直接用拉线这种方式,那两两之间都需要拉一根线。

image.png

可以看出,线太多了,所以说这种方式肯定是不行的。

集线器:

设计思路

  • 设计之初,我们就提出了几个点

    • 1.转发思想:从一发到4的数据,能不能先发给3,3帮我发呢?
    • 2.标识思想:在一个网络中,我们要表明自己的身份。
  • 通过这两个思想,我们继续设计。

    • 我们可以专门提出一个设备做转发,其他设备都连接到这个设备上。
    • 比如从1发到3的数据,就可以通过这个设备转发。
    • 早期网络就是这么做的。

image.png

  • 这个设备的名字叫做 HUB —> 集线器。
    • 他有一个功能就是做消息转发
    • 他做消息转发的方式非常暴力。
      • 1发送的消息,发到HUB,HUB会做无条件转发给所有设备。

image.png

优点

  • 这种方式设计起来非常简单,设计成本非常低,线材也比较简单,只需要用简单的双绞线就可以了

载波侦听

  • 但是从1发到4,同时也发到了235,这种问题怎么解决呢?
    • 发送的时候会带一个标识,4收到数据包之后,发现是发给我的,我才会消费掉,其他的发现不是,就直接丢弃了。
    • 但是这样设计有一个问题,如果1和2同时发送数据,集线器只能处理电信号,其实没法分辨这两个信号,他在转发的时候会将两个信号杂糅起来,分别发给了其他设备,这样就可能导致收到的信号是混合起来的,任何一个消息都解析不出来。

image.png

  • 针对这个问题,提出了一种协议,叫CSMA/CD
    • 这个协议的作用就是,在发送前,先进行载波侦听,监听一下这个链路上有没有其他人正在发送数据。

缺点

  • 这种设计模式也是网络最初诞生时的一种网络组织形式。
  • 这种方式有几个缺点:
    • 1.进行数据广播会导致带宽利用率较低
    • 2.链路上同时只能一个设备发送数据,导致链路利用率很低
  • 如果网络规模不断扩大,如果有一万台设备,可能大多数人一天都等不到机会发送数据。
  • 所以他只适用于个位数机器的网络的布置。

交换机:

演变

  • 所以提出了第二种设备,就是交换机,简称SW
  • 交换机跟集线器的作用非常类似。
  • 他也是一个中心的作用,也可以实现转发。
  • 但是他还可以记录地址。

image.png

  • 记录的地址主要是:mac地址和端口的映射关系。

mac地址

  • Mac地址长啥样呢?
    • 他有六个分段,每个分段8bit,他是有48比特
    • Mac地址是出厂的时候就写死了,并且是全球唯一的一个地址(虽然想改也是可以改的)

image.png

  • 交换机的如何记录mac地址的呢?
    • 其实交换机中维系了一张表
    • 一个mac地址对应一个端口

image.png

  • 如果机器1想要跟机器3通讯,

    • 他就会将数据发送到交换机
    • 交换机会到自己维系的这张地址端口去看,发现mac3对应的是三号口
    • 他就会将一号口发过来的消息从三号口发出去
    • 3最终就收到这个消息了
  • 优化

    • 交换机这种工作方式下,我不再需要将这个数据进行广播。
    • 第二点,交换机的一个特点是它是全双工的
  • 全双工

    • 上面提到的集线器大多是双绞线
    • 双绞线在工作的时候只能有一台设备进行数据发送的。
    • 交换机这里使用的就是我们现在的网线了
    • 网线里面是有八根线的,正常情况下至少有四根线在工作。
    • 这种方式下,可以实现数据的全双工,
    • 在一号发送的时候,同时也可以进行数据的接受,链路上的数据也不会产生冲突。

那么交换机上面的表是怎么建立起来的呢?

image.png

  • 我们拿到交换机的时候,可以连接一些设备,

    • 一开始的时候,交换机里面是没有这张表的,或者是一张空表。
  • 那他是怎么建立起映射关系的呢?

    • 比如我们首先A要向B发送数据,
    • A发送数据上来以后,发现这张表中没有任何数据
    • 同时A发送上来以后,他确定一个消息,这个A的地址对应的是一号口,
    • 所以他将macA对应一号口这件事情记录到这张表里面。
    • 现在他的目的地址是B,他去找B的时候发现找不到,
    • 找不到的时候,就往每个端口分别进行发送,
    • 其中四号端口是B,B做出了回应,
    • 这个时候就会将macB记录到这个表中,他对应的是四号口
    • 经过一点时间的记录以后,交换机最终就维护起了一个所有mac地址和端口的映射关系
  • 交换机所在的这一层是数据链路层

    • 数据链路层的数据分数据头,数据部分
    • 数据头中记录了原地址、目的地址,这里的地址指的mac地址

image.png

优点

  1. 这个方式是对集线器巨大的改进,可以看到我们日常生活中其实集线器已经很少见了,因为大多数时候我们都使用交换机,交换机的效率更高
  2. 交换机还有一个特点,就是可以进行桥接

image.png

  • 比如我们有两个交换机,我们就可以通过他们上面的两个端口进行桥接
  • 桥接之后会产生一个现象
    • 假如我们这台设备上有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同样会记录

image.png
可以看到,多个mac地址可以对应同一个端口

  • 我们的家庭交换机一般情况下,表的大小是在几千左右,
  • 注意:这里的mac和端口映射的表不是我们通常所说的路由表,因为他还没有到路由那一层,他只是交换机

缺点

那我们看一下,当前设计方式下,还有什么弊端。

  • 几千的存储量是比较小的,如果我们想要在全球范围内建立目前的计算机互联网络,几千个端口肯定是不够的,那可能需要几十亿个,如果没有对应的路由信息的话,他就会一直广播,就会导致全球范围内的消息洪泛
  • 目前,使用交换机和mac地址结合的这种方式,可以在一个比较小的局域网内达到一个高效的传输,比如说几千个设备组成的局域网,这个网络可能是整个校园网,或者一个工作室或者一个家庭中的网络。

补充

  • 网络内部使用交换机,他的效率还是很高的。
  • 上面讲的集线器这种其实是在物理层,下面讲的交换机mac地址的这种方式是在数据链路层
  • 比较有意思的是,mac地址位于数据链路层,却叫物理地址。
    • 物理层是比较早期的一种设计方式,通过电信号,后来我们其实比较关注数据层面,所以就放到了数据链路层
    • 每一台设备需要有一个标识,这个标识从概念上来讲确实是一个物理地址。

路由器:

演变

  • 上面交换机的方式,他最大的一个优势是在网络内部可以进行高效的传输。
  • 当网络扩大以后,比如多个网络合成一个大的网络
  • 这个大网络下,可能交换机中的表可能记录不过来,我需要不停地广播,广播的效率又比较低。
  • 所以在跨网络的时候,我们提出了一种新的方案,我们定义一个新的设备,通过新的设备连接不同的网络,新的设备我们叫他路由器。有时候也会叫做网关。因为他是在跨两个网络之间的一个连接点。

image.png

  • 有了路由器之后,我们不同网络之间的设备
    • 比如设备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

image.png

  • 可以看出路由器工作的主要原理:

    • 它既有网络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层进行传输了。

Mac层又叫数据链路层,路由器这一层又叫网络层,实际上网络传输全都是走的mac地址

  • 这个ip层数据包可以对照mac层看一下
    • 我们可以把刚才mac的包拿过来
      • Mac的数据头有一个源地址,一个目的地址,这里的地址指的是mac地址
      • Mac的数据部分就是一整个ip的包
    • Ip的包也分头和数据部分
      • ip的头部分包的就是ip的源地址、目的地址
      • 最终里面才是ip的数据
    • 当然越往上还有tcp、http层的头,一层一层往上包,最后才是我们传输的那个数据部分。

image.png

  • 我们看整个网络传输的过程 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的源、目地址也会进行切换

image.png

image.png

补充

根据此视频整理:【网络】半小时看懂<计算机网络>

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享