第6课笔记:企业级网络接入核心组件及其基本原理|青训营

131 阅读8分钟

Class 6:企业级网络接入核心组件及其基本原理

经典问题:输入www.toutiao.com 到网页加载,经历了哪些过程?

  • 域名解析
  • TCP建连
  • SSL/TLS握手
  • HTTP请求

域名系统

  • Host管理, Host -> ip映射 问题:流量和负载较大,名称冲突,时效性

  • 域名系统:域名空间,

  1. 树形结构
  2. 划分zone进行分层授权管理
  3. 全球公共域名空间仅对应一棵树
  4. 根域名服务器:查询起点
  5. 域名组成格式:[a-zA-Z0-9_-],以点划分label,全球有13台根服务器
  6. 顶级域gTLD:general Top-Level Domains:gov政府,edu教育,com商业,mil军事,org非盈利组织
  • 域名购买与配置迁移:

火山引擎-域名服务:www.volcengine.com/product/dom…

购买二级域名:example.com,需要进行域名备案

修改配置:清空/etc/hosts

配置/etc/resolv.conf中nameservers为公共DNS迁移原配置,通过控制台添加解析记录即可

  • 如何开放外部用户访问

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

自建DNS服务器

  • DNS查询过程

网络客户端访问www.163.com 域名,会先访问本地DNS服务器,询问是否有对应的解析记录,若没有,会依次向根,顶级域,权威DNS寻求解析ip地址,获取后会缓存在本地DNS

dig {$domain} + trace

  • 常见DNS解析记录
  1. A/AAAA:IP指向记录,用于指向ip,前者为IPv4,后者为IPv6
  2. CNAME:别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取IP地址
  3. TXT:文本记录,购买证书时需要
  4. MX:邮件交换记录,用于指向邮件交换服务器
  5. NS:解析服务器记录,用于指定哪台服务器对于该域名解析
  6. SOA记录:起始授权机构记录,每个zone有且仅有唯一的一条SOA记录,SOA是描述zone属性以及主要权威服务器的记录 image.png
  • 企业需要哪种DNS服务器:权威DNS,LocalDNS(可选)

常见的开源DNS:bind、nsd、knot、coredns

DNS架构:DNS Query(请求), DNS Response(回应), DNS Update(更新), DNS Notify(通知), DNS XFR(发送更新请求)

  • 系统流程
  1. 解析域名的ip地址,首先向local DNS发送请求,
  2. local DNS再向自建DNS发送请求
  3. 得到ip地址100.1.2.3
  4. 用户访问100.1.2.3
  5. 将请求达到example公司的机房内部,从而获取ip地址请求的结果

接入HTTPS协议 - 解决HTTP明文传输的问题

对称加密:一份密钥

非对称加密:公钥和私钥

SSL/TSL的通信过程

知乎的一篇帖子: zhuanlan.zhihu.com/p/56663184

关于SSL/TSL通信过程的总结:对称加密速度快,但不安全,非对称加密慢,但安全,组合使用:使用非对称加密对称加密的密钥,而用对称加密信息。具体流程是:

  1. 客户端向服务器发起请求,提供对称加密的类型和一个随机数R1

  2. 接着服务端向客户端发送数字证书(第三方验证),选择一种加密算法,并生成随机数R2

  3. 客户端验证数字证书,用CA公钥解密,并对比摘要的哈希值,确认内容没有被篡改,生成随机数R3,并根据R1, R2, R3生成非对称加密的对称加密的密钥session key(公钥/私钥)

  4. 服务器根据R1, R2, R3生成非对称加密的对称加密的密钥(私钥/公钥)

  5. 加密会话

全站加速

  • 源站容量问题:增加后端机器扩容,静态内容使用静态加速CDN缓存
  • 网络传输问题:动态加速DCDN
  • 全站加速:静态加速+动态加速

动态加速原理:用户 - 边缘节点 - 汇聚节点 - 核心机房

RTT示例:

用户 - 核心:35 ms

用户 - 边缘:20 ms

边缘 - 汇聚:10 ms

汇聚 - 核心:10 ms

常规请求耗时计算:

DCDN:20(TCP) + 20*2(TLS) + 20 + 10 + 10 = 100 ms

直接:35(TCP) + 35*2(TLS) + 35 = 140 ms

节省140 - 100 = 40 ms

全站加速示例:

  1. 用户首次登陆抖音,注册信息 动态加速
  2. 抖音用户打开某个特定视频加载观看 静态加速
  3. 打开头条官网浏览 动态加速(用户登录)+静态加速(内容浏览)

接入全站加速之后,用户优先访问全站加速链路的DNS,接着向权威DNS请求,解析源站地址,解析后再请求获得外网ip,再经由优化线路返回给用户

Class 6-2:四层负载均衡

问题引入:在运营商处租用的公网IP在企业如何使用最合理

问题:直接用物理机,ifconfig将网卡配上这个ip,起客户端监听即可,但是发展到一定规模时,多个server监听导致端口较多,容易错乱,另外如果物理机坏掉所有服务都会崩盘,不方便做容灾

vip: virtual internet protocol, 虚拟互联网协议

rs: real server

NAT: Network Address Translation,网络地址转化

PDU: protocol data unit,协议数据单元

报文是网络中交换与传输的数据单元,即站点一次性要发送的数据块。 报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。 报文也是网络传输的单位,传输历程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据。

四层负载均衡是根据网络传输层(四层)定义的信息来决定如何在一组服务器之间分发客户端请求的。特别是对于互联网流量而言,四层负载均衡器根据数据包 HTTP 请求头中记录的源 IP 地址、目标 IP 地址和端口做出负载均衡决策,而不考虑数据包的内容。(路由决策)

网络层共分为七层,由开放式系统互联(OSI)参考模型定义。

四层表示基于IP+端口(第四层)实现负载均衡落到后端服务器 相对应的七层负载均衡是基于HTTP协议,在应用层实现负载均衡

  • 四层负载均衡的主要功能:解耦vip和rs(不局限于某一台物理机,而是灵活分配),NAT(不对请求做任何处理而直接移交后端),防攻击:syn proxy

  • 常见调度算法原理

RR轮询:Round Robin,将所有请求平均分配给每个真实服务器

加权RR轮询:给每个后端服务器按权重分配

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

五元组hash:根据网络的五大属性:sip(源ip)、sport(源port)、proto(协议)、dip(物理ip)、dport(物理port)对静态分配的服务器做散列取模。缺点是当某个服务器故障后,所有连接都需要重新计算,影响整个hash环

一致性hash:如果某台服务器断连,只影响该台服务器的连接,而整体hash不变,其余服务器不受影响

  • 常见的实现方式FULLNAT

segmentfault.com/a/119000003…

  • 四层负载均衡的特点

通过dpdk技术实现,技术成熟

纯用户态协议栈,kernel bypass, 消除协议栈瓶颈

无缓存,零拷贝,大页内存(减少cache miss)

仅针对四层数据包转发,小包转发可达限速,可承受高cps

七层负载均衡

问题引入:四层相关的配置需求如何处理

常见场景:

  • SSL卸载:业务侧是http服务,用户需要用http访问
  • 请求重定向:浏览器访问是toutiao.com,自动跳转www.toutiao.com
  • 路由添加匹配策略:完全、前缀、正则
  • Header编辑
  • 跨域支持
  • 协议支持:websocket、grpc、quic

Nginx:最灵活的高性能web server,应用最广的七层反向代理

特点:

  • 模块化设计,较好的扩展性和可靠性
  • 基于master/woeker架构设计
  • 支持热部署,可在线升级
  • 不停机更新配置文件、更换日志文件、更新服务器二进制
  • 较低的内存消耗:1万个keep-alive连接欧式下的非活动连接仅消耗2.5M内存
  • 事件驱动:异步非阻塞模型、支持aio、mmap(内存映射)

事件驱动模型:

将每个动作看作一个独立的事件,互相之间不影响,每个消息有独立的处理模块

示例

  • DNS搭建

获取域名的解析结果

dig @localhost -p 8053 ww.example.com

  • 四层负载均衡实验

开源的解决方案:LVS+keepalived (阿里云的CLB产品)

也可用Nginx stream模块,可进行四层协议TCP/UDP报文的转发和代理

  • 七层负载均衡
  • SSL自签证书实验

生成自签名证书后需要配置到本地的Nginx中

完成后打开网页前面就会加上小锁头,表示已认证

  • 如何将本地服务开放外网访问

工具:Ngrok,expose your localhost to the web

使用方法:github账户授权登录,详见dashboard.ngrok.com/get-started…

不支持自定义域名

将本地的8082端口的http流量暴露给外网

命令:./ngrok http example.com:8082

总结

image.png

范本:strikefreedom.top/