You are on page 1of 118

Chng I.

Mng my tnh

Chng I . Mng my tnh ......................................................4 .I Mng my tnh .................................................................4 .II Phn loi mng my tnh.................................................5 .II.1. Phn loi theo kin trc (topology) ca mng...........5 .II.1.1. Mng im-im (point-to-point network)........6 .II.1.2. Mng qung b (broadcast network)....................6 .II.2. Phn loi theo phng thc chuyn mch (Swiched Method)............................................................................7 .II.2.1. Chuyn mch knh (Circuit Swiched Network).....7 .II.2.2. Chuyn mch tin bo (Message Swiched Network) ......................................................................................7 .II.2.3. Chuyn mch gi (Packed Swiched Network)......7 .II.3. Phn loi theo phm vi hot ng.............................7 .II.3.1. Mng LAN (Local Area Network)...........................8 .II.3.2. Mng MAN (Metropolian Area Network)...............8 .II.3.3. Mng WAN (Wide Area Network)..........................8 .II.3.4. Lin mng (internet)............................................8 Chng II . Giao thc truyn thng v Cc m hnh tham chiu ...................................................................................11 .I Giao thc truyn thng...................................................11 .II M hnh tham chiu OSI...............................................12 .II.1. Gii thiu m hnh OSI...........................................12 .II.2. Cc tng ca m hnh OSI.....................................15 .II.2.1. Tng vt l (Physical layer)...............................15 .II.2.2. Tng lin kt d liu (Data link layer)..............15 .II.2.3. Tng mng (Network layer)...............................16 .II.2.4. Tng giao vn (Transport layer)........................16 .II.2.5. Tng phin (Session layer)................................17 .II.2.6. Tng trnh din (Presentation layer)...............17 .II.2.7. Tng ng dng (Application layer)....................17 .II.3. Nhng vn v OSI............................................18 .III Kin trc giao thc IPX/SPX...........................................18 .III.1. Kin trc giao thc IPX/SPX....................................19 .III.2. Gi tin IPX .............................................................20 .III.3. C ch hot ng ca Novell Netware..................21 Chng III. Giao thc TCP/IP..................................................22 .I Giao thc TCP/IP .............................................................22 .II Kin trc ca b giao thc TCP/IP ..................................24 .II.1. Kin trc phn tng ca TCP/IP ............................24 .II.2. C ch a ch Internet ......................................27 1

.II.2.1. a ch lp A ....................................................28 .II.2.2. a ch lp B ....................................................29 .II.2.3. a ch lp C.....................................................29 .II.3. Mng con v Subnet mask.......................................30 .III Tng mng (Network Layer)..........................................32 .IV Tng Internet (Internet Layer).....................................33 .IV.1. Gi tin IP................................................................35 .IV.2. Giao thc chuyn a ch ARP (Address Resolution Protocol) v c giao thc chuyn ngc a ch RARP (Reverse Address Resolution Protocol)............................39 .IV.2.1. Chuyn giao trc tip......................................39 .IV.2.2. Chuyn giao a ch ng...........................40 .IV.2.3. Gi tin ARP.......................................................41 .IV.3. Giao thc iu khin truyn tin (Internet Control Message Protocol - ICMP)................................................43 .IV.3.1. Gi tin ICMP.....................................................43 .IV.3.2. iu khin dng d liu .................................44 .IV.3.3. Thng bo li ...................................................44 .IV.3.4. nh hng li.....................................................44 .IV.3.5. Kim tra trm lm vic....................................45 .IV.4. Thut ton dn ng ............................................45 .V tng giao vn................................................................51 .V.1. Giao thc khng kt ni (User Datagram Protocol UDP)...............................................................................51 .V.1.1. Gi thng tin UDP.............................................51 .V.1.2. Phn knh, hp knh v Ports...........................53 .V.2. Giao thc iu khin truyn tin (Transmission Control Protocol - TCP) ...................................................56 .V.2.1. Gi tin TCP .......................................................59 .V.2.2. Cng, kt ni v im kt ni.......................60 .VI Tng ng dng ca TCP/IP............................................62 .VI.1. Dch v tn min (Domain Name Service - DNS)...62 .VI.2. ng nhp t xa (Telnet)........................................64 .VI.3. Th in t (Electronic Mail)...................................65 .VI.4. Giao thc truyn tp (File Transfer Protocol - FTP) 67 .VI.5. Nhm tin (News groups).........................................68 .VI.6. Tm kim tp (Archie)..........................................68 .VI.7. Tra cu thng tin theo thc n (Gopher)............69 .VI.8. Tm kim thng tin theo ch s (WAIS)...............69 .VI.9. Siu vn bn (WWW)..............................................69 Chng IV. Xy dng ng dng truyn tp...........................71 .I Giao din lp trnh........................................................71 2

.I.1. Giao din lp trnh.................................................71 .I.2. Network I/O v file I/O..............................................72 .I.3. Lm vic vi Socket..................................................73 .I.3.1. Socket................................................................74 .I.3.2. a ch Socket..................................................75 .I.3.3. Mt s li gi to lp socket...............................76 .I.3.4. Mt s li gi gi d liu qua socket.................81 .I.3.5. Mt s li gi nhn d liu t socket.................83 .II M hnh Client-Server...................................................83 .II.1. M hnh Client-Server s dng dch v khng kt ni .................................................................................84 .II.2. M hnh Client-Server s dng dch v hng kt ni .......................................................................................86 .III Xy dng chng trnh truyn tp..............................87 .III.1. Thit k v ci t chng trnh.........................87 .III.1.1. Giao thc ng dng c xy dng v s dng trong chng trnh......................................................87 .III.1.2. Ci t chng trnh .....................................90 .III.2. Mt s vn ny sinh trong qu trnh thc hin v cch gii quyt..........................................................92 .III.2.1. Vn chuyn i tp gia hai h iu hnh............................................................................92 .III.2.2. Vn v mt s lnh tng tc.....................95 Ti liu tham kho................................................................96 Ph lc A Mt s k thut mng cc b...............................97 .I Mng Ethernet v IEEE 802.3...........................................97 .II Mng Token-Pasing Rings (IEEE 802.5)...........................98 .III Mng Token-Passing Busses (IEEE 802.4)......................99 Ph lc B Mt s k thut chn ng i ti u....................101 .I Gii thut Dijkstra cho vic chn ng tp trung.........101 .II Gii thut Ford& Fulkerson cho vic chn ng phn tn ........................................................................................102 Ph lc C Vn bn chng trnh (phn client).....................104 .I Chng trnh chnh (main.c)........................................104 .II Th vin s dng (Socket.c)...........................................111

Chng I .
.I Mng my tnh

Mng my tnh

Mng my tnh l h thng cc my tnh c lp (autonomous) c kt ni vi nhau. Khi nim c lp y c ngha l chng khng c mi quan h ch/t (master/slave) r rng. Hai my tnh c gi l c kt ni vi nhau nu chng c kh nng trao i thng tin. S kt ni c th thng qua dy dn, tia laser, sng in t hay v tinh vin thng... Vic kt ni cc my tnh c nhng u im sau S dng chung ti nguyn (resource sharing): Chng trnh, d liu, thit b c th c dng chung bi ngi dng t cc my tnh trn mng. Tng tin cy ca h thng thng tin (reliability): Nu mt my tnh hay mt n v d liu no b hng th lun c th s dng mt my tnh khc hay mt bn sao khc ca d liu, nh , kh nng mng b ngng s dng c gim thiu. To ra mi trng truyn thng mnh gia nhiu ngi s dng trn phm vi a l rng: Mc tiu ny ngy cng tr nn quan trng nht l khi mng my tnh pht trin trn phm vi ton cu nh ngy nay. Tit kim chi ph: Do ti nguyn c dng chung, h thng tin cy hn nn chi ph thit b v bo dng ca mng my tnh thp hn so vi trng hp my tnh ring l. .II Phn loi mng my tnh Phn loi theo kin trc (topology) ca mng

.II.1.

Phn loi theo kin trc l cch phn loi mng my tnh theo cch kt ni cc my tnh trong mng

.II.1.1.

Mng im-im (point-to-point network)

Cc ng truyn ni cc cp nt vi nhau, mi nt c trch nhim lu tr tm thi sau chuyn tip d liu ti ch. Cch lm vic ny cn gi l lu v chuyn tip (store-andforward). Mng im-im cn s dng lng cp ni ln hoc nhiu ng in thoi thu ring (leased telephone lines), mi ng ni mt cp im lm vic. Nu 2 im lm vic mun gi thng tin cho nhau m khng c ng truyn trc tip, d liu ca chng cn c truyn qua mt s nt khc do , thut ton dn ng c vai tr rt quan trng trong kin trc mng im-im.

Star .II.1.2.

Ring

Tree

Mng qung b (broadcast network)

Tt c cc nt cng dng chung mt ng truyn vt l. D liu c tip nhn bi tt c cc my tnh, nu my tnh no kim tra thy gi tin c gi cho mnh, n s gi li v x l. Cc mng qung b thng cho php s dng a ch broadcasting gi thng bo ti ton mng.

6 Bus Satelli Ring

.II.2.

Phn loi theo phng thc chuyn mch

(Swiched Method) .II.2.1. Chuyn mch knh (Circuit Swiched Network)

Thng tin truyn qua mt knh vt l c nh, tc v tin cy cao nhng lng ph ng truyn do khng s dng ht. .II.2.2. Chuyn mch tin bo (Message Swiched

Network) Lin lc c thit lp khi c thng tin cn truyn, thng tin c nh dng gm header v data v c di khng c nh: Mi lin lc c thit lp v ch gii phng khi truyn xong d liu do khng qun l c thi gian chim ng truyn .II.2.3. Chuyn mch gi (Packed Swiched Network)

Thng tin c ct ra thnh cc gi c di quy nh V d Erthenet IEEE 802.3 chia message thnh cc gi 1500 bytes. Mi gi u c header v data. Cc gi ca cc message khc nhau c th truyn xen k trn ng truyn do thi gian ch i chung ca h thng gim. .II.3. Phn loi theo phm vi hot ng

Theo phm vi hot ng, ngi ta chia mng my tnh thnh nhng loi sau

.II.3.1.

Mng LAN (Local Area Network)

Thng l mng c s dng cho mt cng ty, trng hc hay trong mt to nh, khong cch tng i nh (c vi trm m ti vi Km) tc truyn ln, tr nh. (Ph lc A trnh by mt s mng cc b thng c s dng) .II.3.2. Mng MAN (Metropolian Area Network)

Mng c ci t trong phm vi mt th hay trung tm kinh t - x hi (c bn knh khong 100 Km) .II.3.3. Mng WAN (Wide Area Network)

Mng din rng c th bao trm mt vng rng ln c quc gia hay lc a. .II.3.4. Lin mng (internet)

Phn ln cc mng cc b u c lp vi nhau v phn cng cng nh phn mm, chng c thit lp nhm mc ch phc v nhng nhm ngi c th no . Trong mi mng , ngi dng t la chn mt cng ngh phn cng ph hp vi cng vic ca h. Mt iu quan trng na l khng th xy dng mt mng chung da trn mt cng ngh s dng trn mt mng n l no bi v khng c cng ngh mng no c th tho mn nhu cu cho tt c mi ngi. Mt s ngi c nhu cu s dng ng ni cao tc truyn d liu ca mnh trong khi cc mng LAN khng th m rng phm vi hot ng qu xa. Mt s mng tc chm li c th kt ni my tnh ti hng ngn dm... Lin mng my tnh (internetworking hay internet) l mt cng ngh c a ra nhm kt ni cc mng thnh mt th thng nht. Cng ngh internet che du i kin trc vt l 8

ca mng v cho php my tnh truyn thng mt cch c lp vi lin kt vt l ca mng. Mt lin mng kh quen thuc vi chng ta l mng Internet Gii thiu mng Internet Internet l mt t hp hng triu my c kt ni vi nhau thng qua cc thit b ghp ni thng gi l gateway c th chia s thng tin vi nhau, trong c loi my tnh, v chng s dng nhiu h iu hnh khc nhau. Thng tin trn Internet gm loi t th iu t, cc file ho n video v cn nhiu th khc c cung cp bi nhng ngi s dng Internet bng nhiu phng thc, vi nhiu t tng khc nhau. Quy m ca Internet C bao nhiu my c kt ni vo Internet? Con s c th lun lun thay i, nhng a ch mi lun lun c cp nht tng giy chng ta c th truy nhp a ch Web site ca t chc Network Wizards http://www.nw.com/zone/WWW/top.html bit nhng s liu mi nht Thi gian Thng 1 nm 1996 Thng 1 nm 1997 Thng 1 nm 1998 S lng my 14,252,000 21,819,000 29,670,000

Nhng my ch (host) mnh thng s dng nhng h iu hnh a nhim, v d nh UNIX, ngi s dng kt ni vo, nh th c ngha l s my ca ngi s dng mng nhiu hn nhng con s trn. Nhng my ch c nh v ti cc im nh th vin, cc trng i hc, cc t chc chnh ph, cc i l, cc cng ty, cc trng trung hc, tiu hc trn ton th gii. 9

Nhng my ch ny c kt ni vi nhau qua ng in thoi v ch mt khong 640/1000 giy bt u nhn thng bo t Bc M ti Nam cc. Cc dch v m Internet cung cp Phn ln ngi s dng Internet khng cn bit n ca cng ngh s dng trn Internet, i vi h Internet ch n gin l mt b chng trnh phn mm mang li cho h nhng kh nng truyn thng c ch. Chnh iu ny mang li cho Internet s ngi dng ng o ti nh vy. Cc dch v mc ng dng ban u trn Internet Th in t (Electronic mail) Cho php ngi dng ngi trc my tnh ti nh mnh gi E-mail ti bt c ai u trn th gii nu h c a ch E-mail. H c th tham gia cc nhm tho lun (discussion group) v nhng ti khc nhau hay bt u mt nhm mi v nhng ch m h a thch. Truyn file (File Transfer) Nu cn mt chng trnh phn mm mi nh cc tin ch nn file, cc chng trnh dit virus, mt phn mm tr chi, hnh nh hay m thanh, ngi dng c th ti xung bt c lc no vi File Transfer. Truy nhp t xa (Remote login) C l iu th v nht trong cc ng dng ca Internet l Remote login, n cho php ngi dng kt ni vo mt my tnh xa nh mt trm cui s dng my tnh . Dch v mc mng ca Internet Mt lp trnh vin vit chng trnh ng dng trn Internet cn c mt ci nhn khc vi ngi ch n gin s dng dch

10

v Internet. tng mng, Internet cung cp 2 kiu dch v m cc ng dng ca Internet thng dng l Dch v truyn khng kt ni (Connectionless Paket Delivery Service) l mt phng thc truyn d liu m cc mng chuyn mch gi cung cp. iu ny ch n gin l mng Internet chuyn cc gi tin t my ny sang my khc da vo thng tin a ch ca gi n ch ca n. Vic chia nh gi tin truyn ny c mt li im l nu mt ng i b bn hoc b t, th cc gi c th c truyn theo mt ng khc. Dch v truyn tin cy (Reliable Stream Transport Service) Phn ln cc ng dng i hi nhiu dch v hn ch truyn thng khng kt ni bi v chng cn t ng sa li, kim tra tnh ton vn ca thng tin truyn i trn mng. Reliable Stream Transport Service gii quyt vn ny cho ta.

Chng II .

Giao thc truyn thng v Cc

m hnh tham chiu


.I Giao thc truyn thng

cc my tnh trn mng c th trao i thng tin vi nhau, chng cn c mt b nhng phn mm cng lm vic theo 11

mt chun no . Giao thc truyn thng (protocol) l tp quy tc quy nh phng thc truyn nhn thng tin gia cc my tnh trn mng. Cc mng my tnh hin i c thit k bng cch phn chia cu trc mc cao nhm lm gim s phc tp khi thit k. Cc giao thc mng thng c chia lm cc tng (layer), mi tng c xy dng da trn dch v ca tng di n v cung cp dch v cho tng cao hn. .II M hnh tham chiu OSI Gii thiu m hnh OSI

.II.1.

M hnh mng my tnh do t chc tiu chun ho quc t (International Standard Organization - ISO) a ra nm 1983 c gi l m hnh tham chiu cc h thng m (Open Systems Interconect referent model - OSI). Cc iu khon m t trong m hnh c s dng rng ri trong l thuyt truyn thng, do , trong thc t kh c th ni v truyn thng m khng s dng thut ng ca OSI. M hnh tham chiu OSI cha 7 tng m t chc nng ca giao thc truyn thng. Mi tng ca m hnh OSI miu t mt chc nng c thc hin khi d liu di chuyn gia cc ng dng gia cc mng. Tng ng dng bao gm cc trnh ng dng s dng mng. Tng trnh din tiu chun ho d liu cung cp cho tng ng dng.

12

Tng phin qun tr cc phin lm vic gia cc ng dng. Tng giao vn cung cp kt ni trm-trm, x l li. Tng mng qun tr vic kt ni qua mng cho cc tng trn. Tng lin kt d liu cung cp phn pht d liu tin cy qua ng truyn vt l. Tng vt l nh r cc c th ca thit b mng. Cc lp giao thc c xp chng lp n trn lp kia. Chnh s xut hin ca n, cu trc thng c gi l stack hoc giao thc xp chng. Vic phn tng ca OSI tun theo mt s nguyn tc sau Mt lp c to ra khi cn n mc tru tng ho tng ng. Mi lp cn thc hin cc chc nng c nh ngha r rng. Vic chn chc nng cho mi lp cn ch ti vic nh ngha cc quy tc chun ho quc t. Ranh gii cc mc cn chn sao cho thng tin i qua l t nht (tham s cho chng trnh con l t). S mc phi ln cc chc nng tch bit khng nm trong cng mt lp v nh m hnh khng qu phc tp. Mt mc c th c phn thnh cc lp nh nu cn thit. Cc mc con c th li b loi b. Hai h thng khc nhau c th truyn thng vi nhau nu chng bo m nhng nguyn tc chung (ci t cng mt 13

giao thc truyn thng). Cc chc nng c t chc thnh mt tp cc tng ng mc cung cp chc nng nh nhau. Cc tng ng mc phi s dng mt giao thc chung. Mt tng khng nh ngha mt giao thc n, n nh ngha mt chc nng truyn thng c th c thi hnh bi mt s giao thc. Do vy, mi tng c th cha nhiu giao thc, mi giao thc cung cp mt dch v ph hp cho chc nng ca tng. V d c giao thc truyn file (File Transfer Protocol - FTP) v giao thc th in t (Simple Mail Transfer Protocol - SMTP) u cung cp dch v cho ngi dng v c hai u thuc tng ng dng. Mi mc ngang hng giao thc truyn thng (s b xung ca cc giao thc cng mc tng ng trn h thng khc). Mi mc phi c chun ho giao tip vi mc tng ng vi n. Trn l thuyt, giao thc ch bit n nhng g lin quan ti lp ca n m khng quan tm ti mc trn hoc di ca n. Tuy nhin phi c s tho thun chuyn d liu gia cc tng trn mt my tnh, bi mi tng li lin quan ti vic gi d liu t ng dng ti mt ng dng tng ng trn mt my khc. Tng cao hn da vo tng thp hn chuyn d liu qua mng pha di. D liu chuyn xung ngn xp t tng ny xung tng thp hn cho ti khi c truyn qua mng nh giao thc ca tng vt l. u nhn, d liu i ln ngn xp ti ng dng nhn. Nhng tng ring l khng cn bit cc tng trn v di n x l ra sao, n ch cn bit cch chuyn nhn thng tin t cc tng . S c lp cc hm truyn thng trn cc tng khc nhau gim thiu s tch hp cng ngh ca u vo mi b giao thc. Cc ng dng mi c th 14

thm vo m khng cn thay i tng vt l ca mng, phn cng c th c b sung m khng cn vit li cc phn mm ng dng. .II.2. .II.2.1. Cc tng ca m hnh OSI Tng vt l (Physical layer)

Tng vt l lin quan ti vic truyn dng bit gia cc my bng knh truyn thng vt l, y, cu trc ca d liu khng c quan tm n. Vic thit k tng vt l cn quan tm n cc vn v ghp ni c kh, in t, th tc v mi trng truyn tin bn di n v d mc in p tng ng vi bit 0 - 1, thi gian tn ti ca xung... .II.2.2. Tng lin kt d liu (Data link layer)

Lin kt, thit lp, duy tr, hu b cc lin kt d liu l nhim v ca tng data link. Ngoi ra tng data link cn kim sot li ng truyn, thng lng. Tng ny thc hin vic ng gi thng tin gi thnh cc frame, gi cc frame mt cch tun t i trn mng, x l cc thng bo xc nhn (Acknowledgement frame) do bn nhn gi v. Xc nh ranh gii gia cc frame bng cch ghi mt s byte c bit vo u v cui frame. Gii quyt vn thng lng truyn gia bn gi v bn nhn (Vn ny c th c gii quyt bi mt s lp trn).

15

.II.2.3.

Tng mng (Network layer)

Vn ch cht ca tng mng l dn ng, nh r cc gi tin (packet) c truyn theo nhng con ng no t ngun n ch. Cc con ng ny c th c nh, t b thay i, c thit lp khi bt u lin kt hay ng (dynamic) thay i tu theo trng thi ti ca mng. Nu c nhiu gi tin truyn trn mng c th xy ra tnh trng tc nghn, tng mng phi gii quyt vn ny. Thc hin chc nng giao tip vi cc mng bao gm vic nh li a ch, ct hp gi tin cho ph hp vi cc mng. Ngoi ra tng mng cn thc hin mt s chc nng k ton, v d, mt s Firewall (packet filtering) c ci t trn tng ny thng k s lng cc gi tin truyn qua mng hay ngn cm hoc cho php cc gi tin ca giao thc no . .II.2.4. Tng giao vn (Transport layer)

Kim sot vic truyn tin t nt ti nut (end-to-end): Bt u t tng ny, cc thc th c th ni chuyn mt cch logic vi nhau. Thc hin vic ghp knh v phn knh: Mi ng dng c th gi d liu i theo nhiu con ng, mt ng truyn li c th c nhiu ng dng s dng, phn knh/hp knh gii quyt vn phn chia d liu cho cc ng dng. Khc phc sai st trong qu trnh truyn tin: Vic khc phc sai st c thc hin trn nhiu tng khc nhau, nhng hiu qu nht l cc tng cao, vic khc phc sai st lm tng giao vn l hp l nht.

16

.II.2.5.

Tng phin (Session layer)

Tng ny cho php ngi s dng trn cc my khc nhau thit lp, duy tr, hu b, ng b phin truyn thng gia h. Cung cp mt s dch v hu ch cho ngi s dng nh cho php ngi dng logon vo h thng chia s thi gian, truyn tp gia cc my tnh. Qun l token: c ch th bi c tng phin cung cp trnh hin tng tranh chp ng truyn trn mng. Thc hin ng b (Synchronization): thc hin i vi nhng d liu ln bng cch thm vo cc thng tin kim tra, sa li. .II.2.6. Tng trnh din (Presentation layer)

Gii quyt vn lin quan ti c php v ng ngha ca thng tin nh chuyn i thng tin theo mt chun no c c hai bn s dng (m ASCII - EDBCDIC). Nn/gin d liu gim s lng bit truyn trn mng. M ho d liu thc hin quyn truy cp. .II.2.7. Tng ng dng (Application layer)

Tng ng dng cung cp giao din s dng cho ngi dng v mi trng truyn tin. Thc hin chc nng chuyn file trong c gii quyt vn khng tng thch nh cch t tn file hay cc m iu khin trong mt tp vn bn... Cung cp cc dch v Electronic mail, Remote login, Directory lookup...

17

.II.3.

Nhng vn v OSI

Bn thn OSI khng phi l mt kin trc mng bi v n khng ch ra chnh xc cc dch v v cc nghi thc c s dng trong mi tng. M hnh ny ch ra mi tng cn thc hin nhim v g. ISO a ra cc tiu chun cho tng tng, nhng cc tiu chun ny khng phi l mt b phn ca m hnh tham chiu. M hnh OSI ra i sau khi cc giao thc TCP/IP (TCP/IP s c trnh by phn sau) c s dng rng ri, nhiu cng ty a ra cc sn phm TCP/IP, v vy, m hnh OSI ch c s dng trong thc t nh mt chun v l thuyt. Trong m hnh OSI, mt s chc nng nh iu khin thng lng, kim tra li xut hin lp li trong mt s tng. iu ny c nguyn nhn do m hnh OSI c chia lm cc tng khc nhau, mi tng tng ng vi mt i tng c lp (c d liu v cc phng thc ring ca n, c lp vi cc i tng khc). M hnh OSI khng c cc dch v v giao thc khng hng kt ni mc d hu ht cc mng u c s dng. M hnh qu phc tp cho vic ci t lm cho OSI kh c th ng dng rng ri trn thc t. .III Kin trc giao thc IPX/SPX

Mt h thng mng my PC c s dng ph bin nht trn th gii trong thi gian va qua l mng Novell Netware. N c thit k cho cc cng ty, chuyn t vic s dng my tnh ln (Mainframe) sang s dng PC. Mi PC lm chc nng khch hng (client), mt s my mnh hot ng nh my phc v (Server), chng cung cp cc dch v file, cc dch v

18

CSDL v cc dch v khc cho mt nhm khch hng. Ni cch khc, Novell Netware hot ng theo m hnh file-server. .III.1. Kin trc giao thc IPX/SPX SAP NCP Ethernet Ethernet IPX Token ring Token ring File server SPX ARCnet ARCnet

Application Transport Network Datalink Physical

Novell Netware s dng chng giao thc IPX/SPX da trn mt h thng mng c ca hng Xerox-XNSTM nhng c mt s thay i. Novell Netware ra i trc OSI v khng da trn m hnh ny. Tng vt l v tng Data link c th c chn trong s nhiu chun cng nghip khc nhau bao gm Ethernet, IBM token ring v ARCnet. Tng mng khng nh hng ni kt, khng bo m (unreliable connectionless) c tn l IPX (Internet Packet eXchange). N chuyn cc packet t ngun ti ch mt cch trong sut vi ngi dng ngay c khi ngun v ch nm cc mng khc nhau. IPX s dng a ch 12 byte. Tng giao vn: Giao thc NCP (Network Core Protocol) cung cp nhiu dch v khc ngoi vic vn chuyn d liu ca ngi s dng, n chnh l tri tim ca Novell Netware. Giao thc th hai ca tng ny l SPX (Sequenced Packet eXchange). N ch thc hin vic vn chuyn.

19

Cc ng dng c th la chn s dng mt trong cc giao thc ca tng ny v d h thng file s dng NCP, Lotus Note s dng SPX. Tng Application nm trn cng, c nhiu giao thc khc nhau cung cp cho ngi s dng cc dch v nh trnh by trn.

.III.2.

Gi tin IPX

im mu cht ca kin trc IPX/SPX l gi tin IPX c cu trc nh sau Offset 0 2 4 5 6 18 30 Field Checksum Packet length Transport control Packet type Destination Address Source Address Length (byte) 2 2 1 1 12 12 ?

Checksum: t khi s dng v tng Data link bn di cung cp checksum Packet length: cha chiu di ca packet tnh c header v data Packet type: nh du cc packet iu khin khc nhau. Destination Address: a ch ch ca gi tin. Source Address: a ch ngun ca gi tin. Data: Chim phn cui ca gi, c di ph thuc vo trng paket length trn.

20

.III.3.

C ch hot ng ca Novell Netware

C khong mi pht mt ln, mi server li pht i (broadcast) mt packet, cho bit a ch ca chnh n v cc dch v m n cung cp. Vic ny s dng giao thc SAP (Service Advertising Protocol). Cc packet ny c tin trnh dch v (special agent process) chy trn cc my router nhn v thu thp. Cc agent s dng thng tin cha trong xy dng CSDL v cc server. Khi mt my client khi ng, n pht mt request hi xem server gn nht u. Agent trn my router a phng tip nhn yu cu ny, kim tra CSDL v server, la chn server ph hp gi li thng tin cho client. T thi im , Client c th thit lp kt ni NCP vi server v s dng cc dch v ca server. Trong qu trnh kt ni, client v server tho thun vi nhau v chiu di cc i ca d liu, trong qu trnh s dng, client c th tra cu CSDL ca server bit thng tin ca cc server khc.

21

Chng III.
.I

Giao thc TCP/IP

Giao thc TCP/IP

Vo cui nhng nm 1960 v u 1970, Trung tm nghin cu cp cao (Advanced Research Projects Agency - ARPA) thuc b quc phng M (Department of Defense - DoD) c giao trch nhim pht trin mng ARPANET. Mng ARPANET bao gm mng ca nhng t chc qun i, cc trng i hc v cc t chc nghin cu v c dng h tr cho nhng d n nghin cu khoa hc v qun i (Ngy nay, ARPA c gi l DARPA). Nm 1984, DoD chia ARPANET ra thnh 2 phn: ARPANET s dng cho nghin cu khoa hc v MILNET s dng cho qun i. u nhng nm 1980, mt b giao thc mi c a ra lm giao thc chun cho mng ARPANET v cc mng ca DoD mang tn DARPA Internet protocol suit, thng c gi l b giao thc TCP/IP hay cn gi tt l TCP/IP. Nm 1987 t chc nghin cu quc gia Hoa K (National Science Foundation - NSF) ti tr cho vic kt ni 6 trung tm siu tnh trn ton lin bang li vi nhau thnh mt mng vi tn gi NSFNET. V mt vt l, mng ny kt ni 13 im lm vic bng ng in thoi cao tc c gi l NSFNET backbone. Khong 8 ng backbone c xy dng. NSFNET c m rng vi hng chc mng a phng kt ni vo n v kt ni vo mng Internet ca DARPA. C NSFNET v cc mng con ca n u s dng b giao thc TCP/IP. TCP/IP c mt s u im nh sau:

22

Giao thc chun m sn sng pht trin c lp vi phn cng v h iu hnh. TCP/IP l giao thc l tng cho vic hp nht phn cng v phn mm khc nhau, ngay c khi truyn thng trn Internet. S c lp rnh mch vi phn cng vt l ca mng cho php TCP/IP hp nht cc mng khc nhau. TCP/IP c th chy trn mng Ethernet, mng Token ring, mng quay s (Dial-up line), mng X.25, mng o v mi loi mi trng vt l truyn thng. Mt s a ch dng chung cho php mi thit b TCP/IP c duy nht mt a ch trn mng ngay c khi l mng ton cu Internet. Tiu chun ho mc cao ca giao thc ph hp vi ch li ca dch v ngi dng. c tch hp vo h iu hnh UNIX, H tr m hnh client-server, m hnh mng bnh ng, H tr k thut dn ng ng. DARPA h tr vic nghin cu kt ni nhiu loi mng khc nhau li thnh mt mng ton cu Internet. Ngoi vic s dng cho tt c cc my trn Internet, TCP/IP cn c s dng trong mng ni b ca mt s t chc chnh ph hoc thng mi, nhng mng ny gi l Intranet. TCP/IP va c th kt ni mt s lng ln cc my tnh (150.000 my trn nc M, Chu u, Chu ) li c th ch kt ni hai my tnh trong phng lm vic. Di y, chng ta xem xt mt s ni dung v b giao thc truyn thng TCP/IP.

23

.II

Kin trc ca b giao thc TCP/IP Kin trc phn tng ca TCP/IP

.II.1.

Application Layer Presentation Layer Session Layer Transport Layer Network Layer Data link Layer Physical Layer

Application Layer Transport Layer Internet Layer Network access Layer

Cc lp tng ng gia OSI v TCP/IP C nhiu giao thc trong b giao thc truyn thng TCP/IP, nhng hai giao thc quan trng nht c ly tn t cho b giao thc ny l TCP (Transmission Control Protocol) v IP (Internet Protocol). B giao thc TCP/IP c phn lm 4 tng Tng mng (Network Layer) Tng Internet (Internet Layer) Tng giao vn (Transport Layer) Tng ng dng (Application Layer)

24

Application Layer Transport Layer (Host Layer) Internet Layer (Getway Layer)

FTP

TELNET

SMTP

DNS

SNMP RIP

Transsmission Control Protocol

User Datagram Protocol ICMP

Internet Protocol ARP

FTP (File transfer Protocol): Giao thc truyn tp cho php Network Token Token Interface ly hoc gi tp ti mt my khc. ngi dng Ethernet Fiber Bus Ring Layer Telnet: Chng trnh m phng thit b u cui cho php ngi dng login vo mt my ch t TCP/IP tnh no Cc tng ca b giao thc mt my trn mng. SMTP (Simple Mail Transfer Protocol): Mt giao thc th tn in t. DNS (Domain Name server): Dch v tn min cho php nhn ra my tnh t mt tn min thay cho chui a ch Internet kh nh. SNMP (Simple Network Management Protocol): Giao thc qun tr mng cung cp nhng cng c qun tr mng. RIP (Routing Internet Protocol): Giao thc dn ng ng. ICMP (Internet Control Message Protocol): Nghi thc thng bo li. UDP (User Datagram Protocol): Giao thc truyn khng kt ni cung cp dch v truyn khng tin cy nhng tit kim chi ph truyn. TCP (Transmission Control Protocol): Giao thc hng kt ni cung cp dch v truyn thng tin tng. IP (Internet Protocol): Giao thc Internet chuyn giao cc gi tin qua cc my tnh n ch.

25

ARP (Address Resolution Protocol): C ch chuyn a ch TCP/IP thnh a ch vt l ca cc thit b mng. Host A Application Transport Internet Network Interface Identical Datagram Identical Frame Physical Net Identical Message Identical Packet Host B Application Transport Internet Network Interface

Cng ging nh trong m hnh tham chiu OSI, d liu gi t tng Application i xung ngn xp, mi tng c nhng nh ngha ring v d liu m n s dng. Ti ni gi, mi tng coi gi tin ca tng trn gi xung l d liu ca n v thm vo gi tin cc thng tin iu khin ca mnh sau chuyn tip xung tng di. Ti ni nhn, qu trnh din ra ngc li, mi tng li tch thng tin iu khin ca mnh ra v chuyn d liu ln tng trn. Applicatio n Data

26

Transport

TCP Header

Data

Internet

IP Header

TCP Header TCP Header

Data

Network

Ethernet Header

IP Header

Data

Ethern et trailer

.II.2.

C ch a ch Internet

Mng Internet dng h thng a ch IP (32 bit) "nh v" cc my tnh lin kt vi n. C hai cch nh a ch ph thuc vo cch lin kt ca tng my tnh c th: Nu cc my tnh c kt ni trc tip vi mng Internet th trung tm thng tin Internet (Network Information Centre-NIC) s cp cho cc my tnh mt a ch IP (IP Address). Nu cc my tnh khng kt ni trc tip vi mng Internet m thng qua mt mng cc b th ngi qun tr mng s cp cho cc my tnh mt a ch IP (tuy nhin cng di s cho php ca NIC) H thng a ch ny c thit k mm do qua mt s phn lp, c 5 lp a ch IP l : A, B, C, D, E. S khc nhau c bn gia cc lp a ch ny l kh nng t chc cc cu trc con ca n. Class A Class 01234 0 Netid 10 8 16 Hostid 24

Netid 27

Hostid

B Class C Class D Class E

110 1110 11110

Netid Multicast address Reverved for future use

Hostid

Sau y chng ta s nghin cu v 3 lp a ch chnh ca TCP/IP l cc lp A,B,C l cc lp c s dng rng ri trn mng Internet. .II.2.1. a ch lp A

Lp A s dng byte u tin ca 4 byte nh a ch mng. Nh hnh trn, n c nhn ra bi bit u tin trong byte u tin ca a ch c gi tr 0. 3 bytes cn li c s dng nh a ch my trong mng. C 126 a ch lp A (c nh a ch trong byte th nht) vi s my tnh trong mng l 2563 - 2 = 16.777.214 my cho mi mt a ch lp A (do s dng 3 bytes nh a ch my). a ch lp A thng c cp cho nhng t chc c s lng my tnh ln. Nguyn nhn ch c 126 networks trong khi dng 8 bit v bit u tin mang gi tr 0 dng nh ngha lp A vy con li 7 bit nh s t 0-127 tuy nhin ngi ta khng s dng mt a ch cha ton cc con s 1 hoc 0 do vy, ch cn li 126 mng lp A c s dng. Do vy gi tr byte u tin ca a ch lp A s lun lun nm trong khong t 1 ti 126, mi mt byte trong 3 bytes cn li s c gi tr trong khong 1 n 254. 28

i vi vic ch c 16.777.214 my trong khi s dng 24 bit nh a ch my trong mng cng c gii thch tng t. a ch lp A c dng: <Network.Host.Host.Host> vi con s thp phn u tin nh hn 128 V d: 9. 6. 7. 8 : Nt c gn Host ID l 6. 7. 8, nm trong mng lp A c a ch l .II.2.2. a ch lp B 9. 0. 0. 0

Mt a ch lp B c nhn ra bi 2 bit u tin ca byte th nht mang gi tr 10. Lp B s dng 2 byte u tin ca 4 byte nh a ch mng v 2 byte cui nh a ch my trong mng. C 64*256 - 2 = 16.128 a ch mng lp B vi 65.534 my cho mi mt a ch lp B. a ch lp B c dng: <Network.Network.Host.Host> Byte u tin ca mt a ch lp B nm trong khong 128 ti 191. V d: 190. 2. 2 . 1 : Nt c gn Host ID l 2. 1, nm trong mng lp B c a ch l 190. 2. 0. 0 .II.2.3. a ch lp C

Mt s t chc c quy m nh c th xin cp pht a ch lp C. Mt a ch lp C c nhn ra vi 3 bit u mang gi tr 110. Mng lp C s dng 3 byte u nh a ch mng v 1 byte cui nh a ch my trong mng. C 2.097.150 a ch lp C, mi a ch lp C c 254 my. a ch lp C c dng: <Networkr.Network.Network.Host> a ch lp C c nhn ra vi byte u tin trong khong 192 ti 223

29

V d: 200. 6. 5. 4 : Nt c gn Host ID l 4, nm trong mng lp C c a ch l 200. 6. 5. 0 .II.3. Mng con v Subnet mask

Mng Internet s dng a ch IP 32 bit v phn chia ra cc lp rt mm do, tuy nhin, vi mt h thng a ch nh vy vic qun l vn rt kh khn. Nu nh mt mng c cp mt a ch lp A th c ngha n cha ti 16*1.048.576 my tnh, do vy ngi ta dng mt n bit phn chia mng ra thnh nhng mng con gi l Subnet. Subnet mask l mt con s 32 bit bao gm n bit 1 (thng l cc bit cao nht) dng nh a ch mng con v m bit 0 dng nh a ch my trong mng con vi n+m=32 0 Network Number Network Number 1111111 11111111 16 Host Number Subnet Host Number Number 11111111 00000000

Mt n subnet phi c cu hnh cho mi my tnh trong mng v phi c nh ngha cho mi router. Nh vy, ta phi dng cng mt Subnet mask cho ton b mng vt l cng chung mt a ch Internet. V d: Ta c mt a ch lp B 128.001.000.000 v cn chia n thnh 254 mng con vi 254 my trong mi mng, ta gii quyt vn ny bng Subnet mask nh sau
Network num 1000000 0 000000 01 00000000 0000000 0 = 128.001.000.0

30

Subnet mask

1111111 1

111111 11

11111111

0000000 0

00 = 255.255.255.0 00

Mt n trn nh ngha 254 mng con vi a ch nh sau:


Subnet #1 1000000 0 Subnet #2 1000000 0 Subnet #3 1000000 0 . . Subnet #254 000000 01 000000 01 000000 01 00000011 00000010 00000001 0000000 0 0000000 0 0000000 0 = 128.001.001.0 00 = 128.001.002.0 00 = 128.001.003.0 00 1000000 0 000000 01 11111110 0000000 0 = 128.001.254.0 00

S my trong mng con th nht s nm trong khong sau:


Subnet #1 1000000 0 Low Address High Address 1000000 0 1000000 0 000000 01 000000 01 000000 01 00000001 00000001 00000001 0000000 0 0000000 1 1111111 0 = 128.001.001.0 00 = 128.001.001.0 01 = 128.001.001.2 54

31

Ch rng mt a ch cha ton s 1 dng cho boardcasting, cha ton s 0 dnh cho Subnet mask do vy, a ch my ca Internet khng bao gi cha ton cc con s 1 hoc 0. .III Tng mng (Network Layer)

Tng mng l tng thp nht ca kin trc giao thc TCP/IP. Cc giao thc trong tng ny cung cp bin php cho h thng chuyn giao d liu gia cc thit b c kt ni trc tip. N m t cch s dng mng truyn mt gi thng tin IP. Khng ging nhng giao thc ca tng cao hn l s dng dch v ca tng di n v cung cp dch v cho tng trn, giao thc ca tng mng cn phi bit chi tit ca mng vt l pha di (cu trc ca gi, a ch, vv...) nh dng ng thng tin s c truyn tun theo nhng rng buc ca mng. Tng mng ca TCP/IP cha cc chc nng tng ng ca 3 tng thp nht ca m hnh tham chiu OSI (tng mng, tng lin kt d liu, tng vt l). Tng mng thng khng c ngi dng ti v thit k ca TCP/IP che du nhng chc nng ca tng thp nht ny v nhng iu cn bit cho ngi s dng cng nh ngi lp trnh ch l nhng giao thc ca cc tng cao hn (IP, TCP, UDP, vv...). Mi khi c cng ngh phn cng xut hin, nhng giao thc tng mng phi c pht trin TCP/IP c th s dng phn cng mi (thng thng chnh l cc trnh iu khin ca chnh nh cung cp phn cng ). Cc chc nng trnh din trong tng ny bao gm ng gi gi thng tin IP thnh cc "Frame" c truyn dn trn mng v chuyn a ch IP thnh a ch vt l s dng bi mng my tnh. 32

Mt trong s cc im mnh ca TCP/IP l a ch ca n c phi hp sao cho trn mng Internet khng c mt thit b mng no cng tn. a ch ny phi c chuyn i thch hp vi a ch mng vt l ni m d liu c truyn i. Hai v d RFCs m t giao thc s dng cho tng mng l: RFC 826: Giao thc chuyn i a ch chuyn i a ch IP thnh a ch Ethernet RFC 894: Mt chun cho vic truyn gi tin IP qua mng Ethernet m t cch thc ng gi truyn thng tin qua mng Ethernet. Khi ci t trong UNIX, giao thc ca tng ny c xem nh s phi hp ca chng trnh iu khin thit b v cc chng trnh lin quan. Nhng n v tng ng vi nhng thit b mng lm nhim v ng gi d liu v chuyn giao cho mng. .IV Tng Internet (Internet Layer)

Tng Internet cung cp mt h thng chuyn giao khng kt ni v i khi ngi ta cn gi l khng tin cy. Khng kt ni bi mi gi tin c truyn i trn mng mt cch c lp, s kt hp d liu ca cc gi tin c cung cp bi cc dch v lp trn. Mi gi tin IP cha a ch ni gi v a ch ni nhn v da vo n c th c truyn trn mng ti ch. Nhng chnh vic d liu c th i ti ch trn nhiu ng khc nhau to nn s mm do cho Internet khi mt ng b t hay mt nt no b qu ti, cc gi tin c th c truyn i theo nhng con ng khc, nu mt gi tin no c 33

li th ch phi truyn li gi tin thay vo vic phi truyn li ton b thng bo. Khng tin cy bi v IP khng c c ch kim tra tnh ng n ca d liu c truyn nhn, dch v tin tng phi c cung cp bi cc giao thc lp trn. Vn ch cht trn tng Internet l vic chn la con ng ti u truyn cc gi tin t trm ngun ti trm ch. Chng ta s xem xt cc k thut chn ng v thut ton dn ng s dng i vi tng ny sau y.

34

.IV.1. 0 Vers

Gi tin IP 31 Hlen Service Total length

type Identification Flag Fragment offset Time to live Protocol Header cheksum Source IP address Destination IP address IP options Padding IP datagram data (Max 65535 bytes)

Destinati on Address

Source Addres s

Type field

IP data

CRC

Gi thng tin IP trong mt frame Ethernet Vers : Di 4 bits, m t chnh xc version Hlen : Di 4 bits, m t di ca IP header Service type: di 8 bits m t th t u tin ca data. datagram (in bytes-c ngha l di vng data ca IP datagram c th ln ti 65535 bytes). Identification, flags, fragment offset: Khng phi bt k size no ca datagram cng c truyn trn mng (v d Ethernet LAN ch h tr cho size ln nht ca datagram 35 ca IP (tnh bng t 32 bit). Total length: Di 16 bits (2 bytes), y l di ca

l 1518 bytes). Do vy khi size ca datagram vt qu kch thc cho php, n s b chia nh ra v cc trng ny s m bo rng cc datagram b phn chia ny l t mt datagram ban u. Time to live: Dng xc nh xem datagram ny c b truyn lp li hay khng (thng thng n c gn l 1, nu b lp li n s b gn l 0) Protocol: Trng ny cho bit lp giao thc cao hn no s c s dng (UDP hay l TCP). CRC: Trng ny c dng kim tra s ton vn ca header. IP option: Cha cc thng tin nh: "d" ng, bo mt, xc nhn thi gian. Padding: Trng in thm cc s 0 m bo header kt thc ti mt a ch bi ca 32 Source IP address, destination IP address: cha a ch ca station gi v a ch ca station ch. Gi tin IP cha mt trng checksum kim tra tnh ton vn ca IP header, nu IP header li, gi tin IP b loi b v giao thc lp trn s truyn mt gi tin khc. Tng IP lm cng vic dn ng cc gi tin qua mng Internet t my tnh ny ti my tnh khc, qua cc mng khc nhau cho ti khi n n c trm ch hoc b li. Vic truyn gi tin qua cc mng c thc hin thng qua mt thit b kt ni gia hai mng gi l gateway. Khi mt thng tin truyn qua cc mng khc nhau, n c th b chia ra thnh nhiu gi nh hn. Thng tin truyn c th qu ln c th truyn trn mt gi tin trn mt mng khc. Vn

36

ny ch gp phi khi gateway c ni gia cc mng vt l khc nhau. Mi kiu mng c mt di ti a gi tin c th truyn (Maximum Transmission Unit-MTU) nu thng tin nhn c t mng ny di hn MTU ca mng kia, n cn phi c chia nh ra thnh nhiu mnh truyn.

37

Host A Applicati on Transpo rt Internet

Identic al Messa ge Identic al Packet Gateway Identical Datagra m Identic al Frame Physical Net G Internet
Network Interface

Host B Applicati on Transpor t Identical Datagra m Identic al Frame Physical Net Internet
Network Interface

Network Interface

Vic x l nh vy c gi l s phn mnh. trc quan, ta so snh vi vic chuyn ch hng bng tu ho, mi toa tu c th ch nhiu hng hn mt chic xe ti s tr hng trn ng, hng ho s c chia vo nhiu xe ti. Ta c th so snh vic ng ray khc v vt l vi ng t, Ethernet khc X.25 v vt l, IP phi ct gi tin Ethernet thnh nhng gi thng tin nh hn truyn qua mng X.25. nh dng ca mi gi tin chia ct ging nh vi tng bn tin. T th hai ca header cha thng tin s dng cho qu trnh tp hp li bn tin bao gm: gi tin thuc bn tin no, v tr ca n trong ton b dng d liu truyn, gi tin c kt ni cha.

38

Khi nhng gi tin truyn n mt gateway qu nhanh, chng c th b loi b v IP tr li mt thng bo li (ICMP). .IV.2. Giao thc chuyn a ch ARP (Address

Resolution Protocol) v c giao thc chuyn ngc a ch RARP (Reverse Address Resolution Protocol) Mi my tnh cng nm trn mt mng c cng mt net id v cc my tnh cng trn mt mng vt l c th gi frame vt l trc tip cho nhau nn vic truyn thng tin gia hai my tnh trong cng mt mng vt l khng cn s dng gateway. Vic dn ng trc tip ch s dng phn a ch my host id trong a ch IP. Trm gi ch vic kt khi d liu vo frame, chuyn a ch IP ca trm ch thnh a ch vt l v gi trc tip frame ti my nhn. Mt c ch s dng chuyn a ch IP thnh a ch vt l l ARP (Address Resolusion Protocol). Khi hai my tnh cng ni vo mt mng vt l, chng bit c a ch IP ca nhau nhng truyn thng gia hai my, chng phi bit c a ch vt l ca nhau. ARP gii quyt vn chuyn t a ch IP 32 bit sang a ch Ethernet 48 bit. Ngi ta s dng hai c ch chuyn a ch l: Chuyn giao trc tip Chuyn giao gin tip .IV.2.1. Chuyn giao trc tip

a ch vt l l mt hm ca a ch IP v d s dng trn mng token ring proNET-10 l mng cho php t a ch IP v a ch vt l thoi mi. Ngi ta c th t a ch IP l 192.5.48.3 v a ch vt l l 3, khi ta c PA=f(IA). 39

Vi PA l a ch vt l, IA l a ch Internet v f l hm chuyn i. .IV.2.2. Chuyn giao a ch ng

Chuyn giao a ch ng c thc hin bng cch my tnh gi thng tin gi mt thng bo ti ton b cc my tnh trn mng, trong thng bo c cha a ch IP ca my tnh n cn lin lc, mi my s nhn c thng bo v my no thy a ch IP ca mnh th tr li mt thng bo cha a ch vt l, khi , hai my tnh c th ni chuyn vi nhau.

Host A

Host B

Host C

Host D

ARP Request

Host A

Host B

Host C

Host D

ARP Reply

Ngoi ra, ngi ta cn s dng bng ch ng lu tr tm thi cc a ch s dng mi nht (Address Reslution Cache) tng tc ca vic chuyn giao a ch.

40

.IV.2.3.

Gi tin ARP

Mt gi thng tin ARP l mt Ethernet Frame c truyn trc tip t my ny ti my khc. V khng phi s dng IP, gi tin ny khng c a ch IP cng nh khng cn c dn ng, n phi c gi broadcasts ti tt c cc my trn mng Ethernet (vi a ch FF-FF-FF-FF-FF-FF). Gi thng tin ARP c m t nh sau:

41

0 Hardware Address Space Protocol Address Space Hardware Address Length Protocol Address Length Operation Code Source Hardware Address (Ethernet Address) (Internet Address) Source Protocol Address Target Hardware Address (Ethernet Address)

31

Destinatio n Address

Source Address

Type or Length

(ARP) Data

CRC

Khng ging phn ln cc giao thc khc, d liu trong ARP khng c mt nh dng chun cho header. ARP c th lm vic vi nhiu cng ngh khc nhau, ngi ta dng mt trng cha di ca nhng trng i sau n. Trong trng hp my trm khng c thit b nh ph, v v vy n khng bit a ch IP ca chnh mnh khi khi ng, ngi ta s dng c ch chuyn ngc a ch (Reverse Address Resolution Protocol - RARP) hot ng tng t ARP gii quyt vn ny. Theo c ch , c mt my ch cha bng a ch IP ca cc my trm, khi my trm khi

42

ng, n gi mt request ti tt c cc my v my ch gi tr li mt gi tin cha a ch IP ca my trm yu cu. .IV.3. Giao thc iu khin truyn tin (Internet

Control Message Protocol - ICMP) Vic dn ng qua cc mng s dng giao thc iu khin truyn tin (Internet Control Message Protocol - ICMP) c nh ngha trong RFC 792. ICMP s dng gi tin IP chuyn thng bo ca n. ICMP gi cc thng bo lm cc cng vic: iu khin, thng bo li v chc nng thng tin cho TCP/IP.. Thng thng ICMP c gi khi mt gi tin khng th i ti ch, mt gateway khng cn ch nh nhn thm gi tin hay mt gateway hng dn my tnh s dng gateway khc truyn thng tin theo mt con ng ti u hn.. .IV.3.1. Gi tin ICMP

Mc du mi thng bo ICMP c mt kiu nh dng ring ca n, song cc thng bo u cha 3 trng u tin ging nhau: TYPE: nh ngha thng bo i sau. CODE: Cung cp thng tin thm v thng bo. CHECKSUM: Cha checksum ca thng bo. Type Field 0 3 4 ICMP Message Type Echo Reply Destination Unreachable Source Quench

43

5 8 11 12 13 14 15 16 17 18 .IV.3.2.

Redirect (Change a router) Echo Request Time Exceeded for a Datagram Parameter Problem on a Datagram Timestamp Request Timestamp Reply Information Request Information Reply Address Mask Request Address Mask Reply iu khin dng d liu

Khi trm ngun gi d liu ti qu nhanh, trm ch khng kp x l, trm ch - hay mt thit b dn ng gi tr trm ngun mt thng bo n tm ngng vic truyn thng tin. .IV.3.3. Thng bo li

Khi khng tm thy trm ch, mt thng bo li Destination Unreachable c gateway gi tr li trm ngun. Nu mt s hiu cng khng ph hp, trm ch gi thng bo li li cho trm ngun (cng s c trnh by trong phn giao thc tng giao vn). .IV.3.4. nh hng li

Mt gateway gi thng bo nh hng li trm gi s dng mt gateway khc bi v gateway l mt la chn thch hp hn. Trng hp ny ch xy ra khi trm gi ni vo mng c trn 2 gateway.

44

V d my tnh B mun gi thng tin n my C, nu thng bo n gateway 1, th gateway 1 phi gi thng bo redirect my tnh qua gateway 2. Ngc li, mi my tnh trn mng X.25 mun gi thng bo ti my tnh nm trn mng Token Ring th vic ny khng cn thit v gateway 1 c ni trc tip vi mng Token Ring.

Token Ring

Gateway 1

Host A X.25

Host B

Gateway 2 Ethernet .IV.3.5. Kim tra trm lm vic

Host C

Khi mt my tnh mun kim tra mt my khc c tn ti v ang hot ng hay khng, n gi mt thng bo Echo Request. Khi trm ch nhn c thng bo , n gi li mt Echo Reply. Lnh ping ca UNIX s dng cc thng bo ny. .IV.4. Thut ton dn ng

Internet l mt mng chuyn mch gi v chuyn cc gi tin IP trn mng, ngi ta s dng thut ton dn ng. Thut ton dn ng c thc hin bi tin trnh la chn

45

mt ng truyn gi tin v vic dn ng cho cc gi tin c thc hin bi mi my tnh trn ng i ca n. Ngi ta chia vic dn ng trn mng Internet ra lm 2 kiu: Dn ng trc tip (direct routing): Dn ng trc tip t my tnh ny sang my tnh kia ch thc hin c khi c hai my tnh u kt ni vo mt mng vt l. Dn ng trc tip ch s dng phn hostid ca a ch Internet v s dng 2 giao thc chuyn a ch ARP v RARP.

46

Network 12.0.0.0

12.0.0 14.0.0 .3 Gateway .1 1 12.0.0 .2

Network 14.0.0.0

14.0.0 .2 Gateway 2 15.0.0 .1 Network 15.0.0.0

Gateway 13.0.0 3 12.0.0 .1 .1 Gateway 4 11.0.0 .2 13.0.0 .4 Network 11.0.0.0 11.0.0 .1 Network 13.0.0.0

13.0.0 .2

15.0.0 .2 Gateway 16.0.0 Gateway 5 6 .1 Network 16.0.0.0 16.0.0 .2

13.0.0 .3

Port Port 16.0.0 1 3 23 .3 10.0.0 Gateway Gateway .1 8 7 Port 10.0.0 2 23 Network .2 10.0.0.0

Ti my trn mng 10.0.0.0 11.0.0.0 12.0.0.0 13.0.0.0 14.0.0.0 15.0.0.0 16.0.0.0

Dn ng ti Direct Direct 11.0.0.2 Direct 13.0.0.2 10.0.0.2 10.0.0.2

Thng qua cng 2 1 1 3 3 2 2

Bng dn ng trn gateway 8

47

Dn ng gin tip (indirect routing): Khi trm ch khng cng nm trn mt mng vi trm gi cn thng qua gateway truyn i. Trm gi phi ng gi thng tin v gi ti mt gateway chuyn ti ch. Dn ng gin tip ch s dng net id trong a ch IP. D liu s chuyn t gateway ny ti gateway khc n khi n c th c truyn trc tip ti my nhn. Thut ton dn ng thng s dng bng dn ng (Internet routing table IP routing table) trn mi my tnh cha thng tin v cc my tnh v cch i n chng. V vic dn ng c thc hin bi c host v gateway, mi thit b u cha mt bng dn ng. Bng dn ng cha thng tin v cc mng v gateway kt ni n . Ngi ta s dng mt k thut che du thng tin v gim thiu kch thc ca bng dn ng l s dng k thut dng gateway ngm nh (default gateway). Nu my tnh khng tm thy a ch ch trong bng dn ng ca n th gi tin c chuyn ti mt thit b l default gateway. K thut ny c bit thch hp vi trng hp mng my tnh c ni vo Internet thng qua mt my tnh duy nht. Thut ton dn ng c th ci t cho TCP/IP Mi nt mng c mt c s d liu m t trng thi tng th ca mng (topo, tr truyn dn..) gi l bng dn ng. Cc thng tin ny dng cho vic tnh tnh cc con ng ti u chuyn cc gi tin n ch. Chng c cp nht thng xuyn sau mt khong thi gian no hoc cp nht mi khi c mt thay i xy ra.

48

(Mt s thut ton s dng cho vic tm ng i ti u c trnh by trong phn ph lc B) Khi c mt gi thng tin n mt my tnh hay gateway, thut ton dn ng chy trn my tnh s phn tch a ch ch ca gi thng tin v quyt nh truyn n theo ng tt nht ti ch (da vo thng tin trong bng dn ng). Vic ny bao gm c ci gi, chn ng, cp nht bng dn ng, ng gi ...

49

Tch a ch mng ch (IN) t a ch ch (ID)

IN ni trc tip vo mng ID l tn mt my tnh trong bng IN l tn mt mng trong bng C tn ti default gateway Gi thng bo li

Chuyn trc tip qua mng

Chuyn theo thng tin trong bng +

Chuyn ti default gateway

Cp nht bng dn ng

Kt thc thut ton dn ng

50

.V

tng giao vn

Tng giao thc ngay trn tng Internet l Tng giao vn (Host-to-Host Transport Layer hay thng gi l Transport Layer). Hai giao thc quan trng nht ca tng ny l Transmission Control Protocol (TCP) v User Datagram Protocol (UDP). TCP cung cp dch v chuyn giao thng tin c kt ni (connection-oriented), n bao gm c vic kim tra v sa li. UDP cung cp dch v km tin cy hn (unreliable) v khng thit lp lin kt trc (connectionless). C hai giao thc u chuyn giao thng tin gia tng ng dng v tng Internet. Chng trnh ng dng c th la chn dch v no thch hp vi n. .V.1. Giao thc khng kt ni (User Datagram Protocol UDP) UDP cho php chng trnh ng dng truy cp trc tip n gi tin ca dch v chuyn giao ging nh dch v m giao thc IP cung cp. N cho php ng dng trao i thng tin qua mng vi t thng tin iu khin nht. UDP l giao thc khng kt ni, km tin cy v n khng c c ch kim tra tnh ng n ca d liu truyn. .V.1.1. 0 Source port Message length Data Destination port checksum Gi thng tin UDP 31

51

Destinati on Address

Source Address

Type field

IP header

UDP data

CRC

52

Mi gi thng tin UDP gi l mt Datagram c phn lm 2 phn header v data trong header cha thng tin v a ch cng ngun, a ch cng ch, di ca gi v checksum .V.1.2. Phn knh, hp knh v Ports

Phn knh, hp knh chnh l vic la chn nhng tin trnh ng dng trong mt s ln cc tin trnh s dng giao thc UDP, v cn chn ra nhng ng dng tng ng vi gi thng tin chuyn n. Port 1 Port 2 Port 3

UDP: Demultiplexing Based on Port UDP Datagram arrives IP Layer Vic ny c gii quyt bng c ch cng (Port mechanism) c ch ny gn mi ng dng vi mt con s gi l s hiu cng (Port number) v mi gi thng tin m ng dng gi i u mang mt trng SOURCE PORT. Ti ni nhn, da vo thng tin trong trng DESTINATION PORT m gi tin c truyn n cng tng ng vi ng dng. V d mi bn TCP/IP u c dch v FTP (File Transfer Protocol) gn vi cng 21 v TFTP (Trivial File Transfer Protocol) gn vi cng 69 ca UDP. 53

Vic s dng cc port number cng c nhiu cch Dng nhng cng dnh ring cho tng ng dng c ng k trc (Well-known port assignment). Mt port number s c sinh ra khi c mt ng dng i hi (Dynamic binding). Cch tip cn kt hp cc kiu trn (Hybird) va s dng Well-known port assignment cho mt s port number va c th nh ngha cc port number khc khi cn thit. Cc port number thng dng ca UDP thng c dnh ch t 1 ti 255. Mt s h iu hnh (nh 4.3 BSD UNIX) cn dnh ch ti port number 1023, cc port number c th s dng c l t s 1024 tr ln. Mt s cng UDP dnh ring 0 7 9 11 13 15 17 19 37 42 43 53 67 Reserved Echo Discard Active users Daytime Who is up or NETSTAT Quote of the day Character generator Time Name server Who is Domain name server Boottrap protocol server

54

68 69 ( TFTP) 111 123 161 162 512 513 514 525

Boottrap protocol client Trivial Sun RPC Network time protocol SNMP net monitor SNMP traps UNIX comsat UNIX rwho process System log Timed File Tranfer Protocol

C mt s l do ngi lp trnh ng dng la chn UDP nh mt dch v giao vn: Nu mt s lng ln cc gi tin nh c truyn, thng tin cho vic kt ni v sa li c th ln hn nhiu so vi thng tin cn truyn. Trong trng hp ny, UDP l gii php hiu qu nht. Nhng ng dng kiu "Query-Response" cng rt ph hp vi UDP, cu tr li c th dng lm s xc nhn ca mt cu hi. Nu khng nhn c s tr li sau mt thi gian no , ng dng ch cn gi i mt cu hi khc. Mt s ng dng t n cung cp cng ngh ring chuyn giao thng tin tin cy, v khng i hi dch v ny ca transport layer.

55

.V.2. Giao thc iu khin truyn tin (Transmission Control Protocol - TCP) Mt s ng dng i hi giao thc giao vn cung cp dch v chuyn giao thng tin tin cy s dng TCP bi n cung cp dch v kim tra ng n v d liu c truyn vi mt s phi hp thch hp. Mt s c im ca dch v tin cy m TCP cung cp l: Hng dng (Stream Orientation): TCP coi d liu n gi i l mt dng byte khng phi l gi tin. Do , TCP m bo s th t ca cc byte gi nhn. Trng Sequence number v Acknowledgment number trong header ca TCP gi du ca cc byte trong ton b dng d liu truyn. TCP chun khng bt h thng phi s dng mt s c bit no nh s dng byte, mi h thng t chn mt s m n s dng lm im bt u. Mi trm cui phi bit s th t m trm kia dng. Chng phi trao i mt segment ng b h thng s s c s dng (Synchronize sequenence number - SYN) trong qu trnh bt tay. Trng Sequent number trong SYN segment cha s bt u (ISN) ca dng s nh th t, s ny c chn ngu nhin. Mi byte trong d liu c gi du bi s ISN do byte u tin ca d liu mang s ISN+1. Sequent number cha v tr ca dng byte trong gi tin nu ISN=0 v 4000 byte c chuyn giao th con s tip theo s l 4001. Chuyn giao b m (Buffered Transfer): gim s lng truyn thng, giao thc c gng s dng s lng ti thiu cc segment truyn ti thng tin, do vy, giao thc s

56

dng ti a di c th ca segment. Trng window trong TCP header cho bit s byte ti a m trm ch c th nhn c, nu trm ch c kh nng chp nhn 6000 byte th trng window s l 6000, trm gi c th iu chnh li d liu cho ph hp. Nu trng window mang gi tr 0 c ngha l trm gi phi ch ti khi nhn c mt s khc 0. Kt ni hai chiu (Full Duplex Connection): TCP/IP cung cp kt ni cho c hai u ca lin kt. iu ny c ngha l tng pha di cung cp kh nng gi tr thng bo t trm ch tr li trm ngun. TCP l giao thc hng kt ni. N thit lp quan h logic gia 2 trm tham gia lin kt. Thng tin iu khin gi l handshake c trao i gia 2 trm thit lp hi thoi trc khi thng tin c truyn. TCP ch dn chng trnh iu khin ca mt segment bng cch t mt bit dnh ring ca c ti word th 4 ca segment header. Kiu bt tay ca TCP gi l three way handshake bi v 3 segment c trao i. Trm A bt u kt ni bng cch gi mt segment vi bit Synchronize sequenence number (SYN). Segment ny bo cho trm B th t trm A s s dng cho nhng segment ca n gi, s th t ny m bo cho d liu mt trt t thch hp. Trm B p li trm B vi mt segment vi bit Acknowledgment (ACK) v SYN c t. Segment ca B thng bo rng n nhn c thng bo ca A v bo cho A bit s th t m n s s dng. Cui cng, A gi mt segment bo cho B n nhn c thng bo v truyn gi d liu u tin. Ch rng, gi tin

57

th nht cha bit SYN v cc gi tip theo cha bit ACK. Sau khi trao i, trm A xc nh hin nhin trm ch tn ti v sn sng nhn d liu. Ngay sau khi kt ni c thit lp, d liu c th truyn. Khi kt thc hp tc truyn giao d liu, chng s trao i three way hanshake cha bit thng bo ht d liu truyn No more data from sender gi l (FIN) kt thc kt ni. l s trao i gia hai trm cung cp mt kt ni logic gia hai h thng. TCP cung cp dch v tin cy vi mt c ch gi l "Positive Ackowledgment with Retransmission" (PAR). n gin l trm ngun tip tc gi thng tin i cho ti khi n nhn c thng bo d liu c nhn chnh xc ti trm ch. n v thng tin chuyn giao gia cc ng dng gi l segment, mi segment cha checksum m bo rng segment khng b ph hu trn ng truyn, nu segment khng b ph hu, trm nhn gi thng bo xc nhn li trm gi, nu segment b ph hu, trm nhn hu b n v sau mt thi gian no , trm gi s gi li gi tin m n khng nhn c thng bo xc nhn. Ti trm gi Thng tin trn mng Ti trm nhn

Send Paket 1 Receive ACK 1 Send Paket 2 Receive ACK 2 58

Receive Paket 1 Send ACK 1 Receive Paket 2 Send ACK 2

.V.2.1. 0

Gi tin TCP 4 8 Source Port 12 20

24 28 31 Desstination Port Sequence Number Acknowledgment Number Offse Reserved Flags Window t Checksum Urgent Pointer Opions Padding Data

Destinati on Address

Source Typ Addres e s field

IP header

TCP Segment

CRC

Gi tin TCP cha trong mt Ethernet frame ch ca gi tin u tin ch c th nhn tra tnh ton vn liu khn i sau Source Port Cng ngun Destination Port Cng Sequence NumberS th t Offset S th t ca byte

Reserved dnh Flags C ch dn Window S byte ti a trm Checksum Checksum kim di d

Urgent Pointer Option 59 Tu chn

cc con s 0 y .V.2.2.

Padding Phn in thm vo Data D liu bt u ti

Cng, kt ni v im kt ni

TCP cng dng cc port number gn cho cc ng dng v cho php truy cp ti cc ng dng ny thng qua cc port number . Cng 0 1 5 7 9 11 13 15 17 19 20 21 23 25 37 42 43 53 TCP dnh ring Reserved TCP multiplexor RJE Echo Discard Active users Daytime Network status program Quote of the day Character generator FTP - data connection FTP - command connection TELNET Simple mail transport protocol Time Name server Who is Domain name server

60

77 79 93 95 101 server 102 103 104 111 procedural call 113 117 service 119 129 139 160-223

Any private RJE server Finger - find a active user Device control protocol SUPDUP protocol Network info.center host name

OSI - transport service access point X.400 mail service X.400 mail sending Sun microsystems remote

Authentication service UNIX to UNIX copy(UUCP)path

Usenet news tranfer protocol Password generater protocol NetBIOS session service Reserved

Tuy cng dng cc port number nh danh cho cc ng dng nhng mt cng khng nh danh cho mt thc th duy nht trn mng, TCP l mt giao thc hng kt ni do n cn phi nh danh cho c hai u ca lin kt. TCP a ra nh ngha endpoint l mt cp s nguyn (host, port) trong , host l a ch IP ca mt my tnh cn port l port number m my tnh s dng. V d: (190.2.2.1,23) nh ngha cng 23 cho my tnh c a

61

ch IP l 190.2.2.1. Chng ta s quay li vi khi nim endpoint trong chng sau. .VI Tng ng dng ca TCP/IP

Phn ln ngi s dng ch quan tm ti cc dch v thng tin c cung cp trn Internet. Cc ng dng c sm nht ca Internet l Telnet, FTP, SMTP, DNS ngoi ra ngy nay c hng ngn ng dng khc ang pht trin v ngy mt nhiu. Sau y chng ta tm hiu v phn tch mt s ng dng ca Internet. .VI.1. DNS) Vic nh v cc my tnh trn mng bng cc a ch IP c nhiu li im nh trnh by phn trn, tuy nhin vi ngi s dng, vic nh cc con s l mt vic t nht kh chu. Hn na, a ch IP khng mang thng tin v a l, t chc hay ngi dng. V th, ngi ta xy dng h thng t tn gi l Domain Name Server cung cp cho ngi dng cch t tn cho cc my tnh vi cch t tn thng thng quen thuc. Mt domainame thng thng c dng: Tn_ngi_dng@Tn_min vi tn min c phn lm cc cp ni vi nhau bi du .. Tn min c NIC cung cp. Tn min cao nht l cp quc gia c t bi 2 ch ci: ar: Argentina at: Austria Dch v tn min (Domain Name Service -

62

au: Australia be: Belgium ca: Canada cn: China de: Germany es: Spain fr: France gb: Great britain hk: Honkong il: Israel it: Italy jp: Japan kr: Korea lu: Luxembourg my: Malaysia no: Norway vn: Vit nam ....... nu khng c g th c hiu nh thuc USA Mc tip theo ch lnh vc hot ng: edu: gio dc gov: chnh ph com: thng mi mil: qun s org: cc t chc phi li nhun net: cc t chc pht trin mng

63

Sau c th l tn cng ty v tn my tnh. vn

gov

edu

com

mil

org

nic

vnuh

hut

vdc

fpt

fit Phn cp domain name Mt my tnh c th c nhiu tn nhng trn mng, mi tn l duy nht. Vic nh x a ch IP vo tn min c thc hin bi cc Name Server ci t ti my Server v Name Resolver ci t trn my trm. .VI.2. ng nhp t xa (Telnet)

Telnet cho php ngi s dng t mt trm lm vic ca mnh c th ng nhp (login) vo mt trm xa nh l mt u cui (teminal) ni trc tip vi trm xa .

64

Client c t trm cui

Users Termin al

Teln et Clien t

H iu hnh

Server nhn thng bo Client t client gi thng bo n server

Teln et Serv er

H iu hnh

Server gi thng bo ti my tnh thc hin pseudo termin al

TCP/IP Intern et

ng nhp vo mt my tnh ta nh lnh: telnet [domain name | IP address] .VI.3. Th in t (Electronic Mail)

y l mt dch v ph bin nht trn Internet trc khi World Wide Web ra i, thng qua dch v ny, ngi s dng trn mng c th trao i cc thng bo cho nhau trn phm vi th gii. y l mt dch v m hu ht cc mng din rng u ci t v cng l dch v c bn nht ca mt mng khi gia nhp Internet. Nhiu ngi s dng my tnh tham gia mng ch dng duy nht dch v ny. Dch v ny s dng giao thc SMTP (Simple Mail Transfer Protocol) trong h giao thc TCP/IP. Th in t l phng thc trao i thng tin nhanh chng v thun tin. Ngi s dng c th trao i nhng bn tin

65

ngn hay di ch bng mt phng thc duy nht. Rt nhiu ngi s dng thng truyn tp tin thng qua th in t ch khng phi bng cc chng trnh truyn tp tin thng thng. c im ca dch v th in t l khng tc thi (off-line) tt c cc yu cu gi i khng i hi phi c x l ngay lp tc. Khi ngi s dng gi mt bc th, h thng s chuyn th ny vo mt vng ring (gi l spool) cng vi cc thng tin v ngi gi, ngi nhn, a ch my nhn... H thng s chuyn th i bng mt chng trnh chy nn (background). Chng trnh gi th ny s xc nh a ch IP my cn gi ti, to mt lin kt vi my . Nu lin kt thnh cng, chng trnh gi th s chuyn th ti vng spool ca my nhn. Nu khng th kt ni vi my nhn th chng trnh gi th s ghi li nhng th cha c chuyn v sau s th gi li mt ln n hot ng. Khi chng trnh gi th thy mt th khng gi c sau mt thi gian qu lu (v d 3 ngy) th n s tr li bc th ny cho ngi gi. Mi th trn Internet u tun theo mt dng chun. Bao gm phn header cha a ch ngi gi, a ch ngi nhn dng domain name v sau l phn ni dung th. C hai phn u l cc k t ASCII chun. Th chuyn trn mng v n c ch l nh vo thng tin cha trong phn header ca th. Ban u th in t ch nhm mc ch trao i cc thng bo (thc cht l cc tp vn bn) gia ngi s dng vi nhau. Dn dn ngi ta pht trin thm cc bin th trn n 66

phc v ngi s dng tt hn hoc dng cho nhng mc ch ring bit. l cc dch v thng tin da trn th in t. Thc cht ca cc dch v ny l s dng th c ni dung tun theo mt c php c bit th hin yu cu ca ngi s dng. Cc th ny c gi ti mt ngi s dng c bit l cc server, cc server ny phn tch ni dung th, thc hin cc yu cu ri gi tr li kt qu cho ngi yu cu cng di dng th in t. C hai server ph bin trong hot ng ny l name server cung cp dch v tra cu a ch trn mng archive server cho php ngi s dng tm kim v ly v nhng tp tin dng chung. .VI.4. FTP) y l mt phng php sao chp tp t mt my tnh xa v my tnh ca ngi dng ta c th ngi ti my tnh ca mnh truyn hoc ly file trn mt my ch no V d ly tp nettcp.c trn my ch sco5 v my tnh ca mnh: $ ftp sco5 Connected to sco5. 220220 sco5.cse.com.vn FTP server (Version 2.1WU(1)) ready. Name(none): binhnn 331 Password required for binhnn. Password: 230 User binhnn logged in. Giao thc truyn tp (File Transfer Protocol -

67

Remote system type is UNIX. Using binary mode to transfer files. ftp> get nettcp.c local: nettcp.c remote: nettcp.c 200 PORT command successful. 150 Opening BINARY mode data connection for nettcp.c (46 bytes). 226 Transfer complete. 46 bytes received in 0 seconds (0.04 Kbytes/s) ftp> bye 221 Goodbye. $ .VI.5. Nhm tin (News groups)

News groups l nhng nhm ngi dng tho lun trc tuyn. Mi ngi gi nhng bi bnh lun v mt vn no , to thnh mt nhm tho lun, nhng nhm tin cho php ngi dng tip xc vi hng triu ngi trn th gii c cng mi quan tm. Internet c gn 20.000 nhm tin nh vy .VI.6. Tm kim tp (Archie)

Do trn Internet hin nay c khong trn 3 triu tp v hng nghn ftp server v s lng ngy cng tng nhanh. Archie l mt dch v gip tm kim cc tp tin khc nhau theo mt s cc thng tin no . Thng thng dch v ny cho php tm kim tp theo tn hoc mt xu con ca tn tp. N cha cho php tm kim theo ch hay ni dung. Tuy vy n tr gip cho ftp rt nhiu c th ly tp d dng hn. 68

.VI.7.

Tra cu thng tin theo thc n (Gopher)

S dng giao thc Gopher protocol tm kim ti nguyn ca mng. Dch v ny cho php tm kim v tra cu thng tin theo ch ca thng tin. Vic tra cu ny c thc hin qua h thng thc n thn thin hn vi ngi s dng. N c u im l c th tra cu trn nhiu my ch cng mt lc. Hn ch ca Gopher l hin th thng tin qu tm tt, cc chc nng cung cp trong thc n cn cha nhiu. .VI.8. Tm kim thng tin theo ch s (WAIS)

Khc vi Gopher tm kim thng tin qua cc mc nh sn, WAIS cho php ngui dng tm kim cc tp d liu c cha cc xu nh trc. Ngoi cc ng dng client, server WAIS cn c mt phn c bit l indexer lm nhim v cp nht cc ti liu mi, sp xp chng di dng thch hp thun tin cho vic tm kim. WAIS server khi nhn c cu hi ca client s tm kim trong c s d liu to ra bi indexer v tr li cho client. .VI.9. Siu vn bn (WWW)

Ngi ta ni rng WWW l linh hn ca Internet v n cung cp cho ngi dng mt giao din l tng khi lm vic vi Internet. Ngi dng my tnh khng cn c hiu bit su v my tnh cng c th s dng n nh mt cng c c lc ngi ti nh xem ton b th gii vi s lng thng tin s c cp nht tng giy. WWW da trn tng siu vn bn Hypertext trong cha cc Hyperlink n cc vn bn khc v nh vy, ta c th m rng mi mi trang vn bn ca mnh. 69

WWW ngy nay c m rng vi khi nim siu phng tin Hypermedia bao gm c hnh nh, m thanh.. Ngy nay, phn ln ng dng trn Internet t gii tr n truy cp c s d liu u c thc hin trn WWW.

70

Chng IV.
.I

Xy dng ng dng truyn tp

Giao din lp trnh

.I.1. Giao din lp trnh B giao thc TCP/IP nh ngha y cc giao thc truyn thng cc my tnh trn mng c th giao tip vi nhau, che i cu trc vt l ca mng. Tuy nhin, xy dng cc ng dng th s dng TCP/IP l khng , bi v ngi lp trnh s phi t mnh xy dng nhng th tc gii quyt tng s kin, mt giao din (Application Program Interface) lp trnh l cn thit cung cp cho ngi lp trnh mt cch tip cn n gin, d hiu hn. Tin trnh ng dng Th vin Giao din vi nhn h iu hnh

Giao din vi phn cng

Phn cng

UNIX cung cp cho ngi lp trnh hai giao din chnh cho lp trnh C: Sockets ln u tin xut hin trong bn BSD UNIX nm 1982 v nhanh chng pht trin rng ri trong mt khong

71

thi gian ngn. c pht trin thm vo nm 1990 h tr giao thc ISO. Socket c gn vi kh nng truyn thng d dng gia cc tin trnh c trn mng v trn mt my tnh. Mc tiu ca n l che du cng nhiu cng tt nhng g xy ra tng truyn thng pha di. TLI (Transport Layer Interface) Pht trin u tin cho UNIX System V 3.0 c nhng hm v th tc tng ng vi Socket nhng m hnh phc tp hn t c tnh mm do hn. .I.2. Network I/O v file I/O H iu hnh UNIX, c 6 li gi h thng vo ra file l: open: M file. creat: To file. close: ng file. read: c t file. write: Ghi file. lseek: Chuyn con tr file. V UNIX coi mi thit b u nh mt file, c th c truy cp nh mt file. Tuy nhin vic vo ra trn mng vi giao din lp trnh ng dng phc tp hn v: M hnh Client-Server l khng i xng, ta phi xc nh chng trnh no ng vai tr Client, chng trnh no ng vai tr Server. Mt i thoi trn mng c th l hng kt ni hoc khng kt ni.

72

Mt tin trnh con c th s dng file descriptor ca chng trnh cha truyn cho lm vic vi file m khng cn bit n tn file thc s. Cc ng dng trn mng cn bit c u kia ca kt ni chc chn rng n c php i hi dch v. Trong phn ni v giao thc TCP/IP chng ta bit thit lp kt ni cn nhiu tham s hn i vi file I/O, l giao thc (protocol), a ch IP ch (Destination IP Address), a ch IP ngun (Source IP Address), s hiu cng ch (Destination port number), s hiu cng ngun (Source port number). Giao din mng phi h tr nhiu giao thc truyn thng v d cc chun ca tng cao vi tng thp hn. .I.3. Lm vic vi Socket Nh gii thiu trn, Socket c gn vi kh nng truyn thng d dng gia cc tin trnh c trn mng v trn mt my tnh. V n l che du cng nhiu cng tt nhng g xy ra tng truyn thng pha di. Chng ta s la chn Socket pht trin ng dng ca mnh trn mng da trn m hnh Client-Server.

73

Application Socket Library User Kerne l Stream Head

.I.3.1.

Socket

SHOCKMOD

Ni chung c ch socket tng t vi c ch truy TPI nhp tp Transport Provider trong UNIX. Khi cn thit tin trnh c th to ra mt socket, h thng tr li kt qu l mt socket descriptor. S khc bit gia file descriptor v socket descriptor ch file descriptor c gn lin vi mt tp hay thit b c nh cn socket descriptor khng b gn vi mt a ch no. Chng trnh c th cung cp a ch ti mi ln truy nhp ti socket hay cng c th gn socket descriptor vi mt a ch nht nh. Do n tng thch vi c ch truy nhp tp, nn vn c th dng cc lnh thng dng nh read, write i vi socket. Mt Socket c dng nh mt endpoint. Mi Socket gn vi mt nhm SHOCK_STREAM s dng cho dch v hng kt ni . SHOCK_DGRAM s dng cho dch v khng kt ni. SHOCK_RAW cung cp truy cp trc tip vo giao thc xy dng cng c qun tr mc user. SHOCK_SEQPACKET Ging nh SHOCK_STREAM nhng cung cp bin gii cc mesage. SHOCK_RDM Cung cp dch v khng kt ni n gin.

74

.I.3.2.

a ch Socket

C hai loi a ch c gn vi mt socket: a ch local v a ch TCP/IP. a ch ny c khai bo l nhng bn ghi v c dng lm tham s cho nhng lnh h thng v th tc truy nhp socket. a ch local l a ch xc nh socket trong ni b my. Cu trc a ch cc b c m t nh sau Address family Address bytes 0-1 Address bytes 2-5 Address bytes 6-9 Address bytes 10-13

struct sock_addr { u_short sa_family; char sa_data[14]; */ };

/* address family */ /* up to 14 bytes address

Trng address family s quyt nh cu trc a ch ca trng Address bytes pha sau v socket h tr cho nhiu giao thc khc nhau nn ng vi mi giao thc trng a ch s c cu trc khc nhau. Protocol family PF_UNSPEC PF_UNIX PF_INET PF_IMPLINK PF_PUP PF_CHAOS PF_NS PF_NBS Description Unspecified family UNIX domain Internet protocols Arpanet IMP address Old Xerox protocols M.I.T. CHAOS protocols Xerox Network system protocols NBS protocols 75

PF_ECMA PF_DATAKIT PF_CCITT PF_SNA PF_DECnet PF_DLI PF_LAT PF_HYLINK PF_APPLETALK PF_NIT PF_802 PF_OSI PF_X25 PF_OSINET PF_GOSIP

European Computer Manual DATAKIT protocols CCITT protocols IBM System Network Architeture DECnet protocols DEC direct data link interface LAN terminal interface NSC Hyperchannel Apple Talk protocols Network interface tap IEEE 802.2 OSI protocols CCITT X.25 OSI protocols U.S.government OSI protocols Protocol Families

a ch TCP/IP c khai bo vi tn sockaddr_in. N cha s hiu port v a ch IP 32-bit. Address family Protocol port IP Address Unused (0) Unused (0) struct in_addr /* 32-bit IP Addresss */ { u_long s_addr; /* network byte order */ }; struct sockaddr_in { short u_short struct in_addr char }; .I.3.3.

sin_family; sin_port; sin_addr; sa_zero[14];

/* = AF_INET */ /* 16-bit port number */ /* 32-bit IP Addresss */ /*unused*/

Mt s li gi to lp socket

Li gi socket():

76

Mun lm vic vi socket th vic u tin l phi to socket . lm vic cn gi lnh socket() vi cc tham s cn thit. Hm tr li mt socket descriptor nu thnh cng, -1 nu c li. int socket (int family, int type, int protcol) Tham s family xc nh h giao thc c s dng vi

socket nh ni n trn. AF_UNIX AF_INER AF_NS AF_IMPLINK th s dng l Giao thc ni b UNIX Giao thc Internet(TCP/IP) Giao thc Xeror NS Giao thc lp IMP dng stream c tin cy cao

Tham s type xc nh kiu ca lin kt. Nhng kiu c (SOCK_STREAM), dng datagram (SOCK_DGRAM) hay dng th (SOCK_RAW) cho php truy nhp ti mc thp ca mng. V d: SOCK_STREAM SOCK_DGRAM SOCK_RAW AF_UNIX AF_INET AF_NS C TCP C C UDP C IP C

Do tham s th ba xc nh chnh xc giao thc no c s dng cho socket. Tuy vy trong rt nhiu ng dng tham s ny khng c s dng. Li gi bind() Khi mi c to ra, socket khng c gn vi bt c a ch no. Ni ring vi TCP/IP l n cha c gn vi s hiu port ca tin trnh gi, s hiu port ca tin trnh nhn cng nh a 77

ch IP. Nhiu chng trnh khng quan tm n s hiu port v a ch ca n, v dnh cho phn mm giao thc t gn. Tuy nhin cc chng trnh khc vn cn bit n a ch ca mnh. Lnh bind gn thit lp mt a ch local cho socket v ng k n vi h thng. int bind(int sock, struct sockaddr * localaddr, int addrlen) Li gi bind() c s dng trong cc trng hp sau: Chng trnh server ng k mt a ch thng dng vi h thng. Mi d liu n a ch ny s c chuyn cho n. Mt chng trnh client ng k mt a ch c bit. Mt chng trnh client c kiu khng kt ni (connectionless) mun kim tra xem a ch ca n c hp l hay khng. Li gi connect thit lp c mt lin kt gia client vi server, tin trnh cn phi gi lnh connect. int connect(int sock, struct sockaddr * seraddr, int addrlen) Tham s lnh ny tng t i vi lnh bind() nhng seraddr tr ti a ch ca server (tc l u kia ca lin kt). i vi cc giao thc c lin kt (connection-oriented), connect() s to lp mt lin kt thc s gia hai my. Cc thng tin c trao i nhm thng nht mi tham s lin quan. N s cha thot ra nu nh cha thit lp c lin kt hoc cha nhn c thng bo li. i vi cc giao thc khng lin kt (connectionless) lnh connect() n gin ch ct gi a ch server (bin 78

seraddr) tin trnh sau ny s dng khi trao i d liu. Vi giao thc ny vic gi lnh connect() c th b qua nhng vic s dng n s to ra s thun tin i vi ngi lp trnh. Sau khi ng k a ch vi h thng th s khng cn phi xc nh li a ch mi khi gi i cc datagram. Ngi s dng c th dng cc lnh read, write, recv, send tng t nh cc socket c kt ni. Ngoi ra, connect cn kim tra xem c thc s mt tin trnh no nhn thng tin mnh s gi hay khng. Nu a ch gi khng tn ti connect s tr li li cho tin trnh gi. Vic ny lm cho tin trnh c th x l li tt hn so vi cc giao thc khng kt ni (v d UDP). Mt datagram c th cha mt a ch sai v hon ton khng c ngi nhn. Li gi listen() Ta s xem xt mt tin trnh server, tin trnh ny u tin to ra mt socket, gn n vi mt port thng dng ri ch cho n khi c mt yu cu c gi ti. Nu n l mt lin kt kt ni thc s, hoc n phi x l qu lu i vi mi yu cu, s xy ra trng hp l mt yu cu mi s ti trong khi yu cu c cha c x l xong. trnh vic cc yu cu mi b t chi, server phi khai bo vi phn mm ca giao thc to ra cho n mt hng i cc yu cu. Lnh listen() s khai bo hng i ny. int listen(int sock, int qlen) Tham s sock l socket descriptor c dng bi server. Tham s qlen quyt nh chiu di hng i cc yu cu. Gi tr ti a ca tham s ny l 5. 79

Khi hng i ny y, h thng s khng chp nhn thm mt yu cu no khc. Mi yu cu ti sau s b hu b. listen() ch p dng vi socket kiu STREAM. Li gi accept() Sau khi tin trnh server gi cc lnh socket(), bind(), listen() to ra mt socket, gn n vi mt port thng dng, xc nh chiu di hng i, server s gi lnh accept() to ra mt kt ni hon thin. int accept(int sock, struct sockaddr * addr, int addrlen) Tham s addr dng tr li a ch ca tin trnh gi yu cu (client). accept() s ly yu cu u tin trong hng i v to ra mt socket mi c cng thuc tnh vi sock. Nu trong hng i khng c mt yu cu no th n s ch cho n khi c mt yu cu c gi ti. Socket sock vn c gi nguyn do vy server vn tip tc chp nhn cc yu cu khc gi ti socket ny. Vi cch tip cn tng tc, server t x l gii quyt yu cu sau ng socket ny li v quay v x l tip cc yu cu sau . Cn i vi phng php ng thi, sau khi lnh accept() tr li kt qu server s sinh ra mt tin trnh con gii quyt yu cu. Tin trnh con s nhn c mt bn sao ca socket mi. Trong khi tin trnh server s lp tc ng socket mi ca n sau khi to ra tin trnh con v tr li gi accept() nhn mt yu cu mi. Li gi close()

80

Khi mt tin trnh thi khng s dng socket th n gi lnh close() int close(int sock) sock l socket cn hu b. Khi mt tin trnh kt thc vi mi l do, h thng s ng tt c cc socket cn m. i vi cc giao thc tin cy, mc d socket b ng nhng kernel vn c gng gi i cc d liu cn li trong hng i d liu. .I.3.4. Mt s li gi gi d liu qua socket

C 5 li gi c dng gi d liu qua socket. Cc lnh write, writev, send lm vic vi cc socket kt ni v chng khng cho php khai bo a ch ngi nhn. Li gi send() Li gi send c 4 tham s : int send(int sock, char * buff, int len, int flag) sock ch nh socket c s dng, buff tr ti vng d liu c gi i, len xc nh s byte trong buff c gi i. flag cho php ngi gi chn mt s cch thc gi d liu v d nh gi d liu out-of-band... Cc tham s ny khc nhau i vi mi loi socket. send() tr li m li cho chng trnh gi chng trnh bit c thao tc c thnh cng hay khng. Li gi write()

81

Do cch thc truy nhp ti socket tng t truy nhp n file nn c th dng lnh h thng write gi d liu qua socket. int write(int fd, char * buff, int len) Tham s fd c th l mt socket descriptor hoc file descriptor. Li gi writev() gi i mt danh sch cc khi d liu ta dng int writev(int fd, struct iovec iovector[], int vectorlen)

Cc li gi sendto(), sendmsg() c dng cho cc socket khng kt ni. Hai lnh ny yu cu phi cung cp a ch ngi nhn. int sendto(int sock, char * buff, int len, int flag, struct sockaddr * destaddr, int addrlen) Bn tham s u ging nh bn tham s ca send(). Hai tham s sau l a ch ca ngi nhn v di ca a ch. Do sendto() c qu nhiu tham s, lp trnh vin c th s dng li gi sendmsg() int sendmsg(int sock, struct msghdr msg[], int flag) Vi tham s msg l mt cu trc c cha a ch v danh sch nhiu on d liu cn gi i.

82

.I.3.5.

Mt s li gi nhn d liu t socket

Tng ng vi 5 lnh gi d liu c 5 lnh dng nhn d liu vi tham s v c ch hon ton ging nhau. int recv(int sock, char * buff, int len, int flag) int read(int fd, char * buff, int len) int readv(int fd, struct iovec iovector[], int * vectorlen) int recvfrom(int sock, char * buff, int len, int flag, struct sockaddr * destaddr, int *addrlen) int recvmsg(int sock, struct msghdr msg[], int flag) .II M hnh Client-Server

Theo cch nhn ca ngi lp trnh, TCP/IP ging nh hu ht cc giao thc truyn thng khc cung cp c ch c bn truyn d liu. c bit, TCP/IP cho php ngi lp trnh thit lp truyn thng gia hai chng trnh ng dng v truyn d liu qua li. TCP/IP cung cp kt ni bnh ng gia cc ng dng k c cc ng dng chy trn cng mt my. Mt pht trin ca m hnh peer-to-peer l m hnh ClientServer tr thnh m hnh c bn c s dng trn mng my tnh. Chng trnh Server l mt chng trnh ch i kt ni t chng trnh Client v cung cp dch v cho Client. M hnh c m t nh sau: Tin trnh Server c khi ng trn mt h thng no sau ch i mt tin trnh Client kt ni n yu cu dch v. Tin trnh Client c khi ng trn cng h thng my vi chng trnh Server hoc t mt h thng khc kt ni vi

83

h thng ch thng qua mng. Client gi yu cu qua mng ti tin trnh Server i hi mt s dch v nh: Tr li ngy gi cho Client In mt file cho Client c hoc ghi file vo h thng file ca Server Cho php Client login vo h thng Server Chy chng trnh ca Client trn h thng Server Sau khi cung cp dch v cho Client, Server tip tc ngh v ch i kt ni khc. Chng ta c th chia tin trnh Server lm 2 kiu: Tng tc (Interative Server): Khi Client i hi nhng dch v ng k trc vi khong thi gian thc hin nh, Server t lm cng vic v d dch v tr li ngy gi. ng thi (Concurrent Server): Vi nhng yu cu i hi thi gian thc hin ln, tin trnh Server sinh mt tin trnh con thc hin yu cu cn n tip tc ch i yu cu khc. Dch v in file, c-ghi file c thc hin theo kiu ny. .II.1. kt ni Vi m hnh khng kt ni, client khng kt ni vi server m ch gi d liu n s dng li gi sento(), ngc li, server s dng li gi recvfrom() ch i d liu t client chuyn n. Li gi recvfrom() tr li a ch ca client, nh server c th gi kt qu li cho client. M hnh Client-Server s dng dch v khng

84

Server (connectionless protocol) socket() bind() recvfrom( ) block until data received from client Client socket() bind() sendto()

data (request)

process request sendto() data (reply) recvfrom( )

Li gi socket cho m hnh client-server khng kt ni

85

.II.2. kt ni

M hnh Client-Server s dng dch v hng

Vi m hnh Client-Server s dng dch v hng kt ni, u tin Server c khi ng v ch i mt kt ni t client. Sau khi kt ni c thit lp, hai bn lun phin nhau gi nhn d liu thng qua ng truyn. Server (connection-oriented protocol) socket() bind() listen() accept() block until connection from client Connection establishment data (request) Client socket() Connect () write()

read() Process request write()

data (reply)

read()

Li gi socket cho m hnh client-server hng kt ni 86

.III

Xy dng chng trnh truyn tp Thit k v ci t chng trnh Giao thc ng dng c xy dng v s dng

.III.1. .III.1.1.

trong chng trnh Bn thn giao thc TCP l mt giao thc hng kt ni v ng tin cy, giao thc ny m bo d liu truyn vo socket y , nhng tng cng tnh tin cy ca chng trnh ng dng v kim sot vic truyn d liu nht l trn cc mng c tr ln hay nhng mng thng xuyn xy ra hin tng qu ti, mt giao thc ng dng ring c xy dng cho chng trnh. Gi tin ca giao thc ng dng c m t nh sau: 0 1 Size 2 D liu ti a 4094 byte Data

Size di 2 byte cha di ca phn d liu ca gi tin. Data cha d liu, trng ny c di ti a l 4094 byte v giao thc s dng gi tin di ti a 4096 byte. Vic s dng cc kt ni: Chng trnh s dng hai kt ni, mt truyn lnh v mt truyn d liu gia client v server. Knh truyn iu khin dng truyn cc lnh v cc thng bo c tnh cht iu khin, iu ny lm gim tnh phc tp trong vic phn tch v x l cc lnh ca chng trnh. Knh truyn d liu c thit lp ngay trong qu trnh to kt ni gia tin trnh client v tin trnh server v c 87

dng n mi khi c d liu cn truyn nhn gia client v server. Cc khi d liu c th c chia nh thnh cc gi tin v truyn trn knh d liu, kt thc mt khi d liu l mt gi tin c di bng 0. Vic s dng hai knh truyn C 3 loi lnh trong chng trnh s dng cc knh truyn nh sau: Client gi lnh n server v nhn v mt thng bo trn knh iu khin v d thng bo li hoc hon thnh lnh.

Client Gi lnh Nhn thng bo

Server Nhn lnh v thi hnh Gi thng bo hon thnh lnh hoc bo li

Client gi lnh n server v nhn v mt thng bo c d liu truyn Openning data port. Khi , client bt u nhn d liu trn knh d liu cho ti khi nhn c mt gi tin c di l 0.

88

Client Gi lnh Nhn thng bo Nhn d liu knh d liu ti khi gi tin c di l 0

Server Nhn lnh v thi hnh Gi thng bo c d liu cn truyn Gi ln lt cc gi tin kt thc bi mt gi c di l 0

Client gi lnh yu cu truyn tp ln server, server gi li thng bo chp nhn. Client ghi d liu cn truyn vo knh d liu, sau khi ghi xong, client ch i mt thng bo ca server trn knh iu khin truyn li s lng byte nhn v thng bo trn mn hnh ca ngi s dng. Qu trnh truyn nhn thng tin trn knh d liu cng c th c iu khin trc tip trn knh iu khin v d dng truyn.

Client Gi yu cu truyn d liu

Server Nhn lnh Gi thng bo chp nhn

Gi ln lt cc gi tin kt thc bi mt gi c di l 0 Nhn v thng bo vi ngi s dng s byte truyn

Nhn d liu knh d liu ti khi gi tin c di l 0 Thng bo s byte nhn

89

.III.1.2.

Ci t chng trnh

Chng trnh truyn tp c xy dng da trn m hnh client-server s dng th vin socket, giao thc lp di l giao thc hng kt ni TCP. Tin trnh server hot ng theo kiu ng thi (concurrent), server nghe cng 1998, khi c mt tin trnh client kt ni n, server nhn s hiu cng ca client, sinh tin trnh con phc v cn bn thn tin trnh cha tip tc quay li nghe. Tin trnh server phc v to mt kt ni lnh truyn lnh v mt kt ni d liu truyn cc khi d liu gia client v server. Phn server chy trn cc my ch Unix, Windows NT phc v cho phn client chy trn cc my Dos, Windows v Unix. Chng trnh hot ng gn ging FTP nhng c mt s tnh nng nng cao: Thc hin lnh t xa vi EXEC: Chng trnh server nhn lnh gi ti t client, thc hin lnh v gi tr kt qu vo knh truyn, chng trnh client c v hin th kt qu trn mn hnh ca ngi s dng. Thc hin lnh ca h iu hnh trn my trm !CMD: Mt s lnh ca h iu hnh c th c thc hin trn my trm, chng c tin trnh client gii quyt bng cch gi chng trnh thng dch ca h iu hnh. Kh nng thay i kch thc b m vi BUFSIZ kch thc ca b m c th c thay i bng cch thay i bin mi trng cha kch thc b m. Vic ny lm tng nng sut ca vic truyn thng tin trn mng.

90

Mt s thao tc vi th mc trn my ch nh to th mc, xo th mc c thc hin bng cch gi cc lnh ca h iu hnh Unix hoc nhng hm mc thp trong th vin ca C. Chng trnh cn cung cp mt s lnh lm vic trc tip vi tp nh OPEN, LSEEK, READ, WRITE... nhng lnh ny s dng th nhng li gi mc thp ca h thng. Sau y l nhng lnh ci t trn server Lnh M t EXEC command [option] Chy mt lnh Unix USER username [PASS ng nhp h thng password] PASSWD password CHPWD newpassword PORT portnumber ABORT PWD LIST [option] [directory] CHDIR [directory] MKDIR directory [mode] RMDIR directory UNLINK filename OPEN path openflag [mode] LSEEK fildes offset whence READ fildes nbytes WRITE fildes nbytes LOCKF fildes mode size CLOSE filedes TMPNAM [path[prefix]] PUT filename APPEND filename GET filename HELP UNIX TNET QUIT Nhp password i password ng k mt cng truyn d liu Loi b qu trnh truyn Lnh i th mc Lnh xem th mc Lnh i th mc To th mc mi Xo th mc Xo tp M tp Chuyn con tr tp c t tp Ghi tp Kho tp ng tp To mt tp tm thi Truyn tp ln my ch M tp append Ly tp t my ch Tr gip Hot ng mode Unix Hot ng mode Tnet Thot 91

UMASK [mode]

t mt n mode cho file

truyn FMODE filename Xem mode ca file FSIZE filename Xem di ca file BUFSIZ size_of_buffer t li kch thc cho b m REXEC host user passwd Chy mt lnh t xa command Phn client giao tip vi ngi s dng, nhn lnh, phn tch lnh, x l hoc gi cho server, nhn v tr kt qu li cho ngi s dng. (Vn bn chng trnh client c in trong phn ph lc C) .III.2. Mt s vn ny sinh trong qu trnh thc

hin v cch gii quyt .III.2.1. hnh. Do khi nim v tp v s qun l truy nhp hai h iu hnh DOS v UNIX c nhiu im khc nhau nn s chuyn i tp gia hai h iu hnh gp phi mt s vn . Cc tp tin trn DOS hon ton khng c cc thng tin v quyn s hu hay quyn truy nhp nn thng tin ny s b mt khi sao chp mt tp t my UNIX sang mt my DOS. Ngoi ra mt vn ht sc quan trng v cng kh c cch gii quyt ti u l vn tn tp. Tn tp trn UNIX c th di ti 14 k t (i vi UNIX System V) hoc hn na, cc k t c th l ch in hoa, ch thng hay cc k t c bit u c chp nhn. Cc th mc trong ng dn ca UNIX c phn cch bi du '/'. Trong khi tn tp ca DOS ch 92 Vn chuyn i tp gia hai h iu

c php di ti a 8 k t cng vi 3 k t ca phn m rng v b hn ch ton b l ch in hoa khng s dng ch thng cng vi hng lot du v k t c bit. Cc th mc trong ng dn c phn cch bi du '\'. Cho nn mt nh x 1-1 gia hai loi tn tp l khng th tn ti. Nu c mt hm no thc hin c nh x ny th sau khi chuyn mt tp t my UNIX ti my DOS, tn tp ch s hon ton xa l vi tn tp ngun gy ra kh khn cho ngi s dng. V d, ta mun c mt tin ch thc hin vic backup mt s tp trn my UNIX sang my DOS. Ta s n gin chuyn cc tp sang my DOS nhng khi cn chuyn cc tp ny v v tr c th ta khng th xc nh chnh xc v tr c ca tp v khng th phc hi li y tn ca tp. Nu dng mt hm no to ra nh x 1-1 th khi sao chp sang my DOS s to ra nhng tn tp c bit rt kh cho vic qun l. Vi bi ton ny UNIX c tin ch tar gii quyt bng cch gom tt c cc tp vo thnh mt tp km theo thng tin chi tit v tp , khi cn, c th phc hi li tp mt cch chnh xc. Nhng tin ch ny khng th p dng cho mi bi ton v d cn c v x l tp di mi trng DOS... C mt gii php tm thi cho vn ny l phi ct b phn ng sau ca tn tp trn UNIX. y cng chnh l gii php i vi tn tp di ca Windows 95 khi cc tp ny c truy nhp bi DOS 6.x (hoc cc phin bn DOS trc). Vi cch lm ny chng ta phi ch ti s trng tn

93

sau khi ct b phn ui v x l mt s k t c bit cn li. V d : Hai tp testdata001.dat v testdata002.dat C th s b ct thnh testdata.dat v hai tp s b trng tn nhau, mt trong hai tp s khng th tn ti. Mt gii php tng t nh trong Windows 95 s c s dng l chuyn hai tp trn thnh testda~1.dat v testda~2.dat Gii php t tn cho cc tp trn my UNIX tng t nh trn my DOS l mt gii php ti. N khng tn dng ti a kh nng ca h iu hnh l tn tp linh ng hn. Nhng ta nhn thy rng phng php ny i khi cng t ra c hiu qu i vi cc ng dng c bit. V d : phn m rng 3 k t ca tn tp c dng xc nh ni dung tp c dng kh rng ri trn c cc h iu hnh c tn tp di nh UNIX, Windows 95... Mt gii php khc l vic thay th h iu hnh DOS bng h iu hnh Windows 95. Trong Windows 95 tn tp c th di hn (ti 255 k t) v c th cha mt s k t m DOS khng cho php nh du trng, du chm... Vic chuyn i tn tp s n gin ch l x l mt s trng hp cc k t c bit. Vi s pht trin hin nay h iu hnh DOS ang dn b thay th bi Windows 95 (khng ch bi c tnh tn tp m bi nhiu tnh nng vt tri ca Windows 95) th vic thay th ny hon ton thch hp.

94

.III.2.2.

Vn v mt s lnh tng tc

V chng trnh c xy dng vi mc ch truyn file, cc giao thc c xy dng nhm hng ti s bo m tnh ton vn cho tp tin. Vic chy ng dng c giao cho h iu hnh, chng trnh ch lm nhim v truyn tham s dng lnh v nhn kt qu tr v. V l do , mt s lnh tng tc vi ngi dng (cn nhn thng tin t bn phm) khng th chy c vi lnh EXEC.

95

Ti liu tham kho


Tc gi Douglas E.Comer Andrew S.Tanenba um W.Richard Stevens Bill Rieken and Lyle Weiman Nguyn Thc Hi Tn sch Internetworking with TCP/IP Computer Network Unix Network Programming Unix Network Application Programming Nh xut bn Prentice-Hall International Prentice-Hall International Prentice-Hall International John Wiley & Sons Nm xut bn 1991 1988 1991 1992

Mng my tnh v Nh xut bn Gio cc h thng m Dc Mt s ti liu k thut ca CSE

1997

96

Ph lc A

Mt s k thut mng cc b

.I

Mng Ethernet v IEEE 802.3

Ethernet v IEEE 802.3 l hai chun ph bin nht trong kin trc mng cc b. Chng s dng cng ngh gi l CSMA/CD (Carrier Sense Multiple Access/Collision Detect). Multiple Access c ngha l mi my tnh v thit b mng c th truy cp ng truyn cng mt lc. Cng ngh Carrier Sense cho php cc thit b nhn bit khi no ng truyn ang bn. Trc khi thit b truyn thng tin, n kim tra ng truyn, nu ng truyn bn, n i mt khong thi gian ngu nhin no v tip tc. Nu ng truyn khng bn, n bt u truyn d liu ca mnh. Nu 2 trm cng truyn thng tin mt lc, d liu c th b ph hu (collision), Collision Detection iu khin thit b collision controller gi tn hiu jam signal bo cho mi thit b trn mng bit iu g ang sy ra. Nu gp collision, thit b i mt khong thi gian ngu nhin no tnh theo chu k ng h ca n v d mt s thit b i trong khong 1 255 nhp. Nu gp collision ln th hai, n i mt khong trong 1 - 511. Nu tip tc gp collision, thit b c gng thm 6 ln. Thi gian truyn thng tin trn mng Ethernet khng th xc nh c chnh xc v khng ai c th chc

97

rng gi thng tin khng b collision. Do vy, thng ngi ta khng dng Ethernet vi cc ng dng thi gian thc. Mt c tnh ca mng Ethernet na l n khng c c ch bo nhn, khi s dng vi TCP/IP dch v ny c tng transport (TCP) cung cp. .II Mng Token-Pasing Rings (IEEE 802.5)

Tolen-Pasing Rings cng l mt cng ngh mng cc b ph bin, vic iu khin lu thng trn mng ny c s dng bi mt c ch gi l th bi token. Token l mt gi tin c chuyn vng quanh mng, mi thit b ch c quyn truyn d liu khi n nhn c token.

98

WS

WS
Token

WS

WS Mt c tnh ch yu ca Mng Token-Pasing Rings l n phi c ni thnh vng, nu mt nt mng b li, ton b mng s ngng hot ng (i vi mng Ethernet ch mt ngng hot ng khi n b li). Nu mt my b tt, mng Mng Token-Pasing Rings vn cn giao din ca n truyn thng, Token-ring Interface board ly nng lng t cp mng hot ng. Khi th bi b mt, sau mt thi gian no , mt thit b iu khin s sinh mt th bi mi. .III Mng Token-Passing Busses (IEEE 802.4)

Token-Passing cn lm vic trn topo bus. Mt chun nh ngha cho mng ny l IEEE 802.4, l mt phn ca chun MAP (Manufacturing Automation Protocol). Chun ny s dng thit b Broadband khc vi Baseband s dng trong Ethernet v Token-ring. Baseband ch s dng mt tn hiu trn ng truyn trong khi broadband s dng nhiu knh truyn vi cc tn s tn hiu khc nhau trn ng truyn. Mt s mng Broadband s dng hai dy dn, mt truyn, mt nhn d liu. H thng khc li ch s dng 99

mt dy nhng dng 2 tn s khc nhau truyn v nhn. Thng thng tn s truyn v nhn to thnh mt cp tn s (tnh bng MHz) d chuyn i gia tn s gi v tn s nhn. Tuy s dng Broadband t v phc tp nhng n lm vic rt tt vi hnh nh analog v m thanh.

Baseband

Broadband

100

Ph lc B Mt s k thut chn ng i ti u
Vic chn con ng ti u truyn cc gi tin i trn mng phi thc hin mt s cng vic sau: Quyt nh chn ng theo nhng tiu chun ti u no . Cp nht thng tin chn ng. C mt s k thut chn ng ti u thng c s dng khi xy dng tng mng Chn ng tp trung c trng bi s tn ti ca mt s trung tm iu khin mng thc hin vic chn ng sau gi cc bng chn ng ti cc nt mng. Cc nt mng u n gi thng tin ca chng ti cc chung tm theo mt khong thi gian hoc khi c mt s kin no . Chn ng phn tn c thc hin ti mi nt ca mng. Vic ny i hi s trao i thng tin thng xuyn gia cc nt.

.I

Gii thut Dijkstra cho vic chn ng tp trung

Gii thut ny tm con ng c di (chi ph) cc tiu t mt nt ngun ti mi nt cn li ca mng Gi l(i,j) l di ca ng ni trc tip 2 nt i v j l(i,j) = nu khng tn ti ng ni Nk l tp hp to thnh bi k+1 phn t (ngun v k nt gn ngun nht sau k bc thc hin giai thut).

101

Dk l di t ngun ti nt n theo con ng ngn nht bao hm trong Nk Thut ton s dng cc bc quy sau: Bc 0 (khi ng) N0={1} D0(v)=l(1,v) v N0 Bc k (tnh v cp nht) Nk = Nk-1 {w} trong w tho mn biu thc Dk-1(w) = min Dk-1(v), v Nk-1 Dk(v) = min [Dk-1(v), Dk-1(w) + l(w,v)], v Nk Thut ton dng khi tt c cc nt nm trong N

.II

Gii thut Ford& Fulkerson cho vic chn ng

phn tn Gii thut ny cho php tm tt c cc con ng ngn nht t tt c cc nut ti mt ch chung. Sau k bc lp, mi nt c nh du bi cp gi tr (nk(v), Dk(v)) Dk(v) l di cc tiu (hin ti) t nt v ti ch nk(v) l nt tip theo (hin ti) trn con ng ti u t nt v ti ch, c tnh bc k. Bc 0 (khi ng) D0(1) = 0 v tt c cc nt c nh du (,) Bc k (tnh v cp nht) Vi mi v 1 (ch), cp nht Dk(v) nh sau: Dk(v) = min [Dk-1(w) + l(v,w)] wNv trong Nv l tp cc nt lng ging ca v. 102

Cp nht nk(v) nh sau: nk(v) = w1, vi w1 tho mn biu thc : Dk-1(w1) + l(v,w1) = min [Dk-1(w) + l(v,w)] wNv Thut ton dng khi tt cp gi tr nh du ca mi nt gi nguyn khng thay i na.

103

Ph lc C client)
.I

Vn bn chng trnh (phn

Chng trnh chnh (main.c)


<windows.h> <io.h> <stdio.h> <conio.h> <stdlib.h> <string.h> <winsock.h> <direct.h> <memory.h> "socket.h"

#include #include #include #include #include #include #include #include #include #include

int FAR PASCAL mInitTcpIp(void); int FAR PASCAL mMakeConnect(LPSTR host,int port); int mMakeDataConnect(SOCKET cmd_sock); BOOL NEAR PASCAL mReadMsg(SOCKET sock, char *recv); BOOL NEAR PASCAL mWriteMsg(SOCKET sock, char *buf); BOOL NEAR PASCAL mReadData(SOCKET sock, char *name); BOOL NEAR PASCAL mWriteData(SOCKET sock, char *name); char * GetWord(char * source, char * dest); int CmdAnalys(char * cmd); BOOL DoCmd(char *cmd); BOOL GetPass(char *cmd); BOOL GetUser(char *cmd); BOOL Login(); BOOL PutFile(char *cmd); BOOL GetFile(char *cmd); BOOL DoDisconnect(); BOOL DoConnect(); struct cmd_rec { short code; char cmd[16]; short data_expect; BOOL (*func)(char *cmd); }; #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define CMD_ABORT 1 CMD_APPEND CMD_BUFSIZE CMD_CHDIR 3 CMD_CHPWD 4 CMD_CLOSE 5 CMD_EXEC 6 CMD_FMODE 7 CMD_FSIZE 8 CMD_FSTAT 9 CMD_GET CMD_HELP 11 CMD_LIST 12 CMD_LOCKF 13 CMD_LSEEK 14 2 33

10

104

#define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define

CMD_MKDIR 15 CMD_OPEN 16 CMD_PASS 17 CMD_PORT 18 CMD_PUT CMD_PWD CMD_QUIT 21 CMD_READ 22 CMD_REXE 23 CMD_RMDIR 24 CMD_TMPNAM CMD_TNET 26 CMD_UMASK 27 CMD_UNIX 28 CMD_UNLINK CMD_USER 30 CMD_WRITE 31 CMD_HASH 35 CMD_DEL CMD_LCD CMD_LDIR 38 CMD_HOST 39 CMD_LHELP 40 CMD_DISCON

19 20

25

29

36 37

41

#define cmd_num 48 struct cmd_rec cmd_list[cmd_num] = { 1, "ABORT", 0, NULL, 2, "APPEND", 0, NULL, 33, "BUFSIZE", 0, NULL, 33, "BUFSIZ", 0, NULL, 3, "CHDIR", 0, NULL, 3, "CD", 0, NULL, 4, "CHPWD", 0, NULL, 5, "CLOSE", 0, NULL, 6, "EXEC", 1, NULL, 7, "FMODE", 0, NULL, 8, "FSIZE", 0, NULL, 9, "FSTAT", 0, NULL, 10, "GET", 1, NULL, 11, "H", 0, NULL, 11, "HELP", 0, NULL, 11, "?", 0, NULL, 12, "L", 1, NULL, 12, "LIST", 1, NULL, 12, "LS", 1, NULL, 13, "LOCKF", 0, NULL, 14, "LSEEK", 0, NULL, 15, "MKDIR", 0, NULL, 16, "OPEN", 0, NULL, 17, "PASS", 0, NULL, 17, "PASSWD", 0, NULL, 18, "PORT", 0, NULL, 19, "PUT", 2, NULL, 20, "PWD", 0, NULL, 21, "Q", 0, NULL, 21, "QUIT", 0, NULL, 22, "READ", 1, NULL,

105

23, 24, 25, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38, 39, 40, 41, 41, };

"REXE", 1, "RMDIR", 0, "TMPNAM", 0, "TNET", 0, "UMASK", 0, "UNIX", 0, "UNLINK", 0, "USER", 0, "WRITE", 2, "HASH", 0, "DEL", 0, "LCD", 0, "LDIR", 0, "HOST", 0, "LHELP", 0, "DIS", 0, "DISCONNECT",0,

NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL

int BUFF_SIZE = 1024; int HASH = 0; int connected = 0; SOCKET sock, data_sock; char cmd[DATA_LEN]; char tmp[DATA_LEN]; int port; char host[32]; int main( int argc, char *argv[ ]) { if ((argc < 2) | (argc > 3)){ printf("Usage: %s remote_host [remote_port]", argv[0]); return 2; } if (mInitTcpIp()) { printf("Error on init\n"); return 1; } if (argc == 3) { strcpy(host, argv[1]); port = atoi(argv[2]); } else port = 1998; DoConnect(); do { printf(">"); gets(cmd); CmdAnalys(cmd); } while (strnicmp(cmd, "q", 1) != 0); return 0; } char * GetWord(char * source, char * dest) { int i; char * cmdPtr = source; i = 0; while (*cmdPtr == ' ' && *cmdPtr != 0) cmdPtr++; while (*cmdPtr != ' ' && *cmdPtr != 0) { dest[i++] = *cmdPtr; cmdPtr++;

106

} dest[i] = 0; return cmdPtr; } int CmdAnalys(char * cmd) { int i = 0, ret = 1; char verb[8]; char *obj; obj = GetWord(cmd, verb); if (verb[0] == '#') { char *p; p = strchr(cmd, '#') + 1; DoCmd(p); return 0; } if (verb[0] == '!') { char *p; p = strchr(cmd, '!') + 1; sprintf(tmp, "command /c %s", p); system(tmp); return 0; } do { ret = stricmp(verb, cmd_list[i++].cmd); } while (ret && (i <= cmd_num)); if (i > cmd_num) { printf("XXXX Unknown command\n"); } else { i--; switch (cmd_list[i].code) { case CMD_PORT : printf("XXXX Unknown command\n"); break; case CMD_BUFSIZE : if (!connected) { printf("Not connected\n"); return 1; } mWriteMsg(sock, cmd); mReadMsg(sock, tmp); if (strncmp(tmp, "0000", 4) == 0) BUFF_SIZE = atoi(obj); break; case CMD_USER : if (!connected) { printf("Not connected\n"); return 1; } mWriteMsg(sock, cmd); mReadMsg(sock, tmp); if (strncmp(tmp, "1006", 4) == 0) Login(); break; case CMD_GET : if (!connected) { printf("Not connected\n"); return 1; } GetFile(cmd); break; case CMD_PUT :

107

if (!connected) { printf("Not connected\n"); return 1; } PutFile(cmd); break; case CMD_HASH : if (HASH) { HASH = 0; printf("Hash mark printing Off\n"); } else { HASH = 1; printf("Hash mark printing On (%i bytes/ hash mark)\n", BUFF_SIZE); } break; case CMD_LCD : { char path[MAX_PATH]; GetWord(obj, path); if (path[0] != 0) ret = _chdir(path); else ret = 0; if (ret) { printf("%s : File not found.\n", path); } else { printf("Local directory now %s\n", _getcwd(NULL, MAX_PATH)); } break; } case CMD_LDIR : break; case CMD_HOST : case CMD_OPEN : { char pc[8]; char *p; if (connected) { printf("Already connected to %s, use close first\n", host); } else { p = GetWord(obj, host); GetWord(p, pc); if (pc[0] != 0) { port = atoi(pc); } else port = 1997; DoConnect(); } break; } case CMD_LHELP : break; case CMD_HELP : printf("Not availble. Please type #help for more information.\n"); break; case CMD_DISCON : case CMD_CLOSE : if (!connected) { printf("Not connected\n"); return 1;

108

} DoDisconnect(); break; default: if (!connected) { printf("Not connected\n"); return 1; } DoCmd(cmd); } } return 0; } BOOL DoCmd(char *cmd) { mWriteMsg(sock, cmd); mReadMsg(sock, tmp); if (strncmp(tmp, "9001", 4) == 0) { tmp[0] = 0; mReadData(data_sock, tmp); mReadMsg(sock, tmp); } return 1; } BOOL GetPass(char *cmd) { char *p = cmd; char clr[2]; printf("Password:"); do { *p++ = (char)_getch(); if (*(p-1) == '\b') p -= 2; } while (*(p-1) != '\r'); *p = 0; gets(clr); return 1; } BOOL GetUser(char *cmd) { printf("User:"); gets(cmd); return 1; } BOOL Login() { GetPass((char *)tmp); sprintf(cmd, "pass %s", tmp); mWriteMsg(sock, cmd); mReadMsg(sock, tmp); if (strncmp(tmp, "0000", 4) == 0) data_sock = mMakeDataConnect(sock); return 1; } BOOL PutFile(char *cmd) {

109

char source[32], desti[32]; char *p; p = GetWord(cmd, source); p = GetWord(p, source); GetWord(p, desti); if (desti[0] == 0) strcpy(desti, source); sprintf(cmd, "PUT %s", desti); mWriteMsg(sock,cmd); mReadMsg(sock, tmp); if (strncmp(tmp, "9001 ", 5) == 0) { mWriteData(data_sock, source); mReadMsg(sock, tmp); } else { return 0; } return 1; } BOOL GetFile(char *cmd) { HFILE handle; char source[32], desti[32]; char *p; p = GetWord(cmd, source); p = GetWord(p, source); GetWord(p, desti); if (desti[0] == 0) strcpy(desti, source); if ((handle = _lcreat(desti, 0)) < 0) { printf("Could not creat file %s", desti); return FALSE; } _lclose(handle); sprintf(cmd,"GET %s", source); mWriteMsg(sock, cmd); mReadMsg(sock, tmp); if (memcmp(tmp, "9001", 4) != 0) { mReadMsg(sock, tmp); return 0; } else { mReadData(data_sock, desti); mReadMsg(sock, tmp); } return 1; } BOOL DoDisconnect() { sprintf(cmd, "QUIT"); mWriteMsg(sock, cmd); mReadMsg(sock, tmp); if (strncmp(tmp, "9999", 4) == 0) { data_sock = 0; sock = 0; connected = 0; } return 1; }

110

BOOL DoConnect() { sock = mMakeConnect(host, port); if (sock <= 0) printf("Could not make connect to %s\n", host); else { mReadMsg(sock, tmp); } connected = 1; GetUser(tmp); sprintf(cmd, "user %s", tmp); mWriteMsg(sock, cmd); mReadMsg(sock, tmp); Login(); return 1; }

.II

Th vin s dng (Socket.c)

/ ************************************************************************/ /***** CM *****/ /***** Module : SOCKET.C *****/ /***** Purposes : Provide socket doing functions *****/ /***** Date : 14-03-1998 *****/ / ************************************************************************/ #include #include #include #include #include #include #include #include #include #include <windows.h> <io.h> <stdio.h> <conio.h> <stdlib.h> <string.h> <winsock.h> <memory.h> <time.h> "socket.h"

#define TempFileName "C:\temp\temp.txt" #define USER_CONNECT (WM_USER + 100) char remote_host[SERV_LEN]; int remote_port = 1997; char user_log[USER_LEN]; char pass_log[PASS_LEN]; UINT mode_log; char lcTemp[DATA_LEN + 2]; char lcCmd[CMD_LEN]; struct sockaddr_in client_sockaddr; BOOL TCP_INIT = FALSE; struct timeval tv = {timeout, 0}; int FAR PASCAL mReadSocket(SOCKET sock,char *buffer,int len); int FAR PASCAL mWriteSocket(SOCKET sock,char *buffer,int len); int FAR PASCAL mInitTcpIp(void);

111

int mMakeDataConnect(); int FAR PASCAL mReadSocket(SOCKET sock,char *buffer,int len) { int i; fd_set fds; FD_ZERO(&fds); FD_SET(sock, &fds); if ((i = select(FD_SETSIZE, &fds, NULL, NULL, &tv)) < 0 && errno != WSAEINTR) return(i); if (!i) return(0); return (recv(sock, buffer, len, NO_FLAGS_SET)); } int FAR PASCAL mWriteSocket(SOCKET sock, char *buffer, int len) { int i; fd_set fds; FD_ZERO(&fds); FD_SET(sock, &fds); if ((i = select(FD_SETSIZE, NULL, &fds, NULL, &tv)) < 0 && (errno ! = WSAEINTR)) return(i); if (!i) return(i); return(send(sock, buffer, len, NO_FLAGS_SET)); } /***********************************************************/ /*** CM Function : mReadMsg */ /*** Purposes : Read a complete message from server with */ /*** checking size of message */ /***********************************************************/ BOOL NEAR PASCAL mReadMsg(SOCKET sock, char *recv) { char tmp[DATA_LEN + 7]; unsigned char tmp1[4]; BOOL loop; int i, first; int total_read = 0, total_send = 0; *recv = 0; loop = TRUE; first = 1; do { if (first == 1) { i = mReadSocket(sock, tmp1, SIZE_LEN); if (i <= 0) loop = FALSE; first = 2; total_send = tmp1[0] + 256 * tmp1[1]; if (total_send == 0) loop = FALSE; total_read = 0; } else { i = mReadSocket(sock, tmp, min(DATA_LEN, total_send-total_read)); if (i < 0) { #ifdef EXPECT_RET *tmp = (char) CAN;

112

mWriteSocket(sock, tmp, 1); #endif return FALSE; } if (i == 0) loop = FALSE; total_read += i; if (total_read >= total_send) loop = FALSE; tmp [i] = '\0'; strcat(recv, tmp); printf("%s", recv); if (first == 2) { if (memcmp(tmp, "9998", 4) == 0) { loop = FALSE; exit(1); } } else first = 0; } } while (loop); #ifdef EXPECT_RET *tmp = (char) ACK; mWriteSocket(sock, tmp, 1); #endif return TRUE; } /***********************************************************/ /*** CM Function : mReadData */ /*** Purposes : Read a huge amount of data from server */ /*** and put it in a file */ /***********************************************************/ BOOL NEAR PASCAL mReadData(SOCKET sock, char *name) { char tmp[DATA_LEN + 7]; unsigned char tmp1[4]; BOOL loop; int i, first; int total_read, total_send, len; unsigned long rbyte = 0L; char ret[1]; double mtime, av; time_t before, post; HFILE handle; if (name[0] != 0) { if ((handle = _lcreat(name, 0)) < 0) return FALSE; } else handle = 1; time(&before); loop = TRUE; first = 1; do { if (first == 1) { do { i = mReadSocket(sock, tmp1, SIZE_LEN); if (i <= 0) return FALSE; } while (i != SIZE_LEN); first = 2; total_send = tmp1[0] + 256 * tmp1[1]; if (total_send == 0) { #ifdef EXPECT_RET *ret = (char) ACK;

113

mWriteSocket(sock, ret, 1); #endif loop = FALSE; } total_read = 0; } else { len = min(BUFF_SIZE, total_send - total_read); do { i = mReadSocket(sock, tmp, len); if (i < 0) { #ifdef EXPECT_RET *ret = (char) CAN; mWriteSocket(sock, ret, 1); #endif return FALSE; } } while (i == 0); total_read += i; rbyte += i; if (total_read >= total_send) { #ifdef EXPECT_RET *ret = (char) ACK; mWriteSocket(sock, ret, 1); #endif first = 1; } tmp[i] = 0; if (handle == 1) printf("%s", tmp); else { _lwrite(handle, tmp, i); if (HASH) putchar('#'); } if (first == 2 || first == 1) { if (memcmp(tmp,"9998",4) == 0) { loop = FALSE; return FALSE; } } else first = 0; } } while (loop); if (handle != 1) _lclose(handle); time(&post); mtime = difftime(post, before); av = rbyte/mtime; printf("\nTransfered %d bytes in %.2f second(s) (%.0f bytes/s)\n", rbyte, mtime, av); return TRUE; } /***********************************************************/ /*** CM Function : mWriteMsg */ /*** Purposes : Write a complete message to server with 2 */ /*** bytes size of message */ /***********************************************************/ BOOL NEAR PASCAL mWriteMsg(SOCKET sock, char *buf) { char cmd_and_size[DATA_LEN]; int l; l = strlen(buf);

114

memcpy(cmd_and_size,(char *)&l, SIZE_LEN); memcpy(cmd_and_size + SIZE_LEN, buf, l); if (mWriteSocket(sock, cmd_and_size, l + SIZE_LEN) <= 0) { exit(1); } #ifdef EXPECT_RET if (mReadSocket(sock, cmd_and_size, 1) < 0) { exit(1); } else if (*cmd_and_size != ACK) { exit(1); } #endif return TRUE; } BOOL NEAR PASCAL mWriteData(SOCKET sock, char *name) { char tmp[DATA_LEN+ SIZE_LEN]; int len, ret; HFILE handle; char cmd_and_size[DATA_LEN + SIZE_LEN]; unsigned long wbyte = 0L, count = 0L; double mtime, av; time_t before, post; time(&before); handle = _lopen(name, OF_READ); if (handle < 0) return (FALSE); do { len = _lread(handle, tmp, BUFF_SIZE - 2); if (len > 0) { wbyte += len; memcpy(cmd_and_size, (char *)&len, SIZE_LEN); memcpy(cmd_and_size + SIZE_LEN, tmp, len); if ((ret = mWriteSocket(sock, cmd_and_size, len + SIZE_LEN)) <= 0) { if (WSAGetLastError() == WSAEWOULDBLOCK) printf("Error number is %i errno WSAEWOULDBLOCK ", ret); else printf("Error number is %i errno %i", ret, WSAGetLastError()); closesocket(sock); _lclose(handle); exit(1); } #ifdef EXPECT_RET if (mReadSocket(sock, cmd_and_size, 1) < 0) { _lclose(handle); return FALSE; } else if (*cmd_and_size != ACK) { _lclose(handle); return FALSE; } #endif if (HASH) printf("#"); } } while (len == BUFF_SIZE - 2);

115

len = 0; memcpy(cmd_and_size,(char *)&len, SIZE_LEN + 2); mWriteSocket(sock, cmd_and_size, SIZE_LEN); #ifdef EXPECT_RET if (mReadSocket(sock, cmd_and_size, 1) < 0) { _lclose(handle); return FALSE; } else if (*cmd_and_size != ACK) { _lclose(handle); return FALSE; } #endif _lclose(handle); time(&post); mtime = difftime(post, before); av = wbyte/mtime; printf("\nTransfered %d bytes in %.2f second(s) (%.0f bytes/s)\n", wbyte, mtime, av); return TRUE; } /* Inittialize tcp ip */ int FAR PASCAL mInitTcpIp(void) { WSADATA WSAData; int status; if ((status = WSAStartup(MAKEWORD(1,1), &WSAData)) != 0) { printf("TCP/IP Error: %d is the err", status); TCP_INIT = FALSE; } else TCP_INIT = TRUE; return status; } int FAR PASCAL mMakeConnect(LPSTR host,int port) { struct hostent* h; struct sockaddr_in sin; int sock; unsigned long hostaddr; int ret; if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { return -1; } hostaddr = inet_addr(host); memset(&sin,0, sizeof(sin)); if ((long)hostaddr != -1L) { memcpy(&sin.sin_addr,&hostaddr,sizeof(hostaddr)); } else { if ((h = gethostbyname(host)) == 0) { closesocket(sock); return -1; } memcpy(&sin.sin_addr,h->h_addr,h->h_length); } sin.sin_family = AF_INET; sin.sin_port = htons((unsigned short)port);

116

if (connect(sock,(struct sockaddr FAR *)&sin, sizeof(sin)) < 0) { ret = errno; if (ret == -2){ struct timeval tv; fd_set fds; tv.tv_sec = timeout; tv.tv_usec = 0; FD_ZERO(&fds); FD_SET(sock, &fds); if ((select(FD_SETSIZE, NULL, &fds, NULL, &tv)) <= 0) { return -1; } return sock; } closesocket(sock); return -1; } return sock; } int mStopConnect(int sock) { shutdown(sock, 2); closesocket(sock); return 0; } int mMakeDataConnect(SOCKET cmd_sock) { struct sockaddr_in server_sockaddr; int server_socket, ret_socket; int i; memset(&server_sockaddr,0,sizeof(server_sockaddr)); server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); server_socket = socket(AF_INET,SOCK_STREAM,0); if (server_socket < 0) { return -1; } if (bind(server_socket,(struct sockaddr FAR *)&server_sockaddr,sizeof(server_sockaddr)) < 0) { closesocket(server_socket); return -1; } i = sizeof(client_sockaddr); if (getsockname(server_socket,(struct sockaddr FAR *)&client_sockaddr,&i) < 0) return(-1); listen(server_socket,5); sprintf(lcCmd, "PORT %d", ntohs(client_sockaddr.sin_port)); mWriteMsg(cmd_sock, lcCmd); ret_socket = accept(server_socket,(struct sockaddr FAR *)&client_sockaddr,&i); mReadMsg(cmd_sock, lcTemp); return ret_socket; } int mStopDataConnect(int data_sock)

117

{ shutdown(data_sock, 2); closesocket(data_sock); return 0; } /***********************************************************/ /*** CM Function : mDoneTcpIp */ /*** Purposes : Cleanup tcp ip will unload winsock.dll */ /***********************************************************/ int FAR PASCAL mDoneTcpIp(void) { if (TCP_INIT) { TCP_INIT = FALSE; return WSACleanup(); } return -1; }

118

You might also like