整体一般流程如下图,但这只是基本的流程,可能会在此基础上根据公司/项目架构需要来新增一些设备。下面一一来解释下这个流程以及每个环节设备的作用。
客户端
首先客户端在浏览器输入url,然后协议栈使用udp协议向DNS服务器发送查询请求,这里分两种情况,一个是返回内容分发网络CDN服务器的IP,另一种是返回了负载均衡器的IP地址。
那么对于第一种,返回CDN的IP后,浏览器就向CDN服务器发送请求,然后CDN返回响应。
弹性IP/NAT网关
弹性IP其实就是暴露在公网上的IP,这是需要公司和运营商合作购买的,之所以需要弹性IP是为了解决IPv4地址不足的问题,大家可以看看这篇文章IPv4 地址枯竭多年,IPv6 何时才能全面接棒?
这个弹性IP会绑到公司的NAT网关,NAT网关就是负责进行地址转换,就是将公网的IP转换成了公司内网的IP。之所以要做这个事情的原因上面那篇文章中有详细描述,一个是为了安全,但最重要的是解决IPv4地址枯竭的问题。
负载均衡
负载均衡器就是为了提高系统的并行扩展能力,一般在公司的架构中会提供两个厂商的负载均衡,也是出于安全考虑。负载均衡器会按照指定的负载均衡算法将流量分配到指定的后端服务集群上,同时一些负载均衡服务还会主动检查故障的服务节点,会自动化将流量转发给健康的节点。
防火墙
防火墙就是隔离外网与内网之间网络请求的,当然也不只是用来访问外网与内网,任何公司想要隔离开两个区域的网络时都可以使用防火墙,只要设置合适的防火墙策略(也就是防火墙规则),这里有一个区域的概念叫做DMZ、DCN,DMZ就是外网区域,DCN指的是内网区域。
NGINX
这里其实不是那么通用,因为NGINX一般都是前端在用,但因为我是前端,所以加一个这个在图中,NGINX有许多作用,比如对请求进行转发等,这是对NGINX使用得最多的地方,但是NGINX还有很多功能,感觉对这块知识学得比较浅,之后可以学一下。
后端服务集群
这块就是后端集群服务器,目前的运维都是用K8S和Docker来管理集群,对这块也了解比较少,之后学习一下。
这就是一般的外网连通内网的流程图。一般在排查自己系统的网络问题时,就需要了解自己系统的整个链路,然后根据问题来排查。比如如果是跨域问题,那么首先去排查服务器有没有配置跨域,如果配置了,但是我们的响应中没有Access-Control-Allow-Origin,那么就去排查是否整个网络链路中在某个环节转发网络包时把一些字段弄丢了,这个是我们之前在实际中遇到过的,安全网关把Access-Control-Allow-Origin字段搞丢了,换了个安全网关就可以了。
图1