数据包转发[面试题]解决思路
发布时间:2011-07-03 07:15:24 文章来源:www.iduyao.cn 采编人员:星星草
数据包转发[面试题]
一个转发器能转发100个数据包每秒,数据包具有高中低的优先级,
当数据包数量过大时(比如150个每秒),
如何根据数据包的优先级实时丢弃低优先级的包以保证高优先级的数据包转发
(先丢低级的数据包,再丢中级的数据包,最后是丢高级的数包)。
设置高中低三个优先级队列不行,因为有延迟。
------解决方案--------------------
我在UDX协议中实现转发是这样实现的。
1.固定比例转发。
把要转发的三种数据放到三个队列中。记为。A,B,C,DATA[3];
我生成一个100字节表类是BYTE randtable[100];
然后,把,A,B,C,按百分比,我们自己设置的比,随即放入RANDTABLE.
randtable[90个A,5个B,5个C],但是ABC位子是随即分布的。
需要转发包时,从DATA[randtable(rand() % 100)]中取一个数据,转发即可。
转发的数据比就会是按你事先分配的百分比转发。
当出现某个队列为空时,随即分配下个队列。
2优先转发,直接取出优先队列数据转发,为空为止。
------解决方案--------------------
我局的可以这样
建3个链表/循环队列 a b c
然后再建一个有100个元素的 链表 d, d中的元素指向 a b c , 有包过来的时候按照优先级更新到a b c ,然后同时更新链表d,
如果包总数超过100个数目时,根据 a b c 头部的指针可以得到这时应该丢弃的包是在那个队列中, 然后从 a 或者 b 、c中丢掉, 同时把这个包从d 从丢弃。
只要管理a b c 的头部指针, 下一个应该被丢弃的包的位置总是可以知道,不需要太多的计算。 先拿到 a b c 的位置,就可以得到d中的位置,
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
如果客户端的机子突然断了电,那服务端还能收到FD_CLOSE事件么?
如题.....
已查到解决方案(心跳包)
来人,结贴。。。
------解决方案...
-
IOCP使用上的一点看法讨论。
iocp的实现,在msdn和codeproject上面的例子都是创建一个iocp,然后所有socket加入该端口监视,n个工作线...
-
h264 与 RTP 的区别?
同样都是视频应用的协议,他们的关系或者在协议簇中的位置有什么区别?
------解决方案--------------------
H...
-
openmeetings错误 求解决
将doc文件上传时出现错误
错误代码:
Name: error
Value: 2011-6-4 12:54:14 com.artofsolving.jodconver...
-
为什么计算机网络中一定要有一个MAC层(MAC地址),既然MAC地址和IP地址是有一定的映射关系的,为什么不能只用其中一个地址通信就可以了,...
-
P2P软件有技术门槛吗?
讨论一下P2P软件的技术:
1.NAT穿越
2.UDP可靠传输
3.分块调度策略
...
http://hr.baidu.com/www/job/jobDe...
-
以TCP为写的服务器和客户端程序 无法通信
基于面向连接的TCP,写了一个服务器程序和一个客户端程序。服务器负责监听一个端口等待...
-
毕设啊,来不及了,谁做过 OFDMA动态资源分配算法 的 MATLAB仿真??
我们毕设的题目是“OFDMA动态资源分配算法的研究”,我在网上也荡了一...
-
关于UDP包传送的问题
最近在佛山移动做一个项目,这个项目已经过了初验,现在需要终验。但由于一个问题迟迟没有解决,不敢跟客户提终验...
-
udp通信数据接收转发
小弟最近在写流媒体转发服务器程序,从原始服务器发送过来的媒体包,需要1对多的转发给不同的client,在主程序中...