写点什么

《网络是怎么样连接的》读书笔记 - 集线器、路由器和路由器(三)

作者:懒时小窝
  • 2022 年 6 月 25 日
  • 本文字数:8712 字

    阅读完需:约 29 分钟

《网络是怎么样连接的》读书笔记 - 集线器、路由器和路由器(三)

本章重点

  1. 信号如何在网线和集线器中传输?如何抑制信号传输中的失真情况?

  2. 交换机的作用和工作方式是什么?

  3. 路由器包转发的细节,以及和交换机的区别。

  4. 路由器额外功能了解,不仅仅是接入互联网的媒介,还包含许多其他功能。

  5. 了解集线器、路由器、交换机在 OSI 模型(TCP/IP 模型)的位置。

集线器和网线信号传输

如果了解[[《网络是怎么样连接的》读书笔记 - ADSL]]和[[《网络是怎么样连接的》读书笔记 - FTTH]]两个部分的内容,应该清楚网络包在传输的过程中最终转化为电信号或者光信号传输,我们通常所说的 TCP 协议、IP 协议、以太网等等实际上都已经被“屏蔽”的。


最终包的传输只是一个转发设备到另一个转发设备信号传输,所有的网络包都相当于一个独立的快递一般进行传输。


这个传输过程涉及到本章的三个最重要的内容,也就是集线器,交换机,路由器,整个传输的过程和下面的内容类似:



防止信号衰减


所谓的以太网信号实际上可以看作是正负变化的电压,网卡的 PHY 模块负责完成正负电子信号电路输出。


信号传输的根本性的问题是网线越长,信号衰减和损耗越严重。由于以太网是使用方波信号传输,高频信号容易丢失,这样容易导致信号的失真,另外线路噪声条件无论好坏都有可能导致信号失真,所以问题很显然是在传输材料上。


互联网最早使用的是双绞线,所谓双绞线是最早期的 ADSL 的接入互联网而使用的电话线和网线混合的模式诞生的一种特殊设计模式。


而最早的以太网使用专用同轴网线,后来变成由美国室内电 话线改良的版本,原因是它可以兼容电话线的布线工具和材料, 比较方便。


想要双绞线如何避免信号失真和噪声问题,我们需要了解噪声是怎么来的,这里需要介绍一点物理知识:


信号噪声来自于网线周围的电磁波,影响网线信号传输的电磁波主要有两种,第一种是液晶显示设备泄漏的电磁波,第二种是相邻的网线产生的电磁串扰,信号传输依靠的是电流,电流在经过网线周围周围就会产生电磁波,网线之间的电磁波干扰被称为串扰


要解决上面两种电磁波的问题,通常有下面的方式:


  1. 第一种通过双绞的方式让电流通过不同的方式以螺旋的方式传输,其中两根信号线中产生的噪声电流方向就会相反,这时候信号依然可以正常传输,但是噪声得到了控制。

  2. 第二种电磁串扰问题可以通过绕线的方式来解决,由于绞线之间本身就有十分规律的间隙,正反信号之间的距离通过缠绕的方式进行抵消,所以哪怕相邻只要互相缠绕方式正确就可以让噪声进行抵消。


所以网线螺旋缠绕方式本身是有讲究的,既可以解决电流本身掠过其他电磁波设备产生的噪声,又可以防止不同网线交叉的电流产生的电磁波噪声。


集线器工作


信号传递到整个网络之后将会广播到整个网络,在第一章“以太网 MAC 头部”当中介绍了 MAC 地址中包含了接收方的“收货地址”,集线器负责以太网架构中对于信号进行广播的角色。实际上可以想象是接收一端网卡传递的电信号,然后通过网线传递给另一端。


我们可以观察集线器的设计,PHY 模块的功能基本是相同的,注意这里的接线方法是交叉连线的,使用直接连接的方式是无法接收信号的。


如果集线器不想和某个网卡通信则需要一个中间媒介完成切换的动作。


RJ45 接口:通常用于数据传输,最常见的应用为网卡接口。 RJ45 是各种不同接头的一种类型;RJ45 头根据线的排序不同的法有两种,一种是橙白、橙、绿白、蓝、蓝白、绿、棕白、棕;另一种是绿白、绿、橙白、蓝、蓝白、橙、棕白、棕;因此使用 RJ45 接头的线也有两种即:直通线、交叉线



为了让不同的接口实现“接入”和“关闭”的操作,需要依赖 MDI/MDI-X 切换开关,如果存在这个开关的则可以切换 MDI/MDI-X 模式,集线器直接的连接可以都改为 MDI 模式(也就是直连模式)。


但是如果需要和其他计算机的网卡交互,需要切换为 MDI-X 模式进行交互,另外注意不是所有的集线器都有切换开关,所以如果某个集线器只有 MDI-X 接口,也可以通过默认的 MDI- X 接口完成交叉交互。


这里可能有点难以理解,所以换一种解释:我们知道电流是从正极流向负极,所以在集线器和两个计算机的网卡交互的时候是需要进行“发送端”和“接收端”的正反交叉连接。


而集线器的设计由于是“平行设备”,可能存在只支持正反信号交互或者直接连接的方式完成交互,所以需要模式的切换开关进行兼容,但是如果集线器只有正反信号的交互接口,则直接通过交叉交互连接的方式完成信号交流。



现在我们再看看另一端接收内容拼接成一个完整的结构图,和前文所说的一样在网卡的这一端。



为什么有直连和交叉线?


下面的部分是书中没有介绍的内容,个人存在疑问为什么集线器要弄出 MDI/MDI-X 直连和交叉的模式,虽然知道了他的作用,但是不清楚历史由来。


为了详细解释,首先说一下什么是直连线,什么是交叉线。


  • 直连线:网线两端都是按 T568A 或者 T568B 排序。

  • 交叉线:一端是按 T568A 排序,一端是按 T568B 排序。


这里找了一张网上的图对比两种不同的接线方法在网线上的不同接入方式:



直连和交叉接线的区别


实际上没有本质区别,只是不同的网线适应不同的场景而已。具体的使用场景可以看上面截图的内容,这里简单举例说明。


直连线用于两种不同的设备之间:


  1. 主机和集线器或者交换机连接。

  2. 路由器交换机和集线器。

  3. 交换机使用的端口不同。


交叉线使用同类型设备,这里只要记住交叉线适用于相同类型的设备。


这里记住一条规则:同种设备用交叉,不同设备用直连。


然而随着技术的发展和迭代现代设备对于网线接口的依赖其实并不是特别强,同种设备使用直连线也是可以兼容的,所以上面的这条规则只能作为一个参考。

交换机信号传输

交换机通常属于 OSI 模型的第二层(数据链路层),交换机的工作依赖于对 MAC 地址的识别。


交换机设计是将网络包原样转发到目的地,目的是为了实现远距离的网络包传输而不让数据失真。


因为需要交换数据,交换的接口和 PHY(MAU)模块也是以 MDI-X 模式进行连接的,当网络包进入接口之后首先是把信号翻译为交换机通用格式,接着是使用 MAC 模块部分对于网络包进行解析,并且使用包末尾的 FCS 校验错误。


交换机看似和网卡的工作类似实际上有着类似的作用,通过查询 MAC 地址以及端口查找对应的目标地址,然后转发到下一个离目标地点更近的地址。


交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中,而之前章节提到过网卡在生产出来的之后本身就自带唯一的 MAC 地址并且收发信息都需要核对 MAC 地址。


显然网卡和交换机还是有不小差别的,因为交换机端口的 MAC 模块不具有 MAC 地址


下面的内容是关于交换机工作较为详细解释,整个工作简而言之:交换机根据 MAC 地址表查找 MAC 地址, 然后将信号发送到相应的端口。


当交换机从其某个端口收到一个数据包时,先读取包头中的源 MAC 地址(即发送该数据包的设备网卡的 MAC 地址),将该 MAC 地址和端口对应起来添加到交换机内存里的地址表中;然后再读取包头中的目的 MAC 地址,对照内存里的地址表看该 MAC 地址与哪个端口对应。


如果地址表中有该 MAC 地址的对应端口,则将该数据包直接复制到对应的端口上,如果没有找到则将该数据帧作为一个广播帧发送到所有的端口,对应的 MAC 地址设备会自动接收该帧数据,同时交换机将接收该帧数据的端口与这个目的 MAC 地址对应起来,最后放入内存中的地址表中。


快速理解交换机的特点:具备大部分网卡特性的以太网数据传输设备


这里回顾之前章节介绍的 FCS 内容。


FCS:检查包传输过程中因噪声导致的波形紊乱、数据错误,它是一串 32 比特的序列,是通过一个公式对包中从头到尾 的所有内容进行计算而得出来的。 具体可以参考网络包的结构示意图。



交换机内部结构



MAC 地址维护


交换机基本工作是查找核对 MAC 地址以及维护 MAC 地址表的工作,MAC 地址的维护主要有下面两个细节:


  1. 发送方 MAC 地址以及其输入端口的号码写入 MAC 地址表中。MAC 地址表的数据非常庞大但是端口的数量有限,为了快速的查找和管理,只要某个设备发送过网络包,它的 MAC 地址就会被记录到地址表中,这种结构和缓存类似。

  2. MAC 地址表通常是“实时更新”的,目的是为了防止设备移动问题。由于现代移动设备会频繁的切换网络环境和端口状态,交换机为了适应发送方频繁“变更”端口需要及时删除地址表的映射记录。


另外需要补充说明和大多数的缓存特征相同,MAC 地址的删除不是实时的,所以有时候数据包可能会发给之前的,但是这种事情通常不需要担心也比较罕见,通常重启交换机并且刷新掉 MAC 地址和端口映射即可,交换机会自行更新或删除地址表中的记录,不需要手动维护


交换机特殊处理


下面介绍交换机的几种特殊情况。


第一种是如果发现网络包的发送方和目标地址是同一个映射端口,这种情况下目标机器会收到两个重复的包导致无法通信,所以这种网络包交换机收到之后直接丢弃。


另一种情况地址表中找不到指定的 MAC 地址,这种情况可能是目标地址从来没有在互联网中进行过交互,或者是设备长时间不工作地址被交换机删除。


这种情况下交换机会使用广播发给所有的网络设备直到找到应答方,一旦接收到应答就会存储下 MAC 地址和映射端口,这种设计本身也和以太网最初的设计考虑一致。


最后一种是如果接收方 MAC 地址是一个广播地址,那么交换机会将包发送到除源端口之外的所有端口。


全双工协议


全双工协议存在于交换机当中,集线器不具备这样的特点,集线器由于多个信号传入会导致信号碰撞是半双工协议的。


交换机是全双工协议的,所以在传输过程中不管有没有网络包交换机也可以自己进行数据的收发操作。在全双工的模式下信号碰撞不会发生,因此这种模式下也不需要碰撞检测。


全双工协议出现的早期需要人为的手工切换,当然随着技术发展后来出现了工作模式的自动切换。


另外在早期为了保证通信正常,在以太网的架构如果没有信号传输,会默认填充脉冲信号在网络中不断流过,为了兼容新老设备的传输速率, 脉冲信号的传输会使用“木桶效应”的短板自动兼容完成全双工协议的脉冲信号传输。



最后由于交换机支持全双工的协议,当端口不需要传输数据的时候可以实现多个端口的转发操作,关于交换机的更多内容可以查阅资料了解。

路由器信号传输

数据由交换机发送出来之后,信号会传输到路由器。


路由器是基于 IP 设计的,而交换机是基于以太网设计的,虽然看上去工作是类似的查表判断包应该发往那里,但是由于设计初衷的不同,所以还是存在很大的差别。


路由器的内部结构重点关注转发模块端口模块,其中转发模块负责判断包的转发目的地,端口模块负责包的收发操作,有点类似协议栈的 IP 模块和网卡之间的关系。


路由器支持多种协议,只要端口模块安装了相关协议就可以支持信号传输,通过不同的端口完成不同协议的工作,路由器的各个端口都具有 MAC 地址和 IP 地址。


以太网端口为例, 路由器的端口具有 MAC 地址 ,因此它就能够成为以太网的发送方和接收方,此外端口还具有 IP 地址,所以他可以充当网卡使用。



路由表的信息


在路由器中的表信息被叫做路由表,查表判断转发目标的基本思路和交换机是类似的,但是工作方式不太一样。


主要的区别可以从路由表的设计上进行对比,这里需要再次用上子网掩码的相关知识,首先这里可以看到目标地址存储的主机号部分为 0,所以这里明显存储的是目标 IP 的子网。


路由器会忽略主机号,只匹配网络号,只要接收到的 IP 网络号一致,则可以认为是符合同一个方向传递来的数据。


为了提高路由器中路由表的地址管理效率,有时候目标地址实际子网掩码和子网掩码并不是完全匹配的,这里可以类比 DNS 对于 IP 地址的维护。


路由器在维护目标地址和子网掩码的时候,路由聚合会将几个子 网合并成一个子网, 并在路由表中只产生一条记录,比如 10.10.1.0/24、10.10.2.0/24、10.10.3.0/24 这三个地址虽然不属于同一个子网,但是可以通过 10.10.0.0/16(注意网络号变化为 16 位)这样的形式类似对于掩码进行二次掩码匹配的操作。


所以路由表的子网掩码列只表示在匹配网络包目标地址时需要对比的比特数量,利用路由聚合可以减少不必要的查表和提高路由效率。


最后是路由表信息的维护工作,主要方式是下面两种:


  • 由人手动维护路由记录 。

  • 根据路由协议机制, 通过路由器之间的信息交换由路由器自行维 护路由表的记录。



路由器包收发操作


信号传输到接口部分,接口的 PHY 模块和 MAC 模块把信号进行转化翻译,末尾同样需要校验 FCS。


接着再检查 MAC 地址,路由器的端口同样都具有 MAC 地址, 只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。其中的接收方 MAC 地址就是路由器端口 的 MAC 地址。


这里比较容易误解的是接收方的地址可能被认为主机的地址,其实是路由器的接收端口的 MAC 地址,因为网络包是发给路由器的,再由路由器查表发给具体的主机。


路由表查表操作


路由表的查表规则是按照匹配的最长网络号比特殊进行匹配,因为网络号越多证明子网掩码的范围越小子网所覆盖的主机也越少,越有可能找到对应的主机地址。这样的匹配规则也被叫做 最长匹配规则


对于服务器这种通常具备固定公网 IP 的设备在路由表上会有诸如192.168.1.10/255.255.255.255的表现形式,这样的 IP 在查找的时候可以按照最长匹规则进行匹配。


注意如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过 ICMP 消息告知发送方。为什么会直接丢弃包呢?这是因为互联网多设备实在是过于庞大数量过多,查询代价是难以估计的。


默认路由选择


所有的转发操作都要匹配路由表显然是不现实的,所以在路由器中默认配置了 0.0.0.0 让任何地址都可以进行匹配到,另外这一行配置也被叫做默认网关


在计算机的 TCP/IP 设置窗口中也有一个填写默认网关的框,表示计算机上 也有一张和路由器一样的路由表,其中默认网关的地址就是我们在设置窗口中填写的地址。


在 IPV4 中,0.0.0.0 地址被用于表示一个无效的,未知的或者不可用的目标。


  • 在服务器中,0.0.0.0 表示是本机上的所有 IPV4 地址,如果一个主机有两个 IP 地址,比如 192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是 0.0.0.0,那么通过两个 ip 地址都能够访问该服务。

  • 在路由中,0.0.0.0 表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。


0.0.0.0 的主要用途:


  • DHCP 分配前表示本机。

  • 用做默认路由表示任意主机。

  • 用做服务端表示本机的任意 IPV4 地址。

  • 表示目标机器不可用


路由器和交换机的差别


最后我们来看路由器和交换机的差别


  1. 交换机通过 MAC 头部接收方 MAC 地址判断转发目标,路由器则通过 IP 模块判断 IP 地址来确定转发目标。

  2. 交换机在地址 表中只匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分。


包的有效期


路由器发送网络包之前,还有一些工作要做:更新 IP 头部的 TTL 字段,TTL 指的是包的有效期,如果这个值为 0 表示转发,比如发送方在发送包时会将 TTL 设为 64 或 128, 也就是说包经过这么多 路由器后就会“寿终正寝”。这个机制的作用是防止包无限转发而设计的。


分片功能拆分大网络包


这里的分片和 TCP 拆分数据是不同的,TCP 拆分数据的操作是在将数据装到包里之 前进行的,换句话说拆分好的一个数据块正好装进一个包里。而 IP 分片是把合成的一个包再一次进行分片的操作。


决定 IP 模块是否分片主要限制是 MTU 参数以及输出端口支持的 MTU 大小,如果输出端口太小就需要按照限制的大小对于包进分片,如果查询标志字段发现不能分片, 那么就只能丢弃这个包, 并通过 ICMP 消息通知发送方。


需要注意分片之后每一份数据前面会加上 IP 头部,大部分情况下添加头部都是相似的,只是=其中有部分字段需要更新,这些字段用于记录分 片相关的信息。


路由器的发送操作


路由器判断下一个转发目标的方法如下:


  • 如果路由表的网关列内容为 IP 地址, 则该地址就是下一个转发目标。

  • 路由器使用 ARP 来查询下一个转发目标的 MAC 地址。

  • 如果路由表的网关列内容为空,则 IP 头部中的接收方 IP 地址就是下一个转发目标。


这几个步骤详细描述,可以获得下面的过程:


  1. 首先判断 MAC 地址,取出 MAC 头部判断路由表的网关,如果网关为空,则 IP 头部中的接收 方 IP 地址就是要转发到的目标地址。

  2. ARP 广播协议根据 IP 找到对方 MAC 地址,并且存储未接收方 MAC 地址。

  3. 填写输出端发送方 MAC 地址字段, 这里填写输出端口的 MAC 地址还有一个以太类型字段,填写 0080(十六进制)。

  4. 把网络包转为电信号传输,如果信号碰撞则进行重发,如果非全双工模式则等待线路没有信号进行传输,否则无需确认是否有其他信号直接传输。

  5. 发送的包通过交换机传给下一个路由器,然后路由器根据规则层层转发到达目的地。


整个过程有点类似现代快递的传输,由一个站点找到下一个站点,最后到达目的地址。交换机的作用也非常明显,他和路由器属于分工合作,IP (路由器)负责将包发送给通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。


路由器在这里是方向盘的角色,而交换机更像是开车的人。


路由器其他功能


IP 地址的长度为 32 个 bit,所以很多情况下不同局域网的用户可能有相同的 I P。为了解决相同 IP 在互联网中“共存”问题,需要采用固定地址的分配方式区分内外网。


通常我们把给公司内部使用的网络叫做私有地址,而固定提供对外访问的地址叫做固定地址。公有地址和私有地址的区别是私有地址在访问互联网的时候会进行转化并且只能在内网中进行直接通信,而这个转化机制比较关键,


地址转化


地址转换的基本原理是在转发网络包时对 IP 头部中的 IP 地址和端口号 进行改写。 具体可以看看下面的例子,在对外只能使用一个公有地址的情况下,可以用不同的端口号来区别内网中的 不同终端。


地址转换设备会从地址对应表中通过公有地址和端口号找到 相对应的私有地址和端口号,根据对应表查找私有地址 和公有地址的对应关系之后,再改写地址和端口号之后进行转发。


地址转化从表面上看同样类似委托操作,接收方的通信对象实际上是和地址转化设备完成。



改写端口号


改写端口号的意义是为了让一个公网地址可以对应更多的私有地址,对于一个大公司来说一个公网地址几万个端口以及是可以支持使用的。


此外如果是内网地址的通信在地址转化设备表中不存在也可以正常通信,因为转发设备本身的地址就是被用来改写的公网地址。


路由器包过滤


最后路由包的过滤,基本是是通过 IP 模块,MAC 模块和 TCP 模块配合校验一个网络包请求是否合法。


包过滤的意义当然是为了保证网络安全,防止互联网伪造网络包进入内容破坏内网的系统应用。


当网络包通过互联网接入路由器之后,接下来的部分就是 ADS L 或者 FTTH 的工作了,这部分内容主要为运营商的内容。


其他内容


集线器(repeater hub) 交换机(switching hub)虽 然名字差不多但内部结构完全不同,路由器早期效率实际上不如交换机,但是如果管路由器叫做 hub 显然会让用户认为价钱昂贵并且难以接收,但是如果跟客户说接上网线就可以上网,情况就会变得不一样。


另外交换机的在后来的历史发展中发展出二层交换机,我们在小结中进行展示。从字面理解小型廉价的普及型产品一般叫交换机,大型的高性能产品一般叫二层交换机。

小结

下面是总结集线器、交换机和路由器分别是什么,接着是补充一部分交换机后续发展的内容。


集线器


集线器(即 HUB,物理层设备)是一种将多条双绞线或光纤集合连接在同一段物理介质下的设备,通常工作在物理层(即 OSI 参考模型第一层),用于连接局域网段。


集线器拥有多个端口,当其中一个端口接收到信号后,会将衰减的信号整形放大,然后再将放大的信号广播转发给其他所有端口,以便局域网的所有段都可以看到数据包。在网络中,集线器充当着设备的公共连接点。


在 OSI 参考模型的底部。常用设备还包括网卡、集线器、中继器、调制解调器、网线、双绞线、同轴电缆。


交换机


交换机是一种用于光/电信号转发的网络设备,通常工作在数据链路层或网络层(即 OSI 参考模型的第二层和第三层),支持各种数据包协议。目前交换机类型繁多,如局域网交换机、以太网交换机等。


其中局域网交换机主要用于交换式局域网内进行数据交换,而以太网交换机主要用于以太网内进行数据传输。


在网络中交换机是用于局域网段之间过滤和转发数据包的设备。


路由器


路由器是连接 Internet 中各局域网、广域网的设备,通常位于两个或者多个网络连接的网关处,工作在网络层,用于实现两个局域网或两个广域网或一个局域网和互联网服务提供商之间的网络连接。


在路由器中通常存着一张路由表,它会根据信道的情况自动选择和设定路由,然后以最佳路径发送信号。另外,路由器支持 Internet 控制报文协议(即 ICMP)等类似协议,可帮助 IP 主机、路由器之间传递控制消息,为任意两台主机之间配置最佳路由。


二层和三层交换机


二层交换机通常用于连接以太网中的网络设备和客户端设备,以识别与转发数据包中的 MAC 地址。但随着网络应用程序多样性的增加以及融合网络应用的发展,三层交换机的应用在数据中心,复杂的企业网络,商业应用乃至高级客户项目中蓬勃发展。


二层交换机工作于 OSI 模型的二层(数据链路层),故而称为二层交换机,主要功能包括物理编址、错误校验、帧序列以及流控。而三层交换机位于三层(网络层),是一个具有三层交换功能的设备,即带有三层路由功能的二层交换机,但它是二者的有机结合,并不是简单地把路由器设备的硬件及软件叠加在局域网交换机上。


二层和三层交换机的区别


二层和三层交换机之间的主要区别在于是否拥有路由功能。


二层交换机:属数据链路层设备,可以识别数据包中的 MAC 地址信息,根据 MAC 地址进行转发,并将这些 MAC 地址与对应的端口记录在自己内部的一个地址表中。


三层交换机:就是具有部分路由器功能的交换机,工作在 OSI 网络标准模型的三层:网络层,目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。此外,三层交换机可以执行静态路由和动态路由


OSI 参考模型


虽然 OSI 模型最初的设想很美好,然而实际上被 TCP/IP 网络模型替代,但是下面三层的内容基本是没有变化的,在学习了这一章的内容之后,我们对于整个互联网的架构应该有了更深入的了解。



发布于: 刚刚阅读数: 4
用户头像

懒时小窝

关注

赐他一块白石,石头上写着新名 2020.09.23 加入

如果我们想要知道自己想要做什么,必须先找到自己的白色石头。欢迎关注个人公众号“懒时小窝”,不传播焦虑,只分享和思考有价值的内容。

评论

发布
暂无评论
《网络是怎么样连接的》读书笔记 - 集线器、路由器和路由器(三)_网络编程_懒时小窝_InfoQ写作社区