NS3 应用层学习笔记(1)

四种套接字以及使用实例

套接字常用的套接字有两种,包括两种: SOCK_STREAM、SOCK_DGRAM。对应的也就是常用的UDP,TCP对应套接字。

原始套接字

原始套接字也即RAW SOCKET, 该种套接字可以直接发送/接收IP协议数据包而不需要任何传输层协议。

packet套接字

该种套接字也就是SOCK_PACKET的,可以直接越过传输层和网络层在数据链路层进行报文收发。
这三种对应的关系如下:
在这里插入图片描述
下方为在NS3中相关socket的类及实现过程。
在这里插入图片描述

NS3 应用层协议

NS3 提供了很多内置应用层协议。如下图所示:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

PacketSink

从上图可以看出对于接收方有着很通用的应用层协议PacketSink。该服务模型可以接收所有的下层协议的分组。包括(TCP, UDP, IPv4, IPv6, NetDevice), 该应用层通过 trace变量系统对分组的信息进行打印。

OnOffApplication

该应用层系统也很经典, 可以周期地均匀发送数据分组,该应用层协议也是应用很多的分组产生器。

Ping

该指令可以模拟 net-tools中的链路通断测试。该应用层协议也是一个很好的 RAW SOCKET使用实例。

UDP

除此之外,也可以进行自定义应用层协议,这就需要对基础的Socket使用方法进行熟悉。 例如常用的UDPhi用样例如下

  Ptr<Socket> srcSocket = Socket::CreateSocket (nSrc, TypeId::LookupByName ("ns3::UdpSocketFactory"));
  srcSocket->Bind ();
  srcSocket->SetRecvCallback (MakeCallback (&srcSocketRecv));

  Ptr<Socket> dstSocket = Socket::CreateSocket (nDst, TypeId::LookupByName ("ns3::UdpSocketFactory"));
  uint16_t dstport = 12345;
  Ipv4Address dstaddr ("10.20.1.2");
  InetSocketAddress dst = InetSocketAddress (dstaddr, dstport);
  dstSocket->Bind (dst);
  dstSocket->SetRecvCallback (MakeCallback (&dstSocketRecv));

总结

总之,NS3 提供了模拟不同应用层协议的基础,并且提供了丰富的应用层协议的实现,可以参考源代码目录下的示例程序进行学习。


版权声明:本文为weixin_43897646原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>