proxy是什么

本文详细介绍了代理服务器的工作原理及如何提高访问速度、充当防火墙、访问受限网站和提升安全性等四大作用。此外,还提供了在IE和NC中设置代理服务器的具体步骤。

  普通的因特网访问是一个典型的客户机与服务器结构:用户利用计算机上的客户端程序,如浏览器发出请求,远端WWW服务器程序响应请求并提供相应的数据。而Proxy处于客户机与服务器之间,对于服务器来说,Proxy是客户机,Proxy提出请求,服务器响应;对于客户机来说,Proxy是服务器,它接受客户机的请求,并将服务器上传来的数据转给客户机。它的作用很象现实生活中的代理服务商。因此Proxy Server的中文名称就是代理服务器。

Proxy Server的工作原理是:当客户在浏览器中设置好Proxy Server后,你使用浏览器访问所有WWW站点的请求都不会直接发给目的主机,而是先发给代理服务器,代理服务器接受了客户的请求以后,由代理服务器向目的主机发出请求,并接受目的主机的数据,存于代理服务器的硬盘中,然后再由代理服务器将客户要求的数据发给客户。
代理服务器的作用有四个:
一、提高访问速度。因为客户要求的数据存于代理服务器的硬盘中,因此下次这个客户或其它客户再要求相同目的站点的数据时,就会直接从代理服务器的硬盘中读取,代理服务器起到了缓存的作用,对热门站点有很多客户访问时,代理服务器的优势更为明显。
二、Proxy可以起到防火墙的作用。因为所有使用代理服务器的用户都必须通过代理服务器访问远程站点,因此在代理服务器上就可以设置相应的限制,以过滤或屏蔽掉某些信息。这是局域网网管对局域网用户访问范围限制最常用的办法,也是局域网用户为什么不能浏览某些网站的原因。拨号用户如果使用代理服务器,同样必须服从代理服务器的访问限制,除非你不使用这个代理服务器。
三、通过代理服务器访问一些不能直接访问的网站。互联网上有许多开放的代理服务器,客户在访问权限受到限制时,而这些代理服务器的访问权限是不受限制的,刚好代理服务器在客户的访问范围之内,那么客户通过代理服务器访问目标网站就成为可能。国内的高校多使用教育网,不能出国,但通过代理服务器,就能实现访问因特网,这就是高校内代理服务器热的原因所在。
四、安全性得到提高。无论是上聊天室还是浏览网站,目的网站只能知道你来自于代理服务器,而你的真实IP就无法测知,这就使得使用者的安全性得以提高。
代理服务器的设置:
要设置代理服务器,必须先知道代理服务器地址和端口号,然后在IE或NC的代理服务器设置

搜索

栏中填入相应地址和端口号就可以了。假设我们有一个代理服务器的地址是Proxy.net.net,端口号是3000,在IE中的配置方法是使用查看菜单的Internet选项/连接/代理服务器,然后在通过代理服务器访问Internet选项前面的复选框中打上钩,在地址框中填入代理服务器地址,如本例中假设代理服务器地址是proxy.net.net,再在端口框中填上端口号3000,点一下最下方的应用按钮,再点确定,设置完成。下次再使用IE时用户就会发现,无论你浏览什么网站,IE总是先与代理服务器连接。用NC的话,设置稍繁一点。使用edit菜单下的Preferences菜单项,再选择Advanced下的Proxies,此时在右侧Proxies选项中选择第二项Manral Proxy configuration,再点其右边的View…按钮,就会出现代理服务器的配置界面,诖矸 衿鞯刂泛投丝诤爬钢刑钊胂嘤Φ哪谌荩 慊鱋K,退回到参数设置窗口,再点击OK,代理服务器的设置工作就完成了。当客户再次浏览网页时,就会自动向你设定的代理服务器发出申请,并得到数据,在浏览网站时,无论是IE或是NC都可以在浏览器状态栏中清楚地看到先连代理服务器,再连目标网站的过程。
但是,千万不要把Proxy Server和Router搞混了,Proxy Server是建立在应用层上的服务软件,而Router则是一台网络设备或一台电脑,它是工作在IP层的,数据到达IP层后就进行转发。一般一个Proxy Server工作在一台既具有MODEM和网卡的计算机上的。不同的Proxy Server软件提供的服务不同,一般都提供WWW,FTP等常用的服务。在内部网中每台客机都必须具有一个独立的IP地址,且在客机的"控制面板-Internet 项"中"连接"中配置使用Proxy Server且指向Proxy Server IP地址和服务的端口号。当Proxy Server启动时,将利用Winsock.dll开辟一个指定的服务端口,等待客机的的请求。当Proxy Server的MODEM拨号上网后,你的Proxy Server就可以工作了。当你在你的IE发出一连接请求时,你的客机就直接将数据包发到Proxy Server,当服务器捕获这个IP包时,首先要分析它是什么请求,如果是HTTP请求,Proxy Server就向你的ISP发出HTTP请求,当Proxy Server收到回应时,就将此IP包转发到内部网络上,你的客机就会获得此IP包。另外你的Proxy Server还可以做为一个很好的防火墙。具体操作,请参考你的Proxy Server的readme文件。
在您访问因特网的Web服务器时,您可知道会有多少个人信息泄漏给别人?在上网访问的过程中,Web浏览器至少会把20多项有关您个人的信息在您毫无觉察的情况下悄悄地送往Web服务器上。 这些个人信息如果是被传送到知名网站或是大型企业的Web服务器上,还不会有什么大问题。若是被传送到连是谁开设的网站都不清楚的Web服务器上,则会令人深感不安。Web浏览器传送给Web服务器的信息,用行话来说就是"环境变量"。其主要内容为:(1)分配给电脑的IP地址(REMOTE_A DDR)和主机名(REMOTE_HOST);(2)Web浏览器所使用的端口序号(REMOTE_PORT);(3)Web浏览器的产品名(HTTP_USER_AGENT);(4)所浏览过的网站中最新一个的网页地址(HTTP_REFERER)等。
解决这个问题其实很简单。只要通过代理服务器(proxy server)访问Web服务器即可。代理服务器的作用在于它可替Web服务器承受来自各个终端的访问请求。在企业网方面,代理服务器被设置在公司内部的LAN与因特网相互链接的部分上。
普通的因特网访问是一个典型的客户机与服务器结构:用户利用计算机上的客户端程序,如浏览器发出请求,远端WWW服务器程序响应请求并提供相应的数据。而Proxy处于客户机与服务器之间,对于服务器来说,Proxy是客户机,Proxy提出请求,服务器响应;对于客户机来说,Proxy是服务器,它接受客户机的请求,并将服务器上传来的数据转给客户机。它的作用很象现实生活中的代理服务商。因此Proxy Server的中文名称就是代理服务器。
Proxy Server的工作原理是:当客户在浏览器中设置好Proxy Server后,你使用浏览器访问所有WWW站点的请求都不会直接发给目的主机,而是先发给代理服务器,代理服务器接受了客户的请求以后,由代理服务器向目的主机发出请求,并接受目的主机的数据,存于代理服务器的硬盘中,然后再由代理服务器将客户要求的数据发给客户。
代理服务器的作用有四个:
一、提高访问速度。因为客户要求的数据存于代理服务器的硬盘中,因此下次这个客户或其它客户再要求相同目的站点的数据时,就会直接从代理服务器的硬盘中读取,代理服务器起到了缓存的作用,对热门站点有很多客户访问时,代理服务器的优势更为明显。
二、Proxy可以起到防火墙的作用。因为所有使用代理服务器的用户都必须通过代理服务器访问远程站点,因此在代理服务器上就可以设置相应的限制,以过滤或屏蔽掉某些信息。这是局域网网管对局域网用户访问范围限制最常用的办法,也是局域网用户为什么不能浏览某些网站的原因。拨号用户如果使用代理服务器,同样必须服从代理服务器的访问限制,除非你不使用这个代理服务器。
三、通过代理服务器访问一些不能直接访问的网站。互联网上有许多开放的代理服务器,客户在访问权限受到限制时,而这些代理服务器的访问权限是不受限制的,刚好代理服务器在客户的访问范围之内,那么客户通过代理服务器访问目标网站就成为可能。国内的高校多使用教育网,不能出国,但通过代理服务器,就能实现访问因特网,这就是高校内代理服务器热的原因所在。
四、安全性得到提高。无论是上聊天室还是浏览网站,目的网站只能知道你来自于代理服务器,而你的真实IP就无法测知,这就使得使用者的安全性得以提高。
代理服务器的设置:
要设置代理服务器,必须先知道代理服务器地址和端口号,然后在IE或NC的代理服务器设置

搜索

栏中填入相应地址和端口号就可以了。假设我们有一个代理服务器的地址是Proxy.net.net,端口号是3000,在IE中的配置方法是使用查看菜单的Internet选项/连接/代理服务器,然后在通过代理服务器访问Internet选项前面的复选框中打上钩,在地址框中填入代理服务器地址,如本例中假设代理服务器地址是proxy.net.net,再在端口框中填上端口号3000,点一下最下方的应用按钮,再点确定,设置完成。下次再使用IE时用户就会发现,无论你浏览什么网站,IE总是先与代理服务器连接。用NC的话,设置稍繁一点。使用edit菜单下的Preferences菜单项,再选择Advanced下的Proxies,此时在右侧Proxies选项中选择第二项Manral Proxy configuration,再点其右边的View…按钮,就会出现代理服务器的配置界面,诖矸 衿鞯刂泛投丝诤爬钢刑钊胂嘤Φ哪谌荩 慊鱋K,退回到参数设置窗口,再点击OK,代理服务器的设置工作就完成了。当客户再次浏览网页时,就会自动向你设定的代理服务器发出申请,并得到数据,在浏览网站时,无论是IE或是NC都可以在浏览器状态栏中清楚地看到先连代理服务器,再连目标网站的过程。
但是,千万不要把Proxy Server和Router搞混了,Proxy Server是建立在应用层上的服务软件,而Router则是一台网络设备或一台电脑,它是工作在IP层的,数据到达IP层后就进行转发。一般一个Proxy Server工作在一台既具有MODEM和网卡的计算机上的。不同的Proxy Server软件提供的服务不同,一般都提供WWW,FTP等常用的服务。在内部网中每台客机都必须具有一个独立的IP地址,且在客机的"控制面板-Internet 项"中"连接"中配置使用Proxy Server且指向Proxy Server IP地址和服务的端口号。当Proxy Server启动时,将利用Winsock.dll开辟一个指定的服务端口,等待客机的的请求。当Proxy Server的MODEM拨号上网后,你的Proxy Server就可以工作了。当你在你的IE发出一连接请求时,你的客机就直接将数据包发到Proxy Server,当服务器捕获这个IP包时,首先要分析它是什么请求,如果是HTTP请求,Proxy Server就向你的ISP发出HTTP请求,当Proxy Server收到回应时,就将此IP包转发到内部网络上,你的客机就会获得此IP包。另外你的Proxy Server还可以做为一个很好的防火墙。具体操作,请参考你的Proxy Server的readme文件。
在您访问因特网的Web服务器时,您可知道会有多少个人信息泄漏给别人?在上网访问的过程中,Web浏览器至少会把20多项有关您个人的信息在您毫无觉察的情况下悄悄地送往Web服务器上。 这些个人信息如果是被传送到知名网站或是大型企业的Web服务器上,还不会有什么大问题。若是被传送到连是谁开设的网站都不清楚的Web服务器上,则会令人深感不安。Web浏览器传送给Web服务器的信息,用行话来说就是"环境变量"。其主要内容为:(1)分配给电脑的IP地址(REMOTE_A DDR)和主机名(REMOTE_HOST);(2)Web浏览器所使用的端口序号(REMOTE_PORT);(3)Web浏览器的产品名(HTTP_USER_AGENT);(4)所浏览过的网站中最新一个的网页地址(HTTP_REFERER)等。
解决这个问题其实很简单。只要通过代理服务器(proxy server)访问Web服务器即可。代理服务器的作用在于它可替Web服务器承受来自各个终端的访问请求。在企业网方面,代理服务器被设置在公司内部的LAN与因特网相互链接的部分上。

转载于:https://www.cnblogs.com/wym789/p/6372679.html

<think>我们正在讨论IPC机制中的Proxy和Stub概念。根据引用[2]和[3],Proxy-Stub设计模式在IPC中用于包装底层的通信接口(如IBinder),使得应用程序不必直接复杂的通信接口打交道,从而降低了开发的复杂性。 引用[2]提到,框架开发者(如Android系统框架)会提供AIDL工具,生成Proxy和Stub类,这样应用开发者就不需要自己实现这些类。引用[3]则详细说明了Proxy和Stub的作用: - Proxy类:运行在客户端进程,它将客户端的方法调用转换为跨进程调用(IPC)请求发送给服务端。它隐藏了底层的通信细节,给客户端提供了一个简单易用的接口(IA接口)。 - Stub类:运行在服务端进程,它接收来自客户端的IPC请求将这些请求转换为对服务端实际对象的方法调用。Stub类通常继承自Binder类,实现了IA接口,但具体的业务逻辑由开发者实现(通过实现Stub中的抽象方法)。 所以,Proxy和Stub是IPC通信过程中的两个代理对象,它们分别位于客户端和服务端,共同完成跨进程调用的封装和转换。 现在,我们根据用户的问题,详细解释Proxy和Stub的定义作用: ### 一、Proxy Stub 的定义 1. **Proxy(代理)** - 位于**客户端进程**,实现服务端提供的接口(如IA接口)。 - 负责将客户端的方法调用**封装成跨进程请求**(包括参数打包),通过Binder驱动发送到服务端。 - 接收服务端返回的结果,解包返回给客户端。 2. **Stub(存根)** - 位于**服务端进程**,通常继承自 `Binder` 类实现服务端接口(如IA接口)。 - 负责**接收解析**来自客户端的请求(通过重写 `onTransact()` 方法)。 - 将解析后的请求**分派**给服务端实际的对象(即真正实现业务逻辑的对象)处理。 - 将处理结果打包返回给客户端。 ### 二、Proxy Stub 的作用 1. **封装通信细节** - Proxy 和 Stub 隐藏了底层 IPC 的复杂操作(如数据序列化、Binder驱动调用等),让开发者只需关注业务逻辑。 - 例如:客户端调用 `proxy.add(1, 2)` 就像调用本地方法一样简单,无需关心跨进程通信过程[^3]。 2. **接口一致性** - Proxy 实现了服务端相同的接口(IA接口),保证客户端调用方式本地调用一致。 - Stub 在服务端将跨进程请求转换为对服务对象的方法调用,保证服务端处理逻辑本地服务一致。 3. **数据序列化反序列化** - Proxy 将方法参数打包(序列化)成 `Parcel` 对象,通过 Binder 驱动传输。 - Stub 从 `Parcel` 中解析(反序列化)参数,传递给服务对象,将返回结果序列化后回传[^5]。 ### 三、工作流程示例 以客户端调用服务端的 `add(int a, int b)` 方法为例: ```mermaid sequenceDiagram participant Client participant Proxy participant BinderDriver participant Stub participant Service Client ->> Proxy: 调用 add(1, 2) Proxy ->> Proxy: 将参数打包为Parcel Proxy ->> BinderDriver: 发送请求 BinderDriver ->> Stub: 跨进程传递请求 Stub ->> Stub: 解包Parcel,解析参数 Stub ->> Service: 调用实际对象的add(1,2) Service ->> Stub: 返回结果3 Stub ->> Stub: 将结果打包为Parcel Stub ->> BinderDriver: 返回结果 BinderDriver ->> Proxy: 跨进程传递结果 Proxy ->> Proxy: 解包Parcel,得到结果3 Proxy ->> Client: 返回3 ``` ### 四、在 Android 中的具体实现(AIDL 工具) Android 通过 AIDL(Android Interface Definition Language)自动生成 Proxy 和 Stub 类: 1. **定义 AIDL 接口**(如 `IMathService.aidl`): ```aidl interface IMathService { int add(int a, int b); } ``` 2. **编译生成**: - 生成 `IMathService.Stub` 类(供服务端继承)。 - 生成 `IMathService.Stub.Proxy` 类(供客户端使用)。 3. **服务端实现**: ```java public class MathService extends IMathService.Stub { @Override public int add(int a, int b) { return a + b; } } ``` 4. **客户端绑定服务**: ```java IMathService proxy = IMathService.Stub.asInterface(binder); int result = proxy.add(1, 2); // 通过Proxy调用 ``` ### 五、设计模式优势 1. **解耦**:客户端和服务端通过接口(IA)通信,无需依赖具体实现[^2]。 2. **简化开发**:开发者只需关注业务逻辑,无需处理 IPC 底层细节。 3. **可扩展性**:接口变更时,只需更新 AIDL 定义重新生成代码。 --- ### 总结 - **Proxy**:客户端代理,负责将本地调用转化为跨进程请求。 - **Stub**:服务端存根,负责将跨进程请求转化为本地调用。 - **核心价值**:通过封装 IPC 通信细节,提供本地调用一致的编程体验,降低跨进程开发复杂度[^3][^5]。 §§相关问题§§ 1. AIDL 自动生成的 Proxy 和 Stub 类具体包含哪些方法? 2. 在非 Android 系统中,Proxy-Stub 模式如何实现? 3. 如何手动实现 Proxy 和 Stub 而不依赖 AIDL? 4. Parcel 序列化反序列化的原理是什么?</think>### IPC 机制中的 Stub Proxy 定义作用 在 IPC 机制中,**Stub** 和 **Proxy** 是 Proxy-Stub 设计模式的核心组件,用于**封装底层通信细节**,使开发者无需直接操作复杂的 IPC 接口(如 Binder 的 `IBinder`)。它们通过抽象层简化跨进程调用,工作原理如下: #### 一、核心定义 1. **Proxy(代理)** - **位置**:客户端进程 - **作用**: - 将客户端的本地方法调用**封装为跨进程请求** - 通过 Binder 驱动向服务端发送请求 - 接收服务端返回结果解包给客户端 - **本质**:服务端接口的**本地代理对象**,对客户端表现为本地服务[^3][^5]。 2. **Stub(存根)** - **位置**:服务端进程 - **作用**: - 接收来自客户端的跨进程请求 - 解析请求参数**调用服务端实际业务方法** - 将执行结果打包返回给客户端 - **本质**:服务端实现的**基础骨架**,屏蔽 Binder 底层细节[^3][^5]。 ```mermaid graph LR A[客户端] -->|调用 add(1,2)| B[Proxy] B -->|打包参数/发送请求| C[Binder Driver] C -->|转发请求| D[Stub] D -->|解包参数/调用真实方法| E[服务实现] E -->|返回结果 3| D D -->|打包结果| C C -->|返回结果| B B -->|解包结果| A ``` #### 二、核心作用 1. **通信封装** - Proxy 将方法调用转换为 `transact()` 操作(序列化参数) - Stub 通过 `onTransact()` 解析请求分发给业务方法[^3][^5] - 示例:客户端调用 `proxy.add(1,2)` 实际触发 Binder 驱动的跨进程通信 2. **接口一致性** - Proxy 和 Stub **实现相同的接口**(如 `IMathService`) - 客户端调用 Proxy 的方法 = 直接调用服务端 Stub 的方法 - 开发者无需关注跨进程细节,像调用本地方法一样使用[^2][^3] 3. **线程管理** - Stub 在服务端**自动分配 Binder 线程**处理请求 - 当请求到达时,Binder 驱动从线程池取出线程执行 `onTransact()`[^5] - 避免阻塞服务端主线程 #### 三、在 Android 中的实现(AIDL 工具) Android 通过 AIDL(Android Interface Definition Language)自动生成 Proxy 和 Stub: ```java // 自动生成的 AIDL 代码片段 interface IMathService { int add(int a, int b); } class Proxy implements IMathService { @Override public int add(int a, int b) { // 1. 打包参数到 Parcel // 2. 通过 Binder 发送请求 // 3. 等待解包结果 } } abstract class Stub extends Binder implements IMathService { @Override protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) { // 1. 解析 code 确定方法(如 add) // 2. 从 data 解包参数 // 3. 调用实际服务实现 // 4. 将结果写入 reply } } ``` #### 四、设计模式优势 1. **解耦** - 客户端依赖 Proxy 而非具体 IPC 实现 - 服务端通过 Stub 隔离 Binder 复杂性[^2][^3] 2. **开发效率** - AIDL 自动生成模板代码,减少手动错误 - 开发者只需关注业务逻辑实现(如 `add()` 的具体算法) 3. **安全稳定** - Proxy 和 Stub 处理参数序列化/反序列化 - 防止客户端直接访问敏感 IPC 接口[^3] --- ### 总结 - **Proxy**:客户端的服务代理,**封装请求发送结果解析** - **Stub**:服务端的请求处理器,**实现跨进程调用到本地方法的转换** - **核心价值**:通过抽象层隐藏 IPC 复杂性,提供透明的本地调用体验[^2][^3][^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值