IPv4

IPv4 addresses assignment

为了在网络上使用IPv4,首先要做的是分配IPv4地址。

任何支持IPv4的ns-3节点都至少有一个NetDevice:ns3 :: LoopbackNetDevice。 环回设备地址是127.0.0.1。 所有其他NetDevice将有一个(或多个)IPv4地址。

需要注意的是,和今天一样,ns-3没有NAT模块,也没有遵循关于过滤私有地址(RFC 1918)的规则:10.0.0.0/8,172.16.0.0/12和192.168.0.0/16。 这些地址被路由为任何其他地址。 这种行为在未来可能会改变。

IPv4全局地址可以是:

  • 手动分配
  • 通过DHCP分配

ns-3可以同时使用这两种方法,理解这两者的含义是相当重要的。

Manually assigned IPv4 addresses

这是最简单也是用的最多的。例子:

Ptr<Node> n0 = CreateObject<Node> ();
Ptr<Node> n1 = CreateObject<Node> ();
NodeContainer net (n0, n1);
CsmaHelper csma;
NetDeviceContainer ndc = csma.Install (net);

NS_LOG_INFO ("Assign IPv4 Addresses.");
Ipv4AddressHelper ipv4;
ipv4.SetBase (Ipv4Address ("192.168.1.0"), NetMask ("/24"));
Ipv4InterfaceContainer ic = ipv4.Assign (ndc);

这种方法会将两个全局IPv4地址添加到节点。

请注意,地址是按顺序分配的。 因此,第一个节点/网络设备将具有“192.168.1.1”,第二个“192.168.1.2”等等。

可以重复上述操作,将多个地址分配给一个节点。 但是,由于Ipv4AddressHelper的单例本质,首先应该分配一个网络的所有地址,然后更改网络基础(SetBase),然后重新分配一个。

或者,可以将一个特定的地址分配给一个节点:

Ptr<Node> n0 = CreateObject<Node> ();
NodeContainer net (n0);
CsmaHelper csma;
NetDeviceContainer ndc = csma.Install (net);

NS_LOG_INFO ("Specifically Assign an IPv4 Address.");
Ipv4AddressHelper ipv4;
Ptr<NetDevice> device = ndc.Get (0);
Ptr<Node> node = device->GetNode ();
Ptr<Ipv4> ipv4proto = node->GetObject<Ipv4> ();
int32_t ifIndex = 0;
ifIndex = ipv4proto->GetInterfaceForDevice (device);
Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("192.168.1.42"), NetMask ("/24"));
ipv4proto->AddAddress (ifIndex, ipv4Addr);

DHCP assigned IPv4 addresses

Tracing in the IPv4 Stack

互联网堆栈在其各种协议实现中提供了许多跟踪源。 这些跟踪源可以使用自己的自定义跟踪代码来挂钩,或者在某些情况下可以使用我们的帮助函数来安排跟踪启用。

ARP提供两个跟踪挂钩,一个在缓存中,一个在三层协议中。 缓存中的跟踪访问者被命名为“Drop”。当数据包通过需要ARP的接口传输时,首先排队等待在ARP缓存中传输,直到解析所需的MAC地址。 尝试获取地址时可能会进行多次重试,如果超过最大重试次数,则所涉及的数据包将被ARP丢弃。 如下情况,ARP缓存中的第一个跟踪挂钩被调用:

  • 如果出站数据包放置在ARP高速缓存挂起地址解析中,并且在最大重试次数内不能进行解析,则会丢弃出站数据包并触发此跟踪;

第二个跟踪挂钩在ARP L3协议(也称为“Drop”)中,并且可能由于多种原因而被调用:

  • 如果收到一个不等待回复的条目的ARP应答,则ARP应答包被丢弃,并且这个跟踪被触发;
  • 如果收到一个不存在的条目的ARP应答,则ARP应答包被丢弃,并且这个跟踪被触发;
  • 如果ARP高速缓存条目处于DEAD状态(超时)并收到ARP应答数据包,则回复数据包将被丢弃,并触发此跟踪。
  • 每个ARP高速缓存条目都有一个未决数据包的队列。 如果超出队列的大小,则会丢弃出站数据包,并触发此跟踪。

IPv4三层协议提供三个跟踪挂钩。 这些是“Tx”(ns3 :: Ipv4L3Protocol :: m_txTrace),“Rx”(ns3 :: Ipv4L3Protocol :: m_rxTrace)和“Drop”(ns3 :: Ipv4L3Protocol :: m_dropTrace)跟踪源。

“Tx”跟踪在许多情况下被触发,所有这些都表明给定的数据包将被发送到给定的ns3 :: Ipv4Interface:

  • 在发往广播地址的数据包的情况下,对Ipv4InterfaceList进行迭代,并且对于每个接口处于启用状态并且可以对数据包进行分段或者具有足够大的MTU来传输数据包的情况下,跟踪被命中。 请参阅ns3 :: Ipv4L3Protocol :: Send。
  • 在需要路由的数据包的情况下,可以在将分组发送到适合于默认网关的接口之前触发“Tx”跟踪。 请参阅ns3 :: Ipv4L3Protocol :: SendRealOut。
  • 同样在需要路由的分组的情况下,“Tx”跟踪可以在分组被发送到适合于发现的路由的输出接口之前被触发。 请参阅ns3 :: Ipv4L3Protocol :: SendRealOut。

当数据包从设备传递到ns3 :: Ipv4L3Protocol :: Receive函数时,将触发“Rx”跟踪:

  • 在接收函数中,迭代Ipv4InterfaceList,如果接收设备对应的Ipv4Interface处于UP状态,则触发跟踪。

丢弃数据包的任何情况下(发送和接收路径)都会触发“Drop”跟踪:

  • 在ns3 :: Ipv4Interface :: Receive函数中,如果接收设备对应的接口处于DOWN状态,则丢弃数据包并触发丢弃跟踪。
  • 同样在ns3 :: Ipv4Interface :: Receive函数中,如果发现校验和不正确,则数据包将被丢弃并触发放置轨迹。
  • 在ns3 :: Ipv4L3Protocol :: Send中,为广播地址绑定的传出数据包将被丢弃,如果设置了“不分段”位并且分段可用且需要,则会触发“丢弃”跟踪。
  • 同样在ns3 :: Ipv4L3Protocol :: Send中,如果分段不可用并且是必需的(MTU <分组大小),则丢弃以广播地址为目的地的传出分组并且“丢弃”跟踪被命中。
  • 在广播地址的情况下,为每个输出接口克隆输出数据包。如果任何接口处于DOWN状态,则“Drop”跟踪事件将引用复制的数据包。
  • 在需要路由的数据包的情况下,如果没有找到到远程主机的路由,则丢弃外出数据包,并且触发“丢弃”跟踪事件。
  • 在ns3 :: Ipv4L3Protocol :: SendRealOut中,丢弃正在路由的传出数据包,如果设置了“不分段”位并且分段可用且需要,则会触发“丢弃”跟踪。
  • 在ns3 :: Ipv4L3Protocol :: SendRealOut中,如果分段不可用并且是必需的(MTU <分组大小),则将丢弃正在路由的传出分组,并且命中“丢弃”跟踪。
  • 如果所需的Ipv4Interface处于DOWN状态,将丢弃正在路由的传出数据包,并触发“Drop”跟踪事件。
  • 如果数据包正在被转发,并且超过了TTL(请参阅ns3 :: Ipv4L3Protocol :: DoForward),则数据包将被丢弃,并触发“Drop”跟踪事件。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容

  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,956评论 1 13
  • 由硬件交换的帧需要使用正确的硬件地址定位到正确的接口;否则,无法传输数据。一个传统IPv4网络需要使用自已的地址:...
    Myth52125阅读 1,053评论 0 0
  • 《Tcp/Ip协议族》笔记 网际协议版本4(IPv4) IP分组由一个基本首部和一些选项构成,这些选项有时用于促进...
    Zhang21阅读 3,427评论 1 0
  • IP地址 IP地址是什么? IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”...
    nice_o阅读 18,214评论 0 23
  • 在黑暗中坚持最后的挣扎 靠的是责任和信念
    A君明日阅读 55评论 0 0