《网络是怎样连接的》(五)

本文主要取材于  《网络是怎样连接的》 第五章。

目录

5.1 Web服务器的部署地点 

 5.2 防火墙的结构和原理

5.3服务器负载平衡 

5.4 使用缓存服务器分担负载

5.5 内容分发服务


简述:本文主要内容是解释 网络包如何朝服务器前进,并通过服务器前面的防火墙、缓存服务器、负载均衡器等。

  • 为了保护服务器免受攻击,一般会在服务器前面部署防火墙,包过滤方式的防火墙可根据接收方IP地址、发送方IP地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包通过。不过这种无法检查包内数据的威胁。
  • 单个服务器无法承载过多的访问量,因此需要分布式架构即多个服务器来分担流量,此时需要一个机制来分配客户端的请求。可通过DNS或者负载均衡器方式来分配请求。
  • 缓存服务器通过缓存一些数据同样可以分担流量,但是Web运营者弄缓存服务器的代价高。
  • 厂商来部署缓存服务器,并租借给Web服务器运营者,称为内容分发服务。部署好缓存服务器后最重要的是如何分配用户请求(一般要选择离客户端最近的服务器),因此如何判断客户端 到各个缓存服务器的距离很重要,有DNS扩展或者重定向等方法。另外,还需要及时更新缓存服务器保证数据的同步。

5.1 Web服务器的部署地点 

如果客户端都可以直接访问服务器,那么服务器相当于在裸奔,容易受到攻击;防火墙可以先检查包,再转发包。

Web服务器既可以部署在公司内部,如下图(a)和(b),也可以部署在运营商的数据中心如(c)。数据中心是与运营商核心部分NOC直接连接的,或者是与运营商之间的枢纽IX直接连接的,可以提高访问速度。

 5.2 防火墙的结构和原理

防火墙的基本思路是只允许发往特定服务器中的特定应用程序的包通过,然后屏蔽其他的包。

但是如何设置包过滤规则呢?

IP过滤:可以先根据接收方和发送方地址判断包的流向,并设置是允许还是阻止。

通过端口过滤应用程序包:要限定某个应用程序时,可以在判断条件中加上TCP头部或者UDP头部中的端口号。当包的接收方IP地址为Web服务器地址,且接收方端口号为80时,允许这些包通过(图5.2中表的第1行);或者当包的发送方IP地址为Web服务器地址,且发送方端口号为80时,允许这些包通过(图5.2中的表的第3行)。

通过控制位判断连接方向:TCP在执行连接操作时需要收发3个包,其中第一个包的TCP控制位中SYN为1,而ACK为0。其他的包中这些值都不同,因此只要按照这个规则就能够过滤到TCP连接的第一个包。如果这第一个包是从Web服务器发往互联网的,那么我们就阻止它(图5.2表中的第2行)。这样设置之后,当然也不会收到对方返回的第二个响应包,TCP连接操作就失败了。

公司内网访问公开区域:我们不仅要设置互联网和公开区域之间的包过滤规则,还需要设置公司内网和互联网之间,或者公司内网与公开区域之间的包过滤规则

包过滤方式的防火墙不仅可以允许或者阻止网络包的通过,还具备地址转换功能。当使用地址转换时,默认状态下是无法从互联网访问公司内网的。

包过滤方式的防火墙可根据接收方IP地址、发送方IP地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包通过。

防火墙可以根据包的起点和终点来判断是否允许包通过,但这样并不能筛选出所有有风险的包。如包中包中含有特定数据,会使服务器宕机。应对方式有两种:一是修复Bug防止宕机;二是在防火墙之外部署用来检查包的内容并阻止有害包的设备或软件。

5.3服务器负载平衡 

当很多用户同时访问时,无论服务器的性能再好,仅靠一台服务器还是难以胜任的。在这种情况下,使用多台服务器来分担负载的方法更有效,这种成为分布式架构。若部署多个服务器,从而减轻每个服务器的访问量,需要一套机制将客户端发送的请求分配到每台服务器上。

1.通过DNS服务器来分配。当访问服务器时,客户端需要先向DNS服务器查询服务器的IP地址,如果在DNS服务器中填写多个名称相同的记录,则每次查询时DNS服务器都会按顺序返回不同的IP地址。

缺点是:若一台Web服务器出现了故障,这时希望在返回IP地址时能够跳过故障的Web服务器,然而普通的DNS服务器并不能确认Web服务器是否正常工作。

此外,轮询分配还可能会引发一些问题。在通过CGI等方式动态生成网页的情况下,有些操作是要跨多个页面的,如果这期间访问的服务器发生了变化,这个操作就可能无法继续。

2.使用负载均衡器。首先要用负载均衡器的IP地址代替Web服务器的实际地址注册到DNS服务器上,假设有一个域名www.lab.glasscom.com,我们将这个域名对应的IP地址设置为负载均衡器的IP地址并注册到DNS服务器上。于是,客户端会认为负载均衡器就是一台Web服务器,并向其发送请求,然后由负载均衡器来判断将请求转发给哪台Web服务器.

 负载均衡器可以定期采集Web服务器的CPU、内存使用率,并根据这些数据判断服务器的负载状况,也可以向Web服务器发送测试包,根据响应所需的时间来判断负载状况。

对于有关联性的请求,可以在发送表单数据时在里面加上用来表示关联的信息。或者对HTTP规格进行扩展,在HTTP头部字段中加上用来判断相关性的信息。这样,负载均衡器就可以通过这些信息来作出判断,将一系列相关的请求发送到同一台Web服务器,对于不相关的请求则发送到负载较低的服务器了。

5.4 缓存服务器分担负载

将整个系统按功能分成不同的服务器,如Web服务器、数据库服务器。缓存服务器就是一种按功能来分担负载的方法。

缓存服务器是一台通过代理机制对数据进行缓存的服务器。代理介于Web服务器和客户端之间,具有对Web服务器访问进行中转的功能。当进行中转时,它可以将Web服务器返回的数据保存在磁盘中,并可以代替Web服务器将磁盘中的数据返回给客户端。这种保存的数据称为缓存,缓存服务器指的也就是这样的功能。不过Web服务器更新了数据,会造成缓存不可用。

 正向代理,反向代理和透明代理不详细讲。

5.5 内容分发服务

缓存服务器放在放在服务器之前,易于管理但是无法减少网络流量;放在客户端,可减少网络流量但是无法管理;放在网络边缘可以达到均衡。

 一些厂商来部署缓存服务器,并租借给Web服务器运营者。这种服务称为内容分发服务。提供这种服务的厂商称为CDSP(content delivery service provider), 缓存服务器可以缓存多个网站的数据,因此CDSP的缓存服务器就可以提供给多个Web服务器的运营者共享,从而降低了成本。

在使用内容分发服务时,互联网中有很多缓存服务器,如何才能从这些服务器中找到离客户端最近的一个,并让客户端去访问那台服务器呢?

对DNS服务器进行扩展:作为准备,需要事先从缓存服务器部署地点的路由器收集路由信息(图5.13)。DNS服务器根据路由表查询从本机到DNS查询消息的发送方,也就是客户端DNS服务器的路由信息。例如,根据图5.13路由器A的路由表,可以查出路由器A到客户端DNS服务器的路由。通过互联网内部的路由表中的路由信息可以知道先通过运营商X,然后通过运营商Y,最后到达运营商Z这样的信息,通过这样的信息可以大致估算出距离。依次查询所有路由器的路由表之后,我们就可以通过比较找出哪一台路由器距离客户端DNS服务器最近。提供路由表的路由器位于缓存服务器的位置,而客户端DNS服务器也应该和客户端在同一位置,这样就等于估算出了缓存服务器与客户端之间的距离,从而能够判断出哪台缓存服务器距离客户端最近了。

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

HTTP规格中定义了很多头部字段,其中有一个叫作Location的字段。当Web服务器数据转移到其他服务器时可以使用这个字段,它的意思是“您要访问的数据在另一台服务器上,请访问那台服务器吧。”这种将客户端访问引导到另一台Web服务器的操作称为重定向,通过这种方法也可以将访问目标分配到最近的缓存服务器。

对DNS服务器进行扩展的方法是估算客户端DNS服务器到缓存服务器之间的距离,因此精度较差;相对而言,重定向的方法是根据客户端发送来的HTTP消息的发送方IP地址来估算距离的,因此精度较高。

缓存的更新方法:

让Web服务器在原始数据发生更新时,立即通知缓存服务器,使得缓存服务器上的数据一直保持最新状态,这样就不需要每次确认原始数据是否有变化了,而且从第一次访问就可以发挥缓存的效果。内容分发服务采用的缓存服务器就具备这样的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/87050.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat10安装及配置教程win11

Tomcat10安装及配置教程win11 Tomcat下载链接 Tomcat官网 Tomcat官网地址 https://tomcat.apache.org/ Tomcat的版本列表 点击上图中左侧红框内**Which version?**即可得下图 下载Tomcat 点击上图中左侧红框内红框内tomcat版本即可得下图,下载zip包 解压zip包…

在日本做程序员能攒到钱吗?

如果你就是无欲无求,和人合租,自己做饭,不买高级食材,没有业余爱好,那我可以肯定告诉你一定能攒下钱,问题你是吗?能不能攒下钱丰俭由人,拿的少也有人能攒下钱,拿的多的也…

HTTP 框架修炼之道 | 青训营

Powered by:NEFU AB-IN 文章目录 HTTP 框架修炼之道 | 青训营 走进 HTTP 协议HTTP 框架的设计与实现应用层中间件层路由设计协议层 传输层(网络层)1. BIO(Blocking I/O):2. NIO(Non-blocking I/O):区别&…

信息系统工程监理-前导课

文章目录 第一章 软件工程概述与过程模型1.1 软件的概念与特点1.2 软件危机的产生1.3 软件工程知识体系1.4 软件过程模型和能力成熟度模型概念1.5 传统模型,现代模型,选择过程模型 第二章 需求分析 & 系统设计2.1 需求分析概述2.2 面相过程的分析方法…

Spring Boot进阶(60):5种判断线程池任务是否全部完成的方案 | 实用技巧分享!

1. 前言🔥 多线程编程在现代软件开发中非常常见且重要,而线程池是多线程编程的常用技术。在使用线程池时,通常需要判断线程池中的任务是否全部完成,以便决定程序继续执行的下一步操作。本文将介绍5种判断线程池任务是否全部完成的…

Python爬虫追踪新闻事件发展进程及舆论反映

目录 实现方案 1. 确定目标新闻源: 2. 确定关键词: 3. 使用网络爬虫获取新闻内容: 4. 提取和分析新闻文章: 5. 追踪新闻事件的发展进程: 6. 监测舆论反映: 7. 数据可视化: 完整代码示例…

【VRTK4.0运动专题】轴移动AxisMove(真实身体的移动)

文章目录 1、概览2、释义3、属性设置 1、概览 2、释义 “竖直轴”控制的行为“水平轴”控制的行为1Vertical-Slide 滑动Horizontal-Slide 滑动2Vertical-Slide 滑动Horizontal-SmoothRotate 转动3Vertical-Slide 滑动Horizontal-SnapRotate 转动(不连续&#xff09…

springboot服务注册到Eureka,端口总是默认8080,自己配置端口不生效

这段时间接手了一个公司的老项目,用的是SpringCloud,在我用的时候突然发现有一个服务,注册到Eureka后,界面显示的端口和实际Ribbon调用的实例端口是不一致的,后来我自己写了个端口获取了一下所有的实例信息&#xff0c…

Mybatis与Spring集成

目录 一.Spring整合Mybatis 1.什么是Spring整合Mybatis 新建一个ssm ​编辑 导入pom依赖 导入generatorConfig.xml 导入Spring-context.xml文件 导入Spring-mybatis.xml文件 自动生成Bookmapper.xml和Bookmapper文件 编写接口类:Bookbiz 编写接口实现类 …

13、Vue3 大事件管理系统

一、大事件项目介绍 和 创建 1.1 Vue3 大事件管理系统 在线演示: https://fe-bigevent-web.itheima.net/login 接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 基地址: http://big-event-vue-api-t.i…

基于数据湖的多流拼接方案-HUDI实操篇

目录 一、前情提要 二、代码Demo (一)多写问题 (二)如果要两个流写一个表,这种情况怎么处理? (三)测试结果 三、后序 一、前情提要 基于数据湖对两条实时流进行拼接&#xff0…

优化时间流:区间调度问题的探索与解决

在浩如烟海的信息时代,时间的有效管理成为了一门不可或缺的艺术。无论是生活中的琐事,还是工作中的任务,时间都在无声地流逝,挑战着我们的智慧。正如时间在日常生活中具有的宝贵价值一样,在计算机科学领域,…