Skip to content

2 基础概念知识 Ⅱ

接入网

[!quote] 接入网 接入网 是连接互联网与家庭,公司网络的通信线路,一般家用的接入网方式包括 ADSL,FTTH,CATV,电话线,ISDN……,公司还会使用专线

互联网接入路由器是按照接入网规则来发送包的,与以太网路由器不同

BAS

[!quote] RAS RAS 是一种路由器,是用一台服务器里面装上 RAS 软件来实现的

[!quote] BAS BAS 是由 RAS 发展而来的,是用于宽带网络的 RAS,具有一般路由器没有的功能【身份认证,下发 IP 地址……】

接入网中使用的 PPP 和隧道

用户认证和配置下发

ADSL 和 FTTH 接入网中,用户和 BAS【用户端的】之间都是通过电缆/光纤固定连接的,因此不需要验证用户身份。但是通过用户名和密码,运营商可以更好地管理用户用户可以根据用户名来切换不同的运营商。因此,接入运营商在 ADSL 和 FTTH 中会使用 PPPoE[^1],BAS[^2]【登录操作的窗口】

PPP

在使用电话线/ISDN 拨号上网时,PPP 的工作流程:

  • 首先,用户向运营商的接入点拨打电话 ①-1
  • 电话接通 ①-2
  • 输入用户名和密码进行登录操作 ②-2
  • 用户名和密码通过 RADIUS 协议 从 RAS[^3] 发送到认证服务器进行校验
  • 确认无误后,认证服务器会返回 IP 地址等配置信息,并下发给用户 ②-3
  • 用户端的设备根据服务器返回的配置信息,完成收发网络包的准备工作 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=jmpoEsTO|600]]

PPP 如何传输消息: 将 PPP 消息 装进一个包含报头,FCS,信号格式的容器里,然后以 HDLC 协议 发送出去 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=HpDa4Qc9|600]]

PPPoE

PPPoE = PPP + 以太网

由于 ADSL 和 FTTH 不能使用 HDLC ,所以我们用了以太网进行代替 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=pSfebJIu|900]]

PPPoE 包 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=5nBXlO7U|540]]

PPPoA

只有 ADSL 接入网可以使用 PPPoA【因为 FTTH 不使用 ATM 信元】 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=iznefzjS|540]] 使用 PPPoA 时,需要和 BAS 收发 PPP 消息的设备【计算机,路由器】必须和 ADSL Modem 是一体的【因为 PPPoA 没有 MAC 头部,PPP 消息无法通过以太网传输】

一体化的方式主要有以下两种:

  • 第一种是将计算机和 ADSL Modem 用 USB 接口连接起来,这样 ADSL Modem 就和计算机成为一体了【最终并没有普及】
  • 另一种方式是将 ADSL Modem 和路由器整合成一台设备。【这种方式无法抛开路由器用计算机直接上网】

PPPoA 相比 PPPoE 可以传输更大的包【因为没有 PPPoE 头部,PPP 头】

隧道

隧道就类似于套接字之间建立的 TCP 连接,只不过这里的套接字是 BAS

基于 TCP 连接的隧道 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=3XYAysn0|520]]

  • 首先需要在网络上的两台隧道路由器【有时是服务器】之间建立 TCP 连接
  • 然后,将连接两端的套接字当作路由器的端口,从这个端口收发数据

基于封装的隧道 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=vbp19H5N|520]] 将包含头部在内的整个包装入另一个包中传输到另一端【包可以原封不动地到达另一端】

接入网中使用的 DHCP

有一些运营商不使用 PPP,他们使用 DHCP 协议 从 BAS 向用户端下发 TCP/IP 配置信息 【常用于公司】

原理

![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=GdnbPjgDYIAw-kRXlJBwd]]

  • 首先客户端请求配置信息 ①
  • 然后 DHCP 服务器下发配置信息 ②

优点

  • 不需要像 PPP 那样需要多个步骤
  • 也不需要验证用户名和密码
  • 它可以单纯地直接传输以太网包,不需要添加额外的 PPP 头部,因此不会占用 MTU

采用 DHCP 的运营商使用的 ADSL Modem 不使用信元【使用信元的 PPPoE,PPPoA 方式中,BAS 需要配备比较昂贵的 ATM 接口】,而是直接将以太网包调制成 ADSL 信号,因此没有 ADSL Modem 和路由器无法分离的问题

运营商

IX

什么是 IX

现在的运营商非常多,如果都用 (a) 方式连接会非常困难,所以我们可以采用 (b) 方式,设置一个中心设备,来减少线路数量,这个中心设备就称为 IX【互联网交换中心】 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=wCWZnokp]]

IX 的核心是具有大量高速以太网端口的二层交换机

IX 交换机和一般的交换机在工作方式上没有区别

各个运营商路由器怎么连接到 IX 上

  • 当运营商 NOC 和 IX 位于同一幢大楼里时

只要从 NOC 中将光纤延长出来接到 IX 交换机就可以了【和公司、家庭网络中的路由器与交换机的连接方法是相同的】 ①

  • 如果 NOC 和 IX 不在同一幢大楼时

我们可以用通信线路将路由器和交换机连起来,有两种连法:

  • 从路由器延伸出一根通信线路并连接到 IX 交换机上 ②
  • 另一种是将路由器搬到 IX 机房里,用通信线路将路由器和 NOC 连起来,再将路由器连到 IX 交换机上 ③
  • 在数据中心等网络流量集中的地方

设置 IX 终端交换机,各运营商的路由器在这里连接到终端交换机上 ④

![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=TySadd0e|540]]

运营商之间的路由信息交换

相连的路由器会互相告知路由信息,获得了对方的路由信息,就知道了对方路由器连接的所有网络,将这些信息写入自己的路由表中,就可以向那些网络发送包了。在获得对方的路由信息之后,我们也要将自身的路由信息告知对方【对方也可以将发往我们所在子网的包转发过来】

这个路由信息交换的过程是由路由器自动完成的,这里使用的机制称为 BGP【边界网关协议】

交换路由信息的两种方式

  • 转接:将互联网中的路由全部告知对方
  • 非转接/对等:两个运营商之间仅将与各自网络相关的路由信息告知对方

与公司网络中自动更新路由表机制的区别

  • 公司

公司中使用的方式是寻找与目的地之间的最短路由,并按照最短路由来转发包【周围的所有路由器都是平等对待的,路由信息是在所有路由器间平等交换】

公司内部采用这样的方式没问题,但运营商之间就不行 假设某个运营商拥有一条连接日本和美国的高速线路,那么要访问美国的地址时,可能这条线路是最短路由。如果单纯采用最短路由的方式,那么其他运营商的包就都会走这条线路,那就无法阻止那些没交费的运营商使用这条线路

  • 运营商
    • 互联网中可以指定路由交换的对象【路由交换是在特定路由器间一对一进行】。这样一来,运营商就可以只将路由信息提供给那些交了费的运营商,那些没交费的运营商也就无法将网络包发送过来了
    • 在判断路由时,该机制不仅可以判断是否是最短路由,还可以设置其他一些判断因素【例如当某个目的地有多条路由时,可以对每条路由设置优先级】

服务器端 Web 服务器

部署地点

在公司里部署 web 服务器

服务器直接部署在公司网络上,并且可以从互联网直接访问 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=gac88uKm|500]]

这种情况下,网络包通过最近的 POP 中的路由器,然后接入网,接着服务器端路由器之后,就直接到达服务器

现在这已经不是主流方式了

  • 因为 IP 地址不足。这样的方式需要为公司网络中的所有设备都分配各自的公有地址;
  • 因为安全问题。这种方式中,从互联网传来的网络包会无节制地进入服务器;

通过防火墙隔离部署

![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=yqIc6sgY]]

部署在数据中心

Web 服务器可以把服务器放在网络运营商等管理的数据中心里,或者直接租用运营商提供的服务器 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=fkaYIjKO|500]]

  • 数据中心是与运营商 NOC 直接连接的,或者是与运营商之间的枢纽 IX 直接连接的。因此服务器可以获得很高的访问速度;
  • 数据中心一般位于具有抗震结构的大楼内,还具有自主发电设备,具有更高的安全性;
  • 数据中心还提供各种附加服务【如服务器工作状态监控、防火墙的配置和运营、非法入侵监控等】

如果数据中心有防火墙,则网络包会先接受防火墙的检查,放行之后再到达服务器

平衡负载

通过多台服务器平均分配请求

当服务器的访问量上升时,尤其是通过 CGI 等应用程序动态生成数据的情况下,增加服务器线路的带宽是有效的,但由于网络包太多,所以 使用多台服务器来分担负载的方法更有效

实现方式 1 我们通过 DNS 服务器将客户端发送的请求分配到每台服务器上 当访问服务器时,客户端需要先向 DNS 服务器查询服务器的 IP 地址,如果在 DNS 服务器中填写多个名称相同的记录,则每次查询时 DNS 服务器都会按顺序返回不同的 IP 地址。这种方式称为 _**轮询**_

轮询缺点:

  • 假如多台 Web 服务器中有一台有故障,而 DNS 服务器并不能确认 Web 服务器是否正常工作,那么 DNS 服务器还是会返回这台故障的 Web 服务器
  • 在通过 CGI 等方式动态生成网页的情况下,有些操作是要跨多个页面的,如果这期间访问的服务器发生了变化,这个操作就可能无法继续【例如用户的操作需要在多个页面之间进行。如果在用户从第一个页面跳转到第二个页面的过程中,负责处理第一个页面的服务器发生了变化(如负载均衡、服务器故障等),那么用户可能无法顺利地完成操作】

实现方式 2 为了避免出现前面的问题,可以使用 _**负载均衡器**_ 首先要用负载均衡器的 IP 地址代替 Web 服务器的 IP 地址注册到 DNS 服务器上,客户端会认为负载均衡器就是一台 Web 服务器,并向其发送请求,然后由负载均衡器来判断将请求转发给哪台 Web 服务器

如何判断请求转发给哪台 Web 服务器?

  • 如果操作没有跨多个页面,则可以根据 Web 服务器的负载状况来进行判断
  • 负载均衡器可以定期采集 Web 服务器的 CPU、内存使用率;
  • 向 Web 服务器发送测试包,根据响应所需的时间来判断负载状况【Web 服务器的负载可能会在短时间内上下波动,因此无法非常准确地把握负载状况如果过于密集地去查询服务器的负载,这个查询操作本身就会增加 Web 服务器的负载
  • 根据事先设置的服务器性能指数,按比例来分配请求;
  • 当操作跨多个页面时,必须将请求发送到同一台 Web 服务器上。由于每一次 HTTP 访问都是相互独立的,无法判断是否和之前的请求相关,于是,人们提出了一些方案来判断请求之间的相关性:
  • 在发送表单数据时在里面加上用来表示关联的信息
  • 对 HTTP 规格进行扩展,在 HTTP 头部字段中加上用来判断相关性的信息【Cookie】。这样,负载均衡器就可以通过这些信息来作出判断,将一系列相关的请求发送到同一台 Web 服务器,对于不相关的请求则发送到负载较低的服务器了

通过缓存服务器

[!quote] 缓存服务器 缓存服务器 是一台通过代理机制【就是在客户端和 Web 服务器之间充当中间人】对数据进行缓存的服务器。它可以将 Web 服务器返回的数据保存在磁盘中,并可以代替 Web 服务器将磁盘中的数据返回给客户端

  • 如果在缓存了数据之后,Web 服务器更新了数据,那么缓存的数据将无法使用
  • CGI 程序等产生的页面数据每次都不同,这些数据也无法缓存【这种情况下,我们可以不保存整个页面,而是将每次内容都会发生变化的动态部分,与内容不会发生变化的静态部分分开,只将静态部分保存在缓存中

缓存服务器的三种代理机制:

[!quote] 正向代理

正向代理 就是代理服务器【此处为缓存服务器代表客户端与目标服务器通信,客户端知道目标服务器的存在,但目标服务器不知道客户端的存在

使用正向代理时,一般需要在浏览器的设置窗口中的“代理服务器”一栏中填写正向代理的 IP 地址,当设置了正向代理后,浏览器会忽略网址栏的内容,直接将所有请求发送给正向代理。浏览器会在请求的 URI 字段中填写完整的 http://... 网址,因此可以根据这个网址来转发【没有正向代理时,浏览器会从网址中提取出 Web 服务器域名后面的文件名或目录名,然后将其作为请求的 URI 进行发送,而不是完整的网址】

  • 正向代理可用于缓存【代理出现于 ADSL、FTTH 等技术实用化之前,那时还没有廉价高速的接入网,而代理的缓存功能可以有效利用低速接入网】 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=YrdxEhBO]]
  • 正向代理还可以用来实现防火墙【由于代理在转发过程中可以查看请求的内容,所以可以根据内容判断是否允许访问】
  • 还常应用于绕过网络限制,访问被封锁的网站
  • 提供匿名性,隐藏客户端的真实身份
  • 当使用正向代理时【缓存服务器放在服务器端】,无法减少互联网中的流量
  • 客户端的缓存服务器是归客户端网络运营管理者所有的,Web 服务器的运营者无法控制它【比如,网站的运营者觉得最近网站上增加了很多大容量的内容,想要增加缓存服务器的容量,但对于放在客户端的缓存就无能为力了】

[!quote] 反向代理

反向代理 就是代理服务器代表目标服务器与客户端通信,客户端知道代理服务器的存在,但不知道目标服务器的存在

正向代理需要在浏览器设置正向代理的 IP 地址,这样太麻烦,而反向代理通过将请求消息中的 URI 的目录名与 Web 服务器进行关联,使得代理能够转发一般的不包含完整网址的请求消息

  • 常应用于负载均衡
  • 提供高可用性和容错机制【例如当某个后端服务器故障时,请求可以自动切换到其他正常的服务器】
  • 提供安全性【隐藏后端服务器的真实 IP 地址和细节】
  • 如果使用反向代理【在客户端部署缓存服务器】,就能够减少对 Web 服务器的访问【因为缓存服务器中有资源,就能减少通过互联网中的拥塞点】

[!quote] 透明代理

透明代理 就是把透明代理服务器放在浏览器到 Web 服务器的必经之路上,当消息经过时进行拦截【如果请求消息有多条路径可以到达 Web 服务器,那么就必须在这些路径上都放置透明代理,因此一般是将网络设计成只有一条路可以走的结构,然后在这一条路径上放置透明代理

透明代理不需要设置在浏览器中,所以浏览器还是照常向 Web 服务器发送请求消息 必经之路可以是连接互联网的接入网,当用户发送一个网络请求时,请求首先到达透明代理服务器,透明代理服务器会检查请求内容,并根据规则判断是将请求转发到目标服务器,还是直接从缓存中返回响应

  • 常用于缓存
  • 网络访问控制
  • 安全策略实施

==透明代理结合了正向代理和反向代理的优点==,用户不会察觉到代理的存在,也不会注意到 HTTP 消息是如何被转发的,所以叫“透明代理”

如何找到最近的缓存服务器【两种办法】 在使用内容分发服务时,一个网站的资源可能分布在多台缓存服务器上 !\[\[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=xYtR9l01]]

用 DNS 服务器来分配访问

  1. 首先,需要事先从缓存服务器部署地点的路由器收集路由信息【例如,有 4 台缓存服务器,在这 4 台服务器的部署地点又分别有 4 台路由器,则我们需要分别获取这 4 台路由器的路由表,并将 4 张路由表集中到服务器端 DNS 服务器上】
  2. 接下来,服务器端 DNS 服务器根据路由表和客户端 DNS 服务器发送过来的查询消息【客户端要查询服务器端的 IP 地址,所以客户端的 DNS 服务器发送查询消息给服务器端的 DNS 服务器】,大致判断路径信息 ![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=TOPpuXFp|900]]

通过重定向服务器分配访问目标

HTTP 规格中有一个 Location字段。它的意思是“您要访问的数据在另一台服务器上,请访问那台服务器吧”,这种将客户端访问引导到另一台 Web 服务器的操作称为 重定向

  1. 首先,在 DNS 服务器上注册重定向服务器【客户端会将 HTTP 请求消息发送到重定向服务器上】
  2. 重定向服务器收集来自各个路由器的路由信息,并根据这些信息找到最近的缓存服务器,然后将最近的缓存服务器的地址放到 Location字段 中返回响应【这样,客户端就会重新去访问指定的缓存服务器】

特点

  • 开销比较大【增加了 HTTP 消息的交互次数】
  • 精度较高【因为是根据客户端发送来的 HTTP 消息的发送方 IP 地址来估算距离的,而不是客户端的 DNS 服务器】
  • 如果重定向服务器离客户端很远,那就得不偿失了

服务器程序的结构

一对一

一般一个客户端对应一个新的服务器程序,因为服务器需要同时和多个客户端通信,但一个程序来处理多个客户端的请求是很难的

防火墙

防火墙是一种抵御外部网络攻击的机制,它只允许发往指定服务器的指定应用程序的网络包通过

如何实现防火墙

防火墙如何才能从这些包中分辨出哪些可以通过,哪些不能通过呢?

人们设计了多种方式 【防火墙可分为包过滤、应用层网关、电路层网关】,但出于性能、价格、易用性等因素,最为普及的是 包过滤方式

包过滤的规则

[!example] 假设我们的网络将开放给外网的 Web 服务器和公司内网分开部署,Web 服务器所在的网络可以从外网直接访问。现在我们希望允许从互联网访问 Web 服务器 ①,但禁止 Web 服务器访问互联网 ②【为了避免一些寄生在 Web 服务器中感染其他服务器的恶意软件,如果阻止 Web 服务器访问互联网,就可以防止其他服务器被感染】

  • 包从互联网流向 Web 服务器,从互联网发送过来的包其起点是不确定的,但终点是确定的。因此,我们可以允许起点为任意,终点为 Web 服务器的包通过【表中第 1 行】
  • 从互联网发往 Web 服务器的包通过防火墙之后,Web 服务器需要通过确认应答机制通知发送方数据已经正常收到,这需要 Web 服务器向互联网发送包。在 Web 服务器发往互联网的包中,我们可以将起点为 Web 服务器地址的包设置为允许通过【表中第 3 行】

![[Excalidraw/计算机/四大件/计算机网络 Draw.md#^group=0pE3Dhoi]]

通过端口号限定应用程序

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

因此,我们最好是阻止除必需服务以外的所有应用程序的包【可以在判断条件中加上 TCP 头部/UDP 头部中的端口号。Web 服务器的端口号为 80,因此我们在刚才的接收方 IP 地址和发送方 IP 地址的基础上再加上 80 端口作为条件就可以了】

通过控制位判断连接方向

TCP 在执行连接操作时需要收发 3 个包,第一个包的 TCP 控制位中 SYN 为 1,ACK 为 0【其他的包中这些值都不同】 如果这第一个包是从 Web 服务器发往互联网的,那么我们就阻止它【表中第 2 行】。所以只要以 Web 服务器为起点访问互联网,其连接操作必然会失败。

实际上也存在无法将希望允许和阻止的访问完全区分开的情况 比如对于所有使用 UDP 协议的应用程序【DNS 查询使用的是 UDP 协议,而 UDP 没有连接操作,因此无法根据控制位来判断访问方向。所以,我们无法只允许公司内部访问互联网上的 DNS 服务器,而阻止从互联网访问公司内部的服务器】

[!faq] 如何设置公司内网和互联网之间,或者公司内网与公开区域之间的包过滤规则 我们可以将接收方为公开区域的包设置成全部允许通过,并限定发送方只能为公司内网

[!faq] 如何实现外部无法访问公司内网 防火墙中具备 地址转换功能【互联网和公司内网之间的包需要进行地址转换才能传输】

由于使用地址转换,默认状态下是无法从互联网访问公司内网的【表中还没有对应的记录】,因此我们不需要再设置一条包过滤规则来阻止从互联网访问公司内网。

包过滤只是路由器的包转发功能的附加功能 包过滤并不是防火墙专用的一种特殊机制,只不过当判断规则比较复杂时,通过路由器的命令难以维护这些规则,而且对阻止的包进行记录对于路由器来说负担也比较大,因此才出现了专用的硬件和软件。

如果规则不复杂,也不需要记录日志,那么可以用内置包过滤功能的普通路由器来充当防火墙

防火墙无法抵御的攻击

防火墙 无法抵御未知的风险【当服务器程序中有潜在的 Bug 未被发现时】

防火墙不关心包中的数据,所以如果有一个包可以导致 Web 服务器死机【由于 Web 服务器程序有 Bug】,防火墙也无法发现,那么,当包到达 Web 服务器时,就会导致死机。

解决办法

  • 修复 Bug
  • 在防火墙之外部署用来检查包内容的设备或软件【但其实和第一种是一样的,因为我只有知道 Bug 是什么,我才能设置检查的规则】

现在已经出现了很多可以绕过防火墙的攻击方法 因此防火墙一般需要和反病毒、非法入侵检测、访问隔离等机制并用

[^1]: 有些运营商不使用 PPP,而是使用 DHCP [^2]: 这里的 BAS 是运营商端的 [^3]: 远程访问服务器