首页
社区
课程
招聘
[求助]迅雷及常见下载软件网络连接方式分析
发表于: 2011-12-6 19:13 6338

[求助]迅雷及常见下载软件网络连接方式分析

2011-12-6 19:13
6338
想来想去,这个帖子发在这里最合适的了。

缘起:学校(以及一些公司)经常会使用IP速度限制以改善每个用户的访问速度,提高网络稳定性……(省略N多目的)。然而大部分限制都是没有时间约束的。也就是说,在半夜到凌晨这段时间,网络空闲,可是每个IP仍然只能使用有限的网络资源。理论上如果使用两块网卡,并有两个合法的IP(以及IP对应的MAC地址),应该可以绕过IP速度限制,得到双倍的传输速率。但无论你试过没试过,这种方法都是行不通的,因为两块网卡只有一块能工作,另一块则闲置着。虽然服务器领域已经有冗余网卡绑定技术以提高网络传输率以及提供一个冗余链路,以使得网络更健壮。但刚才说过,限速是针对IP做的,所以,双网上绑定以后,也只有一个IP,仍然 不能绕过限制。

解决:如果我们开发一个load balance的驱动,在数据包发出去之前平均分配到两块网卡上,然后再把回来的数据合并,传回进程,理论上就可以把另一块闲置的网卡利用起来了。

实现数据包的拦截和转发有很多种方法,实现起来也有易有难。要针对所有的应用程序都有用,至少是对大部分程序有用,那才是一个好程序啊。而下载程序,比如迅雷,快车之类的,是主要的应用对象。

担心:我主要的下载工具是迅雷,而迅雷有一些基于驱动的下载限速的措施。这让我怀疑迅雷不是使用winsock来连接网络的,可能是使用了TDI之类的东西(如果是使用了NDIS就更郁闷了)。

所以,想请坛子里的大大们帮忙看看这些下载工具是用的Socket还是别的。

如果只是使用了socket,那就好办了,使用Winsock Layered Service Provider这样的东西就可以拦截转发了。如果是使用了TDI,那就只能写NDIS了。

PS:N久没来了,怀念啊。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不好意思,随便说说,不对的地方请指导。
我做过window下的网络传输,网络传输在ring3程序下,使用winsock连接,winsock分为两种模式一种tcp、ip模式,一种UDP模式,其中TCP/IP模式必须双方建立可靠的连接,从编程角度说,就是connect函数获得了正确的返回值。UDP模式不用。可以在命令行格式下,查看本地机器所有的网络连接。
TDI,是什么东西。
我感觉网络这块,M$是直接抄UNIX的吧。。

P.S。一直很讨厌迅雷的客户端那个下载广告,上班的时候下东西,非常的不合适。尽管都是不太黄的网站,但是也很不舒服。用OD,看了几天也没有搞定。我分析应该是客户端连接上网络后,服务器发给客户端需要打开的网页地址,然后客户端执行该连接。。。。。。
2011-12-7 09:49
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
TDI是“传输驱动接口”, 是比Socket低一层的协议。具体的我没有研究。但可以肯定的一点是,用TDI可以不用Socket就能建立连接,或者说不用Socket的API,这样,SPI就没有用了。

其实不只是迅雷,用别的下载也一样。
2011-12-7 23:10
0
雪    币: 209
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这并不是怎么编程的问题,而是网络协议的问题,无论是IP数据包,路由,还是NAT,每一道都是障碍
2011-12-10 01:36
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我看这意思,还是直接写NDIS好了,能省很多事。虽然NDIS不怎么好写。

PS:看到坛子里有NDIS的笔记,不错。我去研究一下。

TO楼上:我觉得没那么复杂(可能是我想简单了),主要是改IP包的一个地址然后从另一个interface发出去,回来的时候可以向master card的MAC再发一遍。因为内网之间是不限速的。
2011-12-10 09:36
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个太高深了。。。LZ实现了后回来给点提示哈。
2011-12-13 15:29
0
雪    币: 75
活跃值: (723)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
解决:如果我们开发一个load balance的驱动,在数据包发出去之前平均分配到两块网卡上,然后再把回来的数据合并,传回进程,理论上就可以把另一块闲置的网卡利用起来了。

对于下载服务器那边.本来一个tcp连接就是一个套结字对..你现在把客户端的数据从两个网卡发出去,有两个ip和两个端口.服务器肯定只会接收其中的一路,另一路直接被丢弃..同时由于你分了两路,seq,acknumber全被破坏..服务器能接收的那路马上就被咔嚓..

这个方法是不可行的

不过到可以做到下载两个文件,一个网卡下A, 一个网卡下B.这样到是可以提高速度.
但你想做到 下一个文件,一部分数据走网卡1,一部分数据走网卡2,虽然你这端可以处理,把两部分数据整合在一起。但是服务器那边它可识别不了这种下载方式。
2011-12-13 17:20
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你可以针对链接来做到负载均衡,但是你要处理不同微端口上的数据.
2011-12-18 23:16
0
游客
登录 | 注册 方可回帖
返回
//