上一篇我们介绍了如何安装 Linux 以及介绍关于 Linux 的终端。这一篇主要介绍如何设置 Linux 的网络。
主机与主机之间进行通信的时候是需要介质传递信息的,就像人与人之间交流需要空气充当介质,因为你说的话是信息,而传递信息则需要空气作为载体介质进行传播。就目前而言,主机与主机之间传递信号的介质有有形的也有无形的,例如有形的网线,无形的则是电磁波。
在计算机网络诞生的初期,那个时候使用最多的是同轴线缆。也就是闭路电视的那种线,但是一根线只有两个头,一端连接一个主机只能连接两台主机,所以还有一种叫做T型头的东西。
上图就是同轴电缆和T型头。将两者结合起来使用,一根线就可以接入很多主机了。所以早期的网络架构可能就是下面这样的:
就像上图一样,多台主机连接到一根总线(同轴电缆)上,然后使用T型头接入,这种网络拓扑也叫做总线型网络。但是我们得思考一个问题,如果 A 与 B 进行通信的时候,那么 C 与 D 可以进行通信吗?
答案显然是不可能的,因为他们只有一根线,所有主机共用了这么一个底层通信信道。A 与 B 通信的时候,必然会导致总线上有电流,那么在同一时刻 C 与 D 就不能通信了,不然会相互干扰。导致整个网络充满的都是混乱信息,没有任何意义。但是我们如何保证 A 发送信息的时候,C 不发送信息呢?我们需要引入一种机制,就是 MAC (Media Access Control)机制,中文翻译过来就是介质访问控制。
MAC 机制有很多种,其中一种就是 CSMA/CD。其工作机制简单来说就是 A 在发报文的时候先看看当前网络是否繁忙,如果发现当前线路没有信号传输,那么就开始发送信息,并且边发送边检测。如果检测到发送失败,就后退一步,将之前发送的信息再次发送。所以 CSMA/CD 有个专业叫法:带冲突检测的载波监听多路访问技术。而我们常说的 MAC 地址,就是指在 MAC 协议下通讯时使用到的通讯地址。一般而言 MAC 地址是固化在网卡中,专注于数据链路层,将一个数据帧从一个节点传送到相同链路的另一个节点。
对于这种总线型的网络有一个比较麻烦的地方就是如果你想添加一台主机,那么你就需要加一个T型头。添加移除主机挺麻烦的。所以就出现了这么一种设备,这个设备上事先做好了几个口留着,你想用的时候直接插入网线就行了,到了这个时候的网络拓扑可能就是所谓的星型网络,大致就是如下这种结构:
上图中间的这种事先预留了网线口的这种设备我们叫他 HUB 中文翻译就是集线器,这种设备的好处就是可以很方便的接入一台主机,因为他已经事先做好了网线接入口了。但是他的本质仍然是总线型的,因为 A 与 B 通信的时候,占用了 HUB 内的通信信道,导致了其他主机仍然不能通信,他只是将总线型网络从物理形态的一根线转变成了一个具有多个网线口的盒子,并同时提供了信号放大的功能。
科技总是不断的进步,一开始的时候一个网络中连接几台主机传输少量数据 HUB 还是能轻松处理的,后来网络中主机越来越多,传输的数据量按照指数型暴增,想想如果一个网络中有两台电脑之间在传一个小电影,那么完了大家都等待吧,因为同一时刻这种网络只能有两台主机通信,其他主机通信时需要不断检当前网络是否繁忙,所以可能更多的情况下网络中的信号都是检测信号。于是有人想出了这么一个办法,把 HUB 内部做成四通八达的线路,当两台主机之间需要通信的时候,就临时建立一条通信信道,例如当 A 与 B 通信的时候,就在 A 与 B 之间建立一条线路,C 与 D 通信时就再在 C 与 D 之间建立一条线路,这样一来他们之间互不干扰可以独立工作了。而这种分隔冲突域的设备我们把它称之为网桥。
因为在早些时候,网络之间连接是使用 HUB 连接的,这样的网络如果有两台主机进行通信时,其他的主机就不能通信,否则就会冲突。我们把所有能够造成冲突的主机组成的一个集合叫做冲突域。网桥的主要作用是用来分隔冲突域的。例如一开始有一个网络里面有 10 台主机,他们之间使用 HUB 连接工作良好,如果再加 10 台,就是 20 台,那么任意两台之间发送信息,剩下的 18 台就不能通信了。所以将 20 台主机分成两组,中间使用网桥连接起来就可以大大提高通信质量。
就像上图,其中 A 和 B 是在一个冲突域中的,因为他们使用了同一个底层通信线路,而 C 与 D 是在另外一个冲突域中的,这样 A 与 B 通信的时候,C 与 D 就可以通信了,只有当 A 与 C 通信时就通过网桥建立临时通道。也许你会想,既然网桥这么好用,如果在上面多做几个孔,每个孔连接一个主机,然后把 HUB 给去掉,这样岂不是可以把冲突域分割到最小了?是的,目前而言这种多孔的“网桥”十分常见,我们一般叫他交换机,一般而言有 8 孔的,24 孔的等。
于是乎,在这种情况下我们又平安无事的用了一段时间,但是你需要知道的是人的欲望是永远无法满足的。随着计算机越来越普及,传输的数据也越来越多,一个交换机上连接的电脑越来越多,你见过的交换机最多多少口呢?48 孔不得了了,那么如果需要接入 100 台主机怎么办?其实也不难,多个交换机连起来用呗,就像下面这样:
但是多台主机通过交换机连接到一起使用,随着主机数越来越多,就会暴露出一个很严重的问题。我们知道交换机内部的 CPU 会在每个端口成功连接时,通过将 MAC 地址和端口对应,形成一张 MAC 表。在今后的通讯中,发往该 MAC 地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分冲突域。但是问题就出在这里,MAC 表的形成是通过数据链路层进行广播得到的,就是说如果想要知道某个主机连接在哪个端口上,就需要进行广播一下,交换机需要对每个端口连着的主机都挨个问下你的 MAC 地址是多少,试想下全球多少台主机,如果都使用交换机连接,那么网络还能用吗?那为什么交换机会有这个问题呢?这是因为交换机不能划分网络层的广播,也就是广播域。
什么是广播域呢?就像上图里面两台交换机连在一起的六个主机他们就是一个广播域,如果 A 发个广播,其他主机都能收到,我们把这种其中一台主机发广播,都能收到的主机组成的集合叫做广播域。和冲突域不同,冲突域是其中一台主机发信息,大家都不能发的主机集合,是共用同一个底层通信信道的主机集合。
那么如何分隔广播域呢?很简单啊,做个设备,如果发现主机发送的报文是本网段内的则这个设备不转发,如果发现主机发送的信息是其他网段内的,则将其转发到对应的网段,而这个设备就是我们生活中常见的路由器。
如上图,主机 A 与主机 B 通信是很简单的,就像以前一样依靠 MAC 地址通信。但是如何实现主机 A 和 E 的通信呢?他们之间不再一个网段内,交换机发广播查 MAC地址被路由器隔断。好像单纯的使用 MAC 定位定位不到主机 E 了。所以我们需要使用一种新的地址,从逻辑上来 定位主机位置。
例如,下面这样,左边的我们叫做网段1,并且给每个主机标号为1.1,1.2,1.3等,右边的是网段2,里面每个主机就是 2.1,2.2,2.3等。同时路由器的两个端口也配置一个地址,标记为1.4 2.4
主机 1.1 与主机 1.2 通信,通过广播交换机能够获取 1.2 的 MAC 地址,两者可以正常通信。当 1.1 与 2.1 进行通信时,1.1发现他想发信息的那台主机是 2.0 网段的,和他不再一个网段内,于是他就将信息直接发给 1.4 ,路由器收到这个请求之后,发现目标地址是另外一个网段内的,于是将其从 2.4 端口转发到 2 号网段,这样一来因为 2.4 和 2.1 是同一个网段内的,可以通过广播获取 MAC 地址,于是正常通信。于是 1.1 就可以与 2.1 通信了。
于是你会发现 ,为了解决夸网段的问题,我们引入了类似于 1.X 这种分段的地址。这种地址使用点号分隔,点号前面的 1 表示网段编号,点号后面的则是表示对应网段内的主机编号。但是 1.1 和 2.1 通信,1.1 如何知道 2.1 和他不在一个网段内的呢?很简单,使用掩码计算。因为在计算机世界中任何数字和 1 做 & 运算都得本身,而与 0 做 & 运算得 0,我们将上面的地址中表示网段编号的部分的用 1 表示,而表示主机编号的部分用 0 表示,这样通过 & 计算就知道对应的主机是那个网段内的了。
其实到这里你应该知道了,那个逻辑地址编号 1.X 的就是 IP 地址,而广播询问 IP 地址对应的主机 MAC 地址是多少的行为就是 ARP 地址解析。上面的 1.4 与 2.4 这种能够与外界通信的 IP 地址其实就是网关 IP(关就是边关,和古代的国与国之间的边塞差不多),而掩码其实就是子网掩码。
例如:IP 是 10.20.139.48 的主机所在网络子网掩码是 255.255.255.0 ,经过运算得知其所在网段是 10.20.139.0 ,而 IP 地址是 10.20.138.11 与子网掩码 255.255.255.0经过运算得知其所在网段是 10.20.138.0,通过比较就知道这是两个网段内的主机。并且,对于表示主机位部分全 0 的IP我们一般叫做网段IP,例如 10.20.139.0就是网段IP,而全 1 的叫做广播IP,例如 10.20.139.255。
其中各个参数的含义如下:
经过上面的配置,执行命令验证是否修改成功:
从上面红色部分可以看出网络已经设置成我们喜欢的网络了,这个时候可以使用 XSHELL 或者其他 CRT 工具通过模拟终端连接到 Linux 。
这里主要介绍了常见到网络设备,以及网络基础知识。具体详细内容需要参照计算机网络基础,网络很重要,后面的 LVS 以及相关的高可用分布式等需要用到。