网络是怎样连接的---信号在集线器、交换机和路由器中的传输

从计算机发送出来的网络包会通过集线器、路由器等设备被转发,最终到达目的地。所有的包在传输到目的地的过程中都是独立的,相互之间没有任何关联。
信号会通过网线到达集线器的接口,这个过程就是单纯地传输电信号而已,但是,集线器收到的信号有时会出现衰减,信号在网线的传输过程中,能量会逐渐损失。网线越长,信号衰减就越严重。局域网网线使用的是双绞线,其中“双绞”的意思就是以两根信号线为一组缠绕在一起,这种拧麻花一样的设计是为了抑制噪声的影响。

集线器

当信号到达集线器后,会被广播到整个网络中。以太网的基本架构就是将包发到所有的设备,然后由设备根据接收方 MAC 地址来判断应该接收哪些包,而集线器就是这一架构的忠实体现,它就是负责按照以太网的基本架构将信号广播出去。
接下来,信号从所有接口流出,到达连接在集线器上的所有设备。然后,这些设备在收到信号之后会通过 MAC 头部中的接收方 MAC 地址判断是不是发给自己的,如果是发给自己的就接受,否则就忽略。这样,网络包就能够到达指定 MAC 地址的接收方了。
由于集线器只是原封不动地将信号广播出去,所以即便信号受到噪声的干扰发生了失真,也会原样发送到目的地。这时,接收信号的设备,也就是交换机、路由器、服务器等,会在将信号转换成数字信息后通过 FCS校验发现错误,并将出错的包丢弃。当然,丢弃包并不会影响数据的传输,因为丢弃的包不会触发确认响应。因此协议栈的 TCP 模块会检测到丢包,并对该包进行重传。

交换机

交换机的设计是将网络包原样转发到目的地。
交换机表
交换机结构
交换机的工作方式和网卡有一点不同。网卡本身具有 MAC 地址,并通过核对收到的包的接收方 MAC 地址判断是不是发给自己的,如果不是发给自己的则丢弃;相对地,交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。因此,和网卡不同,交换机的端口不具有 MAC 地址。
将包存入缓冲区后,接下来需要查询一下这个包的接收方 MAC 地址是否已经在 MAC 地址表中有记录了。MAC 地址表主要包含两个信息,一个是设备的 MAC 地址,另一个是该设备连接在交换机的哪个端口上。
交换机在转发包的过程中,还需要对 MAC 地址表的内容进行维护,维护操作分为两种。
第一种是收到包时,将发送方 MAC 地址以及其输入端口的号码写入MAC 地址表中。交换机每次收到包时都会执行这个操作,因此只要某个设备发送过网络包,它的 MAC 地址就会被记录到地址表中。
另一种是删除地址表中某条记录的操作,这是为了防止设备移动时产生问题。地址表中的记录不能永久有效,而是要在一段时间不使用后就自动删除。
总之,交换机会自行更新或删除地址表中的记录,不需要手动维护。当地址表的内容出现异常时,只要重启一下交换机就可以重置地址表,也不需要手动进行维护。
交换机的特殊操作:交换机查询地址表之后发现记录中的目标端口和这个包的源端口是同一个端口时,就会直接丢弃这个包。而地址表中找不到指定的 MAC 地址时,这种情况下,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。
全双工模式是交换机特有的工作模式,它可以同时进行发送和接收操作,集线器不具备这样的特性。
使用集线器时,如果多台计算机同时发送信号,信号就会在集线器内部混杂在一起,进而无法使用,这种现象称为碰撞,是以太网的一个重要特征。
而使用双绞线时,发送和接收的信号线是各自独立的,因此在双绞线中信号不会发生碰撞。因此,只要不用集线器,就可以避免信号碰撞了。
交换机只将包转发到具有特定 MAC 地址的设备连接的端口,其他端口都是空闲的。这些端口可以传输其他的包,因此交换机可以同时转发多个包。
相对地,集线器会将输入的信号广播到所有的端口,如果同时输入多个信号就会发生碰撞,无法同时传输多路信号,因此从设备整体的转发能力来看,交换机要高于集线器。

路由器

路由器的工作原理:路由器在转发包时,首先会通过端口将发过来的包接收进来,接下来,转发模块会根据接收到的包的 IP 头部中记录的接收方 IP 地址,在路由表中进行查询,以此判断转发目标。然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去。
端口模块会根据相应通信技术的规范来执行包收发的操作,这意味着端口模块是以实际的发送方或者接收方的身份来收发网络包的。以以太网端口为例,路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方。这一点和交换机是不同的,交换机只是将进来的包转发出去而已,它自己并不会成为发送方或者接收方。端口还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的,但端口并不会成为 IP 的发送方和接收方。
在“查表判断转发目标”这一点上,路由器和交换机的大体思路是类似的,不过具体的工作过程有所不同。交换机是通过 MAC 头部中的接收方 MAC 地址来判断转发目标的,而路由器则是根据 IP 头部中的 IP 地址来判断的。交换机在地址表中只匹配完全一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分。
路由表记录维护的方式和交换机也有所不同。交换机中对 MAC 地址表的维护是包转发操作中的一个步骤,而路由器中对路由表的维护是与包转发操作相互独立的,也就是说,在转发包的过程中不需要对路由表的内容进行维护。
路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。完成包接收操作之后,路由器就会丢弃包开头的 MAC 头部,MAC 头部的作用就是将包送达路由器。
接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。转发操作分为几个阶段,首先是查询路由表判断转发目标。路由器会忽略主机号,只匹配网络号。按照这样的规则,我们可能会匹配到多条候选记录。其中,路由器首先寻找网络号比特数最长的一条记录。网络号比特数越长,说明主机号比特数越短,也就意味着该子网内可分配的主机数量越少,即子网中可能存在的主机数量越少,这一规则的目的是尽量缩小范围,所以根据这条记录判断的转发目标就会更加准确。
然而,有时候路由表中会存在网络号长度相同的多条记录,需要根据跃点计数的值来进行判断。跃点计数越小说明该路由越近,因此应选择跃点计数较小的记录。
如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过ICMP消息告知发送方。
是不是所有的转发目标都需要配置在路由表中才行呢?显然是不现实的,子网掩码为 0.0.0.0,就相当于把所有目标都配置好了,子网掩码 0.0.0.0 的意思是网络包接收方 IP 地址和路由表目标地址的匹配中需要匹配的比特数为 0,换句话说,就是根本不需要匹配。只要将子网掩码设置为 0.0.0.0,那么无论任何地址都能匹配到这一条记录,这样就不会发生不知道要转发到哪里的问题了。因此这条记录被称为默认路由,这一行配置的网关地址被称为默认网关。
从路由表中查找到转发目标之后,网络包就会被转交给输出端口,并最终发送出去,但在此之前,路由器还有一些工作要完成。
第一个工作是更新 IP 头部中的 TTL(Time to Live,生存时间)字段。TTL 字段表示包的有效期,包每经过一个路由器的转发,这个值就会减 1,当这个值变成 0 时,就表示超过了有效期,这个包就会被丢弃。这个机制是为了防止包在一个地方陷入死循环。
路由器的端口并不只有以太网一种,也可以支持其他局域网或专线通信技术。不同的线路和局域网类型各自能传输的最大包长度也不同,因此输出端口的最大包长度可能会小于输入端口。一旦转发的包长度超过了输出端口能传输的最大长度,就无法直接发送这个包了。
遇到这种情况,可以使用 IP 协议中定义的分片功能对包进行拆分,缩短每个包的长度。这里说的分片和TCP 对数据进行拆分的机制是不同的。TCP 拆分数据的操作是在将数据装到包里之前进行的,换句话说,拆分好的一个数据块正好装进一个包里。从 IP 分片的角度来看,这样一个包其实是一个未拆分的整体,也就是说,分片是对一个完整的包再进行拆分的过程。
在将包按照这个 MTU 进行分片之前,需要看一下 IP 头部中的标志字段,确认是否可以分片。如果查询标志字段发现不能分片,那么就只能丢弃这个包,并通过ICMP 消息通知发送方。否则,就可以按照输出端口 MTU 对数据进行依次拆分了。在分片中,TCP 头部及其后面的部分都是可分片的数据,尽管TCP 头部不属于用户数据,但从 IP 来看也是 TCP 请求传输的数据的一部分。数据被拆分后,每一份数据前面会加上 IP 头部,其大部分内容都和原本的 IP 头部一模一样,但其中有部分字段需要更新,这些字段用于记录分片相关的信息。
分片功能
路由器的发送操作和计算机相同其基本过程和协议栈中的 IP 模块发送包的过程是相同的,即在包前面加上 MAC 头部,设置其中的一些字段,然后将完成的包转换成电信号并发送出去。
首先,为了判断 MAC 头部中的 MAC 地址应该填写什么值,我们需
要根据路由表的网关列判断对方的地址。如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址;如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址。知道对方的 IP 地址之后,接下来需要通过 ARP 根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方MAC 地址。路由器也有 ARP 缓存,因此首先会在 ARP 缓存中查询,如果找不到则发送 ARP 查询请求。
路由器在转发网络包时,都需要在前面加上 MAC 头部。准确的说法应该是将 IP 包装进以太网包的数据部分中。也就是说,给包加上 MAC 头部并发送,从本质上说是将 IP 包装进以太网包的数据部分中,委托以太网去传输这些数据。IP 协议本身没有传输包的功能,因此包的实际传输要委托以太网来进行。路由器是基于 IP 设计的,而交换机是基于以太网设计的,因 此 IP 与以太网的关系也就路由器与交换机的关系。
从包的转发目标也可以看出路由器和交换机之间的委托关系。IP 并不是委托以太网将包传输到最终目的地,而是传输到下一个路由器。在创建MAC 头部时,也是从 IP 的路由表中查找出下一个路由器的 IP 地址,并通过 ARP 查询出 MAC 地址,然后将 MAC 地址写入 MAC 头部中的,这表示 IP 对以太网的委托只是将包传输到下一个路由器就行了。当包到达下一个路由器后,下一个路由器又会重新委托以太网将包传输到再下一个路由器。随着这一过程反复执行,包就会最终到达 IP 的目的地,也就是通信的对象。
IP(路由器)负责将包发送给通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的。
现在的路由器除了这些基本功能之外,还有一些附加功能——地址转换和包过滤。
地址转换的基本原理是在转发网络包时对 IP 头部中的 IP 地址和端口号进行改写。
首先,TCP 连接操作的第一个包被转发到互联网时,将发送方 IP 地址从私有地址改写成公有地址。与此同时,端口号也需要进行改写,地址转换设备会随机选择一个空闲的端口。然后,改写前的私有地址和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保存在地址转换设备内部的一张表中。
利用端口号改写 IP 地址
改写发送方 IP 地址和端口号之后,包就被发往互联网,最终到达服务器,然后服务器会返回一个包。服务器返回的包的接收包是原始包的发送方,因此返回的包的接收方就是改写后的公有地址和端口号。这个公有地址其实是地址转换设备的地址,因此这个返回包就会到达地址转换设备。
接下来,地址转换设备会从地址对应表中通过公有地址和端口号找到相对应的私有地址和端口号,并改写接收方信息,然后将包发给公司内网,这样包就能够到达原始的发送方了。
路由器的另一项附加功能是包过滤功能,包过滤就是在对包进行转发时,根据 MAC 头部、IP 头部、TCP 头部的内容,按照事先设置好的规则决定是转发这个包,还是丢弃这个包。包过滤的原理非常简单,但要想设置一套恰当的规则来区分非法访问和正常访问,只阻止非法入侵而不影响正常访问,是非常不容易的。举个例子,为了防止从互联网非法入侵内网,我们可以将来自互联网的所有包都屏蔽掉,但是这会造成什么结果呢?网络包是双向传输的,如果简单地阻止来自互联网的全部包,那么从内网访问互联网的操作也会无法正常进行。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值