网络是怎样连接的-补充

485 阅读8分钟

网络包的基本知识

包是由头部和数据两部分构成的

头部包含目的地址等控制信息,大家可以把它理解为快递包裹的面单;头部后面就是委托方要发送给对方的数据,也就相当于快递包裹里的货物

1624286185320.jpg

1624286185318.jpg 发送方的网络设备会负责创建包,创建包的过程就是生成含有正确控制信息的头部,然后再附加上要发送的数据

接下来,包会被发往最近的网络转发设备。当到达最近的转发设备之后,转发设备会根据头部中的信息判断接下来应该发往哪里

这张表里面记录了每一个地址对应的发送方向,也就是按照头部里记录的目的地址在表里进行查询,并根据查到的信息判断接下来应该发往哪个方向

接下来,包在向目的地移动的过程中,又会到达下一个转发设备,然后又会按照同样的方式被发往下一个转发设备。 在这里我们把发送方和接收方统称为终端节点

TCP/IP包的结构是在这个基本结构的基础上扩展出来的,因此更加复杂。

网络包传输过程中几种不同形态

在网络包从用户传输到运营商的过程中,会变换几种不同的形态。

1624286464682.jpg 首先,客户端生成的网络包先经过集线器和交换机到达互联网接入路由器。

并在此从以太网包中取出IP包并判断转发目标。

如果互联网接入路由器和ADSL Modem之间是通过以太网连接的,那么就会按照以太网的规则执行包发送的操作,发送信号本身的过程跟之前是一样的,但以太网的头部会有一些差异。这部分的具体情况各运营商会有所不同,而且还需要一些关于BAS(位于接入网另一端的包转发设备)的知识。

网络包会加上MAC头部、PPPoE头部、PPP头部总共3种头部。

然后按照以太网规则转换成电信号后被发送出去。

互联网接入路由器将包发送出去之后,包就到达了ADSL Modem。

ADSL Modem会把包拆分成很多小格子,每一个小格子称为一个信元。信元是一个非常小的数据块,开头是有5个字节的头部,后面是48个字节的数据,用于一种叫作ATM的通信技术。

其实之所以要将包拆分成信元,原因是这样的。当初开发ADSL技术时,通信业比较看好ATM技术,各运营商也在ATM相关的设备上投入了很多资金。在这样的情况下,如果使用信元来传输数据,就比较容易和其他设备进行整合,可以降低开发投入和设备投入。如果不是出于这样的原因,其实并不需要将包拆分成信元。

将网络包拆分成信元之后,接下来就要将这些信元转换成信号了。

ADSL Modem将信元转换为电信号之后,信号会进入一个叫作分离器的设备,然后ADSL信号会和电话的语音信号混合起来一起从电话线传输出去。

信号通过电话线到达电话局之后,会经过配线盘、分离器到达DSLAM。在这里,电信号会被还原成数字信息——信元。

光纤介绍

光纤它是由一种双层结构的纤维状透明材质(玻璃和塑料)构成的,通过在里面的纤芯中传导光信号来传输数字信息。ADSL信号是由多个频段的信号组成的,比较复杂,但光信号却非常简单,亮表示1,暗表示0。

1624286590420.jpg

1624286590417.jpg 先将数字信息转换成电信号,然后再将电信号转换成光信号。

这里的电信号非常简单,1用高电压表示,0用低电压表示。将这样的电信号输入LED、激光二极管等光源后,这些光源就会根据信号电压的变化发光,高电压发光亮,低电压发光暗。

接收端有可以感应光线的光敏元件,光敏元件可以根据光的亮度产生不同的电压。当光信号照射到上面时,光亮的时候就产生高电压,光暗的时候就产生低电压,这样就将光信号转换成了电信号。最后再将电信号转换成数字信息,我们就接收到数据了。

防火墙设置

我们的网络如图所示 1624286694864.jpg 现在我们希望允许从互联网访问Web服务器,但禁止Web服务器访问互联网。

以前很少禁止Web服务器访问互联网,但现在出现了一些寄生在服务器中感染其他服务器的恶意软件,如果阻止Web服务器访问互联网,就可以防止其他服务器被感染。

在设置包过滤规则时,首先要观察包是如何流动的。

通过接收方IP地址和发送方IP地址,我们可以判断出包的起点和终点。包从互联网流向Web服务器,从互联网发送过来的包其起点是不确定的,但终点是确定的,即Web服务器。

因此,我们可以按此来设定规则,允许符合规则的包通过。

也就是说,允许起点(发送方IP地址)为任意,终点(接收方IP地址)为Web服务器IP地址的包通过。

这样一来,从互联网发往Web服务器的包就可以通过防火墙了。

在Web服务器发往互联网的包中,我们可以将起点(发送方IP地址)为Web服务器地址的包设置为允许通过。

按照前面的设置,相当于允许了互联网和Web服务器之间所有的包通过,这个状态很危险。

因此,我们最好是阻止除了必需服务(也就是本例中的Web服务)以外的所有应用程序的包。

当我们要限定某个应用程序时,可以在判断条件中加上TCP头部或者UDP头部中的端口号。Web服务器的端口号为80,因此我们在刚才的接收方IP地址和发送方IP地址的基础上再加上80端口作为条件就可以了。

现在我们已经可以指定某个具体的应用程序了,但是条件还没达到,因为还没有办法阻止Web服务器访问互联网。

Web使用的TCP协议是双向收发网络包的,因此如果单纯地阻止从Web服务器发往互联网的包,则从互联网访问Web服务器的操作也会受到影响而无法进行。

TCP在执行连接操作时需要收发3个包,其中第一个包的TCP控制位中SYN为1,而ACK为0。其他的包中这些值都不同,因此只要按照这个规则就能够过滤到TCP连接的第一个包。

如果这第一个包是从Web服务器发往互联网的,那么我们就阻止它。

这样设置之后,当然也不会收到对方返回的第二个响应包,TCP连接操作就失败了。也就是说,只要以Web服务器为起点访问互联网,其连接操作必然会失败,这样一来,我们就阻止了Web服务器对互联网的访问。

实际上也存在无法将希望允许和阻止的访问完全区分开的情况。

其中一个代表性的例子就是对DNS服务器的访问。

DNS查询使用的是UDP协议,而UDP与TCP不同,它没有连接操作,因此无法像TCP一样根据控制位来判断访问方向。所以,我们无法设置一个规则,只允许公司内部访问互联网上的DNS服务器,而阻止从互联网访问公司内部的DNS服务器。这一性质不仅适用于DNS。

对于所有使用UDP协议的应用程序都是共通的。

在这种情况下,只能二者择其一——要么冒一定的风险允许该应用程序的所有包通过,要么牺牲一定的便利性阻止该应用程序的所有包通过。

还需要设置公司内网和互联网之间

或者公司内网与公开区域之间的包过滤规则

这时,需要注意的是不要让这些规则互相干扰。