Class 6:企业级网络接入核心组件及其基本原理
经典问题:输入www.toutiao.com 到网页加载,经历了哪些过程?
- 域名解析
- TCP建连
- SSL/TLS握手
- HTTP请求
域名系统
-
Host管理, Host -> ip映射 问题:流量和负载较大,名称冲突,时效性
-
域名系统:域名空间,
- 树形结构
- 划分zone进行分层授权管理
- 全球公共域名空间仅对应一棵树
- 根域名服务器:查询起点
- 域名组成格式:[a-zA-Z0-9_-],以点划分label,全球有13台根服务器
- 顶级域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解析记录
- A/AAAA:IP指向记录,用于指向ip,前者为IPv4,后者为IPv6
- CNAME:别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取IP地址
- TXT:文本记录,购买证书时需要
- MX:邮件交换记录,用于指向邮件交换服务器
- NS:解析服务器记录,用于指定哪台服务器对于该域名解析
- SOA记录:起始授权机构记录,每个zone有且仅有唯一的一条SOA记录,SOA是描述zone属性以及主要权威服务器的记录
- 企业需要哪种DNS服务器:权威DNS,LocalDNS(可选)
常见的开源DNS:bind、nsd、knot、coredns
DNS架构:DNS Query(请求), DNS Response(回应), DNS Update(更新), DNS Notify(通知), DNS XFR(发送更新请求)
- 系统流程
- 解析域名的ip地址,首先向local DNS发送请求,
- local DNS再向自建DNS发送请求
- 得到ip地址100.1.2.3
- 用户访问100.1.2.3
- 将请求达到example公司的机房内部,从而获取ip地址请求的结果
接入HTTPS协议 - 解决HTTP明文传输的问题
对称加密:一份密钥
非对称加密:公钥和私钥
SSL/TSL的通信过程
知乎的一篇帖子: zhuanlan.zhihu.com/p/56663184
关于SSL/TSL通信过程的总结:对称加密速度快,但不安全,非对称加密慢,但安全,组合使用:使用非对称加密对称加密的密钥,而用对称加密信息。具体流程是:
-
客户端向服务器发起请求,提供对称加密的类型和一个随机数R1
-
接着服务端向客户端发送数字证书(第三方验证),选择一种加密算法,并生成随机数R2
-
客户端验证数字证书,用CA公钥解密,并对比摘要的哈希值,确认内容没有被篡改,生成随机数R3,并根据R1, R2, R3生成非对称加密的对称加密的密钥session key(公钥/私钥)
-
服务器根据R1, R2, R3生成非对称加密的对称加密的密钥(私钥/公钥)
-
加密会话
全站加速
- 源站容量问题:增加后端机器扩容,静态内容使用静态加速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
全站加速示例:
- 用户首次登陆抖音,注册信息 动态加速
- 抖音用户打开某个特定视频加载观看 静态加速
- 打开头条官网浏览 动态加速(用户登录)+静态加速(内容浏览)
接入全站加速之后,用户优先访问全站加速链路的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
- 四层负载均衡的特点
通过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