Click软件路由器实验

原创 2015年11月18日 08:50:18

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Click Modular Router

Click Modular Router 特别鸣谢hhsh 下面文章是对自己使用click软件路由器的总结,关于click的具体信息,大家可以在它的网站上获得http://www.read.cs....

scapy-整体设计和数据发送流程

scapy涉及了pf_packet套结字编程,路由以及面向对象设计等诸技术,它本身使用python编写,熟悉python的家伙这下有福了,可以目睹这个优秀的软件而无需下载编译源码之类的了。 scap...
  • dog250
  • dog250
  • 2011年01月19日 21:06
  • 5962

Linux网络编程:使用select函数实现socket 收发数据

所谓的回射是指:客户端A向服务端B发送数据,服务端B接收到数据之后,再将接收到的数据发送回客户端B。所谓的迭代服务器,是指服务器端只用一个进程处理或线程处理所有客户端的请求。与之对应的是并发服务器,并...

click 软件路由器

  • 2013年07月02日 10:50
  • 3.26MB
  • 下载

1-Click PC Tuneup软件-破解实录-[上]

[作者] 网名: 猪头三 站点: http://www.x86asm.com Email: pliceman_110@163.com QQ: 643439947 编程生涯: 2001~至今...

eNSP模拟实验——三层交换机与路由器的通信

搭建拓扑图如下: 配置命令如下: =================================================================================...

第二十一期 U-Boot启动OpenWrt实验 《路由器就是开发板》

这一期我们来做一个引导OpenWrt的实验,虽然还没有讲到OpenWrt的内容,但这里我们先拿一个我编译好的固件来实验一下,具体固件怎么编译下一期再讲。 如果使用RalinkSDK3.6的U-Boot...

路由器和交换机的综合实验(1)

1.     按拓扑图所示,完成各网络设备的基本配置。 2.     在四台交换机上配置MSTP协议,并将VLAN10,VLAN30映射到实例1,S3750-1为实例1的根,将VLAN20,VLAN...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Click软件路由器实验
举报原因:
原因补充:

(最多只允许输入30个字)