初探计算机网络代理

计算机网络请求中的代理(Proxy)详解 代理(Proxy)是客户端与目标服务器之间的一个中间服务器。客户端不直接向目标服务器发送请求,而是将请求发送给代理服务器,由代理服务器转发给目标服务器,并将响应返回给客户端。代理在中间扮演着转发、过滤、缓存、匿名等多种角色。从网络分层看,代理主要工作在应用层(如HTTP代理)或传输层(如SOCKS代理),但有些透明代理可能工作在网络层。代理是网络架构中的重要组件,无论是正向代理的客户端匿名与访问控制,还是反向代理的负载均衡与安全防护,都极大地丰富了网络通信的灵活性。 阅读详情

初探计算机网络代理

TL;DR: 这篇文章介绍了计算机网络代理的简述,类型和使用场景。详解了正向代理, 反向代理的实现原理。最后介绍正向代理和反向代理的各种产品。

前段时间,由于项目需要在复杂的网络环境中运行,所以对计算机网络中的代理内容进行整理,以方便在团队内进行技术分享。分享是基于实际业务场景一层一层推演开来,所以不方便在外网直接引用,这里就采用课本常见的自上而下的介绍方式。

什么是计算机网络代理

维基百科中对计算机网络代理的定义是:

In computer networking, a proxy server is a server application that acts as an intermediary between a client requesting a resource and the server providing that resource.

也就是计算机网络代理服务器 横亘在客户端与服务资源中间的一个服务, 该服务作为一个中介的形态,接收来自左手客户端的请求,然后向右边发起请求,最后将右边返回的内容转述给左边的客户端。下图简要地描述了以上的定义:
在这里插入图片描述

代理的类型有哪些

网络代理从面向的角度看看,可以分为两种代理: 正向代理和反向代理。

正向代理

正向代理是一个从内部向外部的更多资源获取数据的,面向互联网的代理服务。比如你想到谷歌上搜索一些技术问题,在目前的大多数网络中是无法直接打开谷歌的,于是需要一个代理帮你从现有的网络环境桥接到谷歌的网络,这个就是正向代理所做的事情。维基百科的下图描述了这一过程:

在这里插入图片描述

反向代理

反向代理是指内部网络提供一个服务,用来对接互联网发来的连接请求,以达到控制和保护在内部网络中服务的目的。前面由内而外的称为正向代理,那么这种由外而内的也就称为了 反向代理。比如公司提供API服务的内部服务器有几十台,我们不想让外部客户知道内部的网络部署结构,所以可以在内部服务器前面搭设一个反向代理,外部客户只能调用这个反向代理的地址,再由反向代理传递给具体的内部服务器,这样既可以保护内部服务器的部署隐私,还可以控制外部客户的访问。同样,我们用维基百科的图来描述这一过程:

在这里插入图片描述

正向代理的实现原理是什么

正向代理的实现目前至少有三种不同的协议,一种是普通代理,一种是隧道代理,还有一种SOCKS协议。我们下面逐一进行介绍:

普通代理

普通代理在RFC 7230 - HTTP/1.1: Message Syntax and Routing的第五章第七小节做了简单的描述。这种代理扮演是中间人的角色,对于连接它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。他就是在两端中间来回传送消息。

下面这张来自《HTTP权威指南》的图直观地描述了普通代理的实现:

在这里插入图片描述

这种普通代理的原理跟实现就很像是设计模式中的门面模式,都是左手交右手。

从上图可以看到,代理扮演中间人,左右交右手,那么也就意味着代理人可以看到传输的消息,这对于越来越强烈的隐私自由要求来说,除了一些公开的明文传输之外,其它的传输是很难接受中间人能截取消息的。

第二个问题,如果客户端是浏览器,请求的服务是HTTPS,那么浏览器会检验服务器发过来的证书和签名。但在普通代理模式中,客户端浏览器其实只跟了代理联系,压根就没有直接联系到服务器,所以没法直接拿到服务器的证书,即使代理拿到了也没用,因为代理没有服务器的私钥,没法生成签名,这样一来,浏览器就会出现证书和签名验证失败的情况。

虽然普通代理简单,但是遇到以上问题时,需要其它的代理方式来弥补这些不足。

隧道代理

HTTP除了常见的GET,POST,PUT,PATCH,DELETE,HEAD等方法之外,在HTTP 1.1提出来一个叫CONNECT的方法,虽然它不是HTTP 1.1的核心规范,但却是一种得到广泛应用的扩展。客户端向服务端发起 HTTP CONNECT请求之后,客户端与服务端建立了一条TCP连接进行双向通信。扩展一下,假如这时的“服务端”是一个代理服务器,如果它在接收到客户端发起的HTTP CONNECT请求之后,与客户端建立了一条TCP连接,同时,它知道客户端真正要连接的服务端是谁,那么它可以与真正的服务端建立另外一个TCP连接,然后两个TCP对接起来,那不就能解决HTTPS的问题,同时中间人消息截取的问题也迎刃而解了。这种左手直接对接给右手的方式,就是隧道方式(Tunneling).

于是IETF的这篇文章Tunneling TCP based protocols through Web proxy servers, 提出来用隧道方式实现代理服务器,以传输所有基于TCP的协议。《HTTP权威指南》里面的这张图对这个过程做了详细的说明:
在这里插入图片描述

假如我通过代理访问 A 网站,浏览器首先通过 CONNECT 请求,让代理创建一条到 A 网站的 TCP 连接;一旦 TCP 连接建好,代理无脑转发后续流量即可。所以这种代理,理论上适用于任意基于 TCP 的应用层协议,HTTPS 网站使用的 TLS 协议当然也可以。这也是这种代理为什么被称为隧道的原因。对于 HTTPS 来说,客户端透过代理直接跟服务端进行 TLS 握手协商密钥,所以依然是安全的,

隧道代理完美地解决了普通代理模式中的明文传输问题,以及HTTPS的证书验证问题。

但键盘侠可能还会有问题,比如 我的协议是基于TCP的,直接在第五层的协议,比如直接到Socket连接,按照OSI七层模式的定义,我是不能倒回去调用第七层的HTTP CONNECT的方法的,这样违反了规定。或者我的协议是在第七层,但是我不想通过同样是第七层的HTTP CONNECT进行代理,因为我感觉它性能会损失一下。

在这里插入图片描述

只要合理合法合规,键盘侠的问题也是要解决的!

SOCKS 协议

SOCKS协议其实是互联网发展很早很早的时候就提出来的。90年代初,随着互联网的发展,网络攻击也随着而来,广大群众绞尽脑汁,想出了很多办法,但归根结底这些办法都是尽量减少内网服务器向公网暴露的机会,也就是至今仍为广大DevOps领导奉若神谕的“最小原则”: 如果没有强烈要求,就不进行授权。从而提高安全性。后来,有个叫David的老哥想出了一套 代理防火墙的解决方案,在客户端提供了一套类库,同时在防火墙服务器上部署一个服务器端,通过简单的配置就可以完成应用层的过滤,允许和拒绝哪些端口被接入,而且非常容易维护,这套解决方案就叫做SOCKS。后来一个姓李的哥们,对,赵钱孙李的李哥! 把SOCKS提炼出来,发展成一种协议,在服务器上提供TCP的转发,允许用户可以透明的穿透防火墙的阻拦。(呃,这里省去千八百字)

下图对于SOCKS的工作过程做了一个详细的说明:
在这里插入图片描述

SOCKS是在OSI的第五层,也就是Socket上进行的,所以能支持大部分常用的网络协议,比如HTTP/HTTPS, FTP, SMTP 等。

SOCKS常见的版本有v4跟v5,其中v5比v4多了用户验证,支持UDP等功能,目前已经成为SOCKS的主流版本。

反向代理的实现原理是什么

反向代理在开发过程当中其实用得不多,只有当需要做负载均衡,路径跳转时才会用到。它的实验原理也大致可以理解为 类似于规则引擎。当请求的URL是满足规则1,则自动跳转到1 指定的内部服务器地址。如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mX7t2ylN-1632067673667)(.\image\reverse-proxy-2.png)]

下面是一个反向代理配置的例子:

location  /abc
    {
        proxy_pass http://10.13.6.8:83/;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 
location  /edf
    {
        proxy_pass http://10.13.6.9:83;
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

反向代理看起来比较简单,这里就不过多展开介绍他的实现过程。

都有哪些代理产品

  • 正向代理的产品有很多:
    • 基于HTTP CONNECT的 Squid (也可以支持SOCKS,但同时只能支持一种,且需要重编译才可以用),更多的是企业环境使用
    • 基于SOCKS的一大堆客户端跟服务端的产品,更多的是个人使用
  • 反向代理的产品:
    • Nginx
    • Apache的web server
    • HAProxy
从零构建渗透测试自学体系:分阶段路线图与实战指南 渗透测试作为网络安全领域的核心实践,其本质是通过模拟恶意攻击来评估系统安全性的过程。其原理在于主动发现并利用系统、网络或应用中的安全漏洞,以验证防护措施的有效性。这项技术的价值在于能够提前识别风险,帮助企业加固防御体系,避免真实攻击造成的损失。在应用场景上,渗透测试广泛应用于金融、互联网、政府及关键基础设施等行业的安全评估。本文聚焦于渗透测试工程师的自学路径,系统性地拆解了从网络基础到Web安全、从漏洞利用到内网渗透的完整知识框架,并融入了Kali Linux、Metasploit等核心工具链的实战应用指南 阅读详情

相关推荐

2025年BurpSuite零基础安装与配置全攻略:从Java环境到抓包实战

Web安全测试是网络安全领域的基础实践,其核心在于对HTTP/HTTPS协议流量的捕获、分析与操纵。BurpSuite作为一款集成化的Web漏洞测试平台,通过代理中间人机制实现流量拦截,并依赖Java运行时环境执行。掌握其安装与配置,不仅能搭建本地测试环境,更是理解Web应用通信原理、开展手工安全测试的关键一步。对于初学者,从Java环境变量配置、代理设置到CA证书安装,每一步都直接影响工具能否正常运行。本文聚焦于BurpSuite社区版的安装流程,涵盖Java 17环境部署、浏览器代理配置、HTTPS解密

bangtuo9862的博客 577

对代理的理解

代理是一种特殊的网络服务,允许一个网络终端通过这个服务与另一个网络终端进行非直接的连接。 一些网关、路由器等网络设备具备网络代理功能,通常情况下,代理服务有利于保障网络终端的隐私或安全,防止攻击。 提供代理服务的电脑系统或其他类型的网络终端称为代理服务器。 如下图:左边和右边的电脑在通信的时候需要经过中间的电脑中转,中间的那个电脑就是代理服务器。 一个完整的代理请求过程为:客户端首先与代理服务器...

cserbo 1164

逆向爬虫-筑基篇-第二层-壹-计算机网络和因特网-007

网络如航,分层而治。航空有购票、安检、登机、飞行、降陆、取物六步,网络则有应用、传输、网络、链路、物理五层。各层分工明确,上下相承,方成体系。

欢迎来到测试猿的吐槽大会!这里没有鸡汤,只有段子。功能测试:在需求文档里找漏洞,在界面上玩大家来找茬。自动化测试:让代码替我加班,而我负责喝咖啡摸鱼。性能测试:给服务器施压,看它到底能扛几拳。全流程质量守护:从需求评审到上线,一路带刀护送。 2525

代理、网关、隧道的概念介绍及对比

前言 代理、网关与隧道协议的概念相信有很多人与我一样分不清楚,今天我们就来了解它们的区别。其实在HTTP通信时,除客户端和服务器之外,还有一些用于通信数据转发的应用程序和网络设备,例如代理、网关和隧道。它们可以配合服务器工作。 代理Proxy 代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的相应并转发给客户端。 代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变请求URI,会直接发送给前方持有资源

weixin_45797022的博客 2024

[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防御初探

这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了分享机器学习在安全领域的应用,并复现一个基于机器学习(逻辑回归)的恶意请求识别。这篇文章简单叙述了Web安全学习路线,并实现了最简单的木马和病毒代码,希望对读者有所帮助。

杨秀璋的专栏 3万+

SAP 移动类型简述

SAP系统中用于标志物料移动(收货/发货/转储/转储记帐)的三位的数字/字母 通常分几大类:收货 发货 转储 库房调整 常用的有: 收货类 (MB1C) 101 采购订单收货 103 采购订单收货至冻结状态 122 无采购订单退货 161 按退货采购订单退货 131 从生产订单 501 无采购订单收货 511 免费收货 发货类(MB1A) 201 成本中心消耗

forever_crazy的专栏 7196

一文总结代理:代理模式、代理服务器

概述、角色、UML类图、调用顺序示意图、分类(虚拟代理、远程代理、保护代理、同步代理、智能引用代理)、静态代理、动态代理、JDK动态代理(实例、源码分析)、cglib动态代理(实例、源码分析)、JDK和cglib动态代理区别、Spring AOP; 代理服务器、正向代理、反向代理。

lonelymanontheway的博客 1592

SAP成本核算变式OKKN配置详解:从CK11N到CK24,手把手教你搞定标准成本发布

本文深入解析SAP成本核算变式OKKN的配置原理与实战应用,涵盖从CK11N到CK24的标准成本发布全流程。详细讲解数量结构控制、价值结构配置及间接费用计算规则,帮助成本会计精准掌握标准成本计算逻辑,解决BOM版本选择、工艺路线获取等常见问题,提升企业成本管理效率。

weixin_27219587的博客 284

网络代理详解

代理是一种通过中间服务器来帮助客户端访问目标服务器的技术。代理服务器位于客户端与服务器之间,充当两者的中介,从而实现客户端和服务器之间的隔离。用户的所有请求经过代理后,再发往目标服务器,而目标服务器的响应则返回代理,再由代理传递给用户。

yymagicer的博客 1万+

EEGLAB安装、EDF数据导入、EEG预处理(Matlab)

目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保

y18771025420的博客 1万+

从AD到HFSS:Gerber文件驱动的PCB三维电磁仿真全流程解析

本文详细解析了从AD到HFSS的Gerber文件驱动的PCB三维电磁仿真全流程,重点介绍了Gerber文件作为桥梁的重要性、AD端Gerber文件导出实战指南、HFSS 3D Layout导入技巧及高级问题排查方法。通过实际案例和技巧分享,帮助工程师高效完成PCB电磁仿真,提升设计验证效率。

weixin_33735077的博客 259

计算机网络初探

目录复制 计算机网络协议层次模型分层的体系结构课后习题 协议层次模型 运用结构体系来描述一个复杂的系统,该系统具有票务代理、行李检查、登机口人员、飞行员、飞机、空中航行控制,完成这一些列的动作,所作出的流程如图: 一个协议层能够用软件、硬件结合的方式来实现 协议分层具有概念化和结构化的优点 将这些综合起来,各层的所有协议被称为协议栈(protocol stack),因特网协议栈由于5个层次组成:物理层、链路层、网络层、运输层、应用层。 分层的体系结构 利用分层的体系结构,我们可以讨论一个大而复杂系统

qq_49549609的博客 809

【WRF编译-Lab1】使用自动脚本编译WRF:错误总结

WRF编译过程及错误总结

WW、forever的博客 82

android算法面试题,阿里P10赵海平跳槽字节跳动,腾讯Android开发岗

架构MVCMVPMVVMJetpack架构使用示例NDK 开发JNI 基础数据类型String 字符串函数操作常用 JNI 访问 Java 对象方法NDK 开发基础开发流程CMake 构建 NDK 项目常用的 Android NDK 原生 API类加载器双亲委托模式第四章 Android 开源库源码分析LeakCanary初始化注册引用泄漏观察Dump HeapEventBus自定义注解注册订阅者发送事件第五章设计模式汇总设计模式分类。

jiameih的博客 676

【华为OD机试真题】18、喊7的次数重排 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >喊7是一个传统的聚会游戏,N个人围成一圈,按顺时针从1到N编号。   编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1,但是当将要喊出来的数字是7的倍数或者数字本身含有7的话,不能把这个数字直接喊出来,而是要喊”过”。   假定玩这个游戏的N个人都没有失误地在正确的时机喊了”过”,当喊到数字K时,可以统计每个人喊”过”的次数。   现给定一个长度为N的数组,存储了打乱顺序的每个人喊”过”的次数,请把它还原成正确的顺序,即数组的第i个元素存储编号i的人喊

KJ.JK 4167

YOLOv11旋转目标检测详解:从原理到实战的全面指南

本文介绍了YOLOv11旋转目标检测技术的核心概念、架构设计与应用场景。传统目标检测使用水平边界框(AABB)存在背景噪声大、定位精度低等问题,而旋转边界框(OBB)通过引入角度参数显著提升了检测精度,在遥感、OCR、工业质检等领域具有独特优势。YOLOv11-OBB采用改进的多尺度检测层、CSPDarknet53骨干网络和双通道角度输出机制,在保持实时性的同时实现精确的旋转目标检测。实验表明,该方法在DOTA数据集上达到81.3%的mAP,相比传统方法提升显著,特别适合处理具有旋转特性或高宽比悬殊的目标。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 299

计算机网络复习-应用层

应用进程的报文类型 (请求报文、应答报文)报文的语法、格式应用进程发送数据的时机、规则P2P,英文全称:PeerTo Peer,点对点通信技术没有统一的中心服务器节点,Client也是提供服务的Server对比C/S模式,P2P网络没有维护中心服务节点的压力相比C/S网络,P2P网络具有很好的并行处理能力无中心服务器,依靠用户群交换信息,网络结构简单搭建成本极低,用户群体越大,网络速度越快监管:节点遍布互联网,组织、政府监控困难服务:鱼龙混杂,信息杂乱,资源得不到保证。

weixin_63775160的博客 1005

【立创EDA-PCB设计基础】4.模块化布局

本文对本专栏绘制的原理图进行模块化布局,首先进行预布局(将每个模块放一起),然后进行精细化布局(按照原理图来精细化布局)。

嵌入式阿齐Archie 3万+

java family面试

我会从下图中的知识点去写这个系列,很多细节的点,可能想得不是很完善,大家可以去获取或者加我提意见(别忘记哟)。原创文章每周最少两篇,公众号首发文章,首发视频,比博客早一到两篇。

隐风的博客 319

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android开发经验谈,你不懂还不学

Android系统庞大且错综复杂,今天小编将带领大家初探Android系统整体架构,一窥其全貌。 引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制。虽然Android系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Sys

code8889的博客 294

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

《图解TCP/IP》阅读笔记(第五章 5.3)—— ARP技术初探

《图解TCP/IP》阅读笔记 第五弹 —— ARP技术初探

farewellyi的博客 401

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

从Kaggle到Web Server:大三CS核心课之外的实战项目地图(含数据库、AI、网络方向)

本文为计算机专业大三学生提供从课堂到实战的完整项目路线图,涵盖人工智能、数据库、计算机网络和计算机体系结构四大方向。从Kaggle竞赛到工业级模型部署,从SQL优化到实现微型数据库引擎,从抓包分析到高性能Web服务器开发,再到RISC-V处理器设计,每个项目都经过精心挑选,兼顾技术深度与可行性,帮助学生在核心课程之外提升实战能力。

weixin_30394981的博客 392

基于Java实现的元气骑士公网异地联机游戏设计

元气骑士作为当下热门的单机游戏,很多人都在琢么怎么和好朋友即使不在一个局域网内也能一起玩耍。目前网上比较成熟的方案是在服务器上搭建 VPN,两个手机通过连接 VPN 来穿透内网,实现彼此的连通,再通过联机工具转发房间的广播信息,如此就能做到公网异地联机了,相关的教程 优快云 上都有。本学期正式学习了计算机网络、windows API 编程等课程,正想对这些课程进行一个实践总结,我打算不通过 VPN,而是通过自己编程实现元气骑士的公网异地联机。

毕业作品网站 1180

Android 插件化细讲知识梳理—大厂面试必问,高级架构师核心知识

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。字节高级Android经典面试题和答案。

时间与思念 358

设计模式详解转载

黑马程序员-设计模式笔记-转载

pH2002的博客 198

《设计模式详解》笔记目录

《设计模式详解》前言目录设计模式概述、UML软件设计原则创建型模式 - 单例模式 前言 终于开始设计模式的学习了,以前或多或少接触过一些,但是还没有真正系统性的学习过。 从今天开始,一天一个设计模式,争取把它啃下来! 目录 设计模式概述、UML 设计模式概述、UML 1、设计模式概述 1.1 软件设计模式的产生背景 1.2 软件设计模式的概念 1.3 学习设计模式的必要性 1.4 设计模式分类 2、UML 2.1 类图概述 2.2 类图的作用 2.3 类图表示法 2.3.1 类的表示方式 2.3.2

萌宅鹿的技术小屋 4701
上一篇: 一文详解密码协商算法
下一篇: 100行代码实现一个多功能的代理服务
notechsolution
博客等级 码龄11年 27粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值