在写一个tcp代理服务器时,socket拷贝可以简单实现,但是如果当连接数很大时,代理服务器会出现大量连接。
假设接收客户端连接为src,服务端建立连接为dst,由于src端连接数无法减少,能否减少dst端的连接数呢?
ps:单纯使用tcp协议,在实验将多个src连接拷贝到同一dst连接时,代理失败
@乌龟壳 ,@中山野鬼
就是说单纯tcp协议曾来说使用过五元组来描述一个完整的连接,如果多个src对应一个dst会出现dst不知道把消息转给谁的情况吧? 如果还是基于tcp协议做代理,那么修改方法比如基于tcp协议封装一个协议,在上层做区分?
回复根据实际情况分析,原理就是,怎么变只要保证信息完整就行了。但是有各种实际的限制比如性能啊,防火墙啊一系列东西,你得自己权衡。
tcp是流协议,没有数据结构的信息,如果要合并dst,必须在src数据上再加一层协议来描述是哪个src,不然目标服务器不知道是谁发来的。
如果src的协议本身具有一定的包结构,并且包本身可以识别身份,那在代理处稍微解析下包的边界,然后按照一定次序发送就行了。
如果是没有特定结构,src是个无结构的流,dst也是无结构的流,那只能src和dst一一对应。
无论怎么改,其实都是信息的传递而已,改造前把socket本身当作一个信息考虑进去,就知道如果合并dst后,需要怎样调整以保证信息不丢失就行了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
就是说单纯tcp协议曾来说使用过五元组来描述一个完整的连接,如果多个src对应一个dst会出现dst不知道把消息转给谁的情况吧? 如果还是基于tcp协议做代理,那么修改方法比如基于tcp协议封装一个协议,在上层做区分?
回复
根据实际情况分析,原理就是,怎么变只要保证信息完整就行了。但是有各种实际的限制比如性能啊,防火墙啊一系列东西,你得自己权衡。
tcp是流协议,没有数据结构的信息,如果要合并dst,必须在src数据上再加一层协议来描述是哪个src,不然目标服务器不知道是谁发来的。
如果src的协议本身具有一定的包结构,并且包本身可以识别身份,那在代理处稍微解析下包的边界,然后按照一定次序发送就行了。
如果是没有特定结构,src是个无结构的流,dst也是无结构的流,那只能src和dst一一对应。
无论怎么改,其实都是信息的传递而已,改造前把socket本身当作一个信息考虑进去,就知道如果合并dst后,需要怎样调整以保证信息不丢失就行了。