'Network/Ns2_Lecture'에 해당되는 글 60건

  1. 2009.02.08 ns2에 대한 17가지 질문
  2. 2009.02.05 Analysis of 802.11 MAC code in NS-2
  3. 2009.01.18 [통신관련] XP인터넷 최적화 총정리 (MTU 측정에서 변경까지)
  4. 2009.01.18 Tcl 명령어
  5. 2009.01.18 라우팅 모듈
  6. 2009.01.18 The Network Simulator - ns-2
  7. 2009.01.18 Network Simulator (NS2)_관련링크
  8. 2009.01.18 [ns2] NS2란? (한글)
  9. 2009.01.18 ns-2 관련 한글 링크
  10. 2009.01.18 우분투 5.04에서 NS 2.29 설치하기

ns2에 대한 17가지 질문

|
Note: A few answers come from the discussion in Ns2 mail list and are proved
to be effective.

----------------------------------------------------------------------------
Question 1: 

Scheduler:: Event UID not valid! 

Answer: 

Each event in NS2 has a unique UID. The scheduler toggles the UID twice, 
once during dispatching and once during scheduling. Thus, the event has a 
positive UID after being scheduled and a negative one before being scheduled. 
If the event has been scheduled but not dispatched, then it will have a 
positive UID and cannot be scheduled again. 

In implementing a new protocol, this error can happen in two cases:

1. You are using timers. When a timer is scheduled again without the 
previous schedule expiring - Trace which timer is scheduled and when it 
will expire.

2. You are dealing with packets. A packet is also a kind of event to be 
scheduled and a UID is associated with it. When you create a 
copy or alloc again before freeing it, due to the same packet with a positive 
UID, it cannot be scheduled again. 
-----------------------------------------------------------------------------

Question 2:  

What is the role of GOD?

Answer:

GOD, called general operations director, is an object which is aware of the 
whole mobile wireless network topology during the period of simulation.

GOD is used to store global information about the states of the simulated mobile 
wireless network, i. e. , GoD is an omniscient observer, but the global 
information GOD owns should not be totally available to any nodes in the 
simulation, a node can obtain its partial information when needed.

Currently, GOD is only used to store an array of the shortest number of hops 
required to reach from one node to another. GOD does not calculate them 
on the fly during the simulation, since it can be quite time consuming. 
The information is loaded into GOD from the movement pattern file where 
the lines similar to 

$ns_ at 666.66 "$god_ set-dist 10 20 2"
 
are used to load GOD with the information that the shortest path 
between node 10 and node 20 is changed to 2 hops at time 666.66. 
------------------------------------------------------------------------------

Question 3: 

How to debug my extension to ns2?

Answer:

There are two levels to debug:

1. C++ level: 

(1) To enable debug information in ns as follows:

in your ns-allinone directory, edit the install file. 

In a section which includes "# Build Tcl8.3.2", you need to add the option 

--enable-symbols, such that:
./configure --enable-gcc --disable-shared --prefix=$CUR_PATH || ....

becomes:
./configure --enable-gcc --enable-symbols --disable-shared --prefix=$CUR_PATH || ....

In another section which includes "# Build tclcl",  you need to add --enable-debug 
to your configure line, such that:

./configure ||  ...

becomes 

./configure --enable-debug || ...

(2) To enter your ns-allinone/ns directory, and open your Makefile.in. You need to
change the line 

CFLAGS  = $(CCOPT) $(DEFINE)

to 

CFLAGS  = -g $(CCOPT) $(DEFINE)

(3) To go back to ns-allinone directory and type ./install

(4)  the C++ debug with gdb
    . gdb ns
    .(gdb) set args myscript.tcl
    .(gdb) b MyClass::myfunction 
      # This line set breakpoint
    .run

2. Tcl Level

You need to find a software which is called tcl-debug.

(1) To place tcl-debug-2.0/ parallel to ns-2.26/
(2) cd ns-2.26
    ./configure --enable-debug --with-tcldebug and examine Makefile to ensure tcl-debug 
options enabled.
(3) make clean; make; make install

(4) Add breakpts for tcl-debug
Add "debug 1" (it's one not 'L') into your script file where you want to 
debug.
------------------------------------------------------------------------------------

Question 4: 

Difference between Thresholds in wireless-phy.cc

Answer:

(1) RXThreshold: If a packet reaches a node with a power level that is below
RxThrehold, the node will receive the packet with error (i.e. will not be able
to read the packet), but will understand that a packet is being transmitted for
[0,T] sec.

(2) CSThreshold: If a packet reaches a node with a power level that is below
CSThresh_ , the node will not be able to understand that a packet is being
transmitted for [0,T] sec; i.e. it will perceive the channel to be idle.

(3) CPThreshold: Let a packet 'A' is being received by a node during [0,T] sec. If
another packet ('B') transmission begins during [0,T] so that 'B' reaches the
node with a power that is CPThreshold below the received power of packet 'A'
(in dB scale), packet 'A' will survive (i.e. the node will be able to read
packet 'A'). Otherwise, packet 'A' will "collide" with packet 'B' (so
that the node will not be able to read either of the packets).
-------------------------------------------------------------------------------------

Question 5:

What does it mean when ns gives the message "scheduler going
backwards from 73.9587457845 to -1417846817.3257839 ?

Answer:

Most likely, one of the events gave rise to some other event in "past". If you 
know how discrete event simulators work, this will be clear to you. However, 
it seems that this occurred due to an overflow in calculating the timing for a 
future event somewhere.
------------------------------------------------------------------------------------

Question 6:

How to set up the wireless bandwidth (such as 802.11 a,b,g) in NS2?

Answer:

In ns2.26 and ns2.27, you can change (basicRate_ and dataRate_ ):

Mac/802_11 set basicRate_ 1Mb 
Mac/802_11 set dataRate_  11Mb 

in your tcl script.

FHSS (IEEE802.11)
   Mac/802_11 set SlotTime_          0.000050        ;# 50us
   Mac/802_11 set SIFS_              0.000028        ;# 28us
   Mac/802_11 set PreambleLength_    0               ;# no preamble
   Mac/802_11 set PLCPHeaderLength_  128             ;# 128 bits
   Mac/802_11 set PLCPDataRate_      1.0e6           ;# 1Mbps
   Mac/802_11 set dataRate_          1.0e6           ;# 11Mbps
   Mac/802_11 set basicRate_         1.0e6           ;# 1Mbps

DSSS (IEEE802.11b)
   Mac/802_11 set SlotTime_          0.000020        ;# 20us
   Mac/802_11 set SIFS_              0.000010        ;# 10us
   Mac/802_11 set PreambleLength_    144             ;# 144 bit
   Mac/802_11 set PLCPHeaderLength_  48              ;# 48 bits
   Mac/802_11 set PLCPDataRate_      1.0e6           ;# 1Mbps
   Mac/802_11 set dataRate_          11.0e6          ;# 11Mbps
   Mac/802_11 set basicRate_         1.0e6           ;# 1Mbps

Note: 

-if using the short preamble option: you can change the line as:
Mac/802_11 set PreambleLength_ 72

-  # frequency is 2.4 GHz
   Phy/WirelessPhy set freq_ 2.4e+9
   # transmit power
   Phy/WirelessPhy set Pt_ 3.3962527e-2
   # Receive sensitivity.
   Phy/WirelessPhy set RXThresh_ 6.309573e-12
   Phy/WirelessPhy set CSThresh_ 6.309573e-12

Note that the radio range that results from this configuration may or may
not coincide with open field tests. If you want setup a specific range,
use the program ~/indep-utils/propagation/threshold.cc to obtain the
desired RXThresh_ (rx sensitivity) based on the above frequency, transmit
power and your desired range.


802.11g:

#define DSSS_CWMin			15
#define DSSS_CWMax			1023
#define DSSS_SlotTime		0.000009	
#define DSSS_CCATime 		0.000003	
#define DSSS_RxTxTurnaroundTime	0.000002	
#define DSSS_SIFSTime		0.000016 	
#define DSSS_PreambleLength	 96
#define DSSS_PLCPHeaderLength	40	
#define DSSS_PLCPDataRate		6.0e6	// 6Mbps
#define DSSS_MaxPropagationDelay     0.0000005	// 0.5us






Note: bandwidth is different with achievable throughput.

- In NS ACK are always sent at 1Mbps
- NS use always the long PLCP preamble format sent at 1Mbps
- by default NS uses RTS/CTS handshake
- Packet's size has also an impact in the % of overhead.

All this factor can  bound the achievable throughput

-----------------------------------------------------------------------------------
Question 7:

When do we need to "make clean; make depend; make" in ns2?

Answer:





A trick: 

- after making the changes in any tcl file I go into ns-lib.tcl, and 
make a small change e.g delete a full stop in a comment or add my on 
comment anywhere (note that this change should be in the cmmented area 
not the actual code).
- save the ns-lib.tcl file.
- run "make" only.

In this way I find that all the changes in all other tcl files take 
effect. 

the same trick whenever u change a .h  file only  i.e. 
make some  trivial change in the corresponding  .cc file

------------------------------------------------------------------------------------

Question 8:

How to deal with Very large trace files?

Answer:

(1) Don't trace-all

(2) To Turn off some unused packet header

(3) Two simple solutions using "pipe":
    . To use tool (i.e awk) to filter only interesting events

    set tr [open "| awk -f filter.awk >out.tr" w]
    $ns trace-all $tr

    .if You are not interested in traces and only results (average, 
variation, distribution, count etc.)

    set tr [open "| awk -f my_measure_tool.awk >my_results.txt" w]
    $ns trace-all $tr
(4) To try other compression skill, such as 
You may reduce the size of the trace file by using the
sed command on solaris machines.
For example, if all you need is just the RTR and AGT
trace lines, you may remove the MAC trace using
cat tracefile.tr | sed -e "/MAC/d" >
smallertracefile.tr

------------------------------------------------------------------------------------

Question 9:

How to disable RTS/CTS?

Answer:

(1) If you are using ns-2.27, include the line:

Mac/802_11 set RTSThreshold_ 3000  

to your Tcl scrip 

(2) If you are using older version, you need to do as below:

To change the value in mac_802-11.h (a macro), then make depend, make

In a similar way, you can change cw_, ShortRetryLimit_, LongRetryLimit_  etc.

-----------------------------------------------------------------------------------

Question 10:

What is size of voice or data packet size used to simulate in a wireless LAN?

Answer:

voip:  150bytes  
FTP: vaiable packet size, 150-1500Bytes
HDTV or SDTV: 1500bytes
-----------------------------------------------------------------------------------

Question 11: 

How to run a set of similar experiments together?

Answer:

Method 1: You can specify an input parameter to the simulation script. Then, based on the 
value of your input, you can name your tracefiles differently. You could create, 
for instance, the .sh script on the top of the NS simulator to launch consequently 
all the simulations.

Method 2: Type your tcl scipts sequentially, do remember to set different trace files 

$>ns code1.tcl
.....Starting Simulation
 
ns code2.tcl     #just type in your commands here sequentially
ns code3.tcl

Method 3: Try doing this in TCL level using for loop. For example, look at parts
of the code below:

proc runsim { num_cbr i }
   set CBRrate [expr $i*1000000] 
   ...
   ...
   set traffic [new Application/Traffic/CBR]
   $traffic set rate_ $CBRrate
   ...   
   ...

   xxx   
}

for {set i 1} {$i < 10} {incr i 1} {
   runsim $i
}

You can see that your main code is in the runsim procedure, but the
main control is in the for loop below -- which increases the CBR rate
from 1Mbps to 10Mbps using 1Mbps increment. At the end of the runsim
procedure, you would see I put xxx there. It's where you can make a
calculation and output to your output file (append line by line after
each run); which means you have all the results in the same file ready
to be plotted.

Method 4:just write another script that passes a command line parameter
to your ns script that is the CBR rate
E.g

In your ns script put
if { $argc == 1 } {
    set cbr [lindex $argv 0]
    puts "CBR: $cbr"
}
<insert the rest of your script>

Then in the running script do something like

set max 20
for { set cbr 1 } { $cbr <= $max } { set cbr [expr $cbr + 1] } {
    puts "Running test CBR=$cbr"
    exec ns myscript.tcl $cbr
}
-----------------------------------------------------------------------

Question 12:

Rx Power or carrier sense Threshold setting?

Answer:

- enter indep-utils/propagation directory 
- g++ -lm -o threshold threshold.cc
- ./threshold

this tool can help you calculate 
------------------------------------------------------------------------

Question 13:

How to pass an argument from tcl to c++?

Answer:

method 1: bind the variables you want to share
method 2: For example:

 Tcl& tcl = Tcl::instance();
 tcl.eval("$cbr set packet_size_");
 char* var_temp = tcl.result();

--------------------------------------------------------------------------

Question 14:

How to post analyze the trace file?

ANswer:

The below is a awk script to analyze several parameters (average e-2-e delay,
pdf, normalised routing load and dropped packets,..) for aodv old trace file
format.

BEGIN {

droppedAODVPackets=0;
sends=0;
recvs=0;

# highest packet id can be checked in the trace file for an approximate value
highest_packet_id =500000;
sum=0;
AODV_Adv=0;
}
       
{
   action = $1;
   time = $2;
   node_1 = $3;
   node_2 = $4;
   src = $5;
 

  
# For stand alone ad hoc trace files:
#   if ( packet_id > highest_packet_id ) highest_packet_id = packet_id;

# For wired- and cireless trace files.

      if ($5 =="cbr") {
      packet_id = $12;
      } else {
      packet_id = $6; 
      }

 

#============= CALCULATE DELAY   =========================================
   # getting start time is not a problem, provided you're not starting
   # traffic at 0.0.
   # could test for sending node_1_address or flow_id here.

 if ( start_time[packet_id] == 0 )  start_time[packet_id] = time;
   
   # only useful for small unicast where packet_id doesn't wrap.
   # checking receive means avoiding recording drops
   if ( action != "d" ) {
      if ( action == "r" ) {
       # could test for receiving node_2_address or flow_id here.
         end_time[packet_id] = time;
   }
   } else {
      end_time[packet_id] = -1;
   }
#============= CALCULATE PACKET DELIVERY FRACTION============================
# $3 = source node id , here I have 4 source nodes and start my analysis after
490 seconds of simulation  (when traffic started)
if (( $1 == "s") &&  ( $7 == "cbr" ) && ( $4
=="AGT" ) && ( ( $3== "_5_" )   || ( $3==
"_6_" )   ||  ($3=="_7_")  ||  ($3=="_8_")  
)&& ($2 > 490.00 )    ) {
      sends++;}


# $4 = destination node in wired segment of network. if you simulate ad hoc only
scenario the change $4 to $3 and %5 to $7.
if ( ( $1 == "r") &&  ( $5 == "cbr" ) && (
$4 == "0" ) && ($2 >  490.00 ) ) {
      recvs++;}

pdf = (recvs/sends)*100;


#==================== ADVERTISEMENTS ==================

if ( (($1=="f")  || ($1=="s") ) && ($4 ==
"RTR") && ($7 =="AODV" ) && ($2 > 490.00
) ) { 
AODV_Adv++;
}

#============= DROPPED AODV PACKETS ========================================
if ( ($1 == "D") && ($7=="cbr")  && ($2 >
490.00 ) ){
        droppedAODVBytes=droppedAODVBytes+$8 ;
        droppedAODVPackets=droppedAODVPackets+1;  
    }


}                                           
END {
    for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ ) {
       start = start_time[packet_id];
       end = end_time[packet_id];
       packet_duration = end - start;
   if ( start < end ) sum= packet_duration+sum;
}
delay=sum/recvs;
 

printf(" Average e-e delay: \t %f \n", delay);

printf(" normalised routing load \t %f \n ", AODV_Adv/recvs);

printf("No. of packets sent = %d \n", sends);
printf(" No. of packets received = %d \n", recvs);
printf(" Pdf (100%) = %f \n \n", pdf);

printf("No. of dropped data (packets) = %d \n ",droppedAODVPackets);
printf("No. of dropped data (bytes) = %d \n \n ",droppedAODVBytes);
printf("No. of aodv advertisements = %f \n ",AODV_Adv);
}

------------------------------------------------------------------------------------

Question 15:

How to disable the routing when you wanna measure MAC layer performance?

Answer:

you can use DumbAgent as below:

$ns_ node-config  \
    -adhocRouting DumbAgent\
    -llType $val(ll) \
    -macType $val(mac) \
    -ifqType $val(ifq) \
    -ifqLen $val(ifqlen) \
    -antType $val(ant) \
    -propType $val(prop) \
    -phyType $val(netif) \
    -topoInstance $topo \
    -agentTrace ON \
    -routerTrace ON \
    -macTrace ON \
    -movementTrace OFF \
    -channel [new $val(chan)]

---------------------------------------------------------------------------------------

Question 16:

How to use parameters in command line?

Answer:

For example, if you try to pass the number of nodes as a parameter to
your script such as my_script.tcl 10

- use the following in your tcl file

 set num_nodes [lindex $argv 0]

- then use the num_nodes variable wherever you wanna
--------------------------------------------------------------------------------------

Question 17:

How to debug by printf?

Answer:

method 1: printf("DEBUG TEST TEST\n"); don't use \r 

and you may put a fflush(NULL); statement after prinf, then the result will
get printed immediately.

method 2: 

char out[100];
Tcl& tcl = Tcl::instance();
sprintf(out, "puts \"DEBUG TEST TEST\"");
tcl.eval(out);
-------------------------------------------------------------------------------------
  

'Network > Ns2_Lecture' 카테고리의 다른 글

Analysis of 802.11 MAC code in NS-2  (0) 2009.02.05
[통신관련] XP인터넷 최적화 총정리 (MTU 측정에서 변경까지)  (0) 2009.01.18
Tcl 명령어  (0) 2009.01.18
라우팅 모듈  (0) 2009.01.18
The Network Simulator - ns-2  (0) 2009.01.18
And

Analysis of 802.11 MAC code in NS-2

|

http://www.winlab.rutgers.edu/~zhibinwu/html/ns2_mac.html

Analysis of 802.11 MAC code in NS-2

[ Back to Network Simulator 2 for Wireless ]

0. MAC in ns-2

LAN is within Berkeley Architecture, WLAN cannot create with “newLan” command
Ethernet could be created as a LAN with common bandwidth and delay.
 

1. The general structure of MAC

related sourcecode:  mac.cc,  mac.h

MAC class is derived from Bi-Connector class.

Local Variables:
  • pktTx_ 
  • pktRx_
  • Macstate_ :
  • index_  : mac address

Basic functions of General MAC class.
  • recv (packet, handler)
    • This is the entry from upper target (a callback handler is given as a parameter) to send a packet to MAC. After the MAC transmit this packet successfully, it will use this callback handler to inform the upper target that MAC is idle and  give another packet if there are packets buffered.
  • SendUp
    • entry for receiving a packet. Sendup is function is directly called by the lower target of MAC, might be "netif" or "phy". And this function directly calls the upper_target. Because the uplink  to upper_target does not involve any phsical transmission delay, it does not need any timer and state change here. The question is that when the MAC is in MAC_RECV state? The answer is: The MAC here is supposed to be full-duplex and receive can be happened simultaneously. it does not care about collisions etc. This is a general MAC class
  • SendDown
    • used to sending packet down. Called by recv().init a timer for tx, and the timer handler is defined to call resume().
  • Handler* callback_;
    • when MAC is idle, the upper target has to be callback.
  • Resume()
    • When tx timer out, reset MAC as idle state and callback.
  • Discard
    • When a packet has to be drop, the drop_ (NsObject*) of bi-connector class has to be called to handle this, usually drop (p, why) is used. Why is a string of drop reason, in cmu-trace.h. three-character string is defined to describe those reasons in the trace file, such as "BSY", "CBK"....
mac_state

2. The 802.11 MAC

it is implemented by CMU. It is a subclass of MAC.

related sourcecode : mac-802_11.cc, mac-802_11.h, mac-timer.cc, mac-timer.h

State Machine:


The tx_state and rx_state are two member variables. Although, actually mac cannot transmit and receive at the same time. we still hold two variables for them. The possible state is MAC_SEND, MAC_IDLE, MAC_RECV, MAC_COLL, MAC_RTS, MAC_CTS, MAC_ACK.

Local Variables:
  • pktTx_ (inherited from Mac class): 
  • pktRx_(inherited from Mac class):
  • pktCtrl_
  • pktRTS_

Basic functions:

  • recv(): the recv() function of MAC class has been overridden. Here, recv() means an incoming packet from both physical layer and upper layer.
  • send(): this function is called by recv() when it get a packet supposed to sending down.  Similarly, a callback handler is given as a parameter. Immediately, the sendDATA(p) function is called to generate an appropriate mac_header for this packet, and set this to pktTx_. Then,  follew the CSMA/CA procedures to get this packet sent.
  • sendDATA(). to compose a DATA MAC frame and set it as pktTx_
  • recvDATA(). When heard a DATA MAC frame, hand it to upper layer.

Callback to IFQ in MAC 802.11

The callback is set when a packet comes from upper layer and be handled by send(p,h). The callback is used and reset to zero in tx_resume() function of mac-802_11.cc:

void
Mac802_11::tx_resume()
{
 .....
else if(callback_) {
        Handler *h = callback_;
        callback_ = 0;
        h->handle((Event*) 0);
    }
    // change wrt Mike's code
    //SET_TX_STATE(MAC_IDLE);
   setTxState(MAC_IDLE);
}
The callback will reactivate the interface queue between mac_ and ll_ objects, see queue/queue.cc
void QueueHandler::handle(Event*)
{
queue_.resume();
}

void Queue::resume()
{
Packet* p = deque();
if (p != 0) {
target_->recv(p, &qh_);
} else {
if (unblock_on_resume_)
blocked_ = 0;
else
blocked_ = 1;
}
}

See that the queue is blocked if not "callback", thus, callback is essential to make queue work properly.

Backoff

The backoff implementation in mac-802_11.cc does not comply with the standard. Basically, this is due to the introduction of a defer timer. The defertimer is set in send() and after a packet transmission finishes. The deferred time value is usually (DIFS+rTime) where rTime is as same as the selection of backoff timeslots from CW (Contention Window). However, the defertimer is never paused or resumed.

So, after a packet transmission, according to the IEEE 802.11 standard, the node should do backoff immediately. here in ns-code, the defertime is first set. And after timer out, in check_pktTx() function. if the channel is not idle, a backoff timer is set. Therefore, here exists a double backoff problem. Also, according to IEEE 802.11 standard, a node should access channel directly if it sense the channel idle and still idle after at least DIFS time. Here, ns-code also deviates from the standard and add an additional rTime before sending DATA or RTS.
 
Determine the transmission time

 
txtime is calculated from the "size" variable in common header. Because all headers are present in the packet no matter what layer it is. Thus, the only way to know the packet size is to add or subtract some bytes in hdr_cmn->size(); In 802.11 MAC code, in recvDATA(), the 802.11 header size will be subtracted. And in SendDATA(), a 80211_hdr_length will be added.

Transmission Failure:

In both RetransmitRTS and RetransmitDATA functions, it is necessary to deal a packet drop :

if(ssrc_ >= macmib_.getShortRetryLimit()) {
discard(pktRTS_, DROP_MAC_RETRY_COUNT_EXCEEDED); pktRTS_ = 0;
/* tell the callback the send operation failed
before discarding the packet */
hdr_cmn *ch = HDR_CMN(pktTx_);
if (ch->xmit_failure_) {
/*
* Need to remove the MAC header so that
* re-cycled packets don't keep getting
* bigger.
*/
// change wrt Mike's code
//ch->size() -= ETHER_HDR_LEN11;
ch->size() -= phymib_.getHdrLen11();
ch->xmit_reason_ = XMIT_REASON_RTS;
ch->xmit_failure_(pktTx_->copy(),
ch->xmit_failure_data_);
//callback by upperlayer } //printf("(%d)....discarding RTS:%x\n",index_,pktRTS_); discard(pktTx_, DROP_MAC_RETRY_COUNT_EXCEEDED); pktTx_ = 0; ssrc_ = 0; rst_cw(); }

So, it is a way to let upper layer , such as DSR routing to know there is a route-error and need to send a route-error message.

Frame Formats in ns-2

The 802.11 header in ns-2 is not conform to the 802.11 standard. It is a different one. Thus, this overhead cannot be regarded as authentic as that of
the experiment. And the throughput measurements also seems different.

Other IEEE 802.11 features

1. Carrier Sense

This is normally done by the physical layer source code. The state of 802.11 MAC is  controlled by  some timers. Such as the  Backoff_timer. By checking if those timers are still busy, the MAC will arrange its operations correspondingly.

2. Virtual Carrier Sense

RTS/CTS is an important part of code. There are functions like sendRTS ( is to form a RTS ctrl packrt) , retransmitRTS...... Basically it has to compare with RTSThreshold first, if the size is small than the threshold, there is no" virtual carrier sense" scheme used.

'Network > Ns2_Lecture' 카테고리의 다른 글

ns2에 대한 17가지 질문  (0) 2009.02.08
[통신관련] XP인터넷 최적화 총정리 (MTU 측정에서 변경까지)  (0) 2009.01.18
Tcl 명령어  (0) 2009.01.18
라우팅 모듈  (0) 2009.01.18
The Network Simulator - ns-2  (0) 2009.01.18
And

[통신관련] XP인터넷 최적화 총정리 (MTU 측정에서 변경까지)

| 2009. 1. 18. 17:42
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Tcl 명령어

| 2009. 1. 18. 17:40
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

라우팅 모듈

| 2009. 1. 18. 17:40
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

The Network Simulator - ns-2

| 2009. 1. 18. 17:39
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Network Simulator (NS2)_관련링크

| 2009. 1. 18. 17:39
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

[ns2] NS2란? (한글)

| 2009. 1. 18. 17:38
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

ns-2 관련 한글 링크

| 2009. 1. 18. 17:38
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

우분투 5.04에서 NS 2.29 설치하기

| 2009. 1. 18. 17:37
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
prev | 1 | 2 | 3 | 4 | ··· | 6 | next