1、HUNAN UNIVERSITY计算机网络实验报告学 生 姓 名 肖 大 鹏 学 生 学 号 201308030408 专 业 班 级 通 信 1303 班 组 员 姓 名 朱 凯 刘 代 晓 2016 年 05 月 30 日令牌桶 tokenbuket一、 实验分工 朱凯:负责烧制 NetMagic 硬件代码,并解决路由器存在的问题。刘代晓:负责操控 Linux 终端,编译所给的代码输入命令并运行。肖大鹏:负责路由器和各终端的连接,并操作 Windows 主机 ping。二、 实验内容及原理实验仪器:两台主机,一台需要装有 Linux 操作系统(可以是虚拟机)一台装有 quartus 的 W
2、indows 系统;两根千兆网线,注意控制器连 1 号端口,Quartus 主机网线连 4 号端口。仪器连接图:实验内容原理:1.计数器软件所需基本知识:Linux 终端简单命令行操作;网络协议基本知识;网络报文 格式基本知识,计算机系统基本知识。2.令牌桶原理:如图 1.1 1) 令牌以一定的速率(v)放入桶中。 2) 每个令牌允许源发送一定数量的比特(b) 。 3) 发送一个包,流量调节器就要从桶中删除与包大小相等的令牌数。 4) 如果没有足够的令牌发送包,这个包就会等待直到有足够的令牌(在整形器的情况下)或者包被丢弃。 5) 桶有特定的容量,如果桶已经满了,新加入的令牌就会被丢弃。因此,
3、在任何时候, 源发送到网络上的最大突发数据量与桶的大小成比例。令牌桶允许突发,即桶深为 (h) ,突发处理 h 个报文,但是不能超过限制。3. 基于 NetMagic 实现令牌桶,硬件设计参考,tokenbucket.sof 是烧制的令牌桶硬件代码, 软件控制端通过下发 NMAC 写报文来控制端口报文速率,如图 1.2,控制端将令牌规则 (令牌下发速率 v,桶深 h,一次下发多少令牌 b)写入 RAM 表,NetMagic 硬件读取规 则后来通过令牌来控制端口速率。4. RAM 虚拟地址空间定义,如图 1.3 所示,1400_0008 代表令牌桶深度,即表示可突发处 理的报文长度;1400_0
4、009 代表代表令牌增加粒度,表示一次增加多少个报文;1400_000a代表令牌增加时间粒度,每个时钟周期增加 1 次令牌,NetMagic 时间频率为 125MHz, 因此一个时钟周期为 8ns,如果 t=3,则代表 8ns*3=24ns 增加 1 次。三、 实验结果1. 将 Linux 虚拟机设置为桥接模式,将物理机和虚拟机的 IP 地址设置同一网段,虚拟 机配置 IP 地址如下图所示 2. 烧制 tokenbucket.sof 硬件代码,怎样烧制详见 Hi-Packet3. 3. 进入 Linux 虚拟机,编译代码(gcc tokenbucket.c o tokenbucket lpca
5、p -lnet) ,运行 我们的软件,选择端口,一般是 ethX。 4. 设置令牌桶深 h:256,令牌粒度 b:128,速率 t:25000000(NetMagic 是 125Mhz 即 8 纳秒为一个时钟周期,t 为 1 个时钟周期,那么 25000000 个时钟周期8 纳秒 =0.2 秒,即 0.2 秒下发一次令牌)5. 打开物理机 windows,ping 另外一台主机,可以看到 ping 流畅不掉包6. 重新进入 Linux,将时间粒度增大,时间粒度 v:250000000(此时为 2 秒下发一次令牌)7. 可以看到访问请求超时,实验成功。四、 结果分析在本次实验中,我们小组成功的基
6、于 NetMagic 实现了令牌桶的功能,通过在 Linux 的软件控制端通过下发 NMAC 写报文来控制端口报文速率和报文深度,下发令牌桶规 则到 NetMagic 的 RAM。实验基于 Libpcap/Libnet 套件来实现 NMAC 协议,采用 Libnet 封装读请求报文,然后用 Libpcap 抓 取读响应报文。达到流量整形的效果。我们学习到了在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送。令牌桶算法就实现了这个功能,可控制发送到网络上数据的数目,并允许突发数据的发送。令牌桶这种控制机制基于令牌桶中是否存在令牌来指示什么时候可以发送流量。令牌桶中的每一个令牌都代表一个字节。如果令牌桶中存在令牌,则允许发送流量;而如果令牌桶中不存在令牌,则不允许发送流量。因此,如果突发门限被合理地配置并且令牌桶中有足够的令牌,那么流量就可以以峰值速率发送。