网络与部署 | 豆包MarsCode AI刷题

192 阅读7分钟

01、接入问题

经典问题:浏览器URL 输入网站域名 www.toutiao.com 到网页加载出来,都经历了哪些过程?`

  1. 域名解析
  2. HTTP请求
  3. TCP连接
  4. SSL握手
  5. ......

字节接入框架:

image-20241112104753510.png

02、企业接入升级打怪之路

2.1、使用域名系统

2.1.1、Host管理

最开始,example公司采用Host管理,如下:

image-20241112114616969.png

面临的问题:

  • 流量和负载:用户规模指数级增长,文件大小越来越大,统一分发引起较大的网络流量和负载。
  • 名称冲突:无法保证主机名称的唯一性
  • 时效性:分发靠人工上传,时效性太差

2.1.2、使用域名系统

域名结构

image-20241112114750646.png

DNS 记录类型:

类型含义
A/AAAAIP指向记录,前者用于IPv4记录,后者为IPv6
CNAME别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取IP地址
TXT文本记录,购买证书时需要
MX邮件交换记录,用于指向邮件交换服务器
NS解析服务器记录,用于指定哪台服务器对于该域名解析
SOA起始授权机构记录,每个zone有且仅有唯一的一条SOA记录,SOA是描述zone属性以及主要权威服务器的记录

如何建设外部网站,提升公司外部影响力?

方案: 租赁一个外网 IP,专用于外部用户访问门户网站,将 www.example.com 解析到外网 ip100.1.2.3,将该 ip 绑定到一台物理机上,并发布公网 route,用于外部用户访问。

image-20241112114915175.png

比如说要访问www.example.com ,会先向云厂商DNS服务器获取域名对应的IP地址,然后访问IP地址。

进阶,公司构建自己的权威DNS服务器,能够更快。

image-20241112150805459.png

2.3 HTTPS协议

解决HTTP明文传输

常见加密算法:对称加密、非对称加密

对称加密

客户端会向服务器发送==密钥==,然后对发送的数据进行加密,将加密后的数据发送给服务器,服务器收到之后根据==密钥==进行解析。

image-20241112150900689.png

存在的问题:发送的==密钥==可能被劫持,然后破解。

非对称加密

加密与解密使用不同的==密钥==,分别成为==公钥、私钥==。服务器将公钥发送给客户端,客户端根据公钥对数据进行加密,然后发送给服务器,服务器根据公钥对应的私钥进行解析,这样就不会泄露密钥了。

image-20241112150919029.png

SSL通信过程

image-20241112150941861.png

上面流程中,客户端有一个验证公钥的过程:

  • 是否是可信机构颁布的
  • 域名是否与实际访问一致
  • 检查数字签名是否一致
  • 检查证书的有效期
  • 检查证书的撤回状态。

防止伪造公钥,窃取数据。

2.4、全站加速

外网用户访问站点的时候,一定是一帆风顺嘛?可能出现的问题有哪些?

image-20241112151032835.png

  • 源站容量低,可承载的并发请求数低,容易被打垮
  • 报文经过的网络设备越多,出问题的概率越大,丢包、劫持、mtu问题
  • 自主选路网络链路长,时延高

当前网络加速的实现方案和加速产品努力的方向都是:

  • 尽可能把服务器放在离用户物理距离近的地方
  • 把长距离公网传输改成稳定的内网传输。

关键概念

内容参考

静态CDN服务

​ CDN(Content Delivery Network)内容分发网络,将网站内容发布到最接近用户的边缘节点,使网民可就近取得所需的内容,有效解决互联网网络拥塞状况,提高网民访问的响应速度和成功率。 静态CDN服务以图片、页面、JS、CSS、大文件安装包等静态文件加速为主。

​ 主要原理是通过在现有的Internet中增加一层新的网络架构,将网站内容发布到最接近用户的Cache服务器内,通过DNS负载均衡的技术,判断用户来源,就近访问Cache服务器取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度,如同提供了多个分布在各地的加速器,以达到快速、可冗余的为多个网站加速的目的。

image-20241112152141101.png

动态CDN

所谓的动态CDN,是指用户在请求一些动态内容时,如网站中.asp, .jsp, .php, API等,不直接请求源站,而是由基于地理位置的DNS调度,请求最靠近用户的云服务节点,再由云服务节点通过优化过的传输网络,转发请求到源站,达到优化和加速的目的,当然,这其中有很多其他的传输层面的优化,比如说访问链路优化、传输内容压缩合并、智能选路、链路复用等技术。

![](D:\UserData\sichenyong\bytetech\网络与部署.assets\bandicam 2024-11-12 15-27-06-345.gif)

看下图:

image-20241112152930755.png

假设用户在西部地区,他要访问某个API接口,会先找到青海的边缘节点,由边缘节点经过路径优化找到汇聚节点,再找到核心机房。

我们可以看到,静态加速和动态加速,都依赖基于地理位置的DNS服务,这类服务,能够根据用户的地理位置,返回最优的接入IP,我们称之为==GeoDNS==

  1. 源站容量问题:增加后端机器扩容;静态内容,使用静态加速缓存。
  2. 网络传输问题: 动态加速 DCDN

全站加速: 静态加速 + 动态加速

​ 当前腾讯、阿里和AWS的都支持动静态内容混合加速,即静态内容直接由边缘节点(静态CDN)返回,动态请求走内网代理转发到源站。AWS更是把动静态加速直接合并为一个服务Amazon CloudFront,统一计费。

bandicam 2024-11-12 15-27-06-345.gif

image-20241112154229540.png

使用全站加速:

image-20241112162010250.png

2.5、四层负载均衡

四层是基于7层网络模型的,达到传输层。

什么是4层负载均衡?

基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡的落地到后端服务器中。

三个主要功能:

  • 解耦VIP(Virtual IP),虚拟IP和RS(Real Server)真实服务器
  • NAT
  • 防攻击

image-20241112161015894.png

访问的时候,通过虚拟IP,通过某种调度算法定位到一个后端服务器。

常见调度算法:

RR轮询

Round Robin,将所有的请求平均分配给每个真实服务器RS

加权RR轮询

给每个后端服务器一个权值比例,将请求按照比例分配。

最小连接

把新的连接请求分配到当前连接数最小的服务器。

五元组Hash

根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模。

缺点:当后端某个服务器故障后,所有连接都重新计算,影响整个 hash 环

一致性hash

只影响故障服务器上的连接Session,其余服务器上的连接不受影响。

常见实现方式:FULLNAT

image-20241112161353054.png

流程:

  1. Client -> GW:用户请求通过外网核心设备,到达GW。 CIPClient IP
  2. GW->RS:请求到达GW之后,IP地址会发生变化,变成LIP,然后到达真实的服务器上
  3. 一步步返回。

问题:RS怎么知道真实的CIP?

GW->RS阶段通过TCP的option字段传递,后面再反解出来。

四层负载均衡的特点:

  • 纯用户态协议栈
  • 无缓存,零拷贝,大页内存
  • 仅针对四层数据包转发。

image-20241112161913354.png

2.6、七层负载均衡

四层负载均衡只能看到传输层,如果需要操作应用层协议呢? 比如说在Header中添加一个东西,这属于第七层相关的,因此四层就不够看了。

Nginx是应用最广的七层反向代理。

反向代理示意图:

image-20241112162157830.png

代理服务器功能:

  • KeepAlive
  • 访问日志
  • URL重写
  • 路径别名
  • 基于IP的用户的访问控制
  • 限速及并发连接数控制。
  • ...

image.png