一个比较棘手的网络问题!UDP转发后源地址改变的问题! ( 积分: 20 )

  • 主题发起人 主题发起人 yaoweifeng
  • 开始时间 开始时间
Y

yaoweifeng

Unregistered / Unconfirmed
GUEST, unregistred user!
内网 外网
______________________________________________
ClientA- 网闸 Server
ClinetB | TCP通道 / | /
ClientC- |不支持UDP 外网ClientA
------------------->| 外网ClientB
UDP协议 | 外网ClientC
|<-----------------UDP协议
见上图,为解决内网ClientA与外网ClientA之间的通讯,由于中间网闸设备不支持UDP协议,所以需要把UDP协议封装成TCP协议,在网闸两端分别开发UDPTOTCP中转服务.

ClientA-----UDP->服务程序->TCP->网 闸->TCP->服务程序->UDP->server or client
从外到内仍遵循该过程.

本网以内的Client无需中转.异网之间走服务程序中转.
现在存在地问题就是
ClientA->UDP->服务程序->TCP->网 闸->TCP->服务程序->UDP->Server,这时Server无法得知真实发给他UDP信息的ClientA的地址和端口.因为在Server看来,发给他UDP包的是服务程序.
不知道哪位大侠有好的解决办法没有.也就是说UDP在TCP发送过程中能不能保留他的源地址和端口.我不想在发送的包中记录这样的信息.谢谢.没有分了.~
如果CSDN上有帐号,我可以给分.500分奉送~~csdn相关帖子如下:
http://community.csdn.net/Expert/topic/4190/4190954.xml?temp=.4293634
 
内网 外网
______________________________________________
ClientA- 网闸 Server
ClinetB | TCP通道 / | /
ClientC- |不支持UDP 外网ClientA
------------------->| 外网ClientB
UDP协议 | 外网ClientC
|<-----------------UDP协议
见上图,为解决内网ClientA与外网ClientA之间的通讯,由于中间网闸设备不支持UDP协议,所以需要把UDP协议封装成TCP协议,在网闸两端分别开发UDPTOTCP中转服务.

ClientA-----UDP->服务程序->TCP->网 闸->TCP->服务程序->UDP->server or client
从外到内仍遵循该过程.

本网以内的Client无需中转.异网之间走服务程序中转.
现在存在地问题就是
ClientA->UDP->服务程序->TCP->网 闸->TCP->服务程序->UDP->Server,这时Server无法得知真实发给他UDP信息的ClientA的地址和端口.因为在Server看来,发给他UDP包的是服务程序.
不知道哪位大侠有好的解决办法没有.也就是说UDP在TCP发送过程中能不能保留他的源地址和端口.我不想在发送的包中记录这样的信息.谢谢.没有分了.~
如果CSDN上有帐号,我可以给分.500分奉送~~csdn相关帖子如下:
http://community.csdn.net/Expert/topic/4190/4190954.xml?temp=.4293634
 
我CSDN有4000分。[:D]不过花不出去。
随便说说,帮楼主顶!
 
当我知道有人回帖欣喜万分的时候,你却给泼了一盘冷水.你狠.不过谢谢你的顶!
 
我在大富翁开出去好多帖,几乎都是没有一个人回帖.郁闷~~~
 
你在csdn的帖子也没有什么人帮忙嘛。

先问一下,你的意思是不是说,即使通过这种中转的机制,你也希望内网client B收到内网client A的包的时候,也能通过包的结构中读出包的源地址和源端口?仿佛中间没有经过TCP中转的样子。是这个意思么?

你这个要求应该不是“代理”的范畴了,因为如果是代理的话,你内网的机器响应对方发来的信息,仅仅知道对方的内网地址和端口应该是没法通讯的。
但是,你这种要求应该是可以实现的吧,好比“VPN”就是这么做的。类似QQ、浩方的游戏对战平台,其实也是VPN的实现。
推荐一篇不错的socket5代理的文章。
http://www.you-how.com/htm/Socks5.htm
VPN的实现帮你再看看。我也是菜鸟,不要打我骂我,我很贱但是我很富有爱心![:D]

再顶你一次!
 
如果服务程序是自己写的话我觉得还是在你转换的tcp数据中添加这样的信息吧。
要不就直接看tcp/ip的数据格式。看看其中有没有直接的源地址或者端口的信息。
 
接受答案了.
 
后退
顶部