Chinaunix

标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器? [打印本页]

作者: 冬瓜er    时间: 2005-07-21 15:27
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
使用应用代理时,客户机向代理服务器发请求,目的IP一定是代理服务器IP,那么,客户机想访问的真正的目的站点的IP,代理服务器是怎么知道的?是代理服务器通过解析http数据包中的host字段得到站点名后,再通过DNS得到目的IP;还是客户机在发出真正请求前先向代理服务器发一个伴随包,通知代理服务器真正的目的站点IP?如果是前者,http有一种情况是没有host字段,也就是说没有主机名,那么这中情况的http代理,squid支持吗?
作者: mocou    时间: 2005-07-24 20:59
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
    

源地址是你的客户机地址,目的地址是你想访问的地址

到达网关是通过路由方式


看看网络基础原理吧
作者: abel    时间: 2005-07-25 14:02
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
原帖由 "mocou" 发表:
    
源地址是你的客户机地址,目的地址是你想访问的地址
到达网关是通过路由方式
看看网络基础原理吧

我認為該看的人應該是你,提問人其實巳經有http 概念了,只對 代理的原理不清楚而以.

代理基本上是直接收受你的 http request , 不論你的 http request 中的
GET / HTTP/1.0
Host: www.chinaunix.net
...

(樓主所指的有 Host 情況),則代理主機會看 Host 所指名稱,將你送來的 Http request 原封不動的送到 host 所指的主機名主的 http service.
(會加上幾個 proxy header,但你原來的 header 不會改變)

至於沒有 host 的,則需要在 method 上指出主機名來 , Ex:
GET http://www.chinaunix.net/index.php?sid=1245566 HTTP/1.0

則 proxy 會將帶有 http 中的 hostname 解析出來,形成如同上例的狀況
再送出 GET 指令到目的主機(CU)上

也就是透過這樣的模式,可以形成正向(Broswer 指定)/透明代理 (port redirect), 或是反向代理 (主機名字到 Proxy , 但以 /etc/hosts 將 Web 指向後台)

所以,不論帶不帶 Host,其 header  中都必需指出 hostname 為何
以為連接目標判斷,及 Web server 判斷
作者: mocou    时间: 2005-07-25 15:02
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
当我向代理服务器请求,要访问我的目的地址的时候,首先生成一个header
这个里面包含目的地址(肯定不是代理服务器地址),源地址.

然后该包到达代理以后,代理对其进行处理   有错吗?
作者: abel    时间: 2005-07-25 15:52
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
当我向代理服务器请求,要访问我的目的地址的时候,首先生成一个header
这个里面包含目的地址(肯定不是代理服务器地址),源地址.

然后该包到达代理以后,代理对其进行处理  icon_rolleyes.gif 有错吗?
源地址是你的客户机地址,目的地址是你想访问的地址
到达网关是通过路由方式
看看网络基础原理吧

這兩段話天差地遠,不知您的邏輯何在
当我向代理服务器请求,要访问我的目的地址的时候,首先生成一个header
这个里面包含目的地址(肯定不是代理服务器地址),源地址.

這句話也語焉不詳, 什麼 header ? ip header 送到哪 ?
http header 送到哪 ?
這些全部送到代理去了

这个里面包含目的地址(肯定不是代理服务器地址),源地址.
然后该包到达代理以后,代理对其进行处理  icon_rolleyes.gif 有错吗?

再看一次,什麼 "肯定不是代理服务器地址", 那包何來 "然后该包到达代理以后" ?
作者: mocou    时间: 2005-07-25 17:56
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
偶的意思如下
例如host1---proxy---host2
现在要将数据由host1发送至host2

当host1发送数据时,使用ip数据
报格式传输,在ip数据报的首部中含有一个内容,其中有源地址和目的地址
在这个IP数据报的头中的目的地址是host2的地址。(这就是偶前面所说的非代理地址)

首先host1的IP层进行查找路由,如果proxy跟它是同一个以太网中,就直接发送至proxy
其次数据包到达proxy以后。由proxy对来自host1的IP数据包进行分析,目的地址不在同一个以及网或同一网络中,则由proxy进行转发,将数据报传给下一站路由器,这是偶说的路由


作者: abel    时间: 2005-07-25 18:17
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
原帖由 "mocou" 发表:
偶的意思如下
例如host1---proxy---host2
现在要将数据由host1发送至host2

当host1发送数据时,使用ip数据
报格式传输,在ip数据报的首部中含有一个内容,其中有源地址和目的地址
在这个IP数据报的头中的目的..........

good , 是的,沒有錯,這樣解釋比您前面的三言兩語清楚多了
Broswer 有定義 proxy 時,通常帶 ip (hostname) + port
所以代理下, IP 層寫的是這個 dst ip 和這個 dst port
payload 則是 http request header , proxy 根據 header 再查找
是否有 Cache , 以決定下步
作者: mocou    时间: 2005-07-25 19:04
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
有点忘了,也比较懒。      表达能力也有限

所以就随便回几句   没想到。。。
作者: 冬瓜er    时间: 2005-07-26 22:35
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
首先,非常感谢两位前辈。
第二,请大家推荐一下有关代理原理和流程的书或文章。
第三,我想把我要实现的这个应用说一说。

我是要实现一个与硬件防火墙配合使用的透明代理。内网中的机器的代理网关是硬件防火墙的IP。代理服务器与硬件防火墙是独立运行的(运行在不同的主机上),代理服务器位于DMZ中。由硬件防火墙判断出要代理的数据包,再把这些数据包重定向到代理服务器上。代理服务器的程序我准备以squid为基础进行修改。因此,我需要搞清楚代理的具体流程,希望各位前辈指导指导。万分感谢!
作者: zenith518    时间: 2005-07-26 23:47
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
多看看RFC HTTP协议吧!里面说的很清楚,如果不是这么做就不符合标准。记住,RFC是最好的最权威的文档!
作者: 段誉    时间: 2005-07-27 00:27
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
这片贴子倒是有些意思,最希望看到这样的回复了。
作者: abel    时间: 2005-07-28 13:32
标题: 应用代理时,客户端怎样把真正要访问的目的IP传给代理服务器?
原帖由 "mocou" 发表:
有点忘了,也比较懒。      表达能力也有限

所以就随便回几句   没想到。。。

若讓您覺得不快,請別介意
因為樓主提問,若我們給人家一個不完整或錯誤的答案,所而會害到人家

至於 冬瓜er  的問題,最好的功夫誠如另外一位朋友提到的 RFC
您提這個問題來看,您的基礎尚需不少加強
不過 HTTP 相關的 RFC 可不少哦,而且肯定不只看 HTTP
像 DNS,SSL ,TLS, HTTP Authentication ....,Cookie ..
我個人估計,至少也要200 篇,可能有將近一萬頁的英文原文資料
(這裏面我至少看過一半)
你若要看,建議你,先懂 DNS  (RFC 1034,1035)
再看 HTTP  (1945,2068,2616,2617,2396,2388 ...)
SSL (這個我沒有看,不過也不少)

不過一般人能看完一個20頁以上的 RFC , 並清楚知道它在講什麼就不錯了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2