55941718 Tap2 MoPhongTrongNS 2 Org

256
VNTELECOM.ORG ADNET NETSIM MÔ PH˜NG TRONG NS-2 TÀI LIU THAM KHO LĨNH VC MÔ PH˜NG VÀ NG DNG Dch thu“t bi: Nhóm TE Biên t“p bi: Nhóm CM Hà Nºi 12 - 2009

Transcript of 55941718 Tap2 MoPhongTrongNS 2 Org

  • VNTELECOM.ORG

    ADNET

    NETSIM

    M PHNG TRONG NS-2

    TI LIU THAM KHO

    LNH VC M PHNG V NG DNG

    Dch thut bi: Nhm TE

    Bin tp bi: Nhm CM

    H Ni 12 - 2009

  • Ni dung trong ti liu ny c ly t mt s sch tham kho v cc bi bo khoa hc. Vic

    thc hin ti liu ny l Phi Li Nhun nn chng ti khng tin hnh cc th tc v bn quyn.

    Nu c nhn/t chc no sao chp ni dung ti liu ny vo cc sn phm thng mi th trch

    nhim thc thi vn bn quyn thuc v c nhn/t chc .

    y l mt ti liu min ph. Bn hon ton c th phn phi li cho nhng ngi s dng

    khc hoc c th chnh sa cho ph hp.

    Ti liu ny c pht hnh vi hy vng rng n s tr nn hu ch, nhng n KHNG KM

    THEO BT K S BO M NO, ngay c nhng m bo ngm hiu v vic thng

    mi ho hay phi ph hp vi mt ch c th no (vn ny bn c th tham kho giy

    php GNU General Public License bit thm chi tit)

    Ti liu ny c ti tng hp v nh dng li t cc bn dch. Trong qu trnh nh dng, ti

    c gng sa cc li nh: tham chiu cc phn, li chnh t, thiu du ... nhng c th cn

    b st. Trong trng hp bn c pht hin c li, cc bn hy gi th v a ch cui ti

    liu ny. Cc li ny s c sa i trong phin bn k tip

    NetSim

    AdNetVNtelcom.orgTM Tp hai: M phng trong NS-2 One Edition

  • Xin c trch dn mt cu trong cun sch "The Last Lecture", tc gi cun sch

    lm vic ti trng i hc Carnegie Mellon (CMU). L do trch dn xin mi bn

    c tm hiu ...!

    "...

    Chng ta khng i c nhng qun bi chia,

    ch c th i cch chi nhng qun bi ..."

    The Last Lecture by Randy Pausch

    Carnegie Mellon University

  • Li ni u

    K t khi ban qun tr din n vntelecom.org thnh lp nhm AdNet cho ti

    nay c hn mt nm. T khi thnh lp nhm pht ng d n NETSIM

    D n bin tp ti liu m phng bng ting Vit. n thng 04/2009 nhm hon

    thnh tp mt ca d n, ti liu c tn l - "L thuyt chung v m phng". Tp

    mt c cng b chnh thc trn din n vntelecom.org.

    Sau khi hon thnh tp mt, nhm tip tc pht trin d n vi mc tiu l hon

    thnh tp hai: M phng trong NS-2. Sau nhiu ln tr hon v nhng l do khc

    nhau, n thng 12-2009 nhm hon thnh tp hai.

    tp mt chng ti bin dch v gii thiu vi bn c nhng khi nim tng

    quan trong m phng. Nhng khi nim v nh gi hiu nng, cc li thng gp khi

    m phng, cc k thut m phng, nguyn l v m phng, gii thiu v m phng

    ri rc trong h thng mng my tnh v mng vin thng. Ngoi ra cn cp n

    vic so snh v nh gi cc chng trnh m phng ph bin hin nay. Nh vy, ni

    dung trong tp mt l nn tng nhng ngi quan tm n lnh vc m phng c

    th tm hiu. ng thi n l c s bn c tm hiu cc vn c cp trong

    tp hai. Nhng vn ny thng hay b b qua i vi nhng ngi mi tm hiu.

    Trong tp hai, chng ti gii thiu vi bn c mt b cng c m phng c th

    - l b cng c m phng NS-2-allinone. Trong ti liu ny gi tt l NS-2. L

    do chng ti chn NS-2 n gin l y l b m phng m ngun m, min ph vi

    ngi dng. N l b cng c m phng mnh, c cng ng mng s dng ph

    bin khp ni trn th gii, thm ch c nhng din n chuyn v chng. B m

    phng ny ph hp vi cc i tng sinh vin, nghin cu sinh. Thng tin chi tit

    c trnh by chng 1 ca cun ny.

    Mc ch ca vic dch ti liu

    xy dng ni dung cho tp hai, chng ti la chn v bin dch t cc ti

    liu [1] [2] [3] [4], y l nhng ti liu khng th thiu c vi nhng ai ang v

    s tm hiu v m phng. S d nhm tin hnh d n bin dch ny l ph bin

    NS-2 ti cc bn sinh vin, cc nghin cu sinh.... Ngoi ra cc bn mi tm hiu

    4

  • v c nh tm hiu rt ngn c thi gian tip cn. m bo tnh chnh xc

    v cc vn bn quyn, chng ti a thng tin v ngun gc ca bn gc bn

    c la chn dch u mi chng. Nu cm thy cha an tm vi bn dch

    cc bn c th tham kho trc tip cc bn gc.

    Ni dung cc chng trong tp hai

    T chng 1 ti chng 4 gii thiu tng quan v NS2, cc thnh phn trong NS2,

    gii thiu v hai ngn ng chnh c s dng trong NS-2 l TCL v C++, m t v

    file vt sau khi chy m phng. . Hiu v nm chc cc phn ny bn c s s dng

    NS-2 c tt hn.

    cc bn mi tm hiu hng th hn vi NS-2, chng ti trnh by trong chng

    5 mt tutorial hng dn bn c c th to c mt chng trnh n gin

    u tin. c bit, chng 5 cn cung cp m ngun ca cc chng trnh mu, bn

    c c th ti v, chy th v quan st kt qu.

    Chng 6, 7, 8,9 cung cp cho bn c kin thc v cc k thut m t v giao

    thc truyn ti TCP, UDP, m t v TCP/IP trong NS, loi b ngu nhin sm. y

    l cc k thut c bn p dng vo mt chng trnh c th.

    T chng 10 n chng 14 gii thiu vi bn c chi tit hn v cc m-dun

    m phng ph bin. Ni dung ca tng chng c tp trung lm sng t

    cc vn t l thuyt cho n lc p dng vo m hnh m phng. Ni dung cc

    chng ny c th ni mc nng cao hn, ph hp vi nhng sinh vin nm

    cui. Nhng ngi lm ti tt nghip c th tham kho phc v cho bo co

    ca mnh. in hnh l:

    Chng 10: M phng mng LAN.

    Chng 11: M phng MPLS [4]

    Chng 12: M phng hng i.

    Chng 13: M phng trong mng di ng.

    Chng 14: M phng mng v tinh.

    Vi hn 200 trang ti liu, khng qu di m cng khng qu ngn. Nhm bin

    son hi vng s cung cp cho bn c nhng trang ti liu b ch. Da vo y bn

    c c th tip cn, k tha, pht trin v sng to ra cc kch bn m phng. Nu

    kh nng c th vit c cc m-dun da trn NS2. to ra ti liu ny cc

    nhm lm vic s dng nhng tin ch c cung cp trn mng internet, gn kt

    v lin lc vi nhau. Cc nhm c t chc theo quy trnh: la chn ti liu, dch,

    bin tp, nh dng v xut bn. Thng tin nhm cc bn c th tham kho phn

    cui cng ca ti liu.

    5

  • Vi tinh thn t nguyn, ch ng v khng ngng hc hi gip chng ti

    hon thnh ti liu ny. Sn phm ny l cng sc chung ca c nhm, nhn y ban

    bin tp chn thnh cm n s cng tc ca cc c nhn, cc sinh vin, cc thy c

    t cc trng i hc, ng thi xin c gi li cm n ti ban qun tr din n

    vntelecom.org to ra sn chi ny, y l mt sn chi thc s b ch vi nhng

    ngi quan tm n lnh vc mng vin thng ni ring v truyn thng ni chung.

    Cun sch ny c thnh vin trong nhm NETSIM nh dng v hiu chnh.

    Trong qu trnh lm vic c gng ht kh nng th hin ti liu c khoa hc

    nht, trong qu trnh nh dng chnh sa li cc phn tham kho, cc ch thch

    theo bn gc, mt s ch ngi dch khng a vo bn dch. Do khi c ti liu

    ny cc bn c th tham kho cng vi bn gc nu c kh nng Anh vn tt. c

    bit, vic thng nht cc thut ng rt cn bn c v nhng ngi c kinh nghim

    gp thm. Trong phin bn ti, nhm s b xung cc thiu st (thut ng, li chnh

    t, c php cu, vit ha hnh nh . . . ), b xung cc m-dun m phng WiMax, m

    phng WDM, m phng SDR. . . Vic ci t NS-2 c rt nhiu ti liu v hng

    dn bng ting Vit cc bn c th tham kho t mng internet, chng ti khng

    a vo trong ti liu ny.

    Mi kin ng gp bn c c th gi v th in t ca nhm:

    adnet@ vntelecom. org ban bin tp s tip nhn, sa cha v b xung kp thi.

    Ngy 24 thng 12 nm 2009

    Tc gi

    Nhm bin son

    6

  • Mc lc

    Li ni u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    Mc lc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    Danh sch hnh v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    Danh sch bng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    Nhng t vit tt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    Chng 1. Gii thiu v NS-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    1.1. Khi nim tng quan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    1.2. Tng quan v m ngun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    1.3. Lp Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    1.3.1. t c mt tham chiu vi v d v lp Tcl . . . . . . . . . . . . . . . . . . . . . 24

    1.3.2. Dn chng v cc th tc ca OTcl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    1.3.3. Truy nhp cc kt qu n/t trnh thng dch . . . . . . . . . . . . . . . . . . . . 26

    1.3.4. Thot v bo co li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    1.3.5. Cc hm hash trong trnh thng dch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    1.3.6. Cc hot ng khc trn trnh thng dch . . . . . . . . . . . . . . . . . . . . . . . . . 27

    1.4. Lp TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    1.4.1. To v hu cc TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    1.4.2. S rng buc bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    1.4.3. Bm vt bin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    1.4.4. Cc phng thc command: nh ngha v gi ra . . . . . . . . . . . . . . . . . . 35

    1.5. Lp TclClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    1.5.1. Lm th no rng buc cc bin thnh vin lp C++ tnh . . . . . . 39

    7

  • 1.6. Lp Tcl Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    1.7. Lp EmbeddedTcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    1.8. Lp InstVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    Chng 2. C bn v TCL v OTCL . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    2.1. Tng quan v NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    2.2. Lp trnh Tcl v Otcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    Chng 3. Cc thnh phn c bn trong b m phng NS. . . . . . 53

    3.1. Khi to v kt thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    3.2. nh ngha mt mng cc lin kt v cc nt . . . . . . . . . . . 56

    3.3. Tc nhn v ng dng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    3.3.1. FTP trn nn TCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    3.3.2. CBR qua UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    3.3.3. UDP vi cc ngun lu lng khc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    3.4. Lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    3.5. Hin th: dng NAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    3.6. Bm vt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    3.6.1. Bm cc i tng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    3.6.2. Cu trc ca cc file bm vt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    3.7. Bin ngu nhin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    3.7.1. Ht nhn (hay gi tr ban u ca mt bin ngu nhin)v b to . 70

    3.7.2. To cc bin ngu nhin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    Chng 4. Lm vic vi file trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    4.1. X l file d liu vi cng c awk . . . . . . . . . . . . . . . . . . . . . . 74

    4.2. S dng grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    4.3. X l cc file d liu vi perl . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    4.4. V th vi gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    4.5. V th vi xgraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    8

  • 4.6. Trch tch thng tin trong mt kch bn tcl . . . . . . . . . . . . . 80

    4.7. Minh ha mt s file awk v gnuplot . . . . . . . . . . . . . . . . . . . 80

    4.7.1. Tnh thng lng ca mng theo hai kiu file trace . . . . . . . . . . . . . . . . 80

    4.7.2. Mu v th thng lng va tnh xong bng file awk. . . . . . . . . . . . 82

    4.8. Mt s file hnh plot v bng gnuplot . . . . . . . . . . . . . . . . . . . 82

    Chng 5. NS Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    5.1. Kch bn Tcl u tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    5.1.1. Bt u nh th no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    5.1.2. Hai node, mt lin kt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    5.1.3. Gi d liu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    5.2. Topo trong NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    5.2.1. To topo trong NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    5.2.2. To cc s kin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

    5.2.3. nh nhn cho lung d liu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    5.2.4. Gim st hng i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    5.3. Mng c tnh cht ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    5.3.1. To mt Topo ln hn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    5.3.2. Lin kt li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

    Chng 6. M phng v m t TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . 96

    6.1. M t TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    6.1.1. Cc mc ch ca TCP v iu khin lung theo c ch ca s. . . . . 97

    6.1.2. Cc bn tin xc nhn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    6.1.3. Ca s chng tc nghn ng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    6.1.4. Mt cc gi tin v ngng Wth ng: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    6.1.5. Khi to kt ni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    6.2. Qu trnh bm vt v phn tch v d Ex1.tcl. . . . . . . . . . 100

    6.3. TCP trn lin kt nhiu v vic gim st hng i . . . . . 101

    6.4. To nhiu kt ni vi cc c tnh ngu nhin . . . . . . . . . 107

    6.5. Cc kt ni TCP ngn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    9

  • 6.6. Cc cng c gim st tin tin: . . . . . . . . . . . . . . . . . . . . . . . . 119

    6.7. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

    Chng 7. nh tuyn v mng di dng . . . . . . . . . . . . . . . . . . . . . . . 126

    7.1. Bt u nh th no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    7.2. Mng ng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    7.3. Cc giao thc nh tuyn multicast (PIM). . . . . . . . . . . . . 130

    7.3.1. Ch Dense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

    7.3.2. nh tuyn da trn im RP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    7.4. nh tuyn da trn im RP. . . . . . . . . . . . . . . . . . . . . . . . . 132

    7.4.1. Ch DM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

    7.4.2. nh tuyn vi im RV tp trung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

    7.5. Kho st m phng pimdm.tcl . . . . . . . . . . . . . . . . . . . . . . . . 138

    7.6. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

    Chng 8. Loi b ngu nhin sm. . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    8.1. M t RED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    8.2. Thit t cc tham s RED trong ns . . . . . . . . . . . . . . . . . . 142

    8.3. Cc v d v m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

    8.3.1. B m loi Drop-Tail (B ng ui) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

    8.3.2. B m RED vi cu hnh tham s t ng . . . . . . . . . . . . . . . . . . . . . . 148

    8.3.3. B m RED vi cc tham s khc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    8.4. Gim st cc lung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    8.5. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    Chng 9. Cc dch v phn bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

    9.1. M t chuyn tip c m bo ca Diffserv . . . . . . . . . . . . 163

    9.2. Cc router MRED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

    9.2.1. M t chung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

    9.2.2. Cu hnh MRED trong ns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

    9.2.3. Truy vn TCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

    10

  • 9.3. nh ngha cc chnh sch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

    9.3.1. nh ngha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

    9.3.2. Cu hnh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

    9.4. M phng Diffserv: bo v cc gi tin d b tn cng . . 168

    9.4.1. Kch bn m phngnh ngha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

    9.5. Kt qu m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

    9.6. Tho lun v kt lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

    9.7. Bi tp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

    Chng 10. M phng mng LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

    10.1. C s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

    10.2. M phng mng LAN vi ns: . . . . . . . . . . . . . . . . . . . . . . . . . 182

    Chng 11. M phng mng cho MPLS (MNS) . . . . . . . . . . . . . . . 184

    11.1. Gii thiu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    11.2. Gii thiu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    11.2.1. Mc ch v phm vi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    11.2.2. M hnh khi nim ca MNS h tr QoS . . . . . . . . . . . . . . . . . . . . . . . . 186

    11.3. Thit k v thi hnh vi MNS. . . . . . . . . . . . . . . . . . . . . . . . 187

    11.3.1. Chuyn mch nhn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

    11.3.2. Chuyn mch nhn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

    11.3.3. S ginh trc ti nguyn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    11.3.4. Mc lp - Class Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

    11.3.5. Mi trng thc thi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

    11.4. Cc v d m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    11.4.1. M phng lu lng QoS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    11.4.2. M phng s u tin trc ti nguyn. . . . . . . . . . . . . . . . . . . . . . . . . . . 192

    11.5. Kt lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

    11

  • Chng 12. Mng di ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

    12.1. Cc thut ton nh tuyn . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

    12.1.1. Vector khong cch theo th t ch DSDV . . . . . . . . . . . . . . . . . . . . 197

    12.1.2. Vector khong cch theo yu cu c bit AODV. . . . . . . . . . . . . . 198

    12.1.3. nh tuyn ngun ng DSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    12.1.4. Thut ton nh tuyn t ch tm thi TORA . . . . . . . . . . . . . . . 199

    12.2. M phng mng di ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    12.2.1. Kch bn m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    12.2.2. Vit mt tcl script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

    12.3. nh dng file vt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

    12.4. Phn tch kt qu m phng . . . . . . . . . . . . . . . . . . . . . . . . . 207

    12.5. So snh vi nh tuyn ad-hoc khc . . . . . . . . . . . . . . . . . . 208

    12.5.1. TCP qua DSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    12.5.2. TCP qua AODV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

    12.5.3. TCP qua TORA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

    12.5.4. Mt vi bnh lun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    12.6. S tc ng ca TCP ti giao thc MAC. . . . . . . . . . . . . 211

    12.6.1. Bi cnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    12.6.2. Kch bn m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    12.6.3. Cc kt qu m phng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

    12.6.4. Thay i cho NS vi trng hp n > 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    Chng 13. Hng i c in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

    13.1. M phng hng i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

    13.2. Hng i hu hn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    Chng 14. Mng v tinh trong NS . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

    14.1. Tng quan v cc m hnh v tinh . . . . . . . . . . . . . . . . . . . . 227

    14.1.1. V tinh a tnh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

    14.1.2. Cc v tinh LEO (Cc v tinh qu o thp) . . . . . . . . . . . . . . . . . . . . 228

    12

  • 14.2. S dng cc tnh nng m rng cho v tinh . . . . . . . . . . 230

    14.2.1. Nt mng v v tr ca nt mng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

    14.2.2. ng truyn v tinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

    14.2.3. Chuyn giao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

    14.2.4. nh tuyn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

    14.2.5. H tr bm vt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

    14.2.6. Cc m hnh li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

    14.2.7. Cc la chn cu hnh khc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

    14.2.8. M phng h tr NAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

    14.2.9. Tch hp vi m hu tuyn v v tuyn . . . . . . . . . . . . . . . . . . . . . . . . . 241

    14.2.10. Cc tp lnh v d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

    14.3. Thc hin phn m rng m phng v tinh . . . . . . . . . . 243

    14.3.1. S dng cc danh sch lin kt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

    14.3.2. Cu trc nt mng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

    14.3.3. Cc chi tit v ng truyn v tinh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

    14.4. Commands at a glance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

    Ti liu tham kho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

    Thng tin nhm bin son . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

    13

  • Danh sch hnh v

    3.1 Knh truyn n cng . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    3.2 V d v mt mng n gin . . . . . . . . . . . . . . . . . . . . . . . . . 58

    3.3 Giao din ha NAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

    3.4 Bm cc i tng trong mt knh truyn n cng . . . . . . . . . . . . 67

    3.5 Cc trng xut hin trong mt trace . . . . . . . . . . . . . . . . . . . . 67

    4.1 Probability Distribution Fuction of BS queue delay rtPS - Nontoken-

    bucket - Nonmobility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    4.2 Evaluation of throughphut performance in downlink WiMAX with PF

    scheduler (Nonmonbility Tokenbucket) . . . . . . . . . . . . . . . . . . . 83

    5.1 To kt ni gia n0 v n1 . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    5.2 Gi d liu gia n0 v n1 . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    5.3 Topo ca on m gm 4 nt . . . . . . . . . . . . . . . . . . . . . . . . 89

    5.4 Mu sc cc lung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    5.5 Gim st hng i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    5.6 Cn bng trong gim st hng i . . . . . . . . . . . . . . . . . . . . . . 92

    5.7 M hnh gm 7 nt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    5.8 Minh ha lin kt b li . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    5.9 Lu lng truyn theo nt 6, 5, 4 . . . . . . . . . . . . . . . . . . . . . . 95

    6.1 Thng lng kt ni TCP . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    6.2 Kch thc ca s TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    6.3 V d rdrop.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

    6.4 Kch thc ca s TCP vi 20% gi tin mt ngu nhin . . . . . . . . . . 106

    6.5 Kch thc ca s TCP vi 20% gi tin mt ngu nhin: phng to . . 106

    6.6 Ca s TCP khi t l mt gi l 0 . . . . . . . . . . . . . . . . . . . . . . 106

    6.7 V d v mng vi mt s kt ni TCP . . . . . . . . . . . . . . . . . . . 108

    6.8 Kch thc hng i trong v d shortTcp.tcl . . . . . . . . . . . . . . . . 118

    14

  • 6.9 Kch thc hng i trong v d shortTcp.tcl khi s kt ni b gii hn . 118

    6.10 S lng kt ni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

    6.11 Bng thng c s dng trong giai on nghn c chai . . . . . . . . . 119

    7.1 V d v nh tuyn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    7.2 V d v nh tuyn multicast . . . . . . . . . . . . . . . . . . . . . . . . 133

    8.1 Thit lp mng cho vic nghin cu RED . . . . . . . . . . . . . . . . . . 144

    8.2 S tng kch thc hng i . . . . . . . . . . . . . . . . . . . . . . . . . 148

    8.3 Kch thc ca s ca tt c cc phin kt ni TCP . . . . . . . . . . . . 148

    8.4 S tin trin ca kch thc hng i trung bnh tc thi . . . . . . . . . 149

    8.5 S tin trin ca kch thc hng i trung bnh tc thi phng to . . . 149

    8.6 Kch thc ca s ca tc c cc phin kt ni TCP cho b m RED

    vi cc cu hnh tham s t ng . . . . . . . . . . . . . . . . . . . . . . 150

    8.7 S thay i v kch thc hng i . . . . . . . . . . . . . . . . . . . . . 154

    8.8 Kch thc hng i ca tt c cc phin kt ni cho b m RED . . . 154

    8.9 S tin trin ca kch thc hng i v gi tr trung bnh ca n . . . . 161

    8.10 S tin ha ca kch thc hng i v gi tr trung bnh ca n c

    phng to) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    8.11 S cc phin kt ni tch cc theo thi gian . . . . . . . . . . . . . . . . . 161

    9.1 Topo mng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

    9.2 S tin ha ca tng s phin . . . . . . . . . . . . . . . . . . . . . . . . 178

    10.1 V d mng LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

    11.1 M hnh khi nim ca MNS . . . . . . . . . . . . . . . . . . . . . . . . . 187

    11.2 Kin trc nt MPLS vi chuyn mch nhn . . . . . . . . . . . . . . . . 188

    11.3 X l lu lng QoS MPLS ca nt v link MPLS . . . . . . . . . . . . . 189

    11.4 Qu trnh ginh trc ti nguyn ca nt v link MPLS . . . . . . . . . 189

    11.5 Mc lp trong MPLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

    11.6 Mng MPLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    11.7 M lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

    11.8 S bin i lu lng bng thng . . . . . . . . . . . . . . . . . . . . . . 192

    11.9 M lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

    11.10Kt qu ca m lp lch s kin . . . . . . . . . . . . . . . . . . . . . . . 193

    12.1 V d v mt mng ad-hoc 3 im . . . . . . . . . . . . . . . . . . . . . . 201

    15

  • 12.2 Kch thc ca s TCP trong kch bn 3 nt mng vi giao thc nh

    tuyn DSDV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    12.3 Kch thc ca s TCP trong kch bn 3 nt mng vi giao thc nh

    tuyn DSDV vi kt ni qua v khng qua trung gian) . . . . . . . . . . 208

    12.4 TCP trong kch bn 3 nt mng vi giao thc nh tuyn DSDV, thi

    im 124.14 giy, kt ni trc tip . . . . . . . . . . . . . . . . . . . . . . 208

    12.5 TCP trong kch bn 3 nt mng vi giao thc nh tuyn DSDV, thi

    im 58 giy, kt ni qua 1 trung gian . . . . . . . . . . . . . . . . . . . 208

    12.6 Kch thc ca s ca kt ni TCP qua DSR . . . . . . . . . . . . . . . . 209

    12.7 Kch thc ca s ca kt ni TCP qua AODV . . . . . . . . . . . . . . 209

    12.8 Kch thc ca s ca kt ni TCP qua TORA vi 4 nt mng . . . . . . 210

    12.9 TCP qua AODV vi gi tr ln ca kch thc ca s ln nht . . . . . . 210

    12.10TCP qua TORA vi 4 nt mng, im thi gian 33 . . . . . . . . . . . . 211

    12.11TCP qua Tora vi 4 nt mng. im thi gian 56 . . . . . . . . . . . . . 211

    12.12Chui topo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

    12.13S gi tin/giy i vi n = 9 nh mt chc nng ca kch c ca s ln nht216

    12.14S gi tin/giy i vi n = 20 nh mt chc nng ca kch c ca s

    ln nht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

    12.15: S gi tin/giy i vi n = 30 nh mt chc nng ca kch c ca s

    ln nht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

    12.16Tin trnh ca kch thc ca s cho TCP chun vi kch thc ca s

    ln nht l 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

    12.17Tin trnh ca kch thc ca s cho DelAck TCP vi d = 3 v kch

    thc ca s ln nht l 2000 . . . . . . . . . . . . . . . . . . . . . . . . 217

    12.18Tin trnh ca kch thc ca s cho TCP chun vi 9 nt mng v

    kch thc ca s ln nht l 3 . . . . . . . . . . . . . . . . . . . . . . . 218

    12.19Tc ng ca khong thi gian tr ACK ti s gi tin TCP gi c,

    nh l mt chc nng ca kch thc ca s ln nht. d=3 . . . . . . . . 218

    13.1 S m rng kch c ca hng i M/M/1 . . . . . . . . . . . . . . . . . . 223

    14.1 V d ca mt chm sao LEO qu o cc . . . . . . . . . . . . . . . . . 229

    14.2 H thng ta hnh cu dng cc nt mng v tinh . . . . . . . . . . . 231

    14.3 Cc thnh phn chnh ca giao din mng v tinh . . . . . . . . . . . . . 234

    14.4 B sung danh sch ng truyn trong ns . . . . . . . . . . . . . . . . . 243

    14.5 Cu trc ca lp SatNode . . . . . . . . . . . . . . . . . . . . . . . . . . 245

    14.6 Chi tit c t ngn xp giao din ca mng . . . . . . . . . . . . . . . . 246

    16

  • Danh sch bng

    2.1 Chng trnh Tcl thc hin cc php ton . . . . . . . . . . . . . . . . . 49

    2.2 Chng trnh Tcl tnh ton cc s nguyn t . . . . . . . . . . . . . . . . 50

    2.3 Chng trnh Tcl tnh giai tha ca mt s . . . . . . . . . . . . . . . . . 51

    2.4 Chng trnh Tcl n gin s dng i tng real v integer . . . . . . . 52

    3.1 nh ngha cc nt, knh truyn v gn kch c hng i . . . . . . . . . 57

    3.2 nh ngha mt ng dng FTP s dng tc nhn TCP . . . . . . . . . . 58

    3.3 nh ngha mt ng dng CBR s dng tc nhn UDP . . . . . . . . . . 60

    3.4 Chng trnh ex.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    3.5 Ni dung ca mt file bm vt (trace file) . . . . . . . . . . . . . . . . . 69

    3.6 Kim tra cc bin ngu nhin phn b Pareto vi cc seed khc nhau . . 72

    4.1 awk script tnh gi tr trung bnh ca ct 4 ca mt file . . . . . . . . 74

    4.2 awk script tnh gi tr lch chun ca ct 4 ca mt file . . . . . . 74

    4.3 Mt on m awk s dng mng tnh trung bnh v lch chun . . 75

    4.4 Mt on m tnh tng cc ct . . . . . . . . . . . . . . . . . . . . . . . 75

    4.5 Mt on m tnh thng lng . . . . . . . . . . . . . . . . . . . . . . . 77

    6.1 nh ngha mt ng dng FTP s dng tc nhn TCP . . . . . . . . . . 106

    6.2 on m ex3.tcl i vi mt s kt ni TCP cnh tranh . . . . . . . . . 111

    6.3 on m shortTcp.tcl i vi mt s kt ni TCP ngn . . . . . . . . . . 118

    6.4 on m shortTcp.tcl i vi mt s kt ni TCP ngn . . . . . . . . . . 124

    7.1 Kch bn tcl cho nh tuyn tnh v ng(ex2.tcl) . . . . . . . . . . . . . 129

    7.2 V d cho multicast vi m hnh DM: pimdm.tcl . . . . . . . . . . . . . . 135

    7.3 V d cho multicast vi m hnh im RV: bts.tcl . . . . . . . . . . . . . 138

    8.1 on m tcl droptail.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

    8.2 on m tcl droptail.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    17

  • 8.3 Kch tcl shortRed.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

    9.1 on m Diffs.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

    9.2 Bo v cc gi tin d b tn thng nh mt hm ca CIR . . . . . . . . 177

    9.3 Thi gian trung bnh ca mt phin theo hm CIR . . . . . . . . . . . . 177

    12.1 Kch bn "wrls-dsdv.tcl" cho TCP ttrn mt mng ad-hoc . . . . . . . . 207

    12.2 Kch bn tcpwD.tcl cho TCp qua mt mng ad-hoc tnh vi chui topo . 215

    12.3 S lng gi tin gi c trong khong thi gian 149 giy vi n=3 nh

    mt chc nng ca kch thc ca s ln nht . . . . . . . . . . . . . . . 219

    13.1 Kch bn tcl mm1.tcl m phng hng i MM1 . . . . . . . . . . . . . 222

    13.2 Kch bn tcl mm1k.tcl m phng hng i MM1. . . . . . . . . . . . . . 225

    18

  • Nhng t vit tt

    AODV Ad hoc On Demand Distance Vector

    CDMA Code Division Multiple Access

    CIR Committed Information Rate

    CTS Clear to Send

    CR-LDP Constraint-based Label Distribution Protocol

    CR-LSP Constraint-based routed label switched path

    CSMA/CD Carrier Sense Multiple Access with Collision Detect

    Diffserv Differentiated Services

    ED Early Drops

    ERB Explicit Route information Base

    FDDI Fiber Distributed Data Interface

    FDMI Frequency Division Multiple Access

    FTP File Transfer Protocol

    IEEE Institute of Electrical and Electronics Engineers

    Intserv Integrated Service

    IP Internet Protocol

    LAN Local Area Network

    LDP Label Distribution Protolcol

    LIB Label Information Table

    LSP Label Switch Path

    LSR Label Switch Router

    MAC Medium Access Control

    MPLS Multiprotocol Label Switching

    MRED Multi RED

    NAM Network Animator

    NS Network Simulaton

    NS 2 Network Simulaton version 2

    PFT Partial Forwarding Table

    PHB Per Hop Behavior

    QoS Quality of service

    RED Random Early Detection

    RFC Request for Comments

    RR Round Robin

    19

  • TCP Transmission Control Protocol

    TDMA Time Division Multiple Access

    UDP User Datagram Protocol

    UMTS Universal Mobile Telecommunications System

    VINT Virtual InterNetwork Testbed

    WIRR Weighted Interleaved Round Robin

    20

  • Chng 1

    Gii thiu v NS-2

    Mc lc

    1.1. Khi nim tng quan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    1.2. Tng quan v m ngun . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    1.3. Lp Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    1.3.1. t c mt tham chiu vi v d v lp Tcl . . . . . . . . . . . 24

    1.3.2. Dn chng v cc th tc ca OTcl . . . . . . . . . . . . . . . . . . . . . . 25

    1.3.3. Truy nhp cc kt qu n/t trnh thng dch . . . . . . . . . . 26

    1.3.4. Thot v bo co li . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    1.3.5. Cc hm hash trong trnh thng dch . . . . . . . . . . . . . . . . . . . . 27

    1.3.6. Cc hot ng khc trn trnh thng dch . . . . . . . . . . . . . . . 27

    1.4. Lp TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    1.4.1. To v hu cc TclObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    1.4.2. S rng buc bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    1.4.3. Bm vt bin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    1.4.4. Cc phng thc command: nh ngha v gi ra . . . . . . . . 35

    1.5. Lp TclClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    1.5.1. Lm th no rng buc cc bin thnh vin lp C++ tnh

    39

    1.6. Lp Tcl Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    1.7. Lp EmbeddedTcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    1.8. Lp InstVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    21

  • vntelecom

    Ngi dch: Nguyn Quc Huy

    Bin tp: H Tt Thnh.

    Bn gc: The ns Manual, Chapter 3 [1]

    NS l mt b m phng hng i tng, c vit bng ngn ng C++, vi trnh

    thng dch OTcL nh l lp v (frontend). B m phng ny h tr mt nhnh lp

    trong C++ ( cn c gi l nhnh c bin dch compiled hierarchy trong ti

    liu ny ), v mt nhnh lp tng t trong trnh thng dch OTcL ( trong ti liu

    ny gi l nhnh c thng dch interpreted hierarchy). Hai h thng ny c mi

    tng quan kh mt thit; nhn t pha ngi s dng th y l mi tng quan mt

    - mt gia mt lp nhnh thng dch v mt lp nhnh bin dch. Phn gc ca

    nhnh ny l lp TcLObject. Ngi dng to cc i tng ca b m phng mi

    thng qua b thng dch; cc i tng ny c to sn bn trong trnh thng dch,

    v cng c phn nh bi mt i tng tng ng trong nhnh bin dch. Nhnh

    lp c thng dch s c thnh lp mt cch t ng thng qua cc phng

    php c nh ngha trong lp TcLClass. Cc i tng c to sn c phn

    nh thng qua cc phng php c nh ngha trng lp TclObject. C cc nhnh

    khc trong m C++ v on m Otcl; nhng nhnh khc ny khng c phn nh

    trong cch ca TclObject.

    1.1. Khi nim tng quan

    Ti sao li l hai ngn ng? NS s dng hai ngn ng bi v b m phng c hai

    kiu cng vic khc nhau cn phi lm. Mt mt, m phng chi tit cc giao thc

    yu cu mt ngn ng lp trnh h thng c th thao tc mt cch hiu qu n cc

    byte, cc tiu gi, v cc thut ton trin khai m c th chy trn mt tp d

    liu ln. Vi nhim v ny th tc chy chng trnh v thi gian xoay vng (gm

    chy m phng, tm li, sa li, bin dch li, chy li) l t quan trng hn.

    Mt khc, mt phn ln cc nghin cu v mng bao gm cc tham s hoc cc

    cu hnh t thay i, hay nghin cu nhanh chng mt s hot cnh. Trong cc trng

    hp , thi gian lp li (thay i mu v chy li) quan trng hn. Khi cu hnh

    chy mt ln ( ti thi im bt u m phng), thi gian chy ca phn nhim v

    ny th t quan trng hn.

    NS p ng c hai yu cu ny vi 2 ngn ng, C++ v OTcl. Vi C++ chy

    chng trnh nhanh nhng thay i li chm hn, iu khin n ph hp cho vic

    22

  • trin khai giao thc chi tit. OTcl chy chm hn nhiu nhng c th c thay i

    rt nhanh (v c th tng tc), v n l tng cho vic cu hnh m phng. NS

    (thng qua tclcl) cung cp s kt dnh to nn cc i tng v cc bin trong c

    hai ngn ng.

    bit thm thng tin v tng v cc ngn ng to bn v chng trnh phn

    chia ngn ng, tham kho tiu ca Ousterhout trong IEEE Computer. Thng tin

    v chng trnh phn cp phn chia cho m phng mng, xem trang NS[2].

    Ngn ng no lm g? C hai ngn ng ct th la chn dn n lm tng s

    cu hi rng ngn ng no nn c dng cho mc ch g. Li khuyn c bn ca

    chng ti l dng Otcl :

    Cu hnh, ci t, v cc cng vic thc hin mt ln. Nu bn c th lm iu g bn mun bng vic thao tc vi cc i tng c

    sn trong C++ v dng C++.

    Nu bn s lm bt c th g m yu cu x l mi gi ca mt lung. Nu bn phi thay i hot ng ca mt lp c sn trong C++ bng nhng

    cch m cha tng c bit n.

    V d, cc knh truyn l cc i tng OTcl m tp hp tr, vic xp hng, v

    cc mun c th b mt. Nu bn c th s dng thnh tho cc cng c ny th

    tt. Nu khng, thay vo bn mun lm iu g ring bit (mt quy tc xp

    hng c bit hoc cc kiu mt mt), th bn cn mt i tng C++ mi.

    C nhng phn khng r rng: hu ht vic nh tuyn c thc hin trong OTcl

    (mc d thut ton li Dijkstra trong C++). Chng ta c nhng b m phng

    HTTP m trong mi lung c bt u trong OTcl v qu trnh x l trn mt

    gi c nh ngha trong C++. iu ny n khi chng ta c 100cc lung bt

    u trn mt giy trong thi gian m phng. Ni chung, nu chng ta cn n Tcl

    nhiu ln trn mt giy, th nn chuyn sang C++.

    1.2. Tng quan v m ngun

    Trong ti liu ny, chng ta s dng t interpreter ng ngha vi trnh thng

    dch OTcl. M giao tip vi trnh thng dch ny nm trong mt th mc ring,

    tclcl. Phn cn li ca m b m phng nm trong th mc ns-2. Chng ta s s

    dng k hiu tclcl/hfilei cp n mt phn hfilei ring bit trong Tcl. Tng

    t, chng ta dng k hiu, ns/hfilei gn cho phn hfilei trong th mc ns-2 .

    C mt s lng cc lp c nh ngha trong tclcl/. Chng ta ch tp trung

    vo lp th 6 c dng trong ns. Lp Tcl (phn 1.3) bao gm cc phng php m

    23

  • m C++ s dng truy cp trnh thng dch. Lp TclObject (phn 1.4) l lp c

    bn cho tt c cc i tng ca b m phng m cng c phn nh vo trong h

    thng cp bc c bin dch. Lp TclClass (phn 1.5) xc nh cc h thng cp bc

    lp c bin dch, v cc phng php cho php ngi dng din gii TclObjects.

    Lp TclCommand (phn 1.6) c s dng nh ngha cc lnh bin dch ton cc

    c bn. Lp EmbeddedTcl (phn 1.7) bao gm cc phng thc ti cc lnh c

    sn cp cao hn, iu ny lm cho vic m phng cu hnh tr nn d dng hn.

    Cui cng, lp InstVar (phn 1.8) l cc phng php truy cp cc bin thnh

    vin ca C++ nh l cac bin trong OTcl.

    Cc th tc v cc hm c m t trong chng ny c th c tm thy

    trong tclcl/Tcl.cc, h, tclcl/Tcl2.cc, tclcl/tcl-object.tcl, v tclcl/tracedvar.cc, h. File

    tclcl/tcl2c++.c c dng xy dng ns, v c cp mt cch ngn gn trong

    chng ny.

    1.3. Lp Tcl

    Lp class Tcl tm gn trng hp thc ca b thng dch OTcl, v cung cp cc

    phng php truy cp v giao tip vi b thng dch ny. Cc phng thc c

    m t trong phn ny lin quan n ngi lp trnh ns, tc ngi s vit on m

    C++. N cn cho ta cc phng php cho cc hot ng sau y:

    t c tham chiu ti Tcl instance. Gi ra cc th tc OTcl thng qua b thng dch. Khi phc hoc gi li cc kt qu ca trnh thng dch. Bo co cc tnh trng li v thot ra nh bnh thng. Lu tr v tra cu cc TclObjects. Ginh quyn truy cp trc tip vo trnh thng dch.

    1.3.1. t c mt tham chiu vi v d v lp Tcl

    Mt instance n l ca lp c khai bo trong file tclcl/Tcl.cc nh mt bin

    thnh vin tnh; ngi lp trnh phi nhn c mt tham chiu n instance ny

    c th truy cp ti cc phng php khc c m t trong phn ny. Cu lnh

    truy cp instance ny l.

    Tcl& tcl = Tcl::instance();

    24

  • 1.3.2. Dn chng v cc th tc ca OTcl

    C 4 phng php khc nhau gi ra mt lnh OTcl thng qua trng tcl.

    Chng khc nhau mt cch c bn v cc i s gi. Mi hm chuyn mt chui vo

    trnh thng dch, m sau nh gi chui ny trong mt ng cnh chung (global

    context). Cc phng php ny s tr v cho hm gi nu trnh thng dch tr v

    bn tin TCL_OK. Hay ni cch khc, nu trnh thng dch tr v TCL_ERROR,

    cc phng thc ny s gi th tc tkerror{}. Ngi dng c th lm qu ti th tc

    ny c b qua mt s loi li no . Nhng phc tp ca vic lp trnh OTcl

    nm ngoi phm vi ca ti liu ny. Phn tip theo (phn 1.3.3) s m t cc phng

    thc truy cp kt qu c tr v bi b thng dch.

    tcl.eval(char* s) invokes Tcl_GlobalEval() to execute s through the interpreter. tcl.evalc(const char* s) preserves the argument string s. It copies the string s

    into its internal buffer; it then invokes the previous eval(char* s) on the internal

    buffer.

    tcl.eval() assumes that the command is already stored in the class internal bp_;it directly invokes tcl.eval(char*bp_). A handle to the buffer itself is available

    through the method tcl.buffer(void).

    tcl.evalf(const char* s, . . . ) is a Printf(3) like equivalent. It uses vsprintf(3)internally to create the input string.

    tcl.eval(char* s) vin dn Tcl_GlobalEval() thc thi s thng qua trnh thngdch.

    tcl.evalc(const char* s) lu gi chui i s s. N copy chui s vo b m bntrong; sau n dn nhp eval(char* s) trc ln b m bn trong.

    tcl.eval() cho rng lnh c lu tr sn sng trong bp_ ni ca lp; n dnnhp tcl.eval(char*bp_) mt cch trc tip. Mt khc b m ca n lun sn

    sng thng qua th tc tcl.buffer(void).

    tcl.evalf(const char* s, . . . ) tng ng vi Printf(3). N s dng vsprintf(3) to nn mt chui ni ti bn trong n.

    V d, di y l mt s cch s dng cc phng php ni trn:

    Tcl& tcl = Tcl::instance();

    char wrk[128];

    strcpy(wrk, "Simulator set NumberInterfaces_ 1");

    tcl.eval(wrk);

    sprintf(tcl.buffer(), "Agent/SRM set requestFunction_ %s", "Fixed");

    25

  • tcl.eval();

    tcl.evalc("puts stdout hello world");

    tcl.evalf("%s request %d %d", name_, sender, msgid);

    1.3.3. Truy nhp cc kt qu n/t trnh thng dch

    Khi trnh thng dch vin dn mt phng thc t C++, n mong mun c c

    mt kt qu phn hi trong mt bin thnh vin ring bit, tcl_>result. C hai

    cch to nn bin ny:

    tcl.result(const char* s)Dn nhp chui kt qu s tr v li trnh thng dch.

    tcl.resultf(const char* fmt, . . . )varargs(3) s thay i nh trn l nh dng kt qu s dng vsprintf(3),

    dn nhp chui kt qu tr v li trnh thng dch.

    if (strcmp(argv[1], "now") == 0) {

    tcl.resultf("%.17g", clock());

    return TCL_OK;

    }

    tcl.result("Invalid operation specified");

    return TCL_ERROR;

    Tng t, khi mt phng thc ca C++ vin dn mt lnh OTcl, trnh thng dch

    s tr v kt qu trong tcl_>result.

    tcl.result(void) phi c s dng tm li kt qu. Lu rng, kt qu lmt chui, phi c chuyn sang mt nh dng bn trong ph hp vi kiu

    ca kt qu.

    tcl.evalc("Simulator set NumberInterfaces_");

    char* ni = tcl.result();

    if (atoi(ni) != 1)

    tcl.evalc("Simulator set NumberInterfaces_ 1");

    1.3.4. Thot v bo co li

    Phng php ny cung cp mt cch thc quy chun bo co cc li trong m

    c bin dch.

    tcl.error(const char* s) thc hin cc chc nng sau y: ghi s vo stdout; ghitcl_>result vo stdout; thot ra vi m li 1.

    26

  • tcl.resultf("cmd = %s", cmd);

    tcl.error("invalid command specified");

    /*NOTREACHED*/

    Lu , khng c s khc nhau nhiu gia vic tr v bn tin TCL_ERROR nh

    chng ta lm trong phn trc (phn 3.3.3), v vic gi Tcl::error(). B nh dng

    s to mt ngoi l bn trong trnh thng dch; ngi dng c th gi ngoi l ny v

    c th khi phc li t li. Nu ngi dng khng nh ngha bt c ngoi l no,

    th trnh thng dch s in mt vt cm v thot. Tuy nhin, nu m gi ra error(),

    th ngi dng m phng khng th gi li; thm vo , ns s khng in bt k mt

    vt cm no.

    1.3.5. Cc hm hash trong trnh thng dch

    ns lu tr mt tham chiu vi mi TclObject trong nhnh c bin dch trong

    mt mt bng hash; iu ny cho php truy cp nhanh n cc i tng. Bng hash

    ny nm bn trong b thng dch. ns dng tn ca TclObject nh l cha kho

    truy nhp, tra cu, hoc xo TclObject trong bng hash.

    tcl.enter(TclObject* o) s chn mt con tr vo TclObject o bn trong bnghash.

    N c dng bi TclClass::create_shadow() chn mt i tng vo bn

    trong bng, khi i tng c to ra.

    tcl.lookup(char* s) s tm li c TclObject vi tn s.N c dng bi TclObject::lookup().

    _ tcl.remove(TclObject* o) s xo cc quan h vi TclObject o t bng hash.N c dng bi TclClass::delete_shadow() xo mt entry ang tn ti t

    bng hash, khi i tng b xo.

    Cc hm ny c dng bn trong bi lp TclObject v lp TclClass.

    1.3.6. Cc hot ng khc trn trnh thng dch

    Nu cc phng php trn khng , th chng ta phi nm c trnh thng

    dch v vit ra cc hm ring cho mnh.

    tcl.interp(void) tr v cc hm bn trong trnh thng dch m c lu trtrong lp Tcl.

    27

  • 1.4. Lp TclObject

    class TclObject l lp c bn cho hu ht cc lp khc trong cc nhnh thng

    dch v bin dch. Mi i tng trong lp TclObject c to ra bi ngi dng t

    bn trong b thng dch. Mt i tng phn bng tng ng c to ra nhnh

    bin dch. Hai i tng ny c mi tng quan cht ch vi nhau. Lp TclClass, m

    s c m t trong phn tip theo, cha cc c cu thc hin qu trnh bng ho

    (qu trnh nh x t i tng nhnh thng dch sang i tng nhwrnh bin

    dch ).

    Trong phn cn li ca ti liu ny, chng ta s thng xuyn gi mt i tng

    l mt TclObject1. Bng cch , ta xem xt mt i tng c th m c trng lp

    TclObject hoc trong mt lp m c to ra t lp TclObject. Nu cn thit, ta xc

    nh xem i tng l mt i tng trong b thng dch hay l trong m bin

    dch. Trong nhng trng hp nh vy, chng ta s s dng cc thut ng tng ng

    l "i tng thng dch", v "i tng bin dch" phn bit hai loi i tng

    trn.

    Nhng s khc bit t ns v1 Khng nh ns v1, lp TclObject1 gp cc hm trc

    y ca lp NsObject. V th, n lu tr nhng lin kt bin giao din ( phn 1.4.2)

    m dng ni cc bin instance ca Otcl trong i tng thng dch vi cc bin

    thnh vin C++ tng ng trong i tng bin dch. S rng buc ny mnh hn

    trong ns v1 v trong bt k s thay i cc bin OTcl u b kho, v cc gi tr

    C++ v OTcl hin ti u c lm cho ph hp sau mi ln truy cp thng qua b

    thng dch. S ng nht c thc hin thng qua lp InstVar (phn 3.8). Khc

    nls v1, cc i tng trong lp TclObject cng khng cn c lu nh mt danh

    sch lin kt ton cc. Thay vo , chng c lu tr trong mt bng hash thuc

    lp Tcl (phn 1.3.5).

    Cu hnh tiu biu ca mt TclObject V d sau y m t cu hnh ca mt

    tc t SRM (class Agent/SRM/Adaptive).

    set srm [new Agent/SRM/Adaptive]

    \$srm set packetSize\_{} 1024

    \$srm traffic-source \$s0

    Theo quy c trong ns, lp Agent/SRM/Adaptive l mt lp con ca Agent/SRM,

    l mt lp con ca Agent, l mt lp con ca TclObject. Nhnh lp bin dch tng

    ng l ASRMAgent, c ly t SRMAgent, SRMAgent li c ly t Agent, v

    cui cng l t TclObject mt cch tun t. Dng u tin ca v d trn cho thy

    mt TclObject c to ra (hoc b hu) nh th no (phn 3.4.1); dng tip theo

    1Trong phin bn gn y nht ca ns v ns/tclcl, i tng ny c i tn thnh Spli-tObjefct, phn nh mt cch chnh xc hn s bn cht ca s tn ti ca n. Tuy nhin, lc ny,chng ta s tip tc s dng thut ng TclObject ch nhng i tng ny v lp ny

    28

  • cu hnh mt bin gii hn (phn 3.4.2); v cui cng, dng cui m t i tng

    c thng dch bng cch gi ra mt phng thc C++ ngay khi n l mt th

    tc v d.

    1.4.1. To v hu cc TclObject

    Khi ngi dng to/hu mt TclObject mi, s dng cc th tc new{} v

    delete{}; cc th tc ny c nh ngha trong tclcl/tcl-object.tcl. Chng c th

    c dng to hay hu cc i tng trong tt c cc lp, bao gm cc TclOb-

    jects2 Trong phn ny,chng ta s m t cc hot ng bn trong c thc thi khi

    mt TclObject c to ra.

    To cc TclObject bng cch dng new{}, ngi dng to mt TclObject c

    thng dch. b thng dch xy dng cu trc cho i tng , init{}, cc i s ca

    phn ny c cung cp bi ngi dng. ns chu trch nhim to ra i tng

    bin dch mt cch t ng. i tng bng c to ra bi lp c bn ca hm to

    TclObject. V th, hm to cho mt TclObject mi phi gi hm to lp ngun ca

    n trc. new{} tr v mt chc danh cho i tng, m c th c dng cho cc

    hot ng sau ny trn i tng .

    V d sau y minh ha hm to Agent/SRM/Adaptive:

    Agent/SRM/Adaptive instproc init args \{

    eval \$self next \$args

    \$self array set closest\_{} "requestor 0 repairor 0"

    \$self set eps\_{} [\$class set eps\_{}]

    \}

    Chui cc hot ng sau y c thc hin bi trnh thng dch nh mt phn

    ca vic th hin mt TclObject mi . cho d theo di, chng ta s m t tng

    bc to nn mt i tng Agent/SRM/Adaptive. Cc bc l:

    1. To c mt tn duy nht cho mt i tng mi t khng gian tn TclObject.

    Tn ny c tr v cho ngi dng. Hu ht tn trong ns u c dng_,

    vi l mt s nguyn. Tn ny c to bi getid{}. N c th c

    tm thy t C++ bng phng thc name(){}.

    2. To hm to cho mt i tng mi. Bt k cc i s c quy nh bi ngi

    dng no cng c truyn ti hm to ny. Hm to ny phi gi ra hm to

    c lin kt vi lp ngun ca n.

    2Nh v d, Cc lp, Simulator, Node, Link, hay rtObject, l cc lp m khng xut pht t lpTclObject. Cc i tng trong nhng lp ny v th khng phi l TclObjects. Tuy nhin, mt itng Simulator, Node, Link, hoc route cng c to ra bng cch s dng th tc new trong ns.

    29

  • Trong v d trn, Agent/SRM/Adaptive gi lp ngun ca n dng chnh u

    tin.

    Lu rng mi hm to ln lt gi ra hm to ca lp ngun ca n ad

    nauseum. Hm to cui cng trong ns l hm to TclObject. Hm to ny chu

    trch nhim thit lp i tng bng, v thc hin nhng vic khi to thao v

    cc rng buc khc, nh chng ti gii thch bn di. Tt hn l nn gi cc

    cu trc ngun trc khi thc hin vic np cc thng s c yu cu trong

    lp ny. iu ny cho php i tng bng c thit lp, v cc rng buc

    bin c thit lp.

    3. Hm to TclObject gi ra th tc v d create-shadow{} cho lp Agent/SRM/Adaptive.

    4. Khi i tng bng c to ra, ns gi tt c cc b cu trc cho i tng

    bin dch, mi b nh vy c th thit lp cc rng buc bin cho cc i

    tng trong lp , v thc hin cc khi to cn thit khc. Do lnh hun

    th trc y ca chng ta ph hp hn gi ra cc hm to ngun trc khi

    thc hin vic khi to lp.

    5. Sau khi i tng bng c to ra thnh cng bng lnh create_shadow(void)

    (a) i tng mi vo bng hash ca cc TclObject c m t trc y

    (phn 1.3.5).

    (b) Thc hin cmd{}, mt th tc ca i tng thng dch mi c to.

    Th tc v d ny gi ra phng thc command() ca i tng bin dch.

    Trong mt phn nh sau (Section 1.4.4), chng ti s m t cch thc

    command c nh ngha , v c gi ra nh th no.

    Lu rng tt c cc c ch bng ho trn ch hot ng khi ngi dng to mt

    TclObject mi thng qua trnh thng dch. N s khng lm vic nu ngi lp trnh

    to mt TclObject c bin dch mt cch n phng. V th, ngi lp trnh b

    cm khng dng phng thc mi C++ to cc i tng bin dch mt cch trc

    tip.

    Xo cc TclObject: lnh delete hu i tng thng dch, v i tng bng tng

    ng.V d, use-scheduler{hscheduleri} dng th tc delete xo b b lp lch trnh

    bng k mc nh, v to ra mt b lch trnh thay th trong khng gian ca n.

    Simulator instproc use-scheduler type {

    \$self instvar scheduler\_{}

    delete scheduler\_{} ; # xo b lch trnh bng

    k ang tn ti trc

    set scheduler\_{} [new Scheduler/\$type]

    }

    30

  • 1.4.2. S rng buc bin

    Trong hu ht cc trng hp, vic truy cp n cc bin thnh vin bin dch b

    gii hn ti m bin dch, v truy cp n cc bin thnh phn c thng dch

    cng b hn ch, phi truy nhp thng qua m thng dch; tuy nhin, c th thit

    lp cc rng buc hai chiu nh c hai bin thnh phn thng dch v bin thnh

    phn bin dch, truy cp cng d liu, v vic thay i gi tr ca c hai bin c

    th thay i gi tr ca bin c cp i tng ng sang cng mt gi tr.

    S rng buc c to ra bi hm to c bin dch khi i tng c to; c

    th truy cp mt cch t ng bi i tng c thng dch nh mt bin instanc.

    ns h tr nm kiu d liu khc nhau: cc gi tr thc, cc bin nh tr bng thng,

    cc bin nh tr thi gian, cc s nguyn, v cc s nh phn. C php m t cc

    gi tr c c t trong OTcl l khc nhau ng vi mi kiu.

    Cc bin gi tr thc v s nguyn c c t theo dng "bnh thng" . Vd,

    $object set realvar 1.2e3

    $object set intvar 12

    Bng thng c c t nh mt gi tr thc, c in thm tin t l mtk hay K ch gi tr hng ngn, hoc m hay M ch gi tr hng triu.

    Mt k t B sau cng th hin gi tr Byte trn mt giy. Theo mc nh,

    bng thng c th hin dng bps. V d, tt cc cc dng lnh sau l tng

    ng:

    $object set bwvar 1.5m

    $object set bwvar 1.5mb

    $object set bwvar 1500k

    $object set bwvar 1500kb

    $object set bwvar .1875MB

    $object set bwvar 187.5kB

    $object set bwvar 1.5e6

    $object set bwvar 1500kb

    $object set bwvar .1875MB

    $object set bwvar 187.5kB

    $object set bwvar 1.5e6

    Thi gian c quy nh nh l mt gi tr thc,c th i km vi hu t m th hin n v mili giy, v n nu l nano giy, hoc l pico giy vi p.

    Gi tr mc nh l giy (s). V d, tt c cc gi tr sau l tng ng nhau:

    $object set timevar 1500m

    $object set timevar 1.5

    $object set timevar 1.5e9n

    31

  • $object set timevar 1500e9p

    Lu rng ta c cng th thm 1 ch s biu th n v l giy. ns w s b

    qua tt c cc gi tr khc ngoi cc con s, hoc kt thc bng ch m, n,

    hay p.

    Cc gi tr nh phn c th c biu din c hai dng nh mt s nguyn,hay nh T hoc t vi gi tr ng. Cc k t theo sau ch ci u tin c

    b qua. Nu gi tr khng phi l mt s nguyn hay mt gi tr ng th ng

    nhin c xem l sai. V d,

    $object set boolvar t ; # t gi tr l ng

    $object set boolvar true

    $object set boolvar 1 ; # hay bt k gi tr khng bng khng

    no $object set boolvar false ; # t gi tr l sai

    $object set boolvar junk

    $object set boolvar 0

    Cc v d sau y cho thy hm to ca ASRMAgent3

    ASRMAgent::ASRMAgent() {

    bind("pdistance_", &pdistance_); /* bin gi tr thc */

    bind("requestor_", &requestor_); /* ibin gi tr nguyn */

    bind_time("lastSent_", &lastSessSent_); /* bin gi tr thi gian

    */

    bind_bw("ctrlLimit_", &ctrlBWLimit_); /* bin gi tr bng thng

    */

    bind_bool("running_", &running_); /* bin gi tr nh phn */

    Ch rng tt c cc hm trn u c hai i s, tn ca mt bin OTcl, v a

    ch ca bin thnh vin c bin dch tng ng c lin kt li. Trong khi thng

    c trng hp l cc rng buc c thit lp bi hm to ca i tng, khng cn

    phi lun c thc hin theo kiu ny. Ta s tho lun cc phng php thay th

    khi n mc m t lp InstVar (phn 3.8) mt cch chi tit phn sau.

    Mi bin c rng buc s t ng c khi to vi gi tr mc nh khi i tng

    c to ra. Cc gi tr mc nh ny c c t nh cc bin lp c thng dch.

    Qu trnh khi to ny c thc hin bi tuyn init-instvar{}, c gi ra bi cc

    phng php trong lp Insvar, s c m t sau (phn 1.8). hm init-instvar{} kim

    tra lp i tng thng dch, v tt c cc lp ngun ca i tng , tm kim

    lp u tin m cc bin c nh ngha. N dng gi tr ca bin trong lp

    khi to i tng . Hu ht cc gi tr khi to lin quan c nh ngha

    trong ns/tcl/lib/ns-default.tcl. V d, nu cc bin lp sau y c nh ngha cho

    ASRMAgent:

    3Lu rng hm to ny c t im thm m t cc c im ca c ch rng buc bin

    32

  • Agent/SRM/Adaptive set pdistance_ 15.0

    Agent/SRM set pdistance_ 10.0

    Agent/SRM set lastSent_ 8.345m

    Agent set ctrlLimit_ 1.44M

    Agent/SRM/Adaptive set running_ f

    Agent/SRM/Adaptive set pdistance_ 15.0

    Agent/SRM set pdistance_ 10.0

    Agent/SRM set lastSent_ 8.345m

    Agent set ctrlLimit_ 1.44M

    Agent/SRM/Adaptive set running_ f

    Do , mi i tng Agent/SRM/Adaptive mi s c tham s pdistance_ vi

    gi tr t l 15.0; lastSent_ l 8.345m t vic ci t bin lp ca lp ngun;

    ctrlLimit_ c gi tr l 1.44M s dng bin lp ca lp ngun hai ln b xo;

    running c t l sai; bin trng hp pdistance_ khng c gn tham s u vo,

    v khng c bin lp tn ti trong bt k h thng phn cp lp ca i tng thng

    dch. Trong nhng trng hp nh vy, init-instvar{} s gi ra warn-instvar{},

    in ra mt cnh bo v mt bin chng hn. Ngi dng c th b qua mt cch

    c chn lc th tc ny trong cc bn m t m phng, lt qua cnh bo ny.

    Ch rng s rng buc thc t c thc hin bng vic to cc i tng trong

    lp InstVar. Mi i tng trong lp InstVar rng buc mt bin thnh vin bin

    dch vi mt bin thnh vin thng dch. Mt TclObject lu tr mt danh sch cc

    i tng InstVar tng ng vi mi bin thnh vin ca n m b rng buc trong

    kiu ny. Phn u ca danh sch c lu trong bin thnh vin ca n instvar_

    ca TclObject.

    im cui cng cn xem xt l NS s bo m cc gi tr thc ca bin, c trong

    i tng thng dch v i tng bin dch, s ging nhau mi lc. Tuy nhin, nu

    cc phng thc v cc bin khc ca compiled object m bm theo gi tr ca bin

    , chng phi c gi ra r rng hoc c thay i bt k khi no gi tr ca bin

    b thay i. iu ny thng i hi cc t gc m ngi dng cn bit. C mt

    cch cung cp cc t gc trong NS l thng qua phng thc command() s c

    m t trong phn tip theo.

    1.4.3. Bm vt bin

    Thm vo cc rng buc bin, TclObject cn h tr bm vt ca cc bin trng

    hp trong C++ v Tcl. Mt bin bm vt c th c to v cu hnh trong C++

    hay Tcl. to ra qu trnh bm vt bin ng vi mc Tcl, bin phi c nhn thy

    trong Tcl, iu c ngha rng n phi l mt bin trng hp Tcl thun ty hoc

    bin C++/Tcl b gii hn . Thm vo , i tng s hu bin bm vt cng phi

    c yu cu thit lp qu trnh bm vt s dng phng thc Tcl trace ca

    33

  • TclObject. i s u tin trong phng thc trace phi l tn bin. i s th 2

    (khng bt buc) c t i tng bm vt, chu trch nhim bm vt ca bin .

    Nu i tng vt khng c c t, th i tng s hu bin chu trch nhim

    bm vt n.

    Vi mt TclObject, bm vt cc bin, n phi m rng phng thc bn m

    n c nh ngha trong TclObject. Lp bm vt thc hin mt phng thc trace

    n gin, v th, n c th hot ng nh mt ngi bm vt chung cho tt c cc

    bin.

    class Trace public Connector {:

    ...

    virtual void trace(TracedVar*);

    };

    Di y l mt v d n gin cho vic ci t qu trnh bm vt bin trong Tcl:

    \# \$tcp tracing its own variable cwnd\_

    \$tcp trace cwnd_

    \# the variable ssthresh_ of \$tcp is traced by a generic \$tracer

    set tracer [new Trace/Var]

    \$tcp trace ssthresh_ \$tracer

    i vi mt bin C++ c th bm vt c, n phi thuc v mt lp m bt

    ngun t TracedVar. Lp c s o TracedVar lu tr tn bin, ngi s hu, v cc

    b bm vt. Cc lp m bt ngun t TracedVar s phi cung cp phng thc o

    value, phng thc m ly b m k t nh l mt i s v ghi gi tr ca bin

    vo .

    class TracedVar {

    ...

    virtual char* value(char* buf) = 0;

    protected:

    TracedVar(const char* name);

    const char* name_; // name of the variable

    TclObject* owner_; // the object that owns this variable

    TclObject* tracer_; // callback when the variable is changed

    ...

    };

    Th vin TclCL xut ra 2 lp ca TracedVar l: TracedInt v TracedDouble.

    Cc lp ny c th c dng vi cc kiu d liu c bn ca int v double tng

    ng. C TracedInt v TracedDouble lm qu ti tt c cc hot ng m c th thay

    34

  • i gi tr ca bin nh php gn, tng v gim. Cc hot ng b qu ti ny dng

    phng thc assign gn gi tr mi cho bin v gi b bm vt nu gi tr mi khc

    vi gi tr c trc . TracedInt v TracedDouble cng b sung cc phng thc v

    value ca chng m a cc gi tr bin vo trong chui. rng v tnh chnh xc

    ca u ra c th c c t trc.

    1.4.4. Cc phng thc command: nh ngha v gi ra

    i vi mi TclObject c to ra, ns thit lp th tc trng hp, cmd{}, nh

    l mt bn l thc thi cc phng thc thng qua i tng bn sao c

    bin dch. Th tc cmd{} gi ra phng thc command() ca i tng bng mt

    cch t ng, nhp cc i s cho cmd{} nh l mt vector i s vi phng thc

    command().

    Ngi dng c th gi phng thc cmd{} bng mt trong 2 cch sau: gi ra mt

    cch r rng th tc, c t hot ng mong mun nh l i s u tin, hoc mt

    cch r rng , nu c mt th tc trng hp ca cng tn nh hot ng

    mong mun. Hu ht cc bn m phng s dng kiu sau ny, v th, ta s m t

    kiu dn chng kia trc.

    Cho rng tnh ton khong cch trong SRM c thc hin bi i tng bin

    dch; tuy nhin, n li thng c s dng bi i tng thng dch v thng c

    gi ra nh sau:

    $srmObject distance?

    Nu khng c th tc no gi l distance, trnh thng dch s gi ra th tc

    unknown, c nh ngha trong TclObject lp c bn. Th tc unknown sau s

    gi ra

    $srmObject cmd distance?

    thc hin hot ng thng qua th tc command() ca i tng bin dch.

    D nhin, ngi dng c th gi hot ng ny mt cch trc tip. Mt l do cho

    iu ny l c th lm qu ti hot ng bng cch s dng mt th tc trng

    tn. V d,

    Agent/SRM/Adaptive instproc distance? addr {

    $self instvar distanceCache_

    if ![info exists distanceCache_($addr)] {

    set distanceCache_($addr) [$self cmd distance? $addr]

    }

    set distanceCache_($addr)

    }

    By gi ta s m t cch m phng thc command() s dng ASRMAgent:command():

    nh v d sau:

    35

  • int ASRMAgent:command(int argc, const char*const*argv) :

    Tcl& tcl = Tcl:instance();:

    if (argc == 3) {

    if (strcmp(argv[1], "distance?") == 0) {

    int sender = atoi(argv[2]);

    SRMinfo* sp = get_state(sender);

    tcl.tesultf("%f", sp->distance_);

    return TCL_OK;

    }

    }

    return (SRMAgent:command(argc, argv));:

    }

    Chng ta c th phn tch on m ny nh sau:

    Hm c gi vi 2 i s: i s u tin (argc) biu th s lng ca cc is c c t trong dng lnh cho trnh thng dch. Vector cc i s dng

    lnh (argv) bao gm

    argv[0] cha tn ca phng thc, "cmd".

    argv[1] c t hot ng mong mun.

    Nu ngi dng c t bt k i s no, th chng phi c t trong

    argv[2...(argc - 1)]. Cc i s c truyn nh cc chui; chng phi c

    chuyn i sang kiu d liu ph hp.

    Nu php ton l ng, th n s tr v kt qu php ton s dng cc phngthc c m t trc (phn 1.3.3).

    Bn thn hm command() phi tr v hoc l TCL_OK hay TCL_ERROR biu th thnh cng hay tht bi.

    Nu php ton trong phng thc ny khng ng, n phi gi ra phng thclnh gc, v tr v kt qu tng ng. iu ny cho php ngi dng hnh dung

    c cc php ton khi c c cc thuc tnh k tha nh l cc th tc trng

    hp, hoc cc phng php bin dch. Trng hp phng thc command ny

    c nh ngha cho mt lp vi s a k tha, ngi lp trnh c th t do

    chn mt trong hai thnh phn b sung sau:

    1. Chng c th gi ra mt trong cc phng thc command gc, v tr v

    kt qu ca s gi ra , hoc l.

    2. Chng c th l mt trong cc phng thc command gc mt s chui,

    v tr v kt qu ca s gi ra u tin thnh cng. Nu khng thnh

    cng, th chng s tr v mt li.

    36

  • Trong ti liu ny, chng ta gi cc php ton c thc thi thng qua command() l

    instproc-likes. N phn nh cng dng ca nhng hot ng ny nh th chng

    l cc th tc trng hp OTcl ca mt i tng, nhng c th s rt khc trong s

    nhn thc v s dng.

    1.5. Lp TclClass

    Lp bin dch ny (class TclClass) l mt lp hon ton o. Cc lp thu

    c t lp c s ny cung cp 2 chc nng: xy dng nn nhnh lp thng dch

    phn nh nhnh lp bin dch; v cung cp cc phng thc to ra cc TclObject

    mi. Mi lp thu c nh vy kt hp vi mt lp bin dch ring bit trong nhnh

    lp bin dch, v c th to cc i tng mi trong lp kt hp.

    V d, xt mt lp nh RenoTcpClass. N c ly ra t lp TclClass, v c kt

    hp vi lp RenoTcpAgent. N s dn ra cc i tng mi trong lp RenoTcpAgent.

    Nhnh lp bin dch cho RenoTcpAgent l lp ln lt c to ra t TcpAgent, Tc-

    pAgent: li c to ra t Agent, Agent li c to ra t TclObject. RenoTcpClass

    c nh ngha nh sau

    static class RenoTcpClass: public TclClass {

    public:

    RenoTcpClass() : TclClass("Agent/TCP/Reno") {}

    TclObject* create(int argc, const char*const* argv) {

    return (new RenoTcpAgent());

    }

    } class_reno;

    Chng ta c th a ra mt s phn tch t nh ngha trn:

    1. Lp ny ch nh ngha hm to, v mt phng thc thm vo, create cc

    i tng ca TclObject kp hp.

    2. NS s thc hin hm to hm to RenoTcpClass cho bin tnh class_reno},

    khi n c bt u ln u tin. Vic ny ci t cc phng thc thch hp

    v nhnh lp phin dch.

    3. Hm to c t lp thng dch mt cch r rng nh Agent/TCP/Reno. iu

    ny cng c t nhnh lp thng dch mt cch hon ton.

    Gi li tho thun kia trong ns is l dng k t gch cho (/) nh l cch

    phn chia. Vi bt k lp c cho l A/B/C/D, th lp A/B/C/D l 1 lp con

    37

  • ca A/B/C, A/B/C l lp con ca A/B, ln lt A/B l lp con ca A. A chnh

    n li l lp con ca TclObject.

    Trong trng hp trn, hm to TclClass to ra 3 lp, Agent/TCP/Reno l lp

    con ca Agent/TCP l lp con ca Agent l lp con ca TclObject.

    4. Lp ny kp hp vi lp RenoTcpAgent; n to ra cc i tng mi trong lp

    c kt hp ny.

    5. Phng thc RenoTcpClass::create tr cc TclObject v trong lp RenoTcpAgent.

    6. Khi ngi dng c t new Agent/TCP/Reno, th tc tip theo RenoTcpClass::create

    c gi ra

    7. Vector cc i s (argv) bao gm

    argv[0] cha tn ca i tng.

    argv[1...3] cha $self, $class, v $proc. K t khi create is c gi thng

    qua th tc trng hp create-shadow, argv[3] bao gm create-shadow.

    argv[4] cha bt k i s b sung no (c xem nh l mt chui) c cung

    cp bi ngi dng.

    class Trace minh ho vic trnh by i s bng cc phng thc TclClass.

    class TraceClass : public TclClass \{

    public:\tab

    {}TraceClass() : TclClass("Trace") \{\}

    {}TclObject* create(int args, const char*const* argv) \{

    {}if (args >= 5)\untab

    {}return (new Trace(*argv[4]));

    {}else

    {}return NULL;

    {}\}

    {}\} trace\_{}class;

    Mt i tng Trace c to ra nh

    new Trace "X"

    Cui cng, v c bn, cch m nhnh lp thng dch c to nn nh sau:

    1. Hm to i tng c thc hin khi ns khi ng ln u.

    2. Hm to ny gi hm to TclClass vi ci tn ca lp c thng dch cng

    nh i s ca n.

    3. Hm to TclClass lu tr tn ca lp, v chn i tng ny vo mt bng k

    lin kt ca cc i tng TclClass.

    38

  • 4. Trong sut qu trnh khi to ca b m phng, hm Tcl_AppInit(void) gi

    ra TclClass::bind(void)

    5. Vi mi i tng trong bng k cc i tng TclClass, hm bind() gi ra

    register{}, bng cch c t tn ca lp thng dch nh i s ca n.

    6. Hm register{} thit lp lp nhnh, to cc lp c yu cu, v cha c

    to ra.

    7. Cui cng, hm bind() nh ngha cc th tc i tng creat-shadow v

    delete-shadow cho chnh lp mi ny.

    1.5.1. Lm th no rng buc cc bin thnh vin lp C++

    tnh

    Trong phn 1.4, ta thy cch phi by cc bin thnh vin ca mt i tng

    C++ sang khng gian OTcl. Tuy nhin, iu ny khng p dng cho cc bin thnh

    vin tnh ca mt lp C++. D nhin, c th to ra mt bin OTcl cho bin thnh

    vin tnh ca mi i tng C++; mt cch hin nhin iu ny lm mt hon ton

    ngha ca cc bin thnh vin tnh.

    Chng ta khng th gii quyt vn rng buc bng cch s dng gii php

    tng t nh vic rng buc trong TclObject da trn lp InstVar, bi v lp InstVar

    trong TclCL yu cu s hin hu ca mt TclObject. Tuy nhin, ta c th to mt

    phng thc trong lp TclClass tng ng v truy cp cc thnh vin tnh ca mt

    lp C++ thng qua cc phng thc TclObject tng ng ca n. Th tc y nh

    sau:

    1. To TclClass ca chnh bn nh m t trn;

    2. Khai bo cc phng thc bind() v method() trong lp do bn to ra;

    3. To cc phng thc rng buc ca bn trong hm bind() ca bn vi hm

    add_method("your_method"), v sau b sung bin iu khin trong method()

    bng cch tng t nh bn s lm trong TclObject::command(). Lu , s

    lng bin hp quy cch vi TclClass::method() l khc so vi TclObject::command().

    Ngi to c nhiu hn 2 i s trc.

    Nh v d sau, chng ta biu din mt phin bn n gin PacketHeaderClass trong

    ~ns/packet.cc. Gi s rng chng ta c lp Packet sau y c cha mt bin tnh

    hdrlen_ m ta mun truy cp t OTcl:

    class Packet {

    ......

    39

  • static int hdrlen_;

    };

    Sau ta lm tip theo nh bn di xy dng mt b truy cp cho bin ny:

    class PacketHeaderClass:public TclClass {

    protected:

    PacketHeaderClass(const char* classname, int hdrsize);

    TclObject* create(int argc, const char*const* argv);

    /* Hai thnh phn ca cc phng thc truy nhp

    trong lp Tcl */

    virtual void bind();

    virtual int method(int argc, const char*const* argv);

    };

    void PacketHeaderClass::bind()

    {

    /*Gi n lp c bn bind() phi lm trc

    add_method()*/

    TclClass::bind();

    add_method("hdrlen");

    {

    int PacketHeaderClass::method(int ac, const char*const* av)

    {

    Tcl& tcl = Tcl::instance();

    /*Lu vic chuyn i i s ny; ta c th sau

    i x vi chng nh nu l trong TclObject::command()*/

    int argc = ac - 2;

    const char*const* argv = av 2;+

    if (argc == 2) {

    if (strcmp(argv[1], "hdrlen") == 0) {

    tcl.resultf("%d", Packet::hdrlen_);

    return (TCL_OK);

    }

    } else if (argc == 3) {

    if (strcmp(argv[1], "hdrlen") == 0) {

    Packet::hdrlen_ = atoi(argv[2]);

    return (TCL_OK);

    }

    }

    return TclClass::method(ac, av);

    {

    Sau bc ny, ta c th dng lnh OTcl sau truy cp v thay i cc gi tr ca

    bin Packet::hdrlen_:

    40

  • PacketHeader hdrlen 120

    set i [PacketHeader hdrlen]

    1.6. Lp Tcl Command

    Lp ny (class TclCommand) ch cung cp c ch cho NS to xut ra cc

    lnh n gin cho trnh thng dch, m sau c th c thc thi trong mt

    bi cnh ton cc bi trnh thng dch. C hai hm c nh ngha trong file

    ~ns/misc.cc l: ns-random v ns-version. Hai hm ny c khi to bi hm

    init_misc(void), c nh ngha trong ~ns/misc.cc; init_misc v c gi ra

    bi Tcl_AppInit(void)

    trong sut qu trnh khi ng.

    class VersionCommand nh ngha lnh ns-version. N khng cn i s, vtr v phin bn NS hin hnh.

    % ns-version ; # ly phin bn hin hnh

    2.0a12

    class RandomCommand nh ngha lnh ns-random. Khng cn i s, ns-randomreturns tr v mt s nguyn, v c phn b u trong khong [0, 231 1].Khi c t mt i s, n ly i s nh ht ging. Nu ht ging ny

    c gi tr l 0, lnh dng mt gi tr ht ging heuristic; hay ni cch khc, n

    t ht ging cho hm to s ngu nhin mt gi tr c th.

    % ns-random; # tr v mt s ngu nhin

    2078917053

    % ns-random 0; #set the seed heuristically

    858190129

    % ns-random 23786; #t ht ging v gi tr c c t

    23786

    Lu rng, ni chung khng nn xy dng cc lnh mc cao cho ngi dng.

    By gi ta m t cch nh ngha mt lnh mi bng cch s dng v d class

    say_hello. V d nh ngha lnh hi, in chui "hello world", c theo sau bi

    bt k cc i s dng lnh no c c t bi ngi dng. V d

    % hi this is ns [ns-version]

    hello world, this is ns 2.0a12

    41

  • 1. Lnh phi c nh ngha bn trong mt lp c xut pht t class TclCom-

    mand. Vic nh ngha lp ny nh sau:

    class say_hello : public TclCommand {

    public:

    say_hello();

    int command(int argc, const char*const* argv);

    };

    2. Hm to cho lp phi gi ra hm to TclCommand vi lnh v i s; v.v.,

    say_hello() : TclCommand("hi") {}

    Hm to TclCommand t "hi" nh l mt th tc ton cc m gi ra

    TclCommand::dispatch_cmd()

    3. Phng thc command() phi thc hin c vic mong mun. Phng thc c

    2 i s, mt l argc, cha s lng i s thc t c thng qua bi ngi

    dng. Cc i s thc t c truyn vo bi ngi s dng u c xem nh

    l mt vector i s (argv) v bao gm:

    argv[0] cha tn ca lnh (hi).

    argv[1...(argc - 1)] cha cc i s khc c c t trn dng lnh bi

    ngi dng. command() c gi ra bi dispatch_cmd().

    #include /* bi v ta dng dng I/O */

    int say_hello::command(int argc, const char*const* argv) {

    cout

  • 1.7. Lp EmbeddedTcl

    NS cho php s pht trin ca cc tnh nng trong c m bin dch, hoc thng

    qua m thng dch, m c nh gi trong qu trnh khi to. V d, cc bn trong

    tclcl/tcl-object.tcl hay trong ns/tcl/lib. Vic ti v nh gi cc on m nh vy

    c thc hin thng qua cc i tng trong lp class EmbeddedTcl.

    Cch d nht m rng ns is l thm m OTcl vo hoc tclcl/tcl-object.tcl hoc

    qua cc on m th mc ns/tcl/lib. Lu rng, trong nhng trng hp sau ny,

    ns t ng to ns/tcl/lib/ns-lib.tcl, v v th ngi lp trnh phi thm hai dng

    lnh vo file ny bn dch ca chng s t ng ly ngun t ns khi khi ng.

    V d, file ns/tcl/mcast/srm.tcl xc nh mt s th tc trng hp chy SRM.

    Trong ns/tcl/lib/ns-lib.tcl, chng ta c cc dng lnh:

    source tcl/mcast/srm.tcl

    t ng ly srm.tcl c to bi NS khi khi ng.

    C ba im cn lu vi m EmbeddedTcl l: u tin nu m c mt li

    c to ra trong qu trnh nh gi th ns s khng chy. Th hai, ngi dng c

    th khng cn n bt k m no trong cc bn dch. c bit, chng c th

    ti to ton b on m sau khi sau khi c s thay i ni ti. Cui cng, sau

    khi thm cc bn dch cho ns/tcl/lib/ns-lib.tcl, v t v sau bt c khi no

    on m thay i, ngi dng phi bin dch li ns lm s thay i c hiu lc.

    D nhin, trong hu ht trng hp 4, ngi dng ch th to on m ca mnh

    b qua m c nhng.

    Phn cn li ny s m t cch tch hp cc bn c lp trc tip vo trong

    ns. Bc u tin l chuyn i bn dch vo trong mt i tng EmbeddedTcl. Cc

    dng bn di m rng ns-lib.tcl v to ra i tng EmbeddedTcl c gi l

    et_ns_lib:

    tclsh bin/tcl-expand.tcl tcl/lib/ns-lib.tcl | n

    ../Tcl/tcl2c++ et_ns_lib > gen/ns_tcl.cc

    on m,ns/bin/tcl-expand.tcl m rng ns-lib.tcl bng cch thay th tt c cc

    dng source lines bi cc file ngun tng ng. Chng trnh, tclcl/tcl2cc.c, chuyn

    i m OTcl thnh mt i tng EmbeddedTcl tng ng, et_ns_lib.

    Trong qu khi to, vic gi ra phng thc EmbeddedTcl::load s nh gi

    mng mt cch r rng.

    tclcl/tcl-object.tcl c nh tr bi phng thc Tcl::init(void); Tcl_AppInit()gi ra Tcl::Init(). C php lnh chng xc cho ti l:

    4Mt t trng hp m iu ny c th s khng xy ra l khi cc bin no c th phi cnh ngha hay khng c nh ngha, hoc ni cch khc bn dch cha m khc hn l th tc,v vic nh ngha bin v thc thi cc hot ng mt cch trc tip l khng th o ngc c

    43

  • et_tclobject.load();

    Mt cch tng t, ns/tcl/lib/ns-lib.tcl c nh tr trc tip bi Tcl_AppInittrong ns/ns_tclsh.cc.

    et_ns_lib.load();

    1.8. Lp InstVar

    Phn ny m t cc bn cht ca lp InstVar. Lp ny xc nh cc phng thc

    v c cu rng buc mt bin thnh vin C++ trong i tng bng bin dch

    vi mt bin trng hp OTcl c c t trong i tng thng dch tng ng.

    Vic rng buc c thit lp gi tr ca bin c th c t hoc c truy cp

    t c trnh thng dch hoc t m bin dch mi lc.

    C nm lp bin i tng: class InstVarReal, class InstVarTime, class

    InstVarBandwidth, class InstVarInt, v class InstVarBool, tng ng vi

    cc rng buc cho cc bin gi tr thc, thi gian, bng thng, s nguyn, v nh

    phn mt cch ln lt.

    By gi, ta m t c cu ci t cc bin trng hp. Ta dng class InstVarReal to

    din gii khi nim. Tuy nhin, c cu ny c th ng dng c vi c 5 kiu bin

    trng hp. Khi vic ci t mt bin thng dch truy cp mt bin thnh vin,

    cc hm thnh vin ca lp InstVar gi s rng chng ang thc hin cc phng

    thc thch hp, do chng s khng truy vn trnh thng dch xc nh bi cnh

    m bin phi tn ti.

    bo m hon cnh thc thi phng thc chnh xc, mt bin phi c rng

    buc nu lp ca n c thit lp trong b trnh thng dch, v trnh thng dch

    ang lm vic trn mt i tng ca lp . rng b nh dng yu cu khi

    mt phng thc trong mt lp cho sn s lm cc bin ca n c th truy cp thng

    qua trnh thng dch, phi l mt lp TclClass (phn 1.5) lin kt c nh

    ngha nhn dng nhnh lp ph hp cho trnh thng dch. V th, bi cnh thc

    thi phng thc ph hp, c th c to ra bng mt trong 2 cch.

    Mt gii php n xut hin bt c khi no mt TclObject c to ra bn trong

    trnh thng dich. iu ny thit lp bi cnh thc thi phng thc trong trnh thng

    dch. Khi i tng bng bin dch ca TclObject thng dch c to ra, hm to

    cho i tng bin dch c th rng buc cc bin thnh vin ca i tng

    vi cc bin i tng thng dch trong bi cnh ca i tng thng dch mi c

    to .

    Mt gii php ni nh ngha mt php ton bind-variables trong mt hm

    command, m c th c gi ra thng qua phng thc cmd. Bi cnh thc thi

    phng thc ng c thit lp thc hin phng thc cmd. Tng t, m bin

    44

  • dch by gi s hot ng trn i tng bng thch hp, v v th c th rng buc

    chc chn cc bin thnh vin c yu cu.

    Mt bin i tng c to bi vic c t tn ca bin thng dch, v a ch

    ca bin thnh vin trong i tng bin dch. Hm to cho lp c s InstVar to ra

    mt trng hp ca bin trong trnh thng dch, v sau thit lp mt th tc

    by bt tt c cc truy cp n bin thng qua trnh thng dch.

    Mi khi bin c c thng qua trnh thn dch, th tc by c gi ra trc

    ngay khi c thao tc c. Th tc gi ra hm get thch hp tng ng s tr v gi

    tr hin ti ca bin. Gi tr ny sau c dng t gi tr ca bin thng dch

    v sau c c bi trnh thng dch.

    Tng t, mi khi bin c lp thng qua trnh thng dch, th tc by c

    gi ra ch sau khi vic ghi hon tt. Th tc ly gi tr hin ti c lp bi trnh

    thng dch, v gi ra hm set tng ng chu trch nhim lp gi tr ca thnh vin

    bin dch n gi tr hin ti c lp bn trong trnh thng dch.

    45

  • Chng 2

    C bn v TCL v OTCL

    Mc lc

    2.1. Tng quan v NS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    2.2. Lp trnh Tcl v Otcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    Ngi dch: H Tt Thnh

    Bin tp: L Tin Anh.

    Bn gc: NS Simulator for beginners, Chapter 1 [2]

    2.1. Tng quan v NS

    B m phng NS da trn hai ngn ng: mt b m phng hng i tng, c

    vit bng C++, v mt b thng dch OTcl (phn m rng hng i tng ca Tcl),

    c dng thc hin cc on m kch bn (script) ca ngi dng.

    NS c mt th vin s cc i tng giao thc v mng. C 2 nhnh cc lp

    trong NS: nhnh gm m ngn ng C++ c bin dch v nhnh gm m lnh

    OtcL oc thng dch, gia chng c s tng ng 1-1.

    Nhnh gm m ngn ng C++ c bin dch cho php ta t hiu qu m

    phng vi thi gian thc hin nhanh hn. iu ny c bit hu ch cho vic nh

    ngha v m phng hot ng mt cch tht chi tit ca cc giao thc c th, cho

    php ta gim thi gian x l s kin v gi tin.

    Sau , on m Otcl c nhp bi ngi dng, ta c th nh ngha mt cu

    trc (topo) mng c th, cc giao thc v ng dng ring bit m ta mun m phng

    (tp tnh ca chng c nh ngha bn nhnh m ngn ng C++ c bin

    46

  • dch) v dng ca d liu u ra mun nhn c t b m phng. Otcl c th tn

    dng cc i tng c bin dch trong C++ thng qua mt lin kt Otcl (c

    thc hin bng vic s dng TclCL1)[5] , lin kt Otcl ny to ra mt nh x gia

    i tng Otcl vi mi i tng trong C++.

    NS l mt b m phng s kin ri rc, trong , tng ca thi gian ph thuc

    vo vic nh thi ca cc s kin, tng ny c duy tr vi mt b nh trnh.

    Mt s kin l mt i tng trong nhnh C++ vi mt ID duy nht, mt thi gian

    nh trc v con tr tr ti i tng s dng s kin . B nh trnh nm quyn

    qun l mt cu trc d liu c th t (c 4 cu trc, nhng theo mc nh, NS s

    dng mt danh sch lin kt n gin) cng vi cc s kin chun b c thc hin,

    v thc thi tng s kin mt bng cch kch hot th (handle) ca s kin .

    2.2. Lp trnh Tcl v Otcl

    Trong Tcl, cc bin khng c nh kiu, v vy, mt bin c th l kiu chuihoc kiu s nguyn ty thuc vo gi tr m bn gn cho n. V d, khi ta

    mun in kt qu ca php chia 1/60, nu ta vit: puts "[expr 1/60]", th kt

    qu s l 0! c c kt qu chnh xc, ta cn ch ra rng ta khng lm vic

    vi s nguyn, v cn nhp nh sau: put"[expr 1.0/60.0]"

    Du # bt u mt dng ch thch khng nm trong chng trnh, trnh thngdch tcl s b qua dng ny.

    to mt file, ta phi cho n mt ci tn, gi s l "filename", v gn mtcon tr ti n, con tr ny s c dng trong chng trnh tcl lin kt vi

    file , gi s l "file1". Vic ny c thc hin bi cu lnh:

    set file1 [open filename w].

    Lnh puts c dng in kt qu u ra. Ch : mi ln lnh puts cdng, mt dng mi c bt u. trnh m dng mi, ta phi thm hu

    t -nonewline sau lnh "puts. Nu mun in kt qu ra file (gi s l file ta

    nh ngha trn), g: puts $file1 "on cn nhp". Khong nhy trng

    c to ra bng cch thm . V d, nu mt bin, gi s l x, c gi tr l 2

    v ta nhp lnh puts $file1 "x $x" sau n s in mt lnh vo file c tn

    l filename, vi hai thnh phn "x" v "2" c ngn cch bi khong nhy

    trng.

    Thc thi mt cu lnh unix: g "exec" v cu lnh. V d, ta mun ns hin thmt ng cong t d liu c ghi trong mt file c 2 ct, vi tn l "data

    1TCL web page[5]

    47

  • trong phm vi chng trnh m phng. iu ny c th thc hin c bng

    cch dng lnh xgraph nh sau:

    Exec xgraph data &

    (ch : du "&" c dng iu khin cho lnh thc hin ngm).

    Cu trc ca mt cu lnh if nh sau:If { biu thc}{

    } else {

    {

    }

    Cu lnh if c th c bao trong cc cu lnh "if" khc v vi cc cu lnh

    "else". Chng c th xut hin trong phn ". Ch , khi kim

    tra iu kin logic tng ng, ta nn dng du "==" ch khng nn dng du

    "=". iu kin logic bt tng ng c c php l "!=".

    Cc vng lp c dng nh sau:for {set i 0}{$ i < 5}{incr i}{

    }

    Trong v d ny, khi cu lnh trong vng lp s c thc hin 5 ln. Sau

    ton t for, cm "{set i 0} khai bo bin i l b m ca vng lp ng thi

    khi to gi tr 0 cho n. Phn th hai trong {} l iu kin tip tc ca vng

    lp, n c ngha l "tip tc thc hin vng lp nu i

  • puts "k >= 5, mod = [expr $d % $k]"

    }

    }

    }

    calling the procedure

    test

    Bng 2.1: Chng trnh Tcl thc hin cc php ton

    tcl cho php to cc th tc. Chng c th tr v mt vi gi tr trong trnghp chng c cha lnh "return". C php tng qut ca mt th tc c tn

    v d l blue nh sau:

    proc blue {par1 par2 ...} {

    global var1 var 2

    Return $

    }

    Th tc nhn mt vi tham s u vo, c th l cc i tng, file, hoc cc

    bin. Trong trng hp ca chng ta, cc bin c t tn l par1, par2, v.v..

    Th tc c gi ra bng cch g: blue x y ... y, gi tr ca x v y s

    c gn cho par1 v par2. Nu par1 v par 2 b thay i trong th tc, iu

    khng nh hng g ti x v y. Mt khc, nu ta mun th tc c kh nng

    tc ng trc tip ti cc bin bn ngoi phm vi ca n, ta phi nh ngha

    cc bin l bin ton cc "global, v d di y l var 1 v var 2.

    bng 2.1, ta thy mt v d th hin rt nhiu ton t s hc trong tcl. Ch th

    pow cho kt qu l hm m bc k ca bin d (dk).

    bng 2.2, ta ly v d mt chng trnh tcl tnh tt c s nguyn t nh

    hn mt gii hn j cho trc. V d, nhn c cc s nguyn t nh hn 11, g:

    ns prime.tcl 11. V d v cc s nguyn t cho thy cch s dng lnh if, cc

    vng lp v th tc. Bin argc c cha cc tham s c a vo chng trnh. Bin

    argv l mt vect cha cc tham s c truyn ti chng trnh (vy nn bin argc

    chnh l di ca bin argv), v lnh lindex cho php chng ta ly trng hp ca

    vect c tr bi tham s th hai. Do vy, dng lnh set j [lindex $argv 0] gn

    cho bin j gi tr ca tham s u tin c truyn vo chng trnh (gi tr c

    lu vo bin argv).

    49

  • # Cch s dng: ns prime.tcl NUMBER

    # NUMBER l s cc s nguyn t m chng ta mun nhn

    If {$argc !=1}{

    # Phi nhn ly mt i s n, hoc chng trnh s bo

    #li Puts stderr ERROR! Ns called with wrong number of argument!($argc)

    exit 1

    } else{

    Set j [lindex $argv 0]

    proc prime {j}{

    #Tnh ton tt c cc s nguyn t cho ti j

    for {set a 2}{$a

  • ti khuyn co cc bn tm hiu thm v OTcl bng cch c thm cc ti liu khc.

    # Cch dng: ns fact.tcl Number

    # NUMBER l s m ta mun ly giai tha

    #

    if {$argc !=1}{

    # Phi ly i s n hoc chng trnh bo li

    # Puts stderr ERROR! Ns called with wrong number

    # of argument!($argc)

    exit 1

    } else{

    Set f [lindex $argv 0]

    }

    proc Factorial{x}{

    for {ser result 1}{$x>1}{set x [expr $x-1]}{

    set result [expr $result*$x]

    }

    return $result

    }

    Set res [Factorial $f]

    Puts Factorial of $f is $res

    Bng 2.3: Chng trnh Tcl tnh giai tha ca mt s

    Class Real

    Real instproc init {a}{

    $self instvar value_

    set value_ $a

    }

    Real instproc sum {x}{

    $self instvar value_

    set op $value_+[$x set value_] = \t

    set value_[expr $value_+ [$x set value_]]

    put $op $value_

    }

    Real instproc multiply {x}{

    51

  • $self instvar value_

    set op $value_*[$x set value_] = \t

    set value_[expr $value_* [$x set value_]]

    put $op $value_

    }

    Real instproc divide {x}{

    $self instvar value_

    set op $value_/[$x set value_] = \t

    set value_[expr $value_/ [$x set value_]]

    put $op $value_

    }

    Class integer superclass Real

    Integer instproc divide {x}{+

    $self instvar value_

    set op $value_/[$x set value_] = \t

    set d[expr $value_/ [$x set value_]]

    set value_ [expr round($d)]

    put $op $value_

    }

    set realA [new Real 12.3]

    set realB [new Real 0.5]

    $realA sum $realB

    $realA multiply $realB

    $realA divide $realB

    set integerA [new Integer 12]

    set integerB [new Integer 5]

    set integerC [new Integer 7]

    $integerA multiply $integerB

    $integerB divide $integerC

    Bng 2.4: Chng trnh Tcl n gin s dng i tng real v integer

    52

  • Chng 3

    Cc thnh phn c bn trong b

    m phng NS

    Mc lc

    3.1. Khi to v kt thc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    3.2. nh ngha mt mng c