关于网络的基本知识:
为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC;
内网访问外网和外网访问内网的原理
代理
什么是代理?代理其实就相当于交易双方的中间商,当客户端想要与服务端进行“交易”时,代理就需要充当中间商的身份来完成这一次交易。
正向代理和反向代理
正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见;
而反向代理是代理服务器端,为服务器收发请求,使真实服务器对客户端不可见。
从用途上来区分:
- 正向代理:正向代理用途是为了在防火墙内的局域网提供访问internet的途径。另外还可以使用缓冲特性减少网络通信(同时也可以加快响应速度)
- 反向代理:反向代理的用途是将防火墙后面的服务器提供给internet用户访问。同时还可以完成诸如负载均衡等功能
从安全性来讲:
- 正向代理:正向代理允许客户端通过它访问任意网站并且隐蔽客户端自身,因此你必须采取安全措施来确保仅为经过授权的客户端提供服务
- 反向代理:对外是透明的,访问者并不知道自己访问的是代理。对访问者而言,他以为访问的就是原始服务器(可以隐藏服务的真实地址)
正向代理
当代理为客户端服务时,该代理就是正向代理。
比如:家里上网和VPN都是比较经典的例子
电脑联网会被分配私网IP,私网IP是内网分配的,我们通过电脑和手机去访问各种网络资源,实际上还是通过公网IP(电信运营商给我们分配的)去访问。
私网IP
使用如下命令查看电脑的私网IP
ipconfig
我们的电脑每次都会被分配一个私网IP,这个IP是动态分配的,用于内网通信所使用。
我断开无线网连接之后,重连,然后再次查看,私网IP已经重新分配,不过这都不妨碍我的电脑上网(反正最后都是代理给公网IP去帮我们访问网络资源,再返回资源给我们)
重新查看
ipconfig
公网IP
随便找个IP查询工具,或者百度就可以查到公网IP的地址
只有公网IP地址(网络运营商,移动,电信等给我们分配的地址)才能在整个互联网环境中进行网络通信,而私网IP地址只能在自己的局域网中进行网络通信。
正向代理结构图如下:
(图片来自于https://www.cnblogs.com/taostaryu/p/10547132.html)
当客户端想要请求服务端时,客户端会将请求代理给正向代理服务器,正向代理服务器接收到请求后,会主动去请求服务端,服务端接收请求后,会将响应数据返回给正向代理服务器,最后由正向代理服务器将服务端响应的数据转发给客户端。这样就实现了客户端与服务端的请求与响应。
正向代理的用途:
- 访问原来无法访问的资源,外国网站(这时候,多了一个正向代理VPN)
- 可以做缓存,加速访问资源,正向代理服务器可以缓存一些比较热的资源,当客户端请求这些热资源时,正向代理服务器就不需要再次请求服务端去获取资源了,只要取本地的缓存资源即可(可能存在缓存与服务端资源不一致的问题)
- 对客户端访问授权,上网进行认证(校园网学生认证)
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
- 限制访问资源(学校转钟之后会限制游戏视频等网站的访问,国内限制对国外某些网站的访问,所以需要再加一个正向代理VPN)
反向代理
当代理为服务端服务时,该代理就是反向代理。
反向代理实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理例子:
很多应用都需要一个反向代理服务器,比如高并发的场景下的应用。双十一剁手,短时间内请求太多,单机肯定应付不了,后面都是多台部署了相同业务的服务器集群来同时处理,就需要一个反向代理服务器来帮助他们做负载均衡,把工作平均分配给他们。
spring cloud 中的Zuul 就可以用来做反向代理服务。
反向代理的结构如下图。
(图片来自于https://www.cnblogs.com/taostaryu/p/10547132.html)
当客户端想要请求服务端时,客户端实际上请求的是反向代理服务器(服务端集群只需要暴露反向代理服务器即可),反向代理服务器接收到客户端的请求后,通过一定的策略,选择合适的服务端进行请求,服务端接收请求后,会将响应数据返回给反向代理服务器,最后由反向代理服务器将服务端响应的数据转发给客户端。这样就实现了客户端与服务端的请求与响应,而真正的服务端可以不暴露在外网环境下,保证了服务端的安全。
反向代理的作用:
- 保证各种服务在内网的安全,防止web攻击,通常将反向代理服务器作为公网访问地址,避免暴露服务的具体地址。比如您的内容服务器具有必须保持安全的敏感信息,如信用卡号数据库,可在防火墙外部设置一个代理服务器作为内容服务器的替身。当外部客户机尝试访问内容服务器时,会将其送到代理服务器。实际内容位于内容服务器上,在防火墙内部受到安全保护。代理服务器位于防火墙外部,在外部客户机看来就像是内容服务器。外部无法访问真正的内容服务器,因为防火墙只允许代理服务器有权进行访问。
- 负载均衡,反向代理服务器选择合适的服务进行请求(一系列负载均衡算法来保证各个服务器都不会太忙,均衡分配任务),实现流量的负载均衡。
- 限流,当流量实在过大时,机器无法负载的情况下,反向代理服务器可以限制一部分流量请求服务(让请求失败,降级等等)。
- 数据预处理,处理请求的数据,让服务端能够识别,以及在服务端的响应数据中添加或者删除一些数据等。
- 节约有限的IP资源。校园网内部服务器除使用教育网地址外,也会采用公网的IP地址对外提供服务,公网分配的IP地址数目是有限的,如果每个服务器有分配-个公网地址,那是不可能的,通过反向代理技术很好的解决了IP地址不足的问题
正向代理和反向代理都是代理,关键就在于代理是站那头的,给谁办事。
正向代理: 买票的黄牛 (在客户端这头,为客户服务)
反向代理: 租房的代理 (在提供租房服务的房东那头,帮房东服务)
注意:DNS域名解析服务器应该不算代理服务器,他一般是客户端访问域名,然后dns查询出对应的IP地址,然后返回给客户端,但是不会帮客户端去请求对应的服务端,因为如果都要DNS服务器去代理请求的话,那DNS可太累了,应该访问不过来。
下图为一个DNS的流程图(图来自一张图解决网关,DNS,代理服务器之间的关系)
References:
- https://www.cnblogs.com/taostaryu/p/10547132.html
- https://blog.csdn.net/qq_37960603/article/details/112299316?spm=1001.2014.3001.5501
- https://blog.csdn.net/hejun1218/article/details/72622083?locationNum=7&fps=1
- https://www.cnblogs.com/alex-xyl/p/11241135.html
- https://blog.csdn.net/hejun1218/article/details/72622083?locationNum=7&fps=1
- https://blog.csdn.net/weixin_44282540/article/details/117038047?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-2-117038047.pc_agg_new_rank&utm_term=dns%E4%BB%A3%E7%90%86%E5%92%8C%E4%B8%8D%E4%BB%A3%E7%90%86&spm=1000.2123.3001.4430
(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料和自己的实践,整理不易,但是难免有不足之处,如有错误,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)