windows xp下使用TDI+NDIS实现进程网络流量限速(设计文档)

第一步:
由于在NDIS是无法获取到进程信息的,但是可以获取到端口的信息
在TDI本地维护一张表,存储着进程和端口的对应关系.(获取进程信息和端口不难,我已经做好了,只需要关联起来即可)

第二步:
NDIS通过函数来向TDI查询这张进程和端口对应的表,然后限制某个端口的流量信息(难点:要搞清楚TDI和NDIS是如何进行通信的,因为TDI和NDIS需要通信)

第三步:
如何限制某个端口的流量?什么原理?采用延迟处理或者丢包处理是个不错的选择.

如果在原来的TDI的基础上能够完成进程网络限速的功能呢?
//////////////////////////进程网络限速总体设计方案//////////////////////////////////////
总结的技术要点如下:
TDI来丢上传(即发送数据包)
NDIS来丢下载(即接收数据包)

衍生出一个问题:
丢包和延迟的区别?(自己测试)
TDI丢包和NDIS的丢包是什么区别?(自己用tdifw和passthru分别测试下)

结论是:
对于发送包来说:
到了NDIS 其实都可以算发送成功了(函数会返回ok) 期间再出错误  由协议保证重传
对于接收包来说: 
进了TDI层也算传输成功了  如果你收到的包在TDI层丢  协议不会重传


注意事项:
TCP和UDP是需要分开来处理的,TCP中有心跳包机制和重传机制

将ip地址信息和端口信息以及进程id信息从ALE层传输到tcp和udp层进行解析.

1 改善好ip connect获取部分
2\解析udp中的数据
3\解析tcp中的数据
4\屏蔽了进程监控函数里面的代码,最后的时候再添加上去.

tcp中能获取ip地址和端口
ip中也能获取到ip地址和端口 测试下这两层获取到的ip地址有什么区别?

另一个思路是使用NDIS Hook + tdi来实现限速,这个我也实现了


你可能感兴趣的:(windows,限速,NDIS,TDI,xp限速)