关闭

Click软件路由器实验

1508人阅读 评论(0) 收藏 举报
分类:

Click路由器的官方网站

目标:构建一台软件路由器


测试1:实现发包与接收

第一步:安装VMware,在VMware里安装两个Ubuntu虚拟机A和B(可以利用克隆的方式减少空间占用),按照下图为主机、虚拟机添加网卡并配置网卡的IP。



第二步:下载源代码,放在虚拟机里,编译click。

编译命令:进入click目录,

./weconfig
make


第三步:修改click配置文件。

1.修改VM1中的发送配置文件 /conf/zxzconf/pspgen.click

将源MAC、源IP均设为VM1的Eth1(注意:IP为倒字节序)

将目的MAC、目的IP设为VM2的Eth1。


2.修改VM2中的接收配置文件 /conf/zxzconf/printpsp.click

FromDevice(eth1)


第四步:进行发送与接收的测试。

在VM1中运行 pspgen.click, 在VM2中运行printpsp.click

---------------------------------------------------------------------------------

测试2:实现数据包的转发

在测试1的基础上进行以下操作:

1.修改VM1中的发送配置文件 /conf/zxzconf/pspgen.click

将源MAC、源IP均设为VM1的Eth1(注意:IP为倒字节序)

将目的MAC设为VM2的Eth1(网络中的下一跳);

将目的IP设为VM1的Eth2(真实的目的主机)。

PS:在这里为什么目的MAC和目的IP不是同一个网卡?

解答:MAC层协议对于PSP协议层是透明的,也就是说,源主机想把数据包发送给真实的目的主机,所以报文中的目的IP地址是真实目的主机的IP,但是由于需要经过路由器进行转发,所以数据包中的目的MAC地址实际上是路由器的MAC地址而不是真实目的主机的MAC。数据包到达路由器后,路由器会根据目的IP查询路由表得到真实目的主机MAC,然后将数据包中的目的MAC修改为真实的主机的MAC,从而将数据包转发给真实主机,达到本次通信的目的。这就是为什么上述目的MAC与目的IP不是同一个网卡的原因。


2.修改VM1中的接收配置文件 /conf/zxzconf/printpsp.click

FromDevice(eth2)

3.修改VM2中的 /conf/zxzconf/simple_psp_router.click ,参考下面代码中的注释部分。

// mytest-ip-route.click

//Bob
//local eth1 192.168.64.12 00:0c:29:c7:34:04    
//local eth2 10.129.64.12  00:0c:29:c7:34:0e    

//Alice
//dest  eth1 192.168.64.11 00:0c:29:ea:48:1e
//dest  eth2 10.129.64.11  00:0c:29:ea:48:28


psp :: Print("Forward PSP Pkt") 
    -> rt :: PSPLookup(
          192.168.64.12.0.0.0.0	0,   //这是psp协议的地址格式,后面跟的是端口号,意思是来自于前面那个地址的数据将会被送到0号端口进行处理
          10.129.64.12.0.0.0.0	0, 
	  192.168.64.11.0.0.0.0	1,
	  10.129.64.11.0.0.0.0	2);

c0 :: Classifier(12/0600, -);  //根据类型标记进行分类,忽略数据包的前12个字节,如果第13个字节和第14个字节的内容是 0600,则发到端口0,否则发到端口1
out0 :: Queue(200) -> todevice0 :: ToDevice(eth1);

c1 :: Classifier(12/0600, -);
out1 :: Queue(200) -> todevice1 :: ToDevice(eth2);

FromDevice(eth2) -> c0;       //从eth2网卡接收到的数据会被送到c0分类器进行处理
c0[0]->psp;                   //分类器c0[0]的数据会被送到psp里进行查表转发,c0[1]中的数据会被丢弃
c0[1]->Discard;


FromDevice(eth1) ->c1;
c1[0]->psp;
c1[1]->Discard;

rt[0]->Discard;
rt[1] -> PSPMacap(00:0C:29:EA:48:28)
     -> Print(rt1) 
     -> out0;


// Forwarding path for eth2
rt[2]-> PSPMacap(00:0C:29:EA:48:28) //对于需要转发的数据包,修改报文头中的目的MAC为真实目的主机的MAC
     -> Print(rt2) 
     -> out1;


按照上面三步修改配置完后应该能够实现转发的功能了,但是经过测试发现,VM2能收到数据包,但是VM1并不能收到VM2转发过来的数据。这是因为在click软件路由器中,路由表默认是静态的,也就是被写死的,所以,需要手动修改IP才行。下面的第4步就是进行修改。


4.修改VM2中的 /elements/local/psproutetable.cc

第37行,改为VM1的Eth2的IP(注意为倒字节序)


5.make


6.在A中运行pspgen.click  和 printpsp.click , 在B中运行 simple_psp_router.click

2
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:63787次
    • 积分:861
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:1篇
    • 译文:0篇
    • 评论:8条
    最新评论