base64 放在了 url 上引发了问题。
- base64 是一种编码方式,不是加密方式
- 不是 urlsafe 的
- 会增长约1/3
base64 编码方式
- 用官方的话解释说:“基于64个可打印字符来表示二进制数据”。
- 可打印 即是用来将一些不可打印的数据转换成可打印(可输出显示)的数据。
- 一般来说,这64个字符是
A-Za-z0-9
再加上+/
。 -
=
是用于标记补位。由于最后可能不足 6bit,所以会补\x00
,后面再用等号标记。 - 由于
+/
的存在,即不是 urlsafe 的。因为 url 在传输过程中会将+
和/
分别编码成%2B
和%2F
。 - base64 衍生出了许多变种,如将
+/
改成了-_
等,就变成了 urlsafe 的了。 - Base64 将原来的 8bit 字符,按每 6bit 分割再高位补 0 成 8bit,因此编码后要比原来长1/3。
- 总结一下,base64 主要是用于做展示二进制数据用的,不是用来做数据传输的,也不是用来加密的。
常见网络错误
- OSI 七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
- 网络层:IP、ICMP,负责数据报路由
- 传输层:TCP、UDP。TCP面向连接的,提供可靠传输,所以会有连接错误的error
- 会话层:SSL/TLS(1.0, 1.1 不够安全,现在主流 1.2)
- 应用层:DNS,HTTP(S),FTP,SSH,Telnet...
DNS 讲解
- HTTP访问一个域名,要先访问一下 DNS 服务器,解析为IP地址。
- 在 k8s 中访问 k8s 服务的链路:k8s Pod -> iptables -> kube-coredns Pod
- k8s 中访问外网服务的链路:k8s Pod -> iptables -> kube-coredns Pod -> 云 nameserver -> DNS 的递归或迭代查询(一定要看)
HTTP 请求路径
静态文件
- CDN 节点(分布式)-> OSS (不持久化会回源)
- CDN -> OSS -> SLB -> k8s Ingress Controller -> k8s Pod(portal-frontend, h5v1 源代码是没有上传到容器的)
- OSS 是存放 CDN 文件的服务器,回源也会到这
:::
k8s Ingress Controller 是一个具有反向代理功能的控制器,它作为代理和其他服务 Pod 部署在同一网络中,把请求分发到对应的服务器上。
:::
动态资源
- [WAF ->] SLB -> k8s Ingress Controller -> k8s Pod(公网)
- k8s Pod -> iptables -> k8s Pod (内网)
- 尽量走内网
- 延迟少
- 出错的概率小
- 不会产生流量费用
TCP 常见错误
- connection refused ()
- 目标服务未启动或未监听端口
- 防火墙拦截(网络层、传输层的防火墙,如一些IP限制的会有此问题,拦截后会明确回应不接受)
- connect timed out (连接超时,没有明确拒绝)
- 目标服务压力过大,处理不来
- 防火墙拦截(有些防火墙拦截下来但不给你任何回应)
- ISP 网络异常(网速慢)
- read/write timedout/error
- 一端过早超时
- ISP 网络异常(网速慢)
DNS 常见错误
DNS 的作用就是用 domain 换取 IP 地址
- Could not resolve host: xxx
- 域名确实不存在(检查域名)
- nameserver 不响应、超时(过载)、过期(新改的域名没同步)
- (nameserver 在 linux 上就是 /etc/resolv.conf)
- 可能 nameserver 配错了,检查一下配置
- 可能 k8s kube-coredns 异常
- 阿里云异常(在阿里云中有问题,阿里云外没问题)
- ISP 异常
- DNS 服务商异常
HTTP 常见错误
- 302 (临时重定向)
- WAF 在做 CC 防护的时候拦截掉了
- 代码正常行为
- 405 (Method Not Allowed)
- WAF WEB 应用防护拦截
- 代码行为(常见到的是 method 写错)
- 499 (Client Closed Request,客户端先关闭了此连接)
- 客户端超时时,nginx 会记录此状态
- 502 (Bad gateway,网关挂了)
- SLB 后端(k8s Ingress Controller)异常
- 503(Service unavailable)
- SLB 无可用后端(k8s Ingress Controller)
- k8s Ingress Controller 无可用 Pod
- 代码行为
- 504(Gateway timeout,网关超时)
- 上游超时,不能从上游获得响应
(看一下网关是什么作用,为什么会出现上面两种 gateway 的错误)
:::
网关是用于两种不同协议间的互连,它一般是一个计算机系统或设备。所以出了错误时要找这个设备的问题。 k8s 中应该就是 k8s Ingress Controller
:::
HTTPS 常见错误
- 客户端不支持 SNI 而无法匹配证书
- 不支持 TLS 1.2 而无法建立连接
网友评论