0

在 Omnet++/Inet 场景中,我有几个无法通信的 LISP 路由器。我的意思是MapRequestLISP router1to发送的消息LISP router2没有按预期转发到中央网络,而是router2将消息发送回 torouter1并生成以下消息错误

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

我不明白为什么会发生这种情况,因为在系统中我有另外几个 lisp 路由器,它们按预期完美地工作。.irt所以我认为文件中一定有错误。.irt与工作路由器相比,我以镜面反射的方式编写了文件,只更改了 IP 地址。我不知道“接口 ppp0 不广播”是什么意思......这是添加的路由器的文件:

PITR2.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.

lispRouter4.irt

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.

最后是 .NED 文件中的链接:

lispRouter4: LISPRouter {
        parameters:
            routingFile = "lispRouter4.irt";
            @display("p=640,322");
 }

PITR2: LISPRouter {
        parameters:
            mapServerAddress = "mapServer";
            routingFile = "PITR2.irt";
            @display("p=442,314;is=n");
}

...
PITR2.pppg++ <--> ppLink <--> lispRouter4.pppg++;

你有什么主意吗?谢谢

4

1 回答 1

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++;
意味着为了与 连接PITR2lispRouter4在下PITR2 一个 pppg端口被创建和使用,例如pppg[2]与 name ppp2。而且我们不知道这个端口的确切索引,因为它取决于在.ned文件中创建连接的顺序。
建议的解决方案:修改您的.ned文件并:

  1. .ned您的路由器中,您可能有类似inout pppg[]. 将其更改为inout pppg[5]写入该路由器所需端口数而不是 5 的位置ppp(根据您的网络拓扑)。方括号中的数字是此端口的大小。
  2. .ned您的网络中,将使用的每个连接定义更改pppg++为如下所示:
    PITR2.pppg[0] <--> ppLink <--> lispRouter4.pppg[2];
    请记住,您不能在同一路由器中使用两次相同的端口索引,并且该索引不能超过端口总大小减一。
  3. .irt根据您在前面所做的端口索引修改文件中的路由表。端口名称pppg[X]pppX
于 2015-07-21T10:55:22.390 回答