Optical burst switching (OBS) Network:
Optical Burst Switching (OBS) is an optical network technology that aims to improve the use of optical networks resources when compared to optical circuit switching (OCS). OBS is implemented using Wavelength Division Multiplexing (WDM), a data transmission technology that transmits data in an optical fibre by establishing several channels, each channel corresponding to a specific light wavelength.
Optical Burst Switching is used in core networks, and viewed as a feasible compromise between the existing Optical Circuit Switching (OCS) and the yet not viable Optical Packet Switching (OPS).
In OBS, packets are aggregated into data bursts at the edge of the network to form the data payload
Techopedia explains Optical Burst Switching (OBS)
Optical Burst Switching has several distinctive features: first, the packets are aggregated in the ingress (entry) node, for a very short period of time. This allows that packets that have the same
constraints, e.g., the same destination address and maybe, the same quality of service requirements are sent together as a burst of data (therefore the term Burst in the concept name). When the burst arrives at the egress (exit) node, it is disassembled and its constituent packets routed to their destination.
While the burst is being assembled in the ingress node, or possibly, after the burst has been assembled, a control packet (or header packet), containing the routing information for that burst is sent to the network, ahead of the burst. The time that separates the transmission of the control packet and the transmission of the burst is termed the offset time, and it must be long enough to allow all the routers in the predicted path the burst will take, to be configured, and only for the time needed for the burst to cross the network. When the network nodes are configured, the burst departs the ingress node and travels through the network in an all-optical form, using the circuit that was previously established by the control packet.
The second characteristic of OBS is that the routing information is transmitted in the Control Packet and is not part of the data burst itself. In fact, the burst crosses the intermediate nodes in the
network using the pre-established and pre-configured circuit in an agnostic manner, i.e., the node does not need to interpreted the data in the burst, and so, it does not need to know the format of the data in the burst. This is another special feature of OBS.
Another distinctive characteristic of OBS is that the Control Packet will undergo optical to electronic to optical conversion at each intermediate node, and also optical to electronic conversion at the egress node, as to allow these nodes to be able to configure its optical switching devices. A final characteristic of OBS networks is that there is what is called a data and control plane separation, i.e., the channel that is used to transmit the control packets is specific and different from the channels that are used to transmit the data bursts.
OBS simulator module for ns-2:
The source code of OBS (optical burst switching) extension that I created for ns-2 simulator is here. It was presented and used in "nOBS: an ns2 based simulation tool for performance evaluation of TCP traffic in OBS networks" journal paper available here. Please read readme.txt file for details
proc my-duplex-link {ns n1 n2 bw delay queue_method queue_length} {
$ns optical-duplex-link $n1 $n2 $bw $delay $queue_method
$ns queue-limit $n1 $n2 $queue_length
$ns queue-limit $n2 $n1 $queue_length
}
proc my-duplex-link2 {ns n1 n2 bw delay queue_method queue_length} {
$ns optical-simplex-link $n1 $n2 $bw $delay $queue_method
$ns simplex-link $n2 $n1 $bw $delay DropTail
$ns queue-limit $n1 $n2 $queue_length
$ns queue-limit $n2 $n1 $queue_length
}
#Create a simulator object
set ns [new Simulator]
#Variable Simulation settings: max burst size [50,100,200,300,400,500], timeout = [1:1:10] msec, simulation time: 200 sec, buffer = 2*500*1040 bytes, receive window = 500 packets.
set settings [new OpticalDefaults]
$settings set MAX_PACKET_NUM 20
$settings set TIMEOUT 7ms
$settings set MAX_FLOW_QUEUE 5
# The following are the default values for settings, only the above have been changed.
#OpticalDefaults set MAX_PACKET_NUM 500;
#OpticalDefaults set HOP_DELAY 0.00001;
#OpticalDefaults set TIMEOUT 0.005;
#OpticalDefaults set MAX_LAMBDA 1;
#OpticalDefaults set LINKSPEED 1Gb;
#OpticalDefaults set SWITCHTIME 0.000005;
#OpticalDefaults set LIFETIME 0.1;
#OpticalDefaults set DEBUG 3;
#OpticalDefaults set MAX_DEST 40;
#OpticalDefaults set BURST_HEADER 40;
#OpticalDefaults set MAX_DELAYED_BURST 2;
#OpticalDefaults set MAX_FLOW_QUEUE 1;
$settings set MAX_DELAYED_BURST 5
$ns color 12 Red
$ns color 13 Yellow
$ns color 14 Green
$ns color 15 Purple
$ns color 16 Black
$ns color 17 Magenta
$ns color 18 Brown
$ns color 19 Orange
$ns color 20 Red
$ns color 21 Blue
#Open the win size file
set winfile [open windows.txt w]
set goodfile [open goodput.txt w]
#Open the nam trace file
set nf [open out.nam w]
$ns namtrace-all $nf
# enable source routing
$ns op_src_rting 1
#Open the nam trace file
set nf [open out.tr w]
$ns trace-all $nf
set f [open out.nam w]
$ns namtrace-all $f
#Start from zero when numbering the nodes.
#Create 2 optical nodes
for {set i 0} {$i < 2} {incr i} {
set n($i) [$ns OpNode]
#define optical nodes
set temp [$n($i) set src_agent_]
$temp optic_nodes 0 1
$temp set nodetype_ 0
$temp set conversiontype_ 1
$temp create
#whether acks are burstified
$temp set ackdontburst 1
set temp [$n($i) set burst_agent_]
$temp optic_nodes 0 1
#whether acks are burstified
$temp set ackdontburst 1
set temp [$n($i) set classifier_]
$temp optic_nodes 0 1
}
#Create 20 electronic nodes
for {set i 2} {$i < 22} {incr i} {
set n($i) [$ns node]
#define optical nodes
set temp [$n($i) set src_agent_]
$temp optic_nodes 0 1
set temp [$n($i) set classifier_]
$temp optic_nodes 0 1
}
set queue_length 100000
#Create links between the nodes
my-duplex-link2 $ns $n(0) $n(1) 1000Mb 10ms OpQueue $queue_length
#creating the error model
set loss_module [new ErrorModel]
$loss_module set rate_ 0.01
$loss_module unit pkt
$loss_module ranvar [new RandomVariable/Uniform]
$loss_module drop-target [new ONA]
#set whether burst or control packet will be dropped
$loss_module set opticaldrop_ 2
#Inserting Error Module
$ns lossmodel $loss_module $n(0) $n(1)
for {set i 2} {$i < 12} {incr i} {
$ns duplex-link $n($i) $n(0) 155Mb 1ms DropTail
$ns queue-limit $n($i) $n(0) $queue_length
$ns queue-limit $n(0) $n($i) $queue_length
}
for {set i 12} {$i < 22} {incr i} {
$ns duplex-link $n($i) $n(1) 155Mb 1ms DropTail
$ns queue-limit $n($i) $n(1) $queue_length
$ns queue-limit $n(1) $n($i) $queue_length
}
set flow 0
for {set i 2} {$i < 12} {incr i} {
set d [expr $i + 10]
#Create a TCP agent and attach it to node n0
set cbr($i) [new Agent/TCP/Reno]
$ns attach-agent $n($i) $cbr($i)
$cbr($i) set fid_ $d
$cbr($i) set fid2_ $flow
$cbr($i) set window_ 10000
$cbr($i) target [$n($i) set src_agent_]
set ftp($i) [$cbr($i) attach-source FTP]
set null($i) [new Agent/TCPSink]
$ns attach-agent $n($d) $null($i)
#$null($i) set fid_ $s #This part is not working. Hard coded in tcp sink.cc
$null($i) set fid2_ $flow
$null($i) target [$n($d) set src_agent_]
$ns connect $cbr($i) $null($i)
incr flow
set temp [$n($i) set src_agent_]
$temp install_connection $d $i $d $i 0 1 $d
set temp [$n($d) set src_agent_]
$temp install_connection $i $d $i $d 1 0 $i
$ns at [expr $i] "$ftp($i) start"
}
set temp [$n(0) set src_agent_]
$temp install_connection 1 0 1 0 1
set temp [$n(1) set src_agent_]
$temp install_connection 0 1 0 1 0
proc plotWindow {file} {
global goodfile
global ns
global cbr
set time 0.01
set now [$ns now]
puts -nonewline $file "$now"
puts -nonewline $goodfile "$now"
for {set i 2} {$i < 12} {incr i} {
set cwnd($i) [$cbr($i) set cwnd_]
puts -nonewline $file " $cwnd($i)"
puts -nonewline $goodfile " "
puts -nonewline $goodfile [$cbr($i) set ack_]
#puts -nonewline $goodfile [expr [$cbr($i) set ack_]/[expr $now-$i]]
}
puts $file ""
puts $goodfile ""
$ns at [expr $now+$time] "plotWindow $file"
}
proc finish {} {
#global ns nf
#global f
global winfile
global goodfile
#$ns flush-trace
#Close the trace file
#close $f
close $winfile
#Execute nam on the trace file
#exec ./nam out.nam
close $goodfile
exit 0
}
#$ns at 1 "plotWindow $winfile"
$ns at 10 "finish"
$ns run
Optical Burst Switching (OBS) is an optical network technology that aims to improve the use of optical networks resources when compared to optical circuit switching (OCS). OBS is implemented using Wavelength Division Multiplexing (WDM), a data transmission technology that transmits data in an optical fibre by establishing several channels, each channel corresponding to a specific light wavelength.
Optical Burst Switching is used in core networks, and viewed as a feasible compromise between the existing Optical Circuit Switching (OCS) and the yet not viable Optical Packet Switching (OPS).
In OBS, packets are aggregated into data bursts at the edge of the network to form the data payload
Techopedia explains Optical Burst Switching (OBS)
Optical Burst Switching has several distinctive features: first, the packets are aggregated in the ingress (entry) node, for a very short period of time. This allows that packets that have the same
constraints, e.g., the same destination address and maybe, the same quality of service requirements are sent together as a burst of data (therefore the term Burst in the concept name). When the burst arrives at the egress (exit) node, it is disassembled and its constituent packets routed to their destination.
While the burst is being assembled in the ingress node, or possibly, after the burst has been assembled, a control packet (or header packet), containing the routing information for that burst is sent to the network, ahead of the burst. The time that separates the transmission of the control packet and the transmission of the burst is termed the offset time, and it must be long enough to allow all the routers in the predicted path the burst will take, to be configured, and only for the time needed for the burst to cross the network. When the network nodes are configured, the burst departs the ingress node and travels through the network in an all-optical form, using the circuit that was previously established by the control packet.
The second characteristic of OBS is that the routing information is transmitted in the Control Packet and is not part of the data burst itself. In fact, the burst crosses the intermediate nodes in the
network using the pre-established and pre-configured circuit in an agnostic manner, i.e., the node does not need to interpreted the data in the burst, and so, it does not need to know the format of the data in the burst. This is another special feature of OBS.
Another distinctive characteristic of OBS is that the Control Packet will undergo optical to electronic to optical conversion at each intermediate node, and also optical to electronic conversion at the egress node, as to allow these nodes to be able to configure its optical switching devices. A final characteristic of OBS networks is that there is what is called a data and control plane separation, i.e., the channel that is used to transmit the control packets is specific and different from the channels that are used to transmit the data bursts.
OBS simulator module for ns-2:
The source code of OBS (optical burst switching) extension that I created for ns-2 simulator is here. It was presented and used in "nOBS: an ns2 based simulation tool for performance evaluation of TCP traffic in OBS networks" journal paper available here. Please read readme.txt file for details
TCL script for OBS Network Topology:
proc my-duplex-link {ns n1 n2 bw delay queue_method queue_length} {
$ns optical-duplex-link $n1 $n2 $bw $delay $queue_method
$ns queue-limit $n1 $n2 $queue_length
$ns queue-limit $n2 $n1 $queue_length
}
proc my-duplex-link2 {ns n1 n2 bw delay queue_method queue_length} {
$ns optical-simplex-link $n1 $n2 $bw $delay $queue_method
$ns simplex-link $n2 $n1 $bw $delay DropTail
$ns queue-limit $n1 $n2 $queue_length
$ns queue-limit $n2 $n1 $queue_length
}
#Create a simulator object
set ns [new Simulator]
#Variable Simulation settings: max burst size [50,100,200,300,400,500], timeout = [1:1:10] msec, simulation time: 200 sec, buffer = 2*500*1040 bytes, receive window = 500 packets.
set settings [new OpticalDefaults]
$settings set MAX_PACKET_NUM 20
$settings set TIMEOUT 7ms
$settings set MAX_FLOW_QUEUE 5
# The following are the default values for settings, only the above have been changed.
#OpticalDefaults set MAX_PACKET_NUM 500;
#OpticalDefaults set HOP_DELAY 0.00001;
#OpticalDefaults set TIMEOUT 0.005;
#OpticalDefaults set MAX_LAMBDA 1;
#OpticalDefaults set LINKSPEED 1Gb;
#OpticalDefaults set SWITCHTIME 0.000005;
#OpticalDefaults set LIFETIME 0.1;
#OpticalDefaults set DEBUG 3;
#OpticalDefaults set MAX_DEST 40;
#OpticalDefaults set BURST_HEADER 40;
#OpticalDefaults set MAX_DELAYED_BURST 2;
#OpticalDefaults set MAX_FLOW_QUEUE 1;
$settings set MAX_DELAYED_BURST 5
$ns color 12 Red
$ns color 13 Yellow
$ns color 14 Green
$ns color 15 Purple
$ns color 16 Black
$ns color 17 Magenta
$ns color 18 Brown
$ns color 19 Orange
$ns color 20 Red
$ns color 21 Blue
#Open the win size file
set winfile [open windows.txt w]
set goodfile [open goodput.txt w]
#Open the nam trace file
set nf [open out.nam w]
$ns namtrace-all $nf
# enable source routing
$ns op_src_rting 1
#Open the nam trace file
set nf [open out.tr w]
$ns trace-all $nf
set f [open out.nam w]
$ns namtrace-all $f
#Start from zero when numbering the nodes.
#Create 2 optical nodes
for {set i 0} {$i < 2} {incr i} {
set n($i) [$ns OpNode]
#define optical nodes
set temp [$n($i) set src_agent_]
$temp optic_nodes 0 1
$temp set nodetype_ 0
$temp set conversiontype_ 1
$temp create
#whether acks are burstified
$temp set ackdontburst 1
set temp [$n($i) set burst_agent_]
$temp optic_nodes 0 1
#whether acks are burstified
$temp set ackdontburst 1
set temp [$n($i) set classifier_]
$temp optic_nodes 0 1
}
#Create 20 electronic nodes
for {set i 2} {$i < 22} {incr i} {
set n($i) [$ns node]
#define optical nodes
set temp [$n($i) set src_agent_]
$temp optic_nodes 0 1
set temp [$n($i) set classifier_]
$temp optic_nodes 0 1
}
set queue_length 100000
#Create links between the nodes
my-duplex-link2 $ns $n(0) $n(1) 1000Mb 10ms OpQueue $queue_length
#creating the error model
set loss_module [new ErrorModel]
$loss_module set rate_ 0.01
$loss_module unit pkt
$loss_module ranvar [new RandomVariable/Uniform]
$loss_module drop-target [new ONA]
#set whether burst or control packet will be dropped
$loss_module set opticaldrop_ 2
#Inserting Error Module
$ns lossmodel $loss_module $n(0) $n(1)
for {set i 2} {$i < 12} {incr i} {
$ns duplex-link $n($i) $n(0) 155Mb 1ms DropTail
$ns queue-limit $n($i) $n(0) $queue_length
$ns queue-limit $n(0) $n($i) $queue_length
}
for {set i 12} {$i < 22} {incr i} {
$ns duplex-link $n($i) $n(1) 155Mb 1ms DropTail
$ns queue-limit $n($i) $n(1) $queue_length
$ns queue-limit $n(1) $n($i) $queue_length
}
set flow 0
for {set i 2} {$i < 12} {incr i} {
set d [expr $i + 10]
#Create a TCP agent and attach it to node n0
set cbr($i) [new Agent/TCP/Reno]
$ns attach-agent $n($i) $cbr($i)
$cbr($i) set fid_ $d
$cbr($i) set fid2_ $flow
$cbr($i) set window_ 10000
$cbr($i) target [$n($i) set src_agent_]
set ftp($i) [$cbr($i) attach-source FTP]
set null($i) [new Agent/TCPSink]
$ns attach-agent $n($d) $null($i)
#$null($i) set fid_ $s #This part is not working. Hard coded in tcp sink.cc
$null($i) set fid2_ $flow
$null($i) target [$n($d) set src_agent_]
$ns connect $cbr($i) $null($i)
incr flow
set temp [$n($i) set src_agent_]
$temp install_connection $d $i $d $i 0 1 $d
set temp [$n($d) set src_agent_]
$temp install_connection $i $d $i $d 1 0 $i
$ns at [expr $i] "$ftp($i) start"
}
set temp [$n(0) set src_agent_]
$temp install_connection 1 0 1 0 1
set temp [$n(1) set src_agent_]
$temp install_connection 0 1 0 1 0
proc plotWindow {file} {
global goodfile
global ns
global cbr
set time 0.01
set now [$ns now]
puts -nonewline $file "$now"
puts -nonewline $goodfile "$now"
for {set i 2} {$i < 12} {incr i} {
set cwnd($i) [$cbr($i) set cwnd_]
puts -nonewline $file " $cwnd($i)"
puts -nonewline $goodfile " "
puts -nonewline $goodfile [$cbr($i) set ack_]
#puts -nonewline $goodfile [expr [$cbr($i) set ack_]/[expr $now-$i]]
}
puts $file ""
puts $goodfile ""
$ns at [expr $now+$time] "plotWindow $file"
}
proc finish {} {
#global ns nf
#global f
global winfile
global goodfile
#$ns flush-trace
#Close the trace file
#close $f
close $winfile
#Execute nam on the trace file
#exec ./nam out.nam
close $goodfile
exit 0
}
#$ns at 1 "plotWindow $winfile"
$ns at 10 "finish"
$ns run
NAM and Trace Output:
Sir,
ReplyDeleteI have run the given script...But have following error.
How can i resolve it?
[root@localhost pina]# ns obs.tcl
invalid command name "OpticalDefaults"
while executing
"OpticalDefaults create _o10 "
invoked from within
"catch "$className create $o $args" msg"
invoked from within
"if [catch "$className create $o $args" msg] {
if [string match "__FAILED_SHADOW_OBJECT_" $msg] {
delete $o
return ""
}
global errorInfo
error "class $..."
(procedure "new" line 3)
invoked from within
"new OpticalDefaults"
invoked from within
"set settings [new OpticalDefaults] "
(file "obs.tcl" line 25)
Before running OBS.tcl make sure that you have applied OBS patch in installed ns2.
Deletehow can get OBS patch??I have the semi error?
DeleteThis comment has been removed by the author.
Deletecan you make a video installation guide on this one?
DeleteOK....will you share the patch file for obs...
ReplyDeleteand also give some helpfull link to know how to patch obs to ns...
hi sir
Deletecan you share the patch file for obs
i need it now
thank sir
why the currupt error occured...have u any idea abot that?
ReplyDeleteI have following error after apply the patch...
ReplyDeletewarning: no class variable ONA::agent_addr_
see tcl-object.tcl in tclcl for info about this warning.
warning: no class variable ONA::agent_port_
warning: no class variable ONA::dst_addr_
warning: no class variable ONA::dst_port_
warning: no class variable ONA::fid_
warning: no class variable ONA::prio_
warning: no class variable ONA::flags_
warning: no class variable ONA::ttl_
warning: no class variable ONA::class_
warning: no class variable ONA::debug_
fdlnumber_ 0
fdlnumber_ 0
record 1 DEBUG 3 at 2.008002064516129
corrupt error 0
record 1 DEBUG 3 at 2.020016833548387
record 2 DEBUG 3 at 2.039072895483871
corrupt error 0
record 4 DEBUG 3 at 2.070211659354840
corrupt error 0
record 8 DEBUG 3 at 2.101367063225808
corrupt error 0
record 16 DEBUG 3 at 2.132555747096777
corrupt error 0
record 20 DEBUG 3 at 2.157830861935484
corrupt error 0
.
.
.
To solve these warnings you can add these commands to ns-default.tcl:
DeleteTracefile set agent_addr_0
Tracefile set agent_port_0
Tracefile set dst_addr_0
Tracefile set dst_port_0
Tracefile set fid_0
Tracefile set prio_0
Tracefile set flags_0
Tracefile set ttl_0
Tracefile set class_0
Tracefile set debug_0
In given tcl is there any editing is required before run this tcl?
ReplyDeleteDear Sir,
ReplyDeleteFirst of all, i want to thank you for this helpful code,
what i understood from the code that the data will be transmitted from node 2 to node 12 , from node 3 to node 13 and so on until from node 11 to node 21 ,, but when i ran it the data transfer from node (9) to node (19) only ,, is that right or there is something wrong??
BTW, when i ran it i get this output:
fdlnumber_ 0
fdlnumber_ 0
record 1 DEBUG 3 at 2.008002064516129
corrupt error 0
corrupt error 0
record 1 DEBUG 3 at 2.025012704516129
corrupt error 0
corrupt error 0
is that an error????
Thanks in Advance
I have the same problem
Deleteand open out.tr will found
tcp packet transmit from node 2 to optical node 0
op_burst transmit from optical node 0 to optical node 1
then optical node 1 didn't send tcp packet to node 12
so node 12 can't send ack to node 2
+ 2 2 0 tcp 40 ------- 12 2.1 12.1 0 800
- 2 2 0 tcp 40 ------- 12 2.1 12.1 0 800
r 2.001002 2 0 tcp 40 ------- 12 2.1 12.1 0 800
+ 2.008002 0 1 OP_BURST 40 ------- 12 0.0 1.0 -1 11
- 2.008002 0 1 OP_BURST 40 ------- 12 0.0 1.0 -1 11
+ 2.008012 0 1 OP_BURST 80 ------- 12 0.0 1.0 -1 10
- 2.008012 0 1 OP_BURST 80 ------- 12 0.0 1.0 -1 10
r 2.018002 0 1 OP_BURST 40 ------- 12 0.0 1.0 -1 11
r 2.018013 0 1 OP_BURST 80 ------- 12 0.0 1.0 -1 10
+ 3 3 0 tcp 40 ------- 13 3.1 13.1 0 805
...
Another situation is tcp packet transmit node 7 to node 17
then node 17 send ack to optical node 1
op_burst transmit from optical node 1 to optical node 0
but optical node 0 didn't send ack to node 7
...
+ 7 7 0 tcp 40 ------- 17 7.1 17.1 0 825
- 7 7 0 tcp 40 ------- 17 7.1 17.1 0 825
r 7.001002 7 0 tcp 40 ------- 17 7.1 17.1 0 825
+ 7.008002 0 1 OP_BURST 40 ------- 17 0.1 1.-1 -1 802
- 7.008002 0 1 OP_BURST 40 ------- 17 0.1 1.-1 -1 802
+ 7.008012 0 1 OP_BURST 80 ------- 17 0.1 1.-1 -1 801
- 7.008012 0 1 OP_BURST 80 ------- 17 0.1 1.-1 -1 801
r 7.018002 0 1 OP_BURST 40 ------- 17 0.1 1.-1 -1 802
r 7.018013 0 1 OP_BURST 80 ------- 17 0.1 1.-1 -1 801
+ 7.018013 1 17 tcp 40 ------- 17 7.1 17.1 0 825
- 7.018013 1 17 tcp 40 ------- 17 7.1 17.1 0 825
r 7.019015 1 17 tcp 40 ------- 17 7.1 17.1 0 825
+ 7.019015 1 17 ack 40 ------- 17 7.1 17.1 0 828
- 7.019015 1 17 ack 40 ------- 17 7.1 17.1 0 828
r 7.020017 1 17 ack 40 ------- 17 7.1 17.1 0 828
+ 7.020017 1 0 OP_BURST 40 ------- 7 1.0 0.0 -1 400
- 7.020017 0 1 OP_BURST 40 ------- 7 1.0 0.0 -1 400
r 7.030017 0 1 OP_BURST 40 ------- 7 1.0 0.0 -1 400
+ 8 8 0 tcp 40 ------- 18 8.1 18.1 0 833
...
I don't know how to solve this problem
please help me
Thanks
nOBS simulator is updated. You can find the latest version at https://github.com/onuralparslan/nOBS
ReplyDelete