(三)从网线到网络设备

本章内容

  • 信号在网线和集线器中传输。信号从计算机到达集线器,这过程中信号可能减弱,还会受到噪声干扰而失真,那么如何抑制这些影响呢?
  • 交换机的包转发操作。交换机不是简单的让信号流过,而是先接收信号并将其还原为数字信息,然后再重新转换成信号并发送出去的过程。
  • 路由器的包转发操作。路由器和交换机有些相似,但是交换机是基于以太网规格工作的设备(什么是以太网规格?),而路由器是基于 IP 工作的。
  • 路由器的附加功能。例如将私有地址转换成共有地址,以及过滤危险包的功能。

    一、信号在网线和集线器中传输

每个包都是独立传输的。

当 IP 模块将数据分成一个个小包之后,在传输的过程中它们就没有关系了。如同快递员只送快递不管里面的东西一样,转发设备也不管包里面的数据,这可能是一个确认包,也可能是一个数据包,但都无所谓,转发设备都不在乎,它只在乎发到哪里而已。

防止网线中的信号减弱很重要

网卡中的 PHY(MAU) (这个是负责收发信号的模块,可能有其他名字的模块)模块负责将包转换成电信号,信号通过 RJ-45 接口进入双绞线,(信号通过接口的 1 号和 2 号 针脚流入网线)。然后信号通过网线到达集线器的接口。


这个过程只是单纯的传输电信号,但是到达集线器的时候信号可能就不是原来的样子。原来波形是方形的,后来就变成波形了。


即使线路很好,没有噪声,信号传输的过程中仍然会发生失真,加上噪声就更加严重了,从而导致了通信错误。

双绞线是为了抑制噪声

产生噪声的原因是电磁波。影响信号的电磁波分为两种:

  • 网线之外的其他设备产生的电磁波
  • 网线中相邻信号线产生的电磁波

减少噪声影响的方法就是使用双绞线,具体什么原理我也不懂,毕竟我是物理 4 分的男人。


双绞线分为五种,有五类,超五类,六类,超六类,七类。


还有其他减少噪声的方法,比如在信号线之间加入隔板,在外面包裹金属屏障网等。

集线器将信号发往所有线路

集线器有很多个接口,接口后面是 PHY(MAU) 模块,为了正常接收信号,必须交叉连起来(?)。


集线器的接口有一个 MDI/MDI-X 切换开关。一般是使用 MDI-X 模式,当要连接另一台集线器的时候,就要切换成 MDI 模式,此时 PHY(MAU) 是直接连接的。(这里又不懂为什么)


如果没有切换开关,可以用交叉网线连接两台服务器。交叉网线也可以连接两台计算机。


下面再来看看信号怎么走:


信号到达 PHY(MAU) 模块之后会进入中继电路,中继电路会将信号发送到除了发送端口以外的所有端口。信号从端口流出,到达所有连接在集线器上的设备,这些设备会根据 MAC 头部的 MAC 地址判断是不是发给自己的,不是的话就丢弃。(客户端、服务器、路由器在此情况下都会丢弃,但交换机不会)。

二、交换机的包转发操作

交换机根据地址表进行转发

  • 信号进入交换机接口后,由 PHY(MAU) 模块接收。(接口与 PHY(MAU) 也是以 MDI-X 模式连接的)。接下来 PHY(MAU) 模块会将信号转换为通用格式交给 MAC 模块,MAC 模块会将信号转换为数字信息,并进行 FCS 校验,如果没问题就存放到缓冲区,否则就丢弃。(这里跟网卡的工作方式相似,但是这里的 MAC 模块是没有 IP 地址的)
  • 将包存放到缓冲区之后,接下来就会在 MAC 地址表里面查询接收方的 MAC 地址了。表中的 MAC 地址跟接口号对应,找到之后就可以发送到对应端口了。
  • 缓冲区到端口之间是交换电路,交换机因此得名的,但有些已经不用交换电路了。交换电路是类似于表格,可以同时传输多路信号。在半双工模式下,从端口发送出去之前还需要检测线路中是否有信号在传输,避免发生信号碰撞。

MAC 地址表的维护

维护包括添加记录和删除记录

  • 当收到包时,将发送方的 MAC 地址和其输入端口号写入 MAC 地址表中。以后要发往这个地址的包,交换机就能转发到正确的端口了。
  • 比如一台笔记本的位置移动之后,原来的记录已经不对了。如果笔记本发送包到交换机,交换机就会更新 MAC 地址表,这样就不用进行特殊的操作。除此之外,每隔几分钟交换机都会删除原来的数据。

特殊操作

  • 当目的端口和源端口一样时,交换机会直接丢弃这个包,否则就会目的主机就会收到两个相同的包。
  • 当 MAC 地址表没有接收方 MAC 地址的时候,就会将包转发到除了源端口以外的所有端口上。

全双工模式

全双工模式是交换机特有的工作模式,集线器是没有的。当多台计算机同时发送信号时,信号会在集线器内部混杂在一起,发生碰撞而无法使用。不过,只要不使用集线器就不会发生碰撞。交换机端口和 PHY(MAU) 模块以及 MAC 模块和接收电路都是独立的,所以信号不会发生碰撞。

自动协商

随着全双工模式的出现,如何在两种模式之间进行切换的问题也随之产生。开始需要手动切换,后来出现了自动切换 工作模式的功能。通过这一功能,可以由相互连接的双方探测对方是否支持全双工模式,以及检测对方的传输速率,并自动切换。检测的方式是通过脉冲信号的方式。

交换机可同时执行多个转发操作

包要发送到某个端口,其他空闲端口都可以传输其他的包,因此交换机可以同时转发多个包。

三、路由器的包转发操作

首先要了解路由器的基本知识、路由表中的信息,然后是包的收发以及中间的步骤,最后是交换机和路由器的关系

路由器的基本知识

路由器也是通过查表判断包转发的目标。最简化来看,路由器包括两个部分,分别是转发模块和端口模块,转发模块类似于 IP 模块,端口模块类似于网卡。首先端口模块将发过来的包接收进来,这里具体的工作过程取决于端口的通信技术。然后转发模块会根据包的 IP 头部中接收方的 IP 地址在表中查询,判断转发目标,然后委托转发目标对应的端口发送出去。


路由器的各个端口都具有 MAC 地址和 IP 地址,都可以称为网络中的发送方或者接收方。

路由表中的信息

交换机是通过 MAC 地址判断端口,而路由器是通过 IP 头部中的 IP 地址判断发往哪里。路由表中有目标地址、子网掩码,将这两项和 IP 地址相匹配,找到匹配项之后,就交给接口列中的指定的网络接口,并转发到网关列中指定的 IP 地址。路由表共有 5 列,最后一列是跃点计数,表示距离目标 IP 地址的距离是远还是近。


路由表的维护方法有两种:

  • 由人手动维护路由记录
  • 根据路由协议机制,通过路由器之间的信息交换由路由器自行维护路由表的记录。(路由协议包括 RIP、OSPC、BGP)

路由器接收网络包

这里说的是以太网端口是如何接收包的。信号到达网线接口部分, PHY(MAU) 模块将信号转换为数字信息,然后通过包末尾的 FCS 进行错误校验。如果没问题就检查 MAC 头部中 MAC 地址,如果是发给自己的包就放到接收缓冲区,否则丢弃。(路由器的端口都具有 MAC 地址)

查询路由器确定输出端口

接收操作完成之后就会丢弃 MAC 头部,因为这个头部的目的就是到达当前路由器,所以它已经没有用了。


路由表中目标地址和子网掩码匹配出 N 个网络号,然后与 IP 头部中的 IP 地址进行比对,如果相同就是候选转发目标之一。如果有多个候选转发目标,就选择网络号最长的一项,因为网络号长就说明主机号短,即子网中的主机数量相对较少,这样可以尽量缩小范围,使转发目标更加准确。这一规则称为“最长匹配”原则。


如果网络号长度相等,那么就选择跃点计数最小的记录。


如果路由表无法找到匹配的记录,路由器就会丢弃这个包,并发送 ICMP 消息告知发送方。与交换机不同,路由器连接的设备非常多,不能转发到所有端口。

找不到匹配路由是选择默认路由

路由表中有一行子网掩码是 0.0.0.0,也就是说目标地址和 IP 地址需要匹配的位数为 0,也就是说不用匹配。这样一来,找不到匹配路由的包就可以通过默认路由对应的默认网关发送出去了。如果存在匹配路由,根据最长匹配原则,是不会通过默认路由发送的。

包的有效期

网络包找到转发目标之后,就转交给输出端口,再次之前还需要更新 IP 头部中的 TTL (生存时间),每经过一个路由器这个的就会减一,当这个值为 0 的时候就要被丢弃,这样是为了防止包在一个地方陷入死循环。一般 TTL 设置为 64 或者 128。

通过分片功能拆分大网络包

当包的长度大于输出端口的 MTU 的时候(用最大包长度减去头部的长度得出 MTU)就需要分片。在此之前需要看一下 IP 头部中的标志字段,确认是否可以分片。进行拆分的是数据部分和 TCP 头部,每一个拆分好的数据都加上 MAC 头部和 IP 头部。

路由器的发送操作

这一步取决于输出端口的类型,以太网端口就将包转换成电信号发送出去,其他类型的有不同的规则。发送是要加上 IP 头部,MAC 头部,设置一些字段,然后转换成电信号发送出去。

为了判断 MAC 头部中的 MAC 地址填写什么值,需要根据路由表网关列判断对方的地址。

  • 如果是 IP 地址,则这个 IP 地址就是我们要转发的目标地址。
  • 如果为空,IP 头部中的 IP 地址就是要转发的目标地址。

然后使用 ARP 来查询 MAC 地址并写入 MAC 头部。路由器中也有 ARP 缓存。还有发送方的 MAC 地址,这里填写输出端口的 MAC 地址,以太类型填写 0080(十六进制)。

路由器和交换机的关系

IP (路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。(反正这里没看懂。)

四、路由器的附加功能

地址转换

公司内网的计算机使用的是私有地址,当要与互联网通信的时候,可以通过路由器进行地址转换。假设第一个 TCP 连接的第一个包被转发到互联网的时候,路由器会对发送方的 IP 地址进行改写,将私有地址改写成路由器端口的共有地址,而发送方的端口号也会随机生成一个。这些对应关系都会存放在路由器内部的一张表内。


通过私有地址的转换,就可以进行网络通信,而端口号的对应关系可以让路由器分辨出是哪台计算机的数据包。

从互联网访问公司内网

通常这样做是不行的,除非在地址和端口对应表中事先手动添加关联信息。

路由器的包过滤功能

根据 MAC 头部、IP 头部、TCP 头部的内容,按照事先设置好的规则决定是否转发这个包。