Network 网络概念-解析

1- 图解

1.1- 图一

1.2- 图二: 跨境专线中继服务

image

2- sni阻断

2.1- 什么是SNI阻断?

2.1.1- 基本概念

SNI(服务器名称指示,Server Name Indication)是互联网安全技术的一部分,主要用于加密连接。它帮助你访问正确的网站,即使你访问的网站使用的是加密的HTTPS。

SNI阻断是某些国家或组织用来控制互联网访问的一种方法。通过这种方法,他们可以阻止你访问某些特定的网站,即使这些网站是通过加密连接的。

2.1.2- 工作原理

  1. 你访问网站:当你在浏览器中输入一个HTTPS网站的地址,比如https://www.example.com,你的电脑会开始建立一个加密连接。

  2. 握手过程:为了建立这个加密连接,你的电脑和目标网站会进行一个叫做TLS握手的过程。在这个过程中,你的电脑会告诉目标网站:“嘿,我想连接到www.example.com。”

  3. SNI字段:你电脑告诉目标网站它想连接到哪个具体网站的信息,就包含在SNI字段中。

  4. 审查系统检查:网络审查系统(比如某些国家的防火墙)会实时检查你的网络流量,尤其是TLS握手中的SNI字段。

  5. 阻断访问:如果SNI字段中提到的网站在被屏蔽的列表中,审查系统会立即阻断这个连接,你就无法访问这个网站了。

2.1.3- 为什么使用SNI阻断?

某些国家或组织使用SNI阻断来限制访问不符合他们政策的网站。这种方法因为可以直接在TLS握手阶段识别出要访问的网站,所以非常有效。

2.1.4- 如何应对SNI阻断?

尽管SNI阻断看起来很难对付,但其实有一些方法可以绕过它:

  1. 加密SNI(ESNI):这是对SNI字段进行加密的方法,使得审查系统无法识别出具体的网站名称。不过,这需要你的浏览器和目标网站都支持这个技术。

  2. 使用不同端口:大部分HTTPS网站使用的是443端口,一些服务可能会在其他端口上提供服务,从而绕过审查。

  3. 高级代理技术:使用一些高级代理技术,如Shadowsocks、V2Ray等,可以混淆流量,让审查系统难以识别。

  4. 加密DNS请求(DoH/DoT):通过加密DNS查询,也可以在一定程度上避免被基于DNS的阻断。

3- 反向代理 (Reverse Proxy)

3.1- 什么是反向代理?

反向代理是一种服务器端的技术,它充当了客户端和内部服务器之间的中介。与正向代理不同,正向代理是客户端使用的代理服务器,而反向代理是服务器使用的代理服务器。

3.2- 反向代理的工作原理

  1. 客户端发送请求:客户端(例如浏览器)向反向代理服务器发送请求。
  2. 反向代理接收请求:反向代理服务器接收请求,并根据配置规则将请求转发到内部服务器。
  3. 内部服务器处理请求:内部服务器处理请求并返回响应。
  4. 反向代理返回响应:反向代理将内部服务器的响应返回给客户端。

3.3- 反向代理的应用场景

  • 负载均衡:反向代理可以将请求分发到多个内部服务器,实现负载均衡。这有助于提高性能和可靠性。
  • 安全性:反向代理隐藏了内部服务器的真实细节,提供了额外的安全屏障,保护内部服务器免受直接攻击。
  • 高可用性:通过将请求路由到可用的服务器,反向代理可以实现高可用性。

4- 重定向 (Redirect)

4.1- 什么是重定向?

重定向是一种客户端的技术,用于将请求从一个 URL 重定向到另一个 URL。它通常用于处理 URL 更改、错误处理或网站重定位。

4.2- 重定向的工作原理

  1. 客户端发送请求:客户端向服务器发送请求。
  2. 服务器检测到需要重定向:服务器检测到请求需要重定向。
  3. 服务器返回重定向响应:服务器返回一个特殊的响应,包含新的 URL。
  4. 客户端根据新 URL 发起新请求:客户端根据新的 URL 发起新的请求。

4.3- 重定向的应用场景

  • URL 更改:当您的网站更改了某个页面的 URL 结构时,您可以设置重定向规则,将旧的 URL 重定向到新的 URL。
  • 错误处理:重定向用于处理用户访问不存在的页面或发生其他错误的情况。
  • 网站重定位:如果您的网站从一个域名迁移到另一个域名,您可以使用重定向来确保旧域名上的流量被正确地导向到新域名。

总结一下:

  • 反向代理适用于需要转发请求、提供负载均衡和安全性的情况。
  • 重定向适用于需要更改 URL、处理错误或网站重定位的情况。

5- 用户类型与权限

5.1- 根用户

也称为root用户或根账号,是系统中拥有最高权限的用户。在Linux系统中,根用户可以执行任何操作,包括修改系统配置、安装软件、删除文件等。为了确保系统的安全性,建议不要直接使用根用户执行日常任务,而是使用普通用户账号,并在需要时使用sudo命令获取根用户权限。

5.2- IAM用户

即Identity and Access Management(身份识别与访问管理)用户,是在账户中执行日常任务的用户。IAM用户由管理员在统一身份认证服务IAM中创建,可以避免共享账号和密码,管理员可以控制IAM用户对资源的访问权限。

6- HTTP方法POST、PUT和PATCH

关于HTTP方法POST、PUT和PATCH的详细资料,可以在许多关于网络编程、RESTful API设计或HTTP协议的书籍和在线资源中找到。

以下是对这三个方法的详细解释,包括它们的原理和用法示例:

6.1- POST

原理
POST方法用于提交数据到服务器,通常用于创建新的资源。它将数据以请求体的形式发送到服务器,并且每次提交都可能会导致服务器状态的变化。

用法示例
假设有一个RESTful API,用于创建用户。

POST /users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "John Doe",
  "email": "[email protected]",
  "password": "123456"
}

在这个例子中,客户端向/users端点发送一个POST请求,并在请求体中包含了要创建的新用户的详细信息。服务器接收到请求后,会在数据库中创建一个新的用户记录,并通常返回一个包含新用户信息(如用户ID)的响应。

6.2- PUT

原理
PUT方法用于更新服务器上的资源。如果资源存在,它会被整个替换;如果资源不存在,则可能会创建一个新的资源。PUT请求是幂等的,意味着多次执行同一请求不会改变结果。

用法示例
假设要更新上述用户的电子邮件地址。

PUT /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "id": 123,
  "name": "John Doe",
  "email": "[email protected]",
  "password": "123456"
}

在这个例子中,客户端向/users/123端点发送一个PUT请求,其中123是用户的ID。请求体中包含了完整的用户信息,服务器将用这个信息替换掉原来的用户记录。

6.3- PATCH

原理
PATCH方法用于对资源进行部分更新。它发送一系列操作来描述如何修改资源,而不是发送完整的资源数据。PATCH请求通常不是幂等的。

用法示例
假设只想更新上述用户的电子邮件地址,而不改变其他信息。

PATCH /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

[
  {
    "op": "replace",
    "path": "/email",
    "value": "[email protected]"
  }
]

在这个例子中,客户端向/users/123端点发送一个PATCH请求,请求体中包含了一个JSON数组,描述了要执行的操作。这里的操作是替换(replace)电子邮件字段(/email)的值。

以上示例解释了POST、PUT和PATCH的用法,这些方法在实现RESTful API时非常重要,它们允许客户端以不同的方式与服务器上的资源进行交互。

要获取更详细的资料,可以查阅以下资源:

  • RFC 7231: 这是官方的HTTP/1.1协议规范,详细描述了各种HTTP方法。
  • RESTful API设计指南: 网上有许多关于如何设计RESTful API的指南,通常会包含对这些HTTP方法的详细讨论。
  • 在线教程和课程: 如Coursera、Udemy等平台上有很多关于网络编程和HTTP协议的课程,这些课程通常会提供理论和实践的结合讲解。

7- 网络代理与转发技术

7.1- 中转原理详解:多层次解析,深入理解

7.1.1- 概述

中转,又称为多级代理,是一种科学上网技术,通过多个节点服务器之间的数据转发来实现。与传统的单节点代理相比,中转具有速度更快、稳定性更强等优势,但同时也存在配置复杂、成本高等缺点。

7.1.2- 工作原理

中转的原理类似于接力赛,数据包像接力棒一样在各个节点服务器之间传递,最终到达目标网站。\

具体步骤如下:

  1. 用户设备发送请求:用户设备首先向第一个中转节点服务器(中转机1)发送访问目标网站的请求。
  2. 中转机1转发请求:中转机1收到请求后,将其加密并转发给第二个中转节点服务器(中转机2)。
  3. 中转机2转发请求:中转机2再次加密数据并转发给第三个节点服务器,依此类推,直至最终的落地机。
  4. 落地机转发请求:落地机是负责与目标网站直接通信的节点服务器,它将收到的请求解密并发送给目标网站。
  5. 目标网站响应:目标网站收到请求后,进行相应处理并返回数据包。
  6. 数据包回传:落地机收到目标网站的回复后,将其原路返回,逐级解密并转发,最终送达用户设备。

7.1.3- 中转层级

中转节点的数量理论上没有限制,可以根据需求添加多层中转。一般来说,中转层级越多,数据传输路径越复杂,但也可能带来额外的延迟。

7.1.4- 中转的优势

  • 速度更快:多节点转发可以分散流量,提高传输速度,尤其是在高峰时段。
  • 稳定性更强:多条传输路径可以绕过网络拥堵或故障,提高连接稳定性。
  • 隐私性更好:多层加密和匿名转发可以增强用户隐私保护。

7.1.5- 中转的劣势

  • 配置复杂:需要设置多个节点服务器,并进行路由选择等配置。
  • 成本较高:通常需要为多个节点服务器付费,成本增加。
  • 延迟略高:多层转发会导致数据包传输路径变长,增加延迟。

7.1.6- 总结

中转是一种有效的科学上网方式,可以显著提高速度和稳定性,但需要付出一定的配置成本和忍受略高的延迟。对于追求极致速度和稳定性且有一定技术能力的用户来说,中转是一个不错的选择。

7.1.7- 建议

  • 使用网络拓扑图来直观地展示数据包在各个节点服务器之间的传输路径。
  • 模拟不同层级中转的情况,分析其对速度和延迟的影响。
  • 体验不同中转服务商提供的服务,感受其性能差异。

7.2- 附加说明

  • 本回答以Markdown格式呈现,方便您编辑和使用。
  • 如您需要其他格式的输出,请随时提出。
  • 如您对中转技术有任何疑问或需要更深入的探讨,欢迎随时与我交流。

希望以上信息对您有所帮助。

7.3- 端口转发

端口转发是网络配置中常见且实用的技术,用于将外部网络的流量定向到内部网络中的特定服务器或设备。

定义:端口转发是将流量从一个端口重定向到另一个端口的过程。

示例:假设您有一台内部服务器,其局域网 IP 地址为 192.168.1.100,监听 80 端口(HTTP 服务)。然而,由于网络设置的限制,外部客户端无法直接访问此服务器。

解决方案:通过设置端口转发规则,我们可以将发送到公网 IP 某个端口(如 8080)的外部请求,经由路由器准确无误地转发到内部服务器的 80 端口,从而实现外部访问。

实现方法

  • 在路由器上配置 NAT(网络地址转换)规则是常见的方式之一。大多数路由器都提供了图形化的界面,方便用户进行设置。
  • 对于技术爱好者或者更复杂的网络环境,还可以使用软件如 iptables(Linux)或 pf(BSD)来设置转发规则。

以下是一个使用 iptables 进行端口转发的配置示例:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A POSTROUTING -j MASQUERADE

在此示例中,

  1. 第一行规则将外部发送到 8080 端口的 TCP 流量重定向到内部服务器的 80 端口。
  2. 第二行规则用于处理网络地址转换后的源地址修改,以确保数据包能够正确返回。

优点:端口转发简单易用,特别适合家庭网络或小型办公环境,能够在不进行复杂网络设置的情况下实现外部访问内部服务的需求。

安全性考虑

  • 仅开放必要的端口,避免不必要的风险暴露。
    • 例如,如果内部服务器仅提供 HTTP 服务,那么只开放 80 端口的转发,而不开放其他不必要的端口。
  • 使用强密码保护路由器管理界面,防止未经授权的访问和恶意更改设置。强密码应包含字母、数字和特殊字符,并且定期更换。
  • 定期更新路由器固件,以修复可能存在的安全漏洞。许多路由器厂商会发布固件更新来解决已知的安全问题和性能优化。

性能影响:通常情况下,端口转发对网络性能的影响很小。但在高流量的情况下,可能会成为网络性能的瓶颈,需要关注路由器的处理能力和网络带宽。

故障排除

  • 首先检查防火墙设置,确保没有阻止相关流量。
    • 防火墙可能会误判端口转发的流量为潜在威胁而进行拦截。
  • 确认内部服务器正常运行,服务处于可用状态。
    • 可以通过在内部网络中直接访问服务器来验证其是否正常工作。
  • 仔细验证路由器配置是否正确,包括端口映射、IP 地址等设置。
    • 检查路由器的端口转发规则是否与预期一致。

7.4- 二级代理

二级代理是一种在受限网络环境中提高访问能力和增强隐私保护的技术。

定义:二级代理使用两个代理服务器来中转流量。

场景:在受限网络环境中访问被封锁的网站。

工作原理

 客户端 -> 本地代理服务器 -> 远程代理服务器 -> 目标网站

实现方法

  • 使用代理软件如 Shadowsocks、V2Ray 等。
  • 配置本地代理客户端和远程代理服务器。

服务器配置:

{
    "server":"0.0.0.0",
    "server_port":8388,
    "password":"your_password",
    "method":"aes-256-gcm"
}

客户端配置:

{
    "server":"server_ip",
    "server_port":8388,
    "local_port":1080,
    "password":"your_password",
    "method":"aes-256-gcm"
}

优点:提高隐私性,绕过网络限制。

安全性考虑

  • 使用强加密方法,确保数据在传输过程中的保密性和完整性。
  • 定期更换密码和端口,减少被破解和攻击的风险。
  • 使用可信赖的代理服务提供商,避免因不可靠的提供商导致数据泄露或其他安全问题。

性能影响:可能增加延迟,但通常不显著。

法律考虑:在某些国家使用代理可能受到限制,使用前请了解当地法律。

7.5- 隧道中转

隧道中转是一种安全传输网络流量的技术手段。

定义:隧道中转使用隧道技术将流量从一个网络安全传输到另一个网络。

常见类型

  • SSH 隧道
  • VPN 隧道(如 OpenVPN、WireGuard)
  • HTTP 隧道

实现方法(SSH 隧道示例)

ssh -L local_port:remote_host:remote_port user@ssh_server

优点

  • 数据加密,提高安全性,防止数据被窃取或篡改。
  • 绕过防火墙限制,实现访问受限资源。
  • 可用于远程访问内部资源,方便远程办公和管理。

安全性考虑

  • 使用强密钥认证,增加身份验证的安全性。
  • 定期更新 SSH 服务器,修复可能存在的安全漏洞。
  • 限制 SSH 访问 IP,只允许信任的 IP 地址进行连接。

性能影响:加密过程可能略微增加延迟和 CPU 使用率。

应用场景:远程工作、安全访问内部网络资源。

7.6- 链式代理

链式代理提供了更高程度的匿名性和安全性,但也带来了一些复杂性。

定义:链式代理将多个代理服务器连接在一起,使流量经过多个中转节点。

工作原理

Client -> Proxy1 -> Proxy2 ->... -> ProxyN -> Target

实现方法

  • 使用支持链式代理的软件,如 Tor 网络。
  • 手动配置多级代理,如 Shadowsocks + V2Ray。

配置示例(Tor):
在 torrc 文件中添加:

ExitNodes {us},{ca},{uk}
StrictNodes 1

优点

  • 提高匿名性和安全性,使追踪流量来源变得更加困难。
  • 更难被追踪,保护用户隐私。

缺点

  • 显著增加延迟,由于流量经过多个节点中转。
  • 配置复杂,需要对多个代理服务器进行设置和管理。

安全性考虑

  • 使用不同供应商的代理服务器,降低单点故障和被监控的风险。
  • 定期更换代理链路,防止链路被破解或监控。

适用场景:需要高度匿名性的情况,如调查记者、敏感信息传输等。

7.7- 反向代理

反向代理在服务器端发挥着重要的作用,优化了网络访问和提高了安全性。

定义:反向代理位于服务器端,接收客户端请求并将其转发到内部服务器。

应用场景

  • 负载均衡,将请求均匀分配到多个内部服务器,提高服务的可用性和响应速度。
  • 缓存静态内容,减少对内部服务器的重复请求,提高访问效率。
  • 提供 SSL 加密,保障数据传输的安全性。

常用软件:Nginx、HAProxy、Traefik

配置示例(Nginx):

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://internal_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

优点

  • 提高安全性,隐藏内部服务器结构,减少直接攻击内部服务器的风险。
  • 优化性能,分散负载,提高系统的整体响应能力。

安全性考虑

  • 定期更新反向代理软件,以获取最新的安全补丁和功能改进。
  • 配置适当的访问控制,限制非法访问和恶意请求。
  • 使用 HTTPS 加密传输,保障数据的机密性和完整性。

性能影响:可能略微增加延迟,但通常可以通过缓存等机制提高整体性能。

7.8- 透明代理

透明代理在网络中默默地工作,为用户提供了便利但也引发了一些法律和隐私问题。

定义:透明代理在不需要客户端配置的情况下拦截和重定向流量。

实现方法

  • 在网关或路由器上设置。
  • 使用 iptables(Linux)或 pf(BSD)重定向流量。

配置示例(iptables):

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

应用场景

  • 公司网络内容过滤,限制员工访问某些网站或内容。
  • 网络流量监控,分析网络使用情况和发现潜在的安全威胁。

优点:对用户透明,无需客户端配置,减少了用户的操作复杂度。

安全性考虑

  • 明确告知用户网络策略,避免用户对流量拦截产生误解和不满。
  • 保护代理服务器免受攻击,防止其成为网络中的薄弱环节。

法律考虑:在某些地区,未经用户同意进行流量拦截可能违法。

比较表格

方法 优点 缺点 适用场景 安全性 性能影响
端口转发 简单易用 安全性较低 小型网络 中等
二级代理 隐私保护好 配置略复杂 绕过网络限制 中等
隧道中转 高度加密 需要服务器支持 远程访问 低到中等
链式代理 高度匿名 延迟高,复杂 高安全需求 非常高
反向代理 负载均衡,安全 配置复杂 大型网站 低到中等
透明代理 用户无感知 可能引发隐私问题 企业网络 中等

7.9- 新兴技术

WebRTC (Web Real-Time Communication):允许浏览器直接进行点对点通信,可用于创建去中心化的代理网络。

WebRTC 是一项具有创新性的网络通信技术,它使得浏览器之间能够直接进行实时的音频、视频和数据通信,而无需依赖传统的中间服务器。

在网络代理和转发的领域,WebRTC 可以被利用来构建去中心化的代理网络,提高通信的效率和隐私性。

7.10- 进阶主题

  • 在企业环境中,可以考虑将反向代理与负载均衡器和内容分发网络(CDN)结合使用,以提高性能和可靠性。
    例如,通过负载均衡器将请求均匀分配到多个反向代理服务器,再结合 CDN 缓存静态资源,能够极大地提升用户访问的速度和稳定性。
    同时,还可以设置故障转移机制,确保在某个节点出现故障时能够自动切换到其他正常的节点,保障服务的连续性。

  • 对于高安全需求,可以考虑将 VPN 与链式代理结合使用,在保证安全性的同时提高匿名性。
    当使用 VPN 建立一个加密的隧道后,再通过链式代理进一步隐藏流量的来源和路径,使得追踪和监控变得极为困难。
    但需要注意的是,这种组合方式会显著增加网络延迟,并且配置和管理也更为复杂,需要专业的技术人员进行操作和维护。

7.11- 工具推荐

  • 端口转发:PortForward、UPnP PortMapper
    - PortForward:功能强大,支持多种路由器类型,界面友好,易于操作。
    - UPnP PortMapper:轻量级工具,能够自动检测 UPnP 设备并进行端口映射。

  • 代理软件:Shadowsocks、V2Ray、Tor
    - Shadowsocks:简单高效,加密性能良好,适用于个人用户突破网络限制。
    - V2Ray:功能丰富,支持多种协议和传输方式,可定制性强。
    - Tor:提供高度匿名性,常用于保护隐私和绕过审查。

  • VPN:OpenVPN、WireGuard、Cisco AnyConnect
    - OpenVPN:开源且广泛使用,安全性和稳定性较高。
    - WireGuard:速度快,配置简单,占用资源少。
    - Cisco AnyConnect:企业级 VPN 解决方案,提供全面的安全功能和管理控制。

  • 反向代理:Nginx、HAProxy、Traefik
    - Nginx:性能卓越,配置灵活,适用于高流量网站。
    - HAProxy:专注于负载均衡,支持多种负载均衡算法。
    - Traefik:与容器技术集成良好,动态配置更新方便。

7.12- 资源链接

8- v2rayN 端口配置和使用指南

8.1- 端口设置规则

v2rayN 使用以下规则来设置不同服务的端口:

  1. SOCKS 端口: 基础端口 (例如: 20000)
  2. HTTP 端口 = SOCKS 端口 + 1 (例如: 20001)
  3. PAC 端口 = SOCKS 端口 + 4 (例如: 20004)
  4. API 端口 = SOCKS 端口 + 5 (例如: 20005)

8.2- 端口作用及使用方法

8.2.1- SOCKS 端口 (例如: 20000)

作用: 提供 SOCKS 代理服务。
使用方法:

  • 适用于支持 SOCKS 代理的应用程序,如浏览器、邮件客户端等。
  • 配置示例 (Firefox):
    1. 打开设置 > 常规 > 网络设置
    2. 选择"手动代理配置"
    3. SOCKS 主机: 127.0.0.1, 端口: 20000
    4. 选择"SOCKS v5"

8.2.2- HTTP 端口 (例如: 20001)

作用: 提供 HTTP 代理服务。
使用方法:

  • 适用于只支持 HTTP 代理的应用程序。
  • 配置示例 (Chrome 命令行):
    chrome.exe --proxy-server="http://127.0.0.1:20001"
    
  • 系统设置 (Windows):
    1. 打开"Internet 选项" > “连接” > “局域网设置”
    2. 勾选"为 LAN 使用代理服务器"
    3. 地址: 127.0.0.1, 端口: 20001

8.2.3- PAC 端口 (例如: 20004)

作用: 提供 PAC(代理自动配置)文件的访问。
使用方法:

  • 允许浏览器根据访问的网址自动选择是否使用代理。
  • 配置示例 (通用浏览器):
    1. 在代理设置中选择"自动代理配置"
    2. 填入 URL: http://127.0.0.1:20004/proxy.pac

8.2.4- API 端口 (例如: 20005)

作用: 提供程序接口,允许其他应用程序与 v2rayN 交互。
使用方法:

  • 主要用于开发者或高级用户。
  • 用于编写脚本或程序来控制 v2rayN。

8.3- 一般使用建议

  1. 对于大多数普通用户,使用 SOCKS 或 HTTP 代理通常就足够了。

  2. 如果需要更灵活的代理控制,可以使用 PAC 模式。这样可以实现按需代理,比如只对某些特定网站使用代理。

  3. 对于系统级的代理设置,可以在 Windows 的"Internet 选项"中设置。这样可以让不知道如何设置代理的应用程序也能使用代理。

  4. 某些应用程序可能不遵循系统代理设置,这时需要在应用程序内部单独设置代理。

  5. 对于不支持代理设置的应用程序,可以使用像 Proxifier 这样的全局代理工具,它可以强制将应用程序的流量转发到设置的 SOCKS 或 HTTP 代理。

  6. 使用代理时要注意网络安全,确保使用的是可信的代理服务。

  7. 定期检查并更新 v2rayN 和相关配置,以确保最佳性能和安全性。

  8. 如果遇到连接问题,可以尝试切换不同的代理协议(如从 SOCKS 切换到 HTTP)或端口。

  9. 对于移动设备,可以考虑使用 v2rayN 设置的 HTTP 代理,通过 Wi-Fi 共享给其他设备使用。