在Omnet ++ / Inet场景中,我有几个无法通信的LISP路由器。我的意思是,从MapRequest
发送到LISP router1
的{{1}}邮件不会按预期转发到中央网络,但是LISP router2
会将邮件发送回router2
并且生成以下消息错误
router1
我不明白为什么会这样,因为在系统中我有另外几个lisp路由器,它们按预期完美地工作。因此,我认为Setting source IP=192.168.0.7
INFO(lispRouter4): srcAddress=192.168.0.7, dstAddress=192.168.0.254
INFO: Source IP=192.168.0.7 address not in EID space.
Destination IP=192.168.0.254 address not in EID space.
Handing over packet to regular IPv4-routing
output interface is ppp0, next-hop address: <unspec>
** Event #26 T=0 MultiHomingNetwork.lispRouter1.networkLayer.arp (ARP, id=109), on `LISPMapRegister-#1' (IPDatagram, id=263)
Packet (IPDatagram)LISPMapRegister-#1 arrived from higher layer, output interface ppp0 is not broadcast, skipping ARP
** Event #27 T=0 MultiHomingNetwork.lispRouter2.networkLayer.arp (ARP, id=185), on `LISPMapRegister-#2' (IPDatagram, id=264)
Packet (IPDatagram)LISPMapRegister-#2 arrived from higher layer, output interface ppp0 is not broadcast, skipping ARP
** Event #28 T=0 MultiHomingNetwork.lispRouter3.networkLayer.arp (ARP, id=233), on `LISPMapRegister-#3' (IPDatagram, id=265)
Packet (IPDatagram)LISPMapRegister-#3 arrived from higher layer, output interface ppp0 is not broadcast, skipping ARP
** Event #29 T=0 MultiHomingNetwork.lispRouter4.networkLayer.arp (ARP, id=307), on `LISPMapRegister-#4' (IPDatagram, id=266)
Packet (IPDatagram)LISPMapRegister-#4 arrived from higher layer, output interface ppp0 is not broadcast, skipping ARP
文件中必定存在错误。与工作路由器相比,我以镜面方式编写了.irt
个文件,只更改了IP地址。我不知道&#34;接口ppp0是不是广播&#34; ...这意味着添加的路由器的文件:
PITR2.irt
.irt
lispRouter4.irt
ifconfig:
# interface 0 to router
name: ppp0 inet_addr: 192.168.0.6 MTU: 1500 Metric: 1
name: ppp1 inet_addr: 192.168.0.6 MTU: 1500 Metric: 1
ifconfigend.
route:
192.168.0.4 0.0.0.0 255.255.255.255 H 0 ppp0
192.168.0.7 0.0.0.0 255.255.255.255 H 0 ppp1
192.168.0.254 0.0.0.0 255.255.255.255 H 0 ppp0
routeend.
最后这些是.NED文件中的链接:
ifconfig:
# interface 0 to router
name: ppp0 inet_addr: 192.168.0.7 MTU: 1500 Metric: 1
name: ppp1 inet_addr: 192.168.0.7 MTU: 1500 Metric: 1
name: eth0 inet_addr: 132.187.7.1 Mask: 255.255.255.0 MTU: 1500 Metric: 1
ifconfigend.
route:
192.168.0.0 0.0.0.0 255.255.255.0 H 0 ppp0
132.187.7.0 0.0.0.0 255.255.255.0 H 0 eth0
routeend.
你知道吗?
感谢
答案 0 :(得分:0)
根据日志,路由器lispRouter4
将数据报发送到目标地址192.168.0.254
。路由器PITR2
接收此数据报,检查他自己的任何地址是否不等于目的地址,因此查看自己的路由表并找到以下条目:
192.168.0.254 0.0.0.0 255.255.255.255 H 0 ppp0
此路由的目标地址与数据报的目标地址匹配,因此PITR2
通过ppp0
转发此数据报。
消息interface ppp0 is not broadcast, skipping ARP
表示PPP不支持ARP协议,因为不可能通过PPP向所有其他节点发送消息。通常,ARP用于获取知道其IP地址的节点的MAC地址,并且广播是实现该目标所必需的
如果没有完整的拓扑结构和路由器的所有路由,很难提出解决方案。但是,我建议验证所需的路由器是否具有192.168.0.254
地址的接口(在其ifconfig:
文件的*.irt
部分中定义)。
编辑问题可能是由于++
文件中的密码使用.ned
运算符引起的。条目
PITR2.pppg++ <--> ppLink <--> lispRouter4.pppg++;
表示为了将PITR2
与lispRouter4
联系起来,在PITR2
中创建并使用下一个 pppg
端口,例如{{1}名称为pppg[2]
的名称。并且我们不知道此端口的确切索引,因为它取决于在ppp2
文件中创建连接的顺序。
建议的解决方案:修改您的.ned
文件并:
.ned
中,您可能有.ned
之类的内容。将其更改为inout pppg[]
,而不是5写入该路由器所需数量的inout pppg[5]
端口(根据您的网络拓扑)。方括号中的数字是此端口的大小。ppp
中,将使用.ned
的每个连接定义更改为以下内容:pppg++
PITR2.pppg[0] <--> ppLink <--> lispRouter4.pppg[2];
个文件中的路由表。端口.irt
的名称为pppg[X]
。