网上的资料大多是介绍穿越一级代理访问公网,要是存在多级代理该怎么办呢?比如 clientA->代理1(http、sock5等)->代理2(http、sock5等)->公网web服务器,我是觉得要穿越第一级代理,clientA要和代理1通过sock5等协议进行协商,这还在我们的客户端程序的控制范围之内,但是数据包到达代理1之后,代理1要和代理2协商,客户端程序好象就控制不了了吧?实际网络中应该是存在通过多级代理(http、sock5等)上网的吧,IE、QQ之类的是怎么做的呢?

解决方案 »

  1.   

    恩,你无须去考虑代理之后的事情,你就当直接通过1层代理连server就行了。
      

  2.   

    哦,原来是这样啊,
    那如果是这样的情形:clientA->NAT->代理(sock4、sock5等)->Server,
    clientA发出的数据包能穿越代理到达Server吗?是不是这样:
    1.NAT是透明的,如果clientA知道代理的IP,那它可以透过NAT和代理协商有关数据包穿越的问题,数据包就可以到达Server了?2.但是在这种情况下,我们往往不知道代理的IP吧?有办法知道吗?
      

  3.   

    NAT是透明的,你可以不考虑他的存在,这种由内向外的连接,的确不需要考虑,除非NAT封了socks5等代理的端口。
    但如果你不知道代理的IP,那显然不能用了,代理是你来用的,并不是NAT主动要用的,所以,代理的IP显然要由你去感知。当然,对于server也一样,不是NAT主动连server的,而是你要连的,所以,server的ip你也要知道。
      

  4.   

    To fisker0303(天塌了,地陷了,小花狗不见了.):
    你说得没错,我准备写一个实用一点的P2P程序,所以近段时间对NAT、代理、UDP编程等问题进行学习,在论坛上发了不少帖(不少是弱弱的问题)问大家,承蒙各位关照,现在已经弄出了一个初步的方案,下一阶段就要实践了,肯定也会碰到许多问题,到时还要向大家讨教,当然我也会把我的一些心得、理解跟大家分享,^_^,希望以后各位继续关照,谢谢!
      

  5.   

    clientA->NAT->代理(sock4、sock5等)...(n个代理)...->代理(sock4、sock5等)->Server
    原理=clientA->NAT->Server;
    中间有多少代理你不须要关心,把它看作一个简单nat即可.
    因为Client port=>nat Port->Server
        Server->nat Port=>Client port
    你明白我的意思了吗?