【计算机网络—概述】集线器、交换机和路由器

从计算机发送出来的网络包会经过集线器、路由器等设备被转发,最终到达目的地。转发设备会根据包头部中的控制信息,在转发设备内部一个写有转发规则的表中进行查询,以此来判断包的目的地,而后将包朝目的地的方向进行转发。缓存

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

每一个包都是独立传输的

邮递员在送信的时候只看信封,不看里面的内容,一样地,转发设备在进行转发时也不看数据的内容。所以,不管包里面装的是应用程序的数据或者是TCP协议的控制信息,都不会对包的传输操做自己产生影响。换句话说,HTTP请求的方法,TCP的确认响应和序号,客户端和服务器之间的关系,这一切都与包的传输无关。所以,全部的包在传输到目的地的过程当中都是独立的,相互之间没有任何关联。服务器

记住这个概念以后,咱们来探索一下网络包在进入互联网以前经历的传输过程。这里咱们假设客户端计算机链接的局域网结构是像下图这样的。也就是说,网络包从客户端计算机发出以后,要通过集线器、交换机和路由器最终进入互联网。实际上,咱们家里用的路由器已经集成了集线器和交换机的功能,像图上这样使用独立设备的状况不多见。不过,把每一个功能独立出来更容易理解,所以咱们这里将全部功能独立出来,逐个来进行探索。网络

image.png

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

咱们的探索从信号流出网卡进入网线开始。网卡中的PHY(MAU)模块负责将包转换成电信号,信号经过RJ-45接口进入双绞线,这部分的放大图以下图的右侧部分所示。以太网信号的本质是正负变化的电压,你们能够认为网卡的PHY(MAU)模块就是一个从正负两个信号端输出信号的电路。架构

image.png

网卡的PHY(MAU)模块直接链接图右侧中的RJ-45接口,信号从这个接口中的1号和2号针脚流入网线。而后,信号会经过网线到达集线器的接口,这个过程就是单纯地传输电信号而已。并发

可是,信号到达集线器的时候并非跟刚发送出去的时候如出一辙。集线器收到的信号有时会出现衰减。信号在网线的传输过程当中,能量会逐渐损失。网线越长,信号衰减就越严重。spa

若是再加上噪声的影响,失真就会更厉害。噪声根据强度和类型会产生不一样的影响,没法一律而论,但若是原本就已经衰减的信号再进一步失真,就会出现对0和1的误判,这就是产生通讯错误的缘由。设计

“双绞”是为了抑制噪声

局域网网线使用的是双绞线,其中“双绞”的意思就是以两根信号线为一组缠绕在一块儿,这种设计是为了抑制噪声的影响。对象

那么双绞线为何可以抑制噪声呢?首先,咱们来看看噪声是如何产生的。产生噪声的缘由是网线周围的电磁波,当电磁波接触到金属等导体时,在其中就会产生电流。所以,若是网线周围存在电磁波,就会在网线中产生和本来的信号不一样的电流。因为信号自己也是一种带有电压变化的电流,其本质和噪声产生的电流是同样的,因此信号和噪声的电流就会混杂在一块儿,致使信号的波形发生失真,这就是噪声的影响。接口

影响网线的电磁波分为两种。一种是由电机、荧光灯、CRT显示器等设备泄漏出来的电磁波,这种电磁波来自网线以外的其余设备,咱们来看看双绞线如何抑制这种电磁波的影响。路由

信号线是用金属作成的,当电磁波接触到信号线时,会沿电磁波传播的右旋方向产生电流,这种电流会致使波形发生失真。若是咱们将信号线缠绕在一块儿,信号线就变成了螺旋形,其中两根信号线中产生的噪声电流方向就会相反,从而使得噪声电流相互抵消,噪声就获得了抑制。

另外一种电磁波是从网线中相邻的信号线泄漏出来的。因为传输的信号自己就是一种电流,当电流流过期就会向周围发出电磁波,这些电磁波对于其余信号线来讲就成了噪声。这种内部产生的噪声称为串扰(crosstalk)。

要抑制这种噪声,关键在于双绞线的缠绕方式。在一根网线中,每一对信号线的扭绞间隔(节距)都有必定的差别,这使得在某些地方正信号线距离近,另外一些地方则是负信号线距离近。因为正负信号线产生的噪声影响是相反的,因此二者就会相互抵消。从网线总体来看,正负的分布保持平衡,天然就会削弱噪声的影响。

集线器将信号发往全部线路

当信号到达集线器后,会被广播到整个网络中。以太网的基本架构就是将包发到全部的设备,而后由设备根据接收方MAC地址来判断应该接收哪些包,而集线器就是这一架构的忠实体现。

集线器的每一个接口的后面装有和网卡中的PHY(MAU)功能相同的模块,但若是它们像网卡端同样采用直连式接线,是没法正常接收信号的。要正常接收信号,必须将“发送线路”和“接收线路”链接起来才行。集线器中的PHY (MAU)模块与接口之间采用交叉接线的缘由正是在于此。

集线器的接口中有一个MDI/MDI-X切换开关,MDI就是对RJ-45接口和信号收发模块进行直链接线,而MDI-X则是交叉接线。因为集线器的接口通常都是MDI-X模式,要将两台集线器相连时,就须要将其中一台改为MDI模式。若是集线器上没有MDI切换开关,并且全部的接口又都是MDI-X时,能够用交叉网线链接两台集线器

信号到达集线器的PHY(MAU)模块后,会进入中继电路。中继电路的基本功能就是将输入的信号广播到集线器的全部端口上。接下来,信号从全部接口流出,到达链接在集线器上的全部设备。而后,这些设备在收到信号以后会经过MAC头部中的接收方MAC地址判断是否是发给本身的,若是是发给本身的就接受,不然就忽略。

因为集线器只是原封不动地将信号广播出去,因此即使信号受到噪声的干扰发生了失真,也会原样发送到目的地。这时,接收信号的设备,也就是交换机、路由器、服务器等,会在将信号转换成数字信息后经过FCS校验发现错误,并将出错的包丢弃。

交换机的包转发操做

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

下面来看一下包是如何经过交换机的。交换机的设计是将网络包原样转发到目的地,下图就是它的内部结构。

首先,信号到达网线接口,并由PHY(MAU)模块进行接收,这一部分和集线器是相同的。接下来,PHY(MAU)模块会将网线中的信号转换为通用格式,而后传递给MAC模块。MAC模块将信号转换为数字信息,而后经过包末尾的FCS校验错误,若是没有问题则存放到缓冲区中。

这部分操做和网卡基本相同,你们能够认为交换机的每一个网线接口后面都是一块网卡。网线接口和后面的电路部分加在一块儿称为一个端口,也就是说交换机的一个端口就至关于计算机上的一块网卡。但交换机的工做方式和网卡有一点不一样。网卡自己具备MAC地址,并经过核对收到的包的接收方MAC地址判断是否是发给本身的,若是不是发给本身的则丢弃;相对地,交换机的端口不核对接收方MAC地址,而是直接接收全部的包并存放到缓冲区中。所以,和网卡不一样,交换机的端口不具备MAC地址

将包存入缓冲区后,接下来须要查询一下这个包的接收方MAC地址是否已经在MAC地址表中有记录了。MAC地址表主要包含两个信息,一个是设备的MAC地址,另外一个是该设备链接在交换机的哪一个端口上。以图中的地址表为例,MAC地址和端口是一一对应的,经过这张表就可以判断出收到的包应该转发到哪一个端口。举个例子,若是收到的包的接收方MAC地址为00-02-B3-1C-9C-F9,则与第3行匹配,根据端口列的信息,可知这个地址位于8号端口上,而后就能够经过交换电路将包发送到相应的端口了。

MAC地址表的维护

交换机在转发包的过程当中,还须要对MAC地址表的内容进行维护,维护操做分为两种。

第一种是收到包时,将发送方MAC地址以及其输入端口的号码写入MAC地址表中。因为收到包的那个端口就链接着发送这个包的设备,因此只要将这个包的发送方MAC地址写入地址表,之后当收到发往这个地址的包时,交换机就能够将它转发到正确的端口了。交换机每次收到包时都会执行这个操做,所以只要某个设备发送过网络包,它的MAC地址就会被记录到地址表中。

另外一种是删除地址表中某条记录的操做,这是为了防止设备移动时产生问题。好比,咱们在开会时会把笔记本电脑从办公桌拿到会议室,这时设备就发生了移动。从交换机的角度来看,就是原本链接在某个端口上的笔记本电脑消失了。这时若是交换机收到了发往这台已经消失的笔记本电脑的包,那么它依然会将包转发到原来的端口,通讯就会出错。所以地址表中的记录不能永久有效,而是要在一段时间不使用后就自动删除。

过期记录从地址表中删除的时间通常为几分钟,所以在过期记录被删除以前,依然可能有发给该设备的包到达交换机。这时,交换机会将包转发到老的端口,通讯就会发生错误,这种状况尽管罕见,但的确也有可能发生。遇到这样的状况,只要重启一下交换机,地址表就会被清空并更新正确的信息,而后网络就又能够正常工做了。

特殊操做

上面介绍了交换机的基本工做方式,下面来看一些特殊状况下的操做。好比,交换机查询地址表以后发现记录中的目标端口和这个包的源端口是同一个端口。当计算机用集线器和交换机链接在一块儿时就会遇到这样的状况,此时接收端计算机就会收到两个相同的包,会致使没法正常通讯。所以,当交换机发现一个包要发回到原端口时,就会直接丢弃这个包

还有另一种特殊状况,就是地址表中找不到指定的MAC地址。这多是由于具备该地址的设备尚未向交换机发送过包,或者这个设备一段时间没有工做致使地址被从地址表中删除了。这种状况下,交换机没法判断应该把包转发到哪一个端口,只能将包转发到除了源端口以外的全部端口上,不管该设备链接在哪一个端口上都能收到这个包。

此外,若是接收方MAC地址是一个广播地址,那么交换机会将包发送到除源端口以外的全部端口

自动协商:肯定最优的传输速率

随着全双工模式的出现,如何在全双工和半双工模式之间进行切换的问题也产生了。在全双工模式刚刚出现的时候,还须要手动进行切换,但这样实在太麻烦,因而后来出现了自动切换工做模式的功能。这一功能能够由相互链接的双方探测对方是否支持全双工模式,并自动切换成相应的工做模式。此外,除了能自动切换工做模式以外,还能探测对方的传输速率并进行自动切换。这种自动切换的功能称为自动协商。

在以太网中,当没有数据在传输时,网络中会填充一种被称为链接脉冲的脉冲信号。在没有数据信号时就填充链接脉冲,这使得网络中一直都有必定的信号流过,从而可以检测对方是否在正常工做,或者说网线有没有正常链接。

后来人们设计出了具备特定排列的脉冲信号,经过这种信号能够将自身的状态告知对方。自动协商功能就利用了这样的脉冲信号,即经过这种信号将本身可以支持的工做模式和传输速率相互告知对方,并从中选择一个最优的组合。

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

交换机只将包转发到具备特定MAC地址的设备链接的端口,其余端口都是空闲的。这些端口能够传输其余的包,所以交换机能够同时转发多个包。

相对地,集线器会将输入的信号广播到全部的端口,若是同时输入多个信号就会发生碰撞,没法同时传输多路信号,所以从设备总体的转发能力来看,交换机要高于集线器。

路由器的包转发操做

路由器的基本知识

网络包通过集线器和交换机以后,如今到达了路由器,并在此被转发到下一个路由器。这一步转发的工做原理和交换机相似,也是经过查表判断包转发的目标。不过在具体的操做过程上,路由器和交换机是有区别的。由于路由器是基于IP设计的,而交换机是基于以太网设计的。

路由器的内部结构如图所示。这张图比较简略,只须要明白路由器包括转发模块和端口模块两部分就能够了。其中转发模块负责判断包的转发目的地,端口模块负责包的收发操做

image.png

经过更换网卡,计算机不只能够支持以太网,也能够支持无线局域网,路由器也是同样。路由器的端口模块还支持除局域网以外的多种通讯技术,如ADSL、FTTH,以及各类宽带专线等,只要端口模块安装了支持这些技术的硬件便可。

路由器在转发包时,首先会经过端口将发过来的包接收进来。接下来,转发模块会根据接收到的包的IP头部中记录的接收方IP地址,在路由表中进行查询,以此判断转发目标。而后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去。这就是路由器的基本原理。

端口模块是以实际的发送方或者接收方的身份来收发网络包的。以以太网端口为例,路由器的各个端口都具备MAC地址和IP地址。当转发包时,首先路由器端口会接收发给本身的以太网包,而后查询转发目标,再由相应的端口做为发送方将以太网包发送出去。这一点和交换机是不一样的,交换机只是将进来的包转发出去而已,它本身并不会成为发送方或者接收方。

路由表中的信息

路由器中的表叫做路由表,其中包含的信息如图所示。

image.png

最左侧的目标地址列记录的是接收方的信息。路由器会将接收到的网络包的接收方IP地址与路由表中的目标地址进行比较,并找到相应的记录。交换机在地址表中只匹配彻底一致的记录,而路由器则会忽略主机号部分,只匹配网络号部分

在匹配地址的过程当中,路由器须要知道网络号的比特数,所以路由表中还有一列子网掩码,经过子网掩码的值就能够判断出网络号的比特数。

有时地址自己的子网掩码和路由表中的子网掩码是不一致的,这是路由聚合的结果。通过路由聚合,多个子网会被合并成一个子网,子网掩码会发生变化,同时,目标地址列也会改为聚合后的地址。

咱们看一个例子。如图所示,咱们如今有3个子网,分别为10.10.1.0/2四、10.10.2.0/2四、10.10.3.0/24,路由器B须要将包发往这3个子网。在这种状况下,路由器B的路由表中本来应该有对应这3个子网的3条记录,但在这个例子中,不管发往任何一个子网,都是经过路由器A来进行转发,所以咱们能够在路由表中将这3个子网合并成10.10.0.0/16,这样也能够正确地进行转发,但咱们减小了路由表中的记录数量,这就是路由聚合。

image.png

路由表的子网掩码列只表示在匹配网络包目标地址时须要对比的比特数量。并且,目标地址中的地址和实际子网的网络号可能并不彻底相同,但即使如此,路由器依然能够正常工做。

在子网掩码的右边还有网关和接口两列,它们表示网络包的转发目标。根据目标地址和子网掩码匹配到某条记录后,路由器就会将网络包交给接口列中指定的网络接口(即端口),并转发到网关列中指定的IP地址。

最后一列是跃点计数,它表示距离目标IP地址的距离是远仍是近。这个数字越小,表示距离目的地越近;数字越大,表示距离目的地越远。

路由表记录维护的方式和交换机也有所不一样。交换机中对MAC地址表的维护是包转发操做中的一个步骤,而路由器中对路由表的维护是与包转发操做相互独立的,也就是说,在转发包的过程当中不须要对路由表的内容进行维护。

对路由表进行维护的方法有几种,大致上可分为如下两类。

  1. 由人手动维护路由记录
  2. 根据路由协议机制,经过路由器之间的信息交换由路由器自行维护路由表的记录

路由协议有不少种,例如RIP、OSPC、BGP等都属于路由协议。

查询路由表肯定输出端口

在工做过程当中,路由器首先会接收网络包,过程与网卡几乎没有区别。首先,信号到达网线接口部分,其中的PHY(MAU)模块和MAC模块将信号转换为数字信息,而后经过包末尾的FCS进行错误校验,若是没问题则检查MAC头部中的接收方MAC地址,看看是否是发给本身的包,若是是就放到接收缓冲区中,不然就丢弃这个包。完成包接收操做以后,路由器就会丢弃包开头的MAC头部。

接下来,路由器会根据MAC头部后方的IP头部中的内容进行包的转发操做。

转发操做分为几个阶段,首先是查询路由表判断转发目标。关于具体的工做过程,咱们仍是来看一个实际的例子,如上一节图中的状况,假设地址为10.10.1.101的计算机要向地址为192.168.1.10的服务器发送一个包。判断转发目标的第一步,就是根据包的接收方IP地址查询路由表中的目标地址栏,以找到相匹配的记录。图中第3行,子网掩码列为255.255.255.0,表示须要匹配从左起24个比特。网络包的接收方IP地址和路由表中的目标地址左起24个比特的内容都是192.168.1,所以二者是匹配的,该行记录就是候选转发目标之一。

按照这样的规则,咱们可能会匹配到多条候选记录。在这个例子中,第三、四、5行均可以匹配。其中,路由器会优先选择网络号比特数最长的一条记录。网络号比特数越长,说明主机号比特数越短,也就意味着该子网内可分配的主机数量越少,即子网中可能存在的主机数量越少,这一规则的目的是尽可能缩小范围,因此根据这条记录判断的转发目标就会更加准确。

有时候路由表中会存在网络号长度相同的多条记录,例如考虑到路由器或网线的故障而设置的备用路由就属于这种状况。这时,须要根据跃点计数的值来进行判断。跃点计数越小说明该路由越近,所以应选择跃点计数较小的记录。

若是在路由表中没法找到匹配的记录,路由器会丢弃这个包,并经过ICMP消息告知发送方。

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

那么是否是全部的转发目标都须要配置在路由表中才行呢?互联网中的转发目标可能超过几十万个,若是所有要配置在路由表中不太现实。

其实,路由表中的最后一行的做用就至关于把全部目标都配置好了。这一行的子网掩码为0.0.0.0,它的意思是网络包接收方IP地址和路由表目标地址的匹配中须要匹配的比特数为0,换句话说,就是根本不须要匹配。只要将子网掩码设置为0.0.0.0,那么不管任何地址都能匹配到这一条记录。

只要在这一条记录的网关列中填写接入互联网的路由器地址,当匹配不到其余路由时,网络包就会被转发到互联网接入路由器。所以这条记录被称为默认路由,这一行配置的网关地址被称为默认网关。在计算机的TCP/IP设置窗口中也有一个填写默认网关的框,意思是同样的。计算机上也有一张和路由器同样的路由表,其中默认网关的地址就是咱们在设置窗口中填写的地址。

包的有效期

从路由表中查找到转发目标以后,网络包就会被转交给输出端口,并最终发送出去,但在此以前,路由器还有一些工做要完成。

第一个工做是更新IP头部中的TTL(Time to Live,生存时间)字段。TTL字段表示包的有效期,包每通过一个路由器的转发,这个值就会减1,当这个值变成0时,就表示超过了有效期,这个包就会被丢弃。

这个机制是为了防止包在一个地方陷入死循环。若是路由表中的信息有问题,或者因为设备故障等缘由切换到备用路由时致使暂时性的路由混乱,就会出现这样的状况。

发送方在发送包时会将TTL设为64或128,也就是说包通过这么多路由器后就会“寿终正寝”。如今的互联网即使访问一台位于地球另外一侧的服务器,最多也只须要通过几十个路由器,所以只要包被正确转发,就能够在过时以前到达目的地。

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

路由器的端口并不仅有以太网一种,也能够支持其余局域网或专线通讯技术。不一样的线路和局域网类型各自能传输的最大包长度也不一样,所以输出端口的最大包长度可能会小于输入端口。即使两个端口的最大包长度相同,也可能会由于添加了一些头部数据而致使包的实际长度发生变化,ADSL、FTTH等宽带接入技术中使用的PPPoE协议就属于这种状况。

不管哪一种状况,一旦转发的包长度超过了输出端口能传输的最大长度,就没法直接发送这个包了。遇到这种状况,可使用IP协议中定义的分片功能对包进行拆分,缩短每一个包的长度。

分片操做的过程如图所示。首先,咱们须要知道输出端口的MTU,看看这个包能不能不分片直接发送。若是输出端口的MTU足够大,那么就能够不分片直接发送;若是输出端口的MTU过小,那么就须要将包按照这个MTU进行分片,但在此以前还须要看一下IP头部中的标志字段,确认是否能够分片。若是查询标志字段发现不能分片,那么就只能丢弃这个包,并经过ICMP消息通知发送方。

image.png

数据被拆分后,每一份数据前面会加上IP头部,其大部份内容都和本来的IP头部如出一辙,但其中有部分字段须要更新,这些字段用于记录分片相关的信息。

路由器的发送操做和计算机相同

到这里,发送前的准备工做就完成了,接下来就会进入包的发送操做。咱们假设路由器位于公司等局域网的内部,即输出端口也是以太网,看看这种状况是如何操做的。

首先,为了判断MAC头部中的MAC地址应该填写什么值,咱们须要根据路由表的网关列判断对方的地址。若是网关是一个IP地址,则这个IP地址就是咱们要转发到的目标地址;若是网关为空,则IP头部中的接收方IP地址就是要转发到的目标地址。知道对方的IP地址以后,接下来须要经过ARP根据IP地址查询MAC地址,并将查询的结果做为接收方MAC地址。路由器也有ARP缓存,所以首先会在ARP缓存中查询,若是找不到则发送ARP查询请求。

接下来是发送方MAC地址字段,这里填写输出端口的MAC地址。还有一个以太类型字段,填写0080(十六进制)。网络包完成后,接下来会将其转换成电信号并经过端口发送出去。这一步的工做过程和计算机也是相同的。

因为接收方MAC地址就是下一个路由器的地址,因此交换机会根据这一地址将包传输到下一个路由器。接下来,下一个路由器会将包转发给再下一个路由器,通过层层转发以后,网络包就到达了最终的目的地。

路由器与交换机的关系

要理解二者之间的关系,关键点在于计算机在发送网络包时,或者是路由器在转发网络包时,都须要在前面加上MAC头部。以前都是说在开头加上MAC头部,其实准确的说法应该是将IP包装进以太网包的数据部分中。也就是说,给包加上MAC头部并发送,从本质上说是将IP包装进以太网包的数据部分中,委托以太网去传输这些数据。

IP协议自己没有传输包的功能,所以包的实际传输要委托以太网来进行。路由器是基于IP设计的,而交换机是基于以太网设计的,所以IP与以太网的关系也就是路由器与交换机的关系。换句话说,路由器将包的传输工做委托给交换机来进行。不过,实际的路由器都有内置交换机功能,好比用于链接互联网的家用路由器就属于这一种,对于这种路由器,上面内容可能就不适用了。

从包的转发目标也能够看出路由器和交换机之间的委托关系。IP并非委托以太网将包传输到最终目的地,而是传输到下一个路由器。当包到达下一个路由器后,下一个路由器又会从新委托以太网将包传输到再下一个路由器。随着这一过程反复执行,包就会最终到达IP的目的地,也就是通讯的对象。

到这里咱们已经梳理了路由器与交换机之间的关系。简单来讲,IP (路由器)负责将包发送给通讯对象这一总体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的

固然,网络并不是只有以太网一种,还有无线局域网,以及接入互联网的通讯线路,它们和IP之间的关系又是什么样的呢?其实只要将以太网替换成无线局域网、互联网线路等通讯规格就能够了。

路由器的附加功能

刚才咱们介绍了路由器的基本工做过程,如今的路由器除了这些基本功能以外,还有一些附加功能。下面来介绍两种最重要的功能——地址转换和包过滤。

经过地址转换有效利用IP地址

所谓地址,就是用来识别每一台设备的标志,所以每台设备都应该有一个惟一不重复的地址。原本互联网中全部的设备都有本身的固定地址,并且最先也确实是这样作的。20世纪90年代以后,接入互联网的设备数量快速增加。若是还用原来的方法接入,过不了多久,可分配的地址就会用光,新的设备就没法接入了。

解决这个问题的关键在于固定地址的分配方式。举个例子,假若有A、B两家公司,它们的内网是彻底独立的。这种状况下,两家公司的内网之间不会有网络包流动,即便A公司的某台服务器和B公司的某台客户端具备相同的IP地址也不要紧,由于它们之间不会进行通讯。

解决地址不足的问题,利用的就是这样的性质,即公司内部设备的地址不必定要和其余公司不重复。这样一来,公司内部设备就不须要分配固定地址了,从而大幅节省了IP地址。在内网中可用做私有地址的范围仅限如下这些。在制定私有地址规则时,这些地址属于公有地址中尚未分配的范围。

10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255

尽管这样的确能节省一部分地址,但仅凭这一点还没法彻底解决问题。公司内网并非彻底独立的,而是须要经过互联网和其余不少公司相链接。因此当内网和互联网之间须要传输包的时候,若是不少地方都出现相同的地址,包就没法正确传输了。

因而,当公司内网和互联网链接的时候,须要采用下图这样的结构,即将公司内网分红两个部分,一部分是对互联网开放的服务器,另外一部分是公司内部设备。其中对互联网开放的部分分配公有地址,能够和互联网直接进行通讯。相对地,内网部分则分配私有地址,内网中的设备不能和互联网直接收发网络包,而是经过一种特别的机制进行链接,这个机制就叫地址转换。

image.png

地址转换的基本原理

地址转换的基本原理是在转发网络包时对IP头部中的IP地址和端口号进行改写。具体的过程咱们来看一个实际的例子,假设如今公司内部要访问Web服务器。

首先,TCP链接操做的第一个包被转发到互联网时,会像下图这样,将发送方IP地址从私有地址改写成公有地址。这里使用的公有地址是地址转换设备的互联网接入端口的地址。与此同时,端口号也须要进行改写,地址转换设备会随机选择一个空闲的端口。而后,改写前的私有地址和端口号,以及改写后的公有地址和端口号,会做为一组相对应的记录保存在地址转换设备内部的一张表中。

image.png

改写发送方IP地址和端口号以后,包就被发往互联网,最终到达服务器,而后服务器会返回一个包。接下来,地址转换设备会从地址对应表中经过公有地址和端口号找到相对应的私有地址和端口号,并改写接收方信息,而后将包发给公司内网,这样包就可以到达原始的发送方了。

在后面的包收发过程当中,地址转换设备须要根据对应表查找私有地址和公有地址的对应关系,再改写地址和端口号以后进行转发。当数据收发结束,进入断开阶段,访问互联网的操做所有完成后,对应表中的记录就会被删除。

经过这样的机制,具备私有地址的设备就也能够访问互联网了。从互联网一端来看,实际的通讯对象是地址转换设备(这里指的是路由器)。

从互联网访问公司内网

然而,对于从互联网访问公司内网的包,若是在对应表中没有记录就没法正常转发。换个角度来看,这意味着对于没有在访问互联网的内网设备,是没法从互联网向其发送网络包的。并且即使是正在访问的设备,也只能向和互联网通讯中使用的那个端口发送网络包,没法向其余端口发送包。这种机制具备防止非法入侵的效果。

不过,有时候咱们但愿可以从互联网访问公司内网,这时只须要事先手动在地址转换表中添加这样的记录就能够了。通常来讲,用于外网访问的服务器能够放在地址转换设备的外面并为它分配一个公有地址,也能够将服务器的私有地址手动添加到地址转换设备中,这样就能够从互联网访问到这台具备私有地址的服务器了

路由器的包过滤功能

下面来介绍一下包过滤功能。包过滤也是路由器的一个重要附加功能,机制也并不复杂。包过滤就是在对包进行转发时,根据MAC头部、IP头部、TCP头部的内容,按照事先设置好的规则决定是转发这个包,仍是丢弃这个包。咱们一般说的防火墙设备或软件,大多数都是利用这一机制来防止非法入侵的。

包过滤的原理很是简单,但要想设置一套恰当的规则来区分非法访问和正常访问,只阻止非法入侵而不影响正常访问,是很是不容易的。