PMIPv6 Implementation on NS-3
Download
Report
Transcript PMIPv6 Implementation on NS-3
한국기술교육대학교 컴퓨터공학부 한연희 교수
[email protected]
고려대학교 컴퓨터학과 최현영
[email protected]
NS-2를 이용한 최신 네트워크 시뮬레이션 단기강좌
2/51
What is NS3?
◦ ns-3 is a discrete-event network simulator for
Internet systems
intended to eventually replace the ns-2 simulator
not backwards-compatible with ns-2
a free, open source software project organized
around research community development and
maintenance
◦ Main Groups
Univ. of Washington, Georgia Tech., Bucknell University
◦ Financial Support
U.S. National Science Foundation & INRIA
3/51
Architecture
◦ ns-2
simulator core: c++ and Otcl
script: Otcl
◦ ns-3
simulator core: c++
script: c++
bindings with Python, but can run ns-3 without any
knowledge of Python
ns-3 is not an extension of ns-2
4/51
Current Release
◦ ns-3.9 (August 20, 2010)
Monthly download count of ns-3 releases
5/51
Progress Report (1/2)
6/51
Progress Report (2/2)
◦ ns3-3.9 (August 20, 2010)
Spectrum Modeling
OFDM
Underwater Acoustic Network
WiFi patches for bugs, etc.
See the page: http://www.nsnam.org/wiki/index.php/Ns-3.9
◦ ns3-3.10 (Current On-going Activity)
Initial support for the 802.11g PHY
Consolidate Wi-Fi MAC high functionality
Energy model WiFi additions
LTE support, etc.
See the page: http://www.nsnam.org/wiki/index.php/Ns-3.10
7/51
Features
◦ Alignment with real systems
sockets, device driver interfaces)
◦ conforms to standard input/output formats so that other
tools can be reused.
e.g., pcap trace output
◦ ns-3 is adding support for running implementation code
e.g., Linux TCP code
◦
◦
◦
◦
◦
◦
P2P link, shared link with CSMA.
Routing, ARP
A node can be equipped with multiple network interfaces.
Support (nearly) complete IPv6
Can run real implementation of applications.
Wireless
WiFi
WiMAX
UMTS (PPP)
8/51
Still use ns-2 or move to ns-3?
◦ ns-3 does not have all of the models that ns-2 currently
has.
◦ ns-3 does have new capabilities such as handling multiple
interfaces, use of IP addressing, more detailed 802.11
models.
Well-documented
◦ extensively documented API (doxygen):
9/51
Network Emulation
real machine
virtual
machine
ns-3
virtual
machine
ns-3
ns-3
real
machine
real
machine
Testbed
1) ns-3 interconnects virtual
machines
2) testbeds interconnect ns-3 stacks
Added in ns-3.5
Added in ns-3.3
10/51
LOG: PCAP Trace File 1
11/51
LOG: PCAP Trace File 2
12/51
LMA: Localized Mobility Agent
MAG: Mobile Access Gateway
IP Tunnel
IP-in-IP tunnel between LMA and MAG
LMA
Home Network
MN’s Home Network
(Topological Anchor Point)
MAG
LMA Address (LMAA)
That will be the tunnel entry-point
movement
MN’s Home Network Prefix (MN-HNP)
CAFE:2:/64
MN’ Home Address (MN-HoA)
MN continues to use it as long as
it roams within a same domain
MAG
LMM
(Localized Mobility Management)
Domain
Proxy Binding Update/Ack.
(PBU/PBA)
Control messages exchanged by MAG
to LMA to establish a binding between
MN-HoA and Proxy-CoA
Proxy Care of Address (Proxy-CoA)
The address of MAG
That will be the tunnel end-point
13/51
No Change to Host Stack
IP Mobility handled by the network, and transparent to the host
Any MN is just a IPv6 host
Home in Any Place
MAG sends the RA (Router Advertisement) messages advertising
MN’s home network prefix and other parameters
MAG will emulate the home link on its access link.
RA Unicast
RA should be UNICASTed to an MN
It will contain MN’s Home Network Prefix
Per-MN Prefix
M:1 Tunnel
LMA-MAG tunnel is a shared tunnel among many MNs.
One tunnel is associated to multiple MNs’ Binding Caches.
IPv4 Support
RFC 5844 (May 2010)
14/51
PBU: Proxy Binding Update
PBA: Proxy Binding Ack.
MN
MAG
MN Attachment
AAA&Policy Store
LMA
CN
AAA Query with MN-ID
AAA Reply with Profile
PBU with MN-ID, Home Network Prefix option (all zero), Timestamp option
Router Advertisement
(Home Network Prefix)
PBA with MN-ID, Home Network Prefix option
Tunnel Setup
Optional
DHCP Request
DHCP Server
DHCP Request
DHCP Response
DHCP Response
[Proxy-CoA:LMAA][MN-HoA:CN](data)
[MN-HoA:CN](data)
[MN-HoA:CN](data)
•
•
RA*: MN의 Prefix를 Policy Store에서 수신한 경우의 Router Advertisement
RA**: MN의 Prefix를 LMA에서 수신한 경우의 Router Advertisement
15/51
Scenario 1: Setting up Mobility Sessions on Demand
◦ Create additional mobility sessions on demand
e.g., additional connection for a particular service
◦ A new mobility session with a new prefix is created
LMA
Mobile IPTV
flow
PBU
MAG
LMA
Mobile IPTV
flow
MAG
PBU
MAG
MAG
VoIP
flow
VoIP
flow
WiMax
3G
WiMax
다른 인터페이스의 스위치
를 올려서 단순하게
접속만 시도
플로우 이동은 없음
3G
HTTP
flow
WiBro
3G
단말
WiBro
3G
단말
16/51
Scenario 2: Flow Mobility
◦ If another access is enabled on the MN, some of the
existing flows could be moved over, to achieve, e.g., load
balancing and better user experience
LMA
Mobile IPTV
flow
LMA
Mobile IPTV
flow
PBU
MAG
MAG
PBU
MAG
새로운 인터페이스로
한 개의 세션을 이동
MAG
VoIP
flow
WiMax
3G
WiBro
3G
단말
WiMax
3G
WiBro
VoIP
flow
3G
단말
17/51
[관련 WG: MEXT, MIPSHOP, NETEXT - 2010년 10월 현재]
Mobility Support in IPv6
[RFC 3775, June 2004]
Hierarchical Mobile IPv6
[RFC 4140, Aug. 2005]
Mobile IPv6 Support for
Dual Stack Hosts and Routers
[RFC 5555, June 2009]
Fast Handovers for Mobile IPv6
[RFC 4068, July 2005]
Multiple Care-of Addresses
Registration
[RFC 5648, Oct. 2009]
Flow Bindings in Mobile IPv6
and NEMO Basic Support
[draft-ietf-mext-flow-binding-11]
Traffic Selectors for Flow Binding
[draft-ietf-mext-binary-ts-05]
Host-based
IP Mobility
Network-based
IP Mobility
Horizontal Handover
A handover is initiated when mobile device
exits the boundaries of an administrative
domain. Single interface is used.
Proxy Mobile IPv6
[RFC 5213, Aug. 2008]
IPv4 Support for Proxy Mobile IPv6
[RFC 5844, May 2010]
Vertical Handover
A mobile device does need to move in order to
initiate a handover. Multiple interfaces are
required, but use one interface at a time.
Multiple Interface Management
Simultaneous use of multiple interfaces and
access networks. Association of an application
with an interface
Multiple Flow Management
Ability to split individual flows between links with
respect to the requirements of the flows and the
user preferences
Fast Handovers for Proxy Mobile
IPv6
[RFC 5949, Sept. 2010]
Multiple Care-of Addresses
Registration & Flow Bindings in
Proxy Mobile IPv6
[draft-trung-netext-flowmobility-support-01 & draftbernardos-netext-pmipv6flowmob-01]
18/51
19/51
Simulation Topology
10.1.1.0
n0 ------------- n1 n2 n3 n4
point-to-point |
|
|
|
===========
LAN 10.1.2.0
Simulation Scenario
◦ Ping(UDP) from n4 to n0
20/51
Simulation Script
◦ Create nodes
int nCsma=3;
NodeContainer p2pNodes;
p2pNodes.Create (2);
NodeContainer csmaNodes;
csmaNodes.Add (p2pNodes.Get (1));
csmaNodes.Create (nCsma);
◦ Attach devices
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
NetDeviceContainer p2pDevices;
p2pDevices = pointToPoint.Install (p2pNodes);
CsmaHelper csma;
csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
csma.SetChannelAttribute ("Delay", TimeValue (NanoSeconds (6560)));
NetDeviceContainer csmaDevices;
csmaDevices = csma.Install (csmaNodes);
21/51
◦ Install IPv4/IPv6 network stack
InternetStackHelper stack;
stack.Install (p2pNodes.Get (0));
stack.Install (csmaNodes);
◦ Assign IP address
Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer p2pInterfaces;
p2pInterfaces = address.Assign (p2pDevices);
address.SetBase ("10.1.2.0", "255.255.255.0");
Ipv4InterfaceContainer csmaInterfaces;
csmaInterfaces = address.Assign (csmaDevices);
22/51
◦ Install UDP Echo server/client application
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (p2pNodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
◦ Setup trace
pointToPoint.EnablePcapAll ("second");
csma.EnablePcap ("second", csmaDevices.Get (1), true);
◦ Start simulation
Simulator::Run ();
Simulator::Destroy ();
23/51
PCAP trace
24/51
25/51
Overview
◦ Based-on NS-3 3.8
◦ Implements some part of Mobile IPv6
Mobility header, BU/BA handler
MIPv6 functionality
PMIPv6
IPv6
◦ Designed for easy porting to newer version of NS-3
◦ Link-layer support: Wifi only
26/51
Tunneling
Routing
Mobility header process
◦ TunnelNetDevice – IPv6-in-IPv6 creator (Encapsulator)
◦ Ipv6TunnelL4Protocol – IPv6-in-IPv6 handler (Decapsulator)
◦ Ipv6StaticSourceRouting – Source address based routing
◦
◦
◦
◦
Ipv6MobilityL4Protocol – Mobility header handler
Ipv6MobilityDemux
Ipv6MobilityBindingUpdate – BU handler
Ipv6MobilityBindingAck – BA handler
PMIPv6 agent
Helper
Application
◦ Pmipv6Mag/ Pmipv6Lma – PBU/PBA processing
◦ BindingUpdateList/BindingCache – Store binding information
◦ MagHelper/ LmaHelper – Create and aggregate objects
◦ UnicastRadvd – Mac Unicast of RA in Wifi network
28/51
29/51
Important functions in Header class
◦ Serialize()
Compose packet data from member variables
◦ Deserialize()
Fill the variables in the class from the packet data
◦ GetSerializedSize()
Get total bytes of packetized data
◦ Print()
Print each field of header (used for ASCII-based trace)
30/51
Header implementation example
class Ipv6MobilityHeader : public Header
{
private:
uint8_t m_payload_proto;
uint8_t m_header_len;
uint8_t m_mh_type;
uint8_t m_reserved;
uint16_t m_checksum;
};
uint32_t
Ipv6MobilityHeader::Deserialize (Buffer::Iterator start)
{
Buffer::Iterator i = start;
m_payload_proto = i.ReadU8();
m_header_len = i.ReadU8();
m_mh_type = i.ReadU8();
m_reserved = i.ReadU8();
m_checksum = i.ReadNtohU16();
}
return GetSerializedSize ();
void Ipv6MobilityHeader::Print (std::ostream& os) const
{
os << "( payload_proto = " << (uint32_t)GetPayloadProto()
<< " header_len = " << (uint32_t)GetHeaderLen()
<< " mh_type = " << (uint32_t)GetMhType()
<< " checksum = " << (uint32_t)GetChecksum() <<")";
}
uint32_t Ipv6MobilityHeader::GetSerializedSize () const
{
return 6;
}
void
Ipv6MobilityHeader::Serialize (Buffer::Iterator start) const
{
Buffer::Iterator i = start;
}
i.WriteU8 (m_payload_proto);
i.WriteU8 (m_header_len);
i.WriteU8 (m_mh_type);
i.WriteU8 (m_reserved);
i.WriteU16 (0);
31/51
33/51
(1) – MN attachment event trigger
◦ Create binding update list
(2) – Sending PBU
(3)~(5) – IPv6 packet transmission among nodes
◦ Packet(PBU) will be arrived at the LMA
(6) – Received by mobility header handler
(7)~(9) – Demultiplexing mobility header based
on Mhtype field in the packet
(10) – Received by PBU handler
◦ Create or update binding cache
◦ Setup tunneling and routing
34/51
(11) – Sending PBA
(12)~(14) – IPv6 packet transmission among
nodes
◦ Packet(PBA) will be arrived at the MAG
(15) – Received by mobility header handler
(16) –(18) – Demultiplexing
(19) – Received by PBA handler
◦ Update binding update list
◦ setup tunneling and routing
35/51
36/51
(1)~(2) – IPv6 packet arrival
◦ Data packet from source node, either CN or MN
(3)~(4) – Incoming packet process in IPv6
◦ Query to routing module
◦ (3)’~(4)’ – Subsequent routing query (default)
◦ (3)”~(4)” – Source based routing query only in MAG
Source based routing is higher priority than static
routing
(5) – Forwarding the packet to the MAG via
tunnel device
◦ IPv6-in-IPv6 Encapsulation performed
37/51
(6) – Sending encapsulated packet
(7)~(9) – IPv6 packet transmission among
nodes
(10)~(11) – Incoming packet process in IPv6
◦ Query to routing module
(12) – Received by IPv6-in-IPv6 packet
handler
◦ Decapsulation performed
(13) – Sending decapsulated packet
(14) – Sending Data Packet to the destination
node, either CN or MN
38/51
MagHelper
◦ Function
Install(node)
Create PMIPv6 related objects and aggregate into Node
Register callback for MN attachment trigger to WifiMac in
node
Install(node, addr, Ptr<Node> ap_node)
Create PMIPv6 related objects and aggregate into Node
Register callback for MN attachment trigger to WifiMac in
ap_node
SetProfileHelper(Pmip6ProfileHelper)
Set profile helper
39/51
LmaHelper
◦ Function
Install(node)
Create PMIPv6 related objects and aggregate into Node
SetProfileHelper(Pmip6ProfileHelper)
Set profile helper
SetPrefixPoolBase(prefix, prefix_len)
Set Prefix Pool information
Pmip6ProfileHelper
◦ Manage each MN’s profile information
◦ Function
AddProfile(MN_ID, LL_ID, LMAA, Prefixes)
Add profile for an MN
40/51
41/51
Setup mobility
MobilityHelper mobility;
Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
positionAlloc->Add (Vector (-100.0, 0.0, 0.0)); //MAG1AP
positionAlloc->Add (Vector (100.0, 0.0, 0.0)); //MAG2AP
mobility.SetPositionAllocator (positionAlloc);
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (aps);
Ptr<ListPositionAllocator> staPositionAlloc = CreateObject<ListPositionAllocator> ();
staPositionAlloc->Add (Vector (-100.0, 100.0, 0.0)); //STA
mobility.SetPositionAllocator (staPositionAlloc);
mobility.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");
mobility.Install(sta);
Ptr<ConstantVelocityMobilityModel> cvm = sta.Get(0)->GetObject<ConstantVelocityMobilityModel>();
cvm->SetVelocity(Vector (20.0, 0, 0)); //move to left to right 20.0m/s
42/51
Setup Wifi
Ssid ssid = Ssid("MAG");
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
WifiHelper wifi = WifiHelper::Default ();
NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
wifiPhy.SetChannel (wifiChannel.Create ());
wifiMac.SetType ("ns3::NqapWifiMac",
"Ssid", SsidValue (ssid),
"BeaconGeneration", BooleanValue (true),
"BeaconInterval", TimeValue (MilliSeconds(100)));
mag1ApDev = wifi.Install (wifiPhy, wifiMac, mag1Net.Get(1));
//WLAN interface
wifiMac.SetType ("ns3::NqstaWifiMac",
"Ssid", SsidValue (ssid),
"ActiveProbing", BooleanValue (false));
staDevs.Add( wifi.Install (wifiPhy, wifiMac, sta));
43/51
Setup PMIPv6
//attach PMIPv6 agents
Pmip6ProfileHelper *profile = new Pmip6ProfileHelper();
//adding profile for each station
profile->AddProfile(Identifier("[email protected]"),
Identifier(Mac48Address::ConvertFrom(staDevs.Get(0)->GetAddress())),
backboneIfs.GetAddress(0, 1),
std::list<Ipv6Address>());
Pmip6LmaHelper lmahelper;
lmahelper.SetPrefixPoolBase(Ipv6Address("3ffe:1:4::"), 48);
lmahelper.SetProfileHelper(profile);
lmahelper.Install(lma.Get(0));
Pmip6MagHelper maghelper;
maghelper.SetProfileHelper(profile);
maghelper.Install (mags.Get(0), mag1Ifs.GetAddress(0, 0), aps.Get(0));
maghelper.Install (mags.Get(1), mag2Ifs.GetAddress(0, 0), aps.Get(1));
44/51
Setup traffic
Udp6ServerHelper udpServer(6000);
ApplicationContainer apps = udpServer.Install (sta.Get (0));
apps.Start (Seconds (1.0));
apps.Stop (Seconds (10.0));
uint32_t packetSize = 1024;
uint32_t maxPacketCount = 0xffffffff;
Time interPacketInterval = MilliSeconds(10);
Udp6ClientHelper udpClient(Ipv6Address("3ffe:1:4:1:200:ff:fe00:c"), 6000);
udpClient.SetAttribute ("Interval", TimeValue (interPacketInterval));
udpClient.SetAttribute ("PacketSize", UintegerValue (packetSize));
udpClient.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
apps = udpClient.Install (cn.Get (0));
apps.Start (Seconds (1.5));
apps.Stop (Seconds (10.0));
45/51
PBU Trace in the LMA
46/51
Trace for Handover in the MN
47/51
Tunneling Trace in the LMA
48/51
Tunneling Trace in the LMA
49/51
390
380
Sequence
5.3849s
5.42389s
370
360
350
5.2
5.25
5.3
5.35
5.4
5.45
5.5
5.55
5.6
Time(s)
50/51
Thank you
- Q&A -
51/51