看似一切到达服务器还比较顺利,顺利归顺利,但是我们的大部分项目中不得不考虑安全因素,不是什么数据包都可以随便进来,所以必须使用某种手段过滤掉一部分数据包,这就是防火墙。
不知道大家用过 Tcpdump、Wireshark 等工具没,它的过滤机制类似于防火墙的原理,那么为了实现过滤,我们就需要深刻了解各层协议的头部构造,只有熟悉其头部字段,才能在过滤表达式中施展魔法。
通过 IP 端口等过滤
比如常见明文协议 HTTP 使用的 80 端口,我们可以通过设置 IP 端口的方式限制其他数据包的通行。
设置控制位的方式
比如在TCP三次握手的时候会交换或者更新 ack syn 等信息,我们则可以通过设置相应位置来达到我们过滤的目的。
随着系统越来越牛逼,收益越来越好,老板跑来:“小伙计,用户反映请求后半天收不到消息诶”。岂不是废话么,系统做得好,跑路少不了,钱不到手,怎敢跑路,成,一顿性能测试猛如虎,哎呀,加个负载均衡试试?
负载均衡
随着用户访问量的剧增,单台服务器明显感觉到了压力,再这样下去用户可能直接要干我,同事小A牛逼啊,上来就是:"上性能高一点的服务器啊",小B也不赖:“多买几台服务器不就完事了?” 好,我们就听听小B的方案。
从曾经的一台服务器,增加到现在到五台服务器,相当于每台服务器分担1/5,这样压力自然小了很多,那问题来了,怎么才能将请求分散到各台服务器呢?哪都有哪些负载均衡的方案?
负载均衡服务器最初实现负载均衡采取的方案很直接,直接上硬件,当然也就比较贵,互联网的普及,和各位科学家的无私奉献,各个企业开始部署自己的方案,从而出现负载均衡服务器。
HTTP 重定向负载均衡
属于比较直接的,当 HTTP 请求到达负载均衡服务器后,使用一套负载均衡算法计算到后端服务器的地址,然后将新的地址给用户浏览器,浏览器收到重定向响应后发送请求到新的应用服务器从而实现负载均衡,如下图所示。
优点:
简单,如果是 java 开发工程师,只需要 servlet 中几句代码即可。
缺点:
加大请求的工作量。第一次请求给负载均衡服务器,第二次请求给应用服务器。
因为要先计算到应用服务器的 IP 地址,所以 IP 地址可能暴露在公网,既然暴露在了公网还有什么安全可言。
DNS 负载均衡
了解计算机网络的你应该很清楚如何获取 IP 地址,其中比较常见的就是 DNS 解析获取 IP 地址。用户通过浏览器发起 HTTP 请求的时候,DNS 通过对域名进行即系得到 IP 地址,用户委托协议栈的 IP 地址简历 HTTP 连接访问真正的服务器。这样不同的用户进行域名解析将会获取不同的 IP 地址从而实现负载均衡。