从零开始的计算机网络

引言

在以前,我刚开始接触网络相关的内容时,看了非常多的教程,有些教程要么上来抛出一大堆概念,试图让刚接触的人立刻进化成网络之神,要么讲的非常混乱,生怕让初学者看懂

什么人不适合阅读这篇文章
-想读完这篇文章就立即进化为网络之父(Class internet extends me)

本文将会从零开始带你扫平网络中遇到的概念

思想

你不得不知道的计算机思想

1.模块化思想
一个整体是由多个模块组成的,这样当某个模块出现问题或需要更新和修改的时候,我们仅需要对出现问题的模块进行修改,而不用改动整个整体。
2.工程思想
不存在一开始就完美的系统,一套系统一定是随着需求的发展而不断完善的,没有完美的系统,只有不断接近完美的系统。

正文

阅读以下内容,你将会学到以下概念:
网络与网卡,MAC地址,协议,转发的思想,集线器(HUB)

从零开始的计算机网络

几台可以相互通信的设备就是一个网络,网络本质上就是可以相互通信的一些设备我们想让计算机可以进行通信,直接插上一条线就可以进行通信了吗,显然不可能,因此我们需要在计算机中添加一个可以进行通信的硬件,这个设备被我们叫做网卡

计算机之间有了网卡之后,此时插入一条线就可以进行通信了吗,显然还是不可能,假设现在有三台计算机,三台计算机都是一样的网卡,现在计算机1想发送信息给计算机3,大伙网卡都一样,它并不知道该把信息发给谁,因此我们需要给计算机一个标识,给网卡一个标识,这个标识被我们叫做MAC地址

MAC地址是生产网卡的厂商在出厂的时候就刻录好的,具有唯一性,不可更改。硬件层面不可更改,在软件层面可以更改 //有空再补充

有了MAC地址和网卡之后,我们就可以让计算机进行通信了吗?,显然还不行,现在计算机1可以实现发送了一堆信息给计算机2,但是计算机2并不知道怎么理解这些信息,我们只实现了怎么送和送哪里,还没有解决怎么理解送的信息,因此我们需要制定计算机之间通信的规则,按什么格式发送,按什么格式接收理解。这些规则被我们叫做协议。计算机之间遵循协议进行通信,就能理解对方发送的信息。

这样子我们就可以让计算机之间进行通信了,但是随着计算机规模的扩大,每个计算机之间都两两相连,这样网线会非常杂乱并且非常多,因此我们引入了转发的思想,例如计算机1要发送给计算机6,计算机1并没有网线直接连接到计算机6,计算机3有网线连接到计算机1和计算机6,因此计算机1会把数据发送给计算机3,计算机3再转发给计算机6

但是随着网络设备的进一步扩大,网线还是会越来越多,越来越杂乱,并且作为转发的设备越来越多,维护起来的难度也越来越大,我们想到,可以有一个设备专门作为转发,把网络中的设备都接入这个转发设备上,由这个设备统一进行转发,因此我们提出了HUB集线器,我们可以将多个设备连接到HUB上,由HUB统一进行转发
HUB是如何进行消息转发呢?HUB集线器什么都不会管,只会一味复制电信号发送给其他接入的设备,假设现在有ABCD接入了HUB集线器中,当A计算机发送消息给B计算机,HUB集线器接收了A计算机的消息,然后把这个消息同时发送给BCD计算机,BCD计算机接收到消息后,跟消息中的MAC地址进行对比,如果对比成功,就接收,如果不是,就丢弃。这被我们称为消息广播(消息泛洪)

集线器只会一味转发消息给其他计算机,假设现在有计算机A,计算机B,同时向HUB集线器发送消息给计算机C,集线器同时接收到这两个消息,会导致消息杂糅,导致消息无法被其他计算机识别,消息杂糅是什么?有两个人同时在喇叭里讲话,那么传出的声音一定是乱糟糟的(杂糅),根本听不清是什么

链路:消息从发送到接收所经过的路径

这个问题怎么解决,既然同时讲话会导致消息杂糅,我们只需要某个时间里只有一个设备发送数据,这样就不会导致消息杂糅,具体实现:我们在发送前先监听一下这个链路上是否有人发送数据,如果有那我们就等一等,这被我们称为载波监听/冲突检测(CSMA/CD)

看似我们已经解决了问题,这在个位数的设备中还是可以接受的,但是随着网络规模的扩大,例如几千台设备,我们发现,如果每次只有一个设备发送数据,这就导致有些设备根本轮不到它,或者轮了一整天才发送了一次。我只想从A计算机发送给B计算机,HUB每次都进行消息广播,其他的链路根本内必要进行广播,链路的利用率太低了

那么怎么办,计算机就完蛋了吗?计算机的未来要一片黑暗了吗?

明显不可能,伟大的工程思想告诉我们,没有完美的系统,只有不断接近完美的系统,随着网络规模的扩大,需求也在不断变化
既然HUB集线器不行,那么我们就分析集线器的缺点,结合我们的需求,整个更好的设备出来

前置知识:
半双工通信和全双工通信的概念
半双工通信:通信双方都可以发送和接收数据,但不能同时进行。在任一时刻,只能有一个方向的数据传输。
全双工通信:通信双方可以同时发送和接收数据。在任何时刻,两个方向的数据都可以传输。
端口:我们知道设备上有很多的接口,这些接口我们对它起个新名字,叫物理端口,简称端口

我们知道,集线器在某个时刻只能有一个设备发送数据,如果两个设备同时发送数据会导致信号杂糅,
这意味这并不能进行全双工通信,我们的这个设备要支持全双工通信,首先要改变物理结构
根据上面提到的问题
我们开始设计这个设备
1.首先这个设备允许多个端口同时通信,支持全双工通信,怎么实现呢

第一步改变物理结构
1.我们知道集线器的内部是只有一个信号通路,我们只需要添加多个信号通路,这样就可以实现不同接口独立的通信
一条路不够就修多几条路
2.这个设备从集线器中单纯的只有发送线路更改为发送电路和接收电路,它们可以分开独立工作
3.既然设备有发送电路和接收电路,那么网线也要更新迭代一下,网线更新成4对线缆8根线,一对用来发送数据,一对用来接收数据
小知识:
网线在10/100Mbps时使用2对线缆(4根线),一对用来发送数据,一对用来接收数据;在千兆时使用全部4对线缆(8根线)

(MAC地址表长这个样子)
MAC地址表

|端口1:MAC地址1|

|端口2:MAC地址2|

|端口3:MAC地址3|

这样就完美了吗?不,在最开始的时候,MAc地址表是空的,那么我们可以手动填入,但当设备非常多的时候,我们还能手动填写吗?显然不能,我们想让这个设备自己学习,这里我们可以采用集线器的广播,例如:端口1的设备要发送消息给端口2的设备,交换机收到消息之后,会记录端口1设备的MAC地址,随后交换机进行像集线器一样进行消息广播,广播给所有的端口,当端口2的设备接收消息之后,交换机会记录端口2设备的MAC地址,就这样随着时间,这样慢慢就维护出了一张MAC地址表

这个新设备的名字被我们起名叫SW交换机(Switch)

未完待续

(写了5分钟,已经燃尽了 -3.23)
(激情爆燃了十分钟,比昨天多燃了 -3.24)
(燃了两分钟,今天摸个鱼,更新了反馈区 -3.25)

一些话

连贯阅读应该是可以完全看懂的,大伙们给我多一些反馈,在阅读的时候是否有迷茫的地方,我希望可以给大伙提供一条比较好的教程,不再像我当初学的时候,看到各显神通的抽象教程两眼一黑,我踩过坑的地方大伙就不要再踩坑了

<反馈区>

大伙有任何问题都可以留言

Q1:有位佬提出了一个很好的问题,网络的知识很杂,没有一个目标容易让中间的内容混乱?

计算机网络是随着我们不断提出新的发展而旧的技术不够用而不断发展的,这就导致了计算机的知识体系会非常庞大,如果是直接看一堆概念,并不会形成一个比较清晰的脉络,只能像拼拼图一样东一块西一块慢慢补全,感到非常杂乱

例如像ipv4,ipv6,如果就讲什么是ip,那么初学者在看到MAC地址的时候就会迷茫,既然我们有了MAC地址,那为什么还要ip地址。
既然我们不断直接抛出概念进行讲解,会学的很迷茫,那么我们干脆从零演变计算机网络,当一次网络之父,我们根据我们不断变化的需求不断更新设备,迭代技术,这样就不存在所谓的杂乱,完全透彻理解透彻网络
至今为止网络要解决的问题一直是,一桌饭来了两桌客人,这饭怎么吃?

62 Likes

不要燃尽啊!

3 Likes

持久一点啊,佬

1 Like

赶紧续上:+1:

1 Like

不行了,快给我续上

2 Likes

男人不能说不行.jpg

2 Likes

放一个屁股在这里,写完踢我 :tieba_087:

3 Likes

有点短了

3 Likes

不够持久啊佬

3 Likes

佬,你这有点短啊

2 Likes

啊这有些太少了吧 :face_with_monocle:

先收藏再看

  • 开始了吗?
  • 已经结束了

通透啊醍醐灌顶感觉终于有兴趣去了解了

大佬继续啊,希望能把桥接和路由还有broadcast这几个概念讲透彻,一直迷糊

从零开始学习好啊! :bili_117:

都会有的

明天就更新10分钟

感谢分享

1 Like

插个眼,等佬回来继续燃烧自己

1 Like