每日一篇——23秋招计算机网络面经(4)

60 阅读7分钟

每日一篇——23秋招计算机网络面经(4)

⭐http socket

TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket。现在我们知道,Socket跟TCP/IP并没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。

Socket长连接

所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接(心跳包),一般需要自己做在线维持。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。比如Http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。 通常的短连接操作步骤是: 连接→数据传输→关闭连接;

而长连接通常就是: 连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;

什么时候用长连接,短连接? 长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理 速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成Socket错误,而且频繁的Socket创建也是对资源的浪费。

以上内容来自[一篇搞懂tcp,http,socket,socket连接池之间的关系 - 知乎 (zhihu.com)]

⭐正向代理与反向代理

**正向代理(Forward Proxy)**是一种代理服务器的使用模式,它充当客户端和目标服务器之间的中间人,代替客户端发送请求,并将响应转发给客户端。正向代理隐藏了客户端的真实身份和位置,使得客户端可以通过它来访问互联网上的资源。

在正向代理模式下,客户端向代理服务器发送请求,并指定要访问的目标资源。代理服务器接收到请求后,会将请求再次发送给目标服务器,并将目标服务器的响应返回给客户端。客户端与目标服务器之间的通信经过代理服务器进行中转,目标服务器不知道客户端的存在,只知道请求来自于代理服务器。

正向代理的一些常见用途包括:

  1. 资源访问控制:正向代理可以用于访问受限资源,例如企业内部网络对公网资源的访问限制,通过代理服务器可以绕过限制进行访问。
  2. 提高访问速度和安全性:代理服务器可以缓存请求的资源,从而提高访问速度。此外,代理服务器还可以提供安全性功能,如过滤恶意网站,屏蔽广告等。
  3. 绕过网络限制:在某些网络环境下,可能存在特定网站或服务被屏蔽的情况,通过使用正向代理可以绕过这些限制,访问被屏蔽的资源。

需要注意的是,正向代理是由客户端发起的,代理服务器对目标服务器来说是透明的,目标服务器无法区分请求是来自原始客户端还是代理服务器转发的。

**反向代理(Reverse Proxy)**是一种代理服务器的使用模式,它充当目标服务器和客户端之间的中间人,代替目标服务器接收请求,并将响应返回给客户端。反向代理隐藏了目标服务器的真实身份和位置,使得客户端只能看到反向代理服务器,并且可以通过反向代理访问多个目标服务器。

在反向代理模式下,客户端发送请求到反向代理服务器,反向代理服务器根据配置的规则和策略,将请求转发给一个或多个目标服务器。目标服务器接收到请求后处理并生成响应,然后将响应返回给反向代理服务器,最后反向代理服务器再将响应返回给客户端。

反向代理的一些常见用途包括:

  1. 负载均衡:反向代理可以将请求分发给多个目标服务器,从而实现负载均衡,提高系统的性能和可靠性。
  2. 缓存加速:反向代理可以缓存目标服务器的响应,避免重复的请求传递到目标服务器,从而提高访问速度和减轻目标服务器的负载。
  3. 安全性增强:反向代理可以作为安全层,过滤恶意请求、防止DDoS攻击等,提供额外的安全性保护。
  4. 系统隔离:反向代理可以将不同功能或模块的请求分发到不同的目标服务器上,实现系统的逻辑隔离和模块化。
  5. 跨域请求:浏览器的同源策略不会影响服务器与服务器之间的交互,所以可以通过代理服务器的方式代替客户端请求数据

需要注意的是,对于客户端来说,它只与反向代理服务器通信,并不知道真正处理请求的目标服务器是哪个。目标服务器对于客户端来说是透明的,客户端无法直接访问目标服务器。

防止通过反向代理跨域获取服务器数据,可以采取以下措施:

  1. 跨域资源共享(CORS)设置:在服务器端设置适当的 CORS 响应头,限制来自不同源的请求访问服务器资源。可以通过设置 Access-Control-Allow-Origin 头部字段来指定允许的源,只允许特定的域名或 IP 地址访问服务器资源。
  2. 验证和授权机制:实施有效的身份验证和授权机制来限制对服务器数据的访问。使用用户名和密码、令牌或其他身份验证方式来验证请求的合法性,并对未经授权的请求进行拒绝。
  3. 限制请求方法和路径:通过服务器配置或反向代理配置,限制允许的请求方法和路径。例如,只允许特定的请求方法(如 GET 或 POST)和特定的路径访问服务器数据,其他请求将被拒绝。
  4. 请求来源检查:在服务器端对请求来源进行检查,确保请求是直接从客户端发出,而不是经过反向代理。可以通过检查请求头中的相关字段(如 X-Forwarded-For)来判断请求是否经过了代理。