You are on page 1of 101

LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Ch−¬ng I. M¹ng m¸y tÝnh

I. M¹ng m¸y tÝnh ........................................................................................... 5


II. Ph©n lo¹i m¹ng m¸y tÝnh .......................................................................... 5
II.1. Ph©n lo¹i theo kiÕn tróc (topology) cña m¹ng................................... 5
II.1.1. M¹ng ®iÓm-®iÓm (point-to-point network) ................................ 6
II.1.2. M¹ng qu¶ng b¸ (broadcast network) .......................................... 6
II.2. Ph©n lo¹i theo ph−¬ng thøc chuyÓn m¹ch (Swiched Method) .......... 7
II.2.1. ChuyÓn m¹ch kªnh (Circuit Swiched Network) ......................... 7
II.2.2. ChuyÓn m¹ch tin b¸o (Message Swiched Network) ................... 7
II.2.3. ChuyÓn m¹ch gãi (Packed Swiched Network) ........................... 7
II.3. Ph©n lo¹i theo ph¹m vi ho¹t ®éng...................................................... 7
II.3.1. M¹ng LAN (Local Area Network) ............................................. 7
II.3.2. M¹ng MAN (Metropolian Area Network) ................................. 7
II.3.3. M¹ng WAN (Wide Area Network) ............................................ 8
II.3.4. Liªn m¹ng (internet) ................................................................... 8

Ch−¬ng II. Giao thøc truyÒn th«ng vμ c¸c m« h×nh


tham chiÕu

I. Giao thøc truyÒn th«ng............................................................................. 11


II. M« h×nh tham chiÕu OSI......................................................................... 11
II.1. Giíi thiÖu m« h×nh OSI.................................................................... 11
II.2. C¸c tÇng cña m« h×nh OSI ............................................................... 13
II.2.1. TÇng vËt lý (Physical layer)...................................................... 13
II.2.2. TÇng liªn kÕt d÷ liÖu (Data link layer)...................................... 13
II.2.3. TÇng m¹ng (Network layer) ..................................................... 14
II.2.4. TÇng giao vËn (Transport layer) ............................................... 14
II.2.5. TÇng phiªn (Session layer) ....................................................... 15
II.2.6. TÇng tr×nh diÔn (Presentation layer) ......................................... 15
II.2.7. TÇng øng dông (Application layer) .......................................... 15
II.3. Nh÷ng vÊn ®Ò vÒ OSI ....................................................................... 16
III. KiÕn tróc giao thøc IPX/SPX................................................................. 16
III.1. KiÕn tróc giao thøc IPX/SPX.......................................................... 16
III.2. Gãi tin IPX ..................................................................................... 17
III.3. C¬ chÕ ho¹t ®éng cña Novell Netware ........................................... 18

Ch−¬ng III. Bé Giao thøc TCP/IP

I. Bé giao thøc TCP/IP................................................................................. 19


II. KiÕn tróc cña bé giao thøc TCP/IP ......................................................... 20
II.1. KiÕn tróc ph©n tÇng cña TCP/IP ...................................................... 20

1
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

II.2. C¬ chÕ ®Þa chØ Internet..................................................................... 23


II.2.1. §Þa chØ líp A............................................................................. 24
II.2.2. §Þa chØ líp B ............................................................................. 25
II.2.3. §Þa chØ líp C............................................................................. 25
II.3. M¹ng con vµ Subnet mask ............................................................... 25
III. TÇng m¹ng (Network Layer) ................................................................. 27
IV. TÇng Internet (Internet Layer) ............................................................. 28
IV.1. Gãi tin IP ........................................................................................ 29
IV.2. Giao thøc chuyÓn ®Þa chØ ARP (Address Resolution Protocol) vµ
c¬ giao thøc chuyÓn ng−îc ®Þa chØ RARP (Reverse Address Resolution
Protocol) .................................................................................................. 32
IV.2.1. ChuyÓn giao trùc tiÕp .............................................................. 32
IV.2.2. ChuyÓn giao ®Þa chØ ®éng ....................................................... 32
IV.2.3. Gãi tin ARP............................................................................. 33
IV.3. Giao thøc ®iÒu khiÓn truyÒn tin (Internet Control Message Protocol
- ICMP).................................................................................................... 35
IV.3.1. Gãi tin ICMP........................................................................... 35
IV.3.2. §iÒu khiÓn dßng d÷ liÖu.......................................................... 36
IV.3.3. Th«ng b¸o lçi .......................................................................... 36
IV.3.4. §Þnh h−íng l¹i ........................................................................ 36
IV.3.5. KiÓm tra tr¹m lµm viÖc............................................................ 37
IV.4. ThuËt to¸n dÉn ®−êng..................................................................... 37
V. tÇng giao vËn........................................................................................... 41
V.1. Giao thøc kh«ng kÕt nèi (User Datagram Protocol - UDP)............. 41
V.1.1. Gãi th«ng tin UDP.................................................................... 41
V.1.2. Ph©n kªnh, hîp kªnh vµ Ports................................................... 42
V.2. Giao thøc ®iÒu khiÓn truyÒn tin (Transmission Control Protocol -
TCP)......................................................................................................... 44
V.2.1. Gãi tin TCP............................................................................... 46
V.2.2. Cæng, kÕt nèi vµ ®iÓm kÕt nèi................................................... 47
VI. TÇng øng dông cña TCP/IP ................................................................... 49
VI.1. DÞch vô tªn miÒn (Domain Name Service - DNS) ......................... 49
VI.2. §¨ng nhËp tõ xa (Telnet) ............................................................... 51
VI.3. Th− ®iÖn tö (Electronic Mail) ........................................................ 52
VI.4. Giao thøc truyÒn tÖp (File Transfer Protocol - FTP) ...................... 54
VI.5. Nhãm tin (News groups)................................................................ 55
VI.6. T×m kiÕm tÖp (Archie).................................................................... 55
VI.7. Tra cøu th«ng tin theo thùc ®¬n (Gopher) ..................................... 55
VI.8. T×m kiÕm th«ng tin theo chØ sè (WAIS)......................................... 55
VI.9. Siªu v¨n b¶n (WWW) .................................................................... 56

2
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Ch−¬ng IV. X©y dùng ch−¬ng tr×nh truyÒn tÖp

I. Giao diÖn lËp tr×nh.................................................................................... 57


I.1. Giao diÖn lËp tr×nh ............................................................................ 57
I.2. Network I/O vµ file I/O ..................................................................... 58
I.3. Lµm viÖc víi Socket .......................................................................... 59
I.3.1. Socket ......................................................................................... 59
I.3.2. §Þa chØ Socket ............................................................................ 60
I.3.3. Mét sè lêi gäi t¹o lËp socket...................................................... 62
I.3.4. Mét sè lêi gäi göi d÷ liÖu qua socket......................................... 66
I.3.5. Mét sè lêi gäi nhËn d÷ liÖu tõ socket......................................... 67
II. M« h×nh Client-Server ............................................................................ 68
II.1. M« h×nh Client-Server sö dông dÞch vô kh«ng kÕt nèi.................... 69
II.2. M« h×nh Client-Server sö dông dÞch vô h−íng kÕt nèi.................... 70
III. X©y dùng ch−¬ng tr×nh truyÒn tÖp......................................................... 71
III.1. ThiÕt kÕ vµ cµi ®Æt ch−¬ng tr×nh ..................................................... 71
III.1.1. Giao thøc øng dông ®−îc x©y dùng vµ sö dông trong ch−¬ng
tr×nh ..................................................................................................... 71
III.1.2. Cµi ®Æt ch−¬ng tr×nh ................................................................ 73
III.2. Mét sè vÊn ®Ò n¶y sinh trong qu¸ tr×nh thùc hiÖn vµ c¸ch gi¶i quyÕt76
III.2.1. VÊn ®Ò chuyÓn ®æi tÖp gi÷a hai hÖ ®iÒu hµnh. ........................ 76
III.2.2. VÊn ®Ò vÒ mét sè lÖnh t−¬ng t¸c ............................................. 78

Phô lôc a. Mét sè m¹ng côc bé

I. M¹ng Ethernet vµ IEEE 802.3 ................................................................. 81


II. M¹ng Token-Pasing Rings (IEEE 802.5)............................................... 81
III. M¹ng Token-Passing Busses (IEEE 802.4)........................................... 82

Phô lôc B. Mét sè kü thuËt chän ®−êng ®i ng¾n nhÊt

I. Gi¶i thuËt Dijkstra cho viÖc chän ®−êng tËp trung .................................. 84
II. Gi¶i thuËt Ford& Fulkerson cho viÖc chän ®−êng ph©n t¸n .................. 85

Phô lôc C. V¨n b¶n ch−¬ng tr×nh (PhÇn client)

I. Ch−¬ng tr×nh chÝnh (main.c) .................................................................... 87


II. Th− viÖn sö dông (Socket.c) ................................................................... 93

3
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

4
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Ch−¬ng I . M¹ng m¸y tÝnh

I. M¹ng m¸y tÝnh

M¹ng m¸y tÝnh lµ hÖ thèng c¸c m¸y tÝnh ®éc lËp (autonomous) ®−îc kÕt nèi
víi nhau. Kh¸i niÖm ®éc lËp ë ®©y cã nghÜa lµ chóng kh«ng cã mèi quan hÖ
chñ/tí (master/slave) râ rµng. Hai m¸y tÝnh ®−îc gäi lµ ®−îc kÕt nèi víi nhau
nÕu chóng cã kh¶ n¨ng trao ®æi th«ng tin. Sù kÕt nèi cã thÓ th«ng qua d©y
dÉn, tia laser, sãng ®iÖn tõ hay vÖ tinh viÔn th«ng... ViÖc kÕt nèi c¸c m¸y tÝnh
cã nh÷ng −u ®iÓm sau
• Sö dông chung tµi nguyªn (resource sharing): Ch−¬ng tr×nh, d÷ liÖu, thiÕt
bÞ cã thÓ ®−îc dïng chung bëi ng−êi dïng tõ c¸c m¸y tÝnh trªn m¹ng.
• T¨ng ®é tin cËy cña hÖ thèng th«ng tin (reliability): NÕu mét m¸y tÝnh
hay mét ®¬n vÞ d÷ liÖu nµo ®ã bÞ háng th× lu«n cã thÓ sö dông mét m¸y
tÝnh kh¸c hay mét b¶n sao kh¸c cña d÷ liÖu, nhê ®ã, kh¶ n¨ng m¹ng bÞ
ngõng sö dông ®−îc gi¶m thiÓu.
• T¹o ra m«i tr−êng truyÒn th«ng m¹nh gi÷a nhiÒu ng−êi sö dông trªn
ph¹m vi ®Þa lý réng: Môc tiªu nµy ngµy cµng trë nªn quan träng nhÊt lµ
khi m¹ng m¸y tÝnh ®· ph¸t triÓn trªn ph¹m vi toµn cÇu nh− ngµy nay.
• TiÕt kiÖm chi phÝ: Do tµi nguyªn ®−îc dïng chung, hÖ thèng tin cËy h¬n
nªn chi phÝ thiÕt bÞ vµ b¶o d−ìng cña m¹ng m¸y tÝnh thÊp h¬n so víi
tr−êng hîp m¸y tÝnh riªng lÎ.

II. Ph©n lo¹i m¹ng m¸y tÝnh

II.1. Ph©n lo¹i theo kiÕn tróc (topology) cña m¹ng


Ph©n lo¹i theo kiÕn tróc lµ c¸ch ph©n lo¹i m¹ng m¸y tÝnh theo c¸ch kÕt nèi c¸c
m¸y tÝnh trong m¹ng

5
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

II.1.1. M¹ng ®iÓm-®iÓm (point-to-point network)


C¸c ®−êng truyÒn nèi c¸c cÆp nót víi nhau, mçi nót cã tr¸ch nhiÖm l−u tr÷
t¹m thêi sau ®ã chuyÓn tiÕp d÷ liÖu tíi ®Ých. C¸ch lµm viÖc nµy cßn gäi lµ l−u
vµ chuyÓn tiÕp (store-and-forward). M¹ng ®iÓm-®iÓm cÇn sö dông l−îng c¸p
nèi lín hoÆc nhiÒu ®−êng ®iÖn tho¹i thuª riªng (leased telephone lines), mçi
®−êng nèi mét cÆp ®iÓm lµm viÖc. NÕu 2 ®iÓm lµm viÖc muèn göi th«ng tin
cho nhau mµ kh«ng cã ®−êng truyÒn trùc tiÕp, d÷ liÖu cña chóng cÇn ®−îc
truyÒn qua mét sè nót kh¸c do ®ã, thuËt to¸n dÉn ®−êng cã vai trß rÊt quan
träng trong kiÕn tróc m¹ng ®iÓm-®iÓm.

Star Ring Tree

II.1.2. M¹ng qu¶ng b¸ (broadcast network)


TÊt c¶ c¸c nót cïng dïng chung mét ®−êng truyÒn vËt lý. D÷ liÖu ®−îc tiÕp
nhËn bëi tÊt c¶ c¸c m¸y tÝnh, nÕu m¸y tÝnh nµo kiÓm tra thÊy gãi tin ®−îc göi
cho m×nh, nã sÏ gi÷ l¹i vµ xö lý. C¸c m¹ng qu¶ng b¸ th−êng cho phÐp sö dông
®Þa chØ broadcasting ®Ó göi th«ng b¸o tíi toµn m¹ng.

Bus Satellite Ring

6
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

II.2. Ph©n lo¹i theo ph−¬ng thøc chuyÓn m¹ch (Swiched Method)

II.2.1. ChuyÓn m¹ch kªnh (Circuit Swiched Network)


Th«ng tin truyÒn qua mét kªnh vËt lý cè ®Þnh, tèc ®é vµ ®é tin cËy cao nh−ng
l·ng phÝ ®−êng truyÒn do kh«ng sö dông hÕt.

II.2.2. ChuyÓn m¹ch tin b¸o (Message Swiched Network)


Liªn l¹c ®−îc thiÕt lËp khi cã th«ng tin cÇn truyÒn, th«ng tin ®−îc ®Þnh d¹ng
gåm header vµ data vµ cã ®é dµi kh«ng cè ®Þnh: Mèi liªn l¹c ®−îc thiÕt lËp vµ
chØ gi¶i phãng khi truyÒn xong d÷ liÖu do ®ã kh«ng qu¶n lý ®−îc thêi gian
chiÕm ®−êng truyÒn

II.2.3. ChuyÓn m¹ch gãi (Packed Swiched Network)


Th«ng tin ®−îc c¾t ra thµnh c¸c gãi cã ®é dµi quy ®Þnh VÝ dô Erthenet IEEE
802.3 chia message thµnh c¸c gãi 1500 bytes. Mçi gãi ®Òu cã header vµ data.
C¸c gãi cña c¸c message kh¸c nhau cã thÓ truyÒn xen kÏ trªn ®−êng truyÒn do
®ã thêi gian chê ®îi chung cña hÖ thèng gi¶m.

II.3. Ph©n lo¹i theo ph¹m vi ho¹t ®éng


Theo ph¹m vi ho¹t ®éng, ng−êi ta chia m¹ng m¸y tÝnh thµnh nh÷ng lo¹i sau

II.3.1. M¹ng LAN (Local Area Network)


Th−êng lµ m¹ng ®−îc sö dông cho mét c«ng ty, tr−êng häc hay trong mét toµ
nhµ, kho¶ng c¸ch t−¬ng ®èi nhá (cì vµi tr¨m m tíi vµi Km) tèc ®é truyÒn lín,
®é trÔ nhá.
(Phô lôc A tr×nh bµy mét sè m¹ng côc bé th−êng ®−îc sö dông)

II.3.2. M¹ng MAN (Metropolian Area Network)


M¹ng ®−îc cµi ®Æt trong ph¹m vi mét ®« thÞ hay trung t©m kinh tÕ - x· héi (cã
b¸n kÝnh kho¶ng 100 Km)

7
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

II.3.3. M¹ng WAN (Wide Area Network)


M¹ng diÖn réng cã thÓ bao trïm mét vïng réng lín cì quèc gia hay lôc ®Þa.

II.3.4. Liªn m¹ng (internet)


PhÇn lín c¸c m¹ng côc bé ®Òu ®éc lËp víi nhau vÒ phÇn cøng còng nh− phÇn
mÒm, chóng ®−îc thiÕt lËp nh»m môc ®Ých phôc vô nh÷ng nhãm ng−êi cô thÓ
nµo ®ã. Trong mçi m¹ng ®ã, ng−êi dïng tù lùa chän mét c«ng nghÖ phÇn
cøng phï hîp víi c«ng viÖc cña hä. Mét ®iÒu quan träng n÷a lµ kh«ng thÓ x©y
dùng mét m¹ng chung dùa trªn mét c«ng nghÖ sö dông trªn mét m¹ng ®¬n lÎ
nµo ®ã bëi v× kh«ng cã c«ng nghÖ m¹ng nµo cã thÓ tho¶ m·n nhu cÇu cho tÊt
c¶ mäi ng−êi. Mét sè ng−êi cã nhu cÇu sö dông ®−êng nèi cao tèc ®Ó truyÒn
d÷ liÖu cña m×nh trong khi c¸c m¹ng LAN kh«ng thÓ më réng ph¹m vi ho¹t
®éng qu¸ xa. Mét sè m¹ng tèc ®é chËm l¹i cã thÓ kÕt nèi m¸y tÝnh tíi hµng
ngµn dÆm...
Liªn m¹ng m¸y tÝnh (internetworking hay internet) lµ mét c«ng nghÖ ®−îc
®−a ra nh»m kÕt nèi c¸c m¹ng thµnh mét thÓ thèng nhÊt. C«ng nghÖ internet
che dÊu ®i kiÕn tróc vËt lý cña m¹ng vµ cho phÐp m¸y tÝnh truyÒn th«ng mét
c¸ch ®éc lËp víi liªn kÕt vËt lý cña m¹ng. Mét liªn m¹ng ®· kh¸ quen thuéc
víi chóng ta lµ m¹ng Internet
Giíi thiÖu m¹ng Internet
Internet lµ mét tæ hîp hµng triÖu m¸y ®−îc kÕt nèi víi nhau th«ng qua c¸c
thiÕt bÞ ghÐp nèi th−êng gäi lµ gateway ®Ó cã thÓ chia sÎ th«ng tin víi nhau,
trong ®ã cã ®ñ lo¹i m¸y tÝnh, vµ chóng sö dông nhiÒu hÖ ®iÒu hµnh kh¸c nhau.
Th«ng tin trªn Internet gåm ®ñ lo¹i tõ th− ®iÖu tö, c¸c file ®å ho¹ ®Õn video vµ
cßn nhiÒu thø kh¸c ®−îc cung cÊp bëi nh÷ng ng−êi sö dông Internet b»ng
nhiÒu ph−¬ng thøc, víi nhiÒu t− t−ëng kh¸c nhau.
Quy m« cña Internet
Cã bao nhiªu m¸y ®−îc kÕt nèi vµo Internet? Con sè cô thÓ lu«n lu«n thay
®æi, nh÷ng ®Þa chØ míi lu«n lu«n ®−îc cËp nhËt tõng gi©y chóng ta cã thÓ truy
nhËp ®Þa chØ Web site cña tæ chøc Network Wizards

8
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

http://www.nw.com/zone/WWW/top.html
®Ó biÕt nh÷ng sè liÖu míi nhÊt

Thêi gian Sè l−îng m¸y


Th¸ng 1 n¨m 1996 14,252,000
Th¸ng 1 n¨m 1997 21,819,000
Th¸ng 1 n¨m 1998 29,670,000

Nh÷ng m¸y chñ (host) m¹nh th−êng sö dông nh÷ng hÖ ®iÒu hµnh ®a nhiÖm, vÝ
dô nh− UNIX, ®Ó ng−êi sö dông kÕt nèi vµo, nh− thÕ cã nghÜa lµ sè m¸y cña
ng−êi sö dông m¹ng nhiÒu h¬n nh÷ng con sè trªn. Nh÷ng m¸y chñ ®−îc ®Þnh
vÞ t¹i c¸c ®iÓm nh− th− viÖn, c¸c tr−êng ®¹i häc, c¸c tæ chøc chÝnh phñ, c¸c
®¹i lý, c¸c c«ng ty, c¸c tr−êng trung häc, tiÓu häc trªn toµn thÕ giíi. Nh÷ng
m¸y chñ nµy ®−îc kÕt nèi víi nhau qua ®−êng ®iÖn tho¹i vµ chØ mÊt kho¶ng
640/1000 gi©y ®Ó b¾t ®Çu nhËn th«ng b¸o tõ B¾c Mü tíi Nam cùc.
C¸c dÞch vô mµ Internet cung cÊp
PhÇn lín ng−êi sö dông Internet kh«ng cÇn biÕt ®Õn cña c«ng nghÖ sö dông
trªn Internet, ®èi víi hä Internet chØ ®¬n gi¶n lµ mét bé ch−¬ng tr×nh phÇn
mÒm mang l¹i cho hä nh÷ng kh¶ n¨ng truyÒn th«ng cã Ých. ChÝnh ®iÒu nµy
mang l¹i cho Internet sè ng−êi dïng ®«ng ®¶o tíi nh− vËy.
C¸c dÞch vô møc øng dông ban ®Çu trªn Internet

• Th− ®iÖn tö (Electronic mail) Cho phÐp ng−êi dïng ngåi tr−íc m¸y tÝnh t¹i
nhµ m×nh göi E-mail tíi bÊt cø ai ë ®©u trªn thÕ giíi nÕu hä cã ®Þa chØ E-
mail. Hä cã thÓ tham gia c¸c nhãm th¶o luËn (discussion group) vÒ nh÷ng
®Ò tµi kh¸c nhau hay b¾t ®Çu mét nhãm míi vÒ nh÷ng chñ ®Ò mµ hä −a
thÝch.
• TruyÒn file (File Transfer) NÕu cÇn mét ch−¬ng tr×nh phÇn mÒm míi nh−
c¸c tiÖn Ých nÐn file, c¸c ch−¬ng tr×nh diÖt virus, mét phÇn mÒm trß ch¬i,
h×nh ¶nh hay ©m thanh, ng−êi dïng cã thÓ t¶i xuèng bÊt cø lóc nµo víi File
Transfer.

9
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• Truy nhËp tõ xa (Remote login) Cã lÏ ®iÒu thó vÞ nhÊt trong c¸c øng dông
cña Internet lµ Remote login, nã cho phÐp ng−êi dïng kÕt nèi vµo mét m¸y
tÝnh ë xa nh− mét tr¹m cuèi ®Ó sö dông m¸y tÝnh ®ã.
DÞch vô møc m¹ng cña Internet
Mét lËp tr×nh viªn viÕt ch−¬ng tr×nh øng dông trªn Internet cÇn cã mét c¸i
nh×n kh¸c víi ng−êi chØ ®¬n gi¶n sö dông dÞch vô Internet. ë tÇng m¹ng,
Internet cung cÊp 2 kiÓu dÞch vô mµ c¸c øng dông cña Internet th−êng dïng
®ã lµ
• DÞch vô truyÒn kh«ng kÕt nèi (Connectionless Paket Delivery Service) lµ
mét ph−¬ng thøc truyÒn d÷ liÖu mµ c¸c m¹ng chuyÓn m¹ch gãi cung cÊp.
§iÒu nµy chØ ®¬n gi¶n lµ m¹ng Internet chuyÓn c¸c gãi tin tõ m¸y nµy sang
m¸y kh¸c dùa vµo th«ng tin ®Þa chØ cña gãi ®Õn ®Ých cña nã. ViÖc chia nhá
gãi tin truyÒn nµy cã mét lîi ®iÓm lµ nÕu mét ®−êng ®i bÞ bËn hoÆc bÞ ®øt,
th× c¸c gãi cã thÓ ®−îc truyÒn theo mét ®−êng kh¸c.
• DÞch vô truyÒn tin cËy (Reliable Stream Transport Service) PhÇn lín c¸c
øng dông ®ßi hái nhiÒu dÞch vô h¬n chØ truyÒn th«ng kh«ng kÕt nèi bëi v×
chóng cÇn tù ®éng söa lçi, kiÓm tra tÝnh toµn vÑn cña th«ng tin truyÒn ®i
trªn m¹ng. Reliable Stream Transport Service gi¶i quyÕt vÊn ®Ò nµy cho ta.

10
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Ch−¬ng II . Giao thøc truyÒn th«ng vμ C¸c


m« h×nh tham chiÕu

I. Giao thøc truyÒn th«ng

§Ó c¸c m¸y tÝnh trªn m¹ng cã thÓ trao ®æi th«ng tin víi nhau, chóng cÇn cã
mét bé nh÷ng phÇn mÒm cïng lµm viÖc theo mét chuÈn nµo ®ã. Giao thøc
truyÒn th«ng (protocol) lµ tËp quy t¾c quy ®Þnh ph−¬ng thøc truyÒn nhËn
th«ng tin gi÷a c¸c m¸y tÝnh trªn m¹ng.
C¸c m¹ng m¸y tÝnh hiÖn ®¹i ®−îc thiÕt kÕ b»ng c¸ch ph©n chia cÊu tróc ë møc
®é cao nh»m lµm gi¶m sù phøc t¹p khi thiÕt kÕ. C¸c giao thøc m¹ng th−êng
®−îc chia lµm c¸c tÇng (layer), mçi tÇng ®−îc x©y ®Ó dùng dùa trªn dÞch vô
cña tÇng d−íi nã vµ cung cÊp dÞch vô cho tÇng cao h¬n.

II. M« h×nh tham chiÕu OSI

II.1. Giíi thiÖu m« h×nh OSI


M« h×nh m¹ng m¸y tÝnh do tæ chøc tiªu chuÈn ho¸ quèc tÕ (International
Standard Organization - ISO) ®−a ra n¨m 1983 ®−îc gäi lµ m« h×nh tham
chiÕu c¸c hÖ thèng më (Open Systems Interconect referent model - OSI). C¸c
®iÒu kho¶n m« t¶ trong m« h×nh ®−îc sö dông réng r·i trong lý thuyÕt truyÒn
th«ng, do ®ã, trong thùc tÕ khã cã thÓ nãi vÒ truyÒn th«ng mµ kh«ng sö dông
thuËt ng÷ cña OSI.

M« h×nh tham chiÕu OSI chøa 7 tÇng m« t¶ chøc n¨ng cña giao thøc truyÒn
th«ng. Mçi tÇng cña m« h×nh OSI miªu t¶ mét chøc n¨ng ®−îc thùc hiÖn khi
d÷ liÖu di chuyÓn gi÷a c¸c øng dông gi÷a c¸c m¹ng.

• TÇng øng dông bao gåm c¸c tr×nh øng dông sö dông m¹ng.
• TÇng tr×nh diÔn tiªu chuÈn ho¸ d÷ liÖu cung cÊp cho tÇng øng dông.
• TÇng phiªn qu¶n trÞ c¸c phiªn lµm viÖc gi÷a c¸c øng dông.

11
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• TÇng giao vËn cung cÊp kÕt nèi tr¹m-tr¹m, xö lý lçi.


• TÇng m¹ng qu¶n trÞ viÖc kÕt nèi qua m¹ng cho c¸c tÇng trªn.
• TÇng liªn kÕt d÷ liÖu cung cÊp ph©n ph¸t d÷ liÖu tin cËy qua ®−êng
truyÒn vËt lý.
• TÇng vËt lý ®Þnh râ c¸c ®Æc thï cña thiÕt bÞ m¹ng.

C¸c líp giao thøc ®−îc xÕp chång líp nä trªn líp kia. ChÝnh sù xuÊt hiÖn cña
nã, cÊu tróc th−êng ®−îc gäi lµ stack hoÆc giao thøc xÕp chång.

ViÖc ph©n tÇng cña OSI tu©n theo mét sè nguyªn t¾c sau
• Mét líp ®−îc t¹o ra khi cÇn ®Õn møc trõu t−îng ho¸ t−¬ng øng.
• Mçi líp cÇn thùc hiÖn c¸c chøc n¨ng ®−îc ®Þnh nghÜa râ rµng.
• ViÖc chän chøc n¨ng cho mçi líp cÇn chó ý tíi viÖc ®Þnh nghÜa c¸c quy
t¾c chuÈn ho¸ quèc tÕ.
• Ranh giíi c¸c møc cÇn chän sao cho th«ng tin ®i qua lµ Ýt nhÊt (tham sè
cho ch−¬ng tr×nh con lµ Ýt).
• Sè møc ph¶i ®ñ lín ®Ó c¸c chøc n¨ng t¸ch biÖt kh«ng n»m trong cïng
mét líp vµ ®ñ nhá ®Ó m« h×nh kh«ng qu¸ phøc t¹p. Mét møc cã thÓ ®−îc
ph©n thµnh c¸c líp nhá nÕu cÇn thiÕt. C¸c møc con cã thÓ l¹i bÞ lo¹i bá.

Hai hÖ thèng kh¸c nhau cã thÓ truyÒn th«ng víi nhau nÕu chóng b¶o ®¶m
nh÷ng nguyªn t¾c chung (cµi ®Æt cïng mét giao thøc truyÒn th«ng). C¸c chøc
n¨ng ®−îc tæ chøc thµnh mét tËp c¸c tÇng ®ång møc cung cÊp chøc n¨ng nh−
nhau. C¸c tÇng ®ång møc ph¶i sö dông mét giao thøc chung.

Mét tÇng kh«ng ®Þnh nghÜa mét giao thøc ®¬n, nã ®Þnh nghÜa mét chøc n¨ng
truyÒn th«ng cã thÓ ®−îc thi hµnh bëi mét sè giao thøc. Do vËy, mçi tÇng cã
thÓ chøa nhiÒu giao thøc, mçi giao thøc cung cÊp mét dÞch vô phï hîp cho
chøc n¨ng cña tÇng. VÝ dô c¶ giao thøc truyÒn file (File Transfer Protocol -
FTP) vµ giao thøc th− ®iÖn tö (Simple Mail Transfer Protocol - SMTP) ®Òu

12
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

cung cÊp dÞch vô cho ng−êi dïng vµ c¶ hai ®Òu thuéc tÇng øng dông. Mçi møc
ngang hµng giao thøc truyÒn th«ng (sù bæ xung cña c¸c giao thøc cïng møc
t−¬ng ®−¬ng trªn hÖ thèng kh¸c). Mçi møc ph¶i ®−îc chuÈn ho¸ ®Ó giao tiÕp
víi møc t−¬ng ®−¬ng víi nã. Trªn lý thuyÕt, giao thøc chØ biÕt ®Õn nh÷ng g×
liªn quan tíi líp cña nã mµ kh«ng quan t©m tíi møc trªn hoÆc d−íi cña nã.
Tuy nhiªn ph¶i cã sù tho¶ thuËn ®Ó chuyÓn d÷ liÖu gi÷a c¸c tÇng trªn mét
m¸y tÝnh, bëi mçi tÇng l¹i liªn quan tíi viÖc göi d÷ liÖu tõ øng dông tíi mét
øng dông t−¬ng ®−¬ng trªn mét m¸y kh¸c. TÇng cao h¬n dùa vµo tÇng thÊp
h¬n ®Ó chuyÓn d÷ liÖu qua m¹ng phÝa d−íi. D÷ liÖu chuyÓn xuèng ng¨n xÕp
tõ tÇng nµy xuèng tÇng thÊp h¬n cho tíi khi ®−îc truyÒn qua m¹ng nhê giao
thøc cña tÇng vËt lý. ë ®Çu nhËn, d÷ liÖu ®i lªn ng¨n xÕp tíi øng dông nhËn.
Nh÷ng tÇng riªng lÎ kh«ng cÇn biÕt c¸c tÇng trªn vµ d−íi nã xö lý ra sao, nã
chØ cÇn biÕt c¸ch chuyÓn nhËn th«ng tin tõ c¸c tÇng ®ã. Sù c« lËp c¸c hµm
truyÒn th«ng trªn c¸c tÇng kh¸c nhau gi¶m thiÓu sù tÝch hîp c«ng nghÖ cña
®Çu vµo mçi bé giao thøc. C¸c øng dông míi cã thÓ thªm vµo mµ kh«ng cÇn
thay ®æi tÇng vËt lý cña m¹ng, phÇn cøng cã thÓ ®−îc bæ sung mµ kh«ng cÇn
viÕt l¹i c¸c phÇn mÒm øng dông.

II.2. C¸c tÇng cña m« h×nh OSI

II.2.1. TÇng vËt lý (Physical layer)


• TÇng vËt lý liªn quan tíi viÖc truyÒn dßng bit gi÷a c¸c m¸y b»ng kªnh
truyÒn th«ng vËt lý, ë ®©y, cÊu tróc cña d÷ liÖu kh«ng ®−îc quan t©m ®Õn.
• ViÖc thiÕt kÕ tÇng vËt lý cÇn quan t©m ®Õn c¸c vÊn ®Ò vÒ ghÐp nèi c¬ khÝ,
®iÖn tö, thñ tôc vµ m«i tr−êng truyÒn tin bªn d−íi nã vÝ dô møc ®iÖn ¸p
t−¬ng øng víi bit 0 - 1, thêi gian tån t¹i cña xung...

II.2.2. TÇng liªn kÕt d÷ liÖu (Data link layer)


• Liªn kÕt, thiÕt lËp, duy tr×, huû bá c¸c liªn kÕt d÷ liÖu lµ nhiÖm vô cña tÇng
data link.
• Ngoµi ra tÇng data link cßn kiÓm so¸t lçi ®−êng truyÒn, th«ng l−îng.

13
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

TÇng nµy thùc hiÖn viÖc ®ãng gãi th«ng tin göi thµnh c¸c frame, göi c¸c frame
mét c¸ch tuÇn tù ®i trªn m¹ng, xö lý c¸c th«ng b¸o x¸c nhËn
(Acknowledgement frame) do bªn nhËn göi vÒ. X¸c ®Þnh ranh giíi gi÷a c¸c
frame b»ng c¸ch ghi mét sè byte ®Æc biÖt vµo ®Çu vµ cuèi frame. Gi¶i quyÕt
vÊn ®Ò th«ng l−îng truyÒn gi÷a bªn göi vµ bªn nhËn (VÊn ®Ò nµy cã thÓ ®−îc
gi¶i quyÕt bëi mét sè líp trªn).

II.2.3. TÇng m¹ng (Network layer)


• VÊn ®Ò chñ chèt cña tÇng m¹ng lµ dÉn ®−êng, ®Þnh râ c¸c gãi tin (packet)
®−îc truyÒn theo nh÷ng con ®−êng nµo tõ nguån ®Õn ®Ých. C¸c con ®−êng
nµy cã thÓ cè ®Þnh, Ýt bÞ thay ®æi, ®−îc thiÕt lËp khi b¾t ®Çu liªn kÕt hay
®éng (dynamic) thay ®æi tuú theo tr¹ng th¸i t¶i cña m¹ng.
• NÕu cã nhiÒu gãi tin truyÒn trªn m¹ng cã thÓ x¶y ra t×nh tr¹ng t¾c nghÏn,
tÇng m¹ng ph¶i gi¶i quyÕt vÊn ®Ò nµy.
• Thùc hiÖn chøc n¨ng giao tiÕp víi c¸c m¹ng bao gåm viÖc ®¸nh l¹i ®Þa chØ,
c¾t hîp gãi tin cho phï hîp víi c¸c m¹ng.
Ngoµi ra tÇng m¹ng cßn thùc hiÖn mét sè chøc n¨ng kÕ to¸n, vÝ dô, mét sè
Firewall (packet filtering) ®−îc cµi ®Æt trªn tÇng nµy ®Ó thèng kª sè l−îng c¸c
gãi tin truyÒn qua m¹ng hay ng¨n cÊm hoÆc cho phÐp c¸c gãi tin cña giao thøc
nµo ®ã.

II.2.4. TÇng giao vËn (Transport layer)


• KiÓm so¸t viÖc truyÒn tin tõ nót tíi nut (end-to-end): B¾t ®Çu tõ tÇng nµy,
c¸c thùc thÓ ®· cã thÓ nãi chuyÖn mét c¸ch logic víi nhau.
• Thùc hiªn viÖc ghÐp kªnh vµ ph©n kªnh: Mçi øng dông cã thÓ göi d÷ liÖu
®i theo nhiÒu con ®−êng, mét ®−êng truyÒn l¹i cã thÓ ®−îc nhiÒu øng dông
sö dông, ph©n kªnh/hîp kªnh gi¶i quyÕt vÊn ®Ò ph©n chia d÷ liÖu cho c¸c
øng dông.

14
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• Kh¾c phôc sai sãt trong qu¸ tr×nh truyÒn tin: ViÖc kh¾c phôc sai sãt ®−îc
thùc hiÖn trªn nhiÒu tÇng kh¸c nhau, nh−ng hiÖu qu¶ nhÊt lµ ë c¸c tÇng cao,
viÖc kh¾c phôc sai sãt lµm ë tÇng giao vËn lµ hîp lý nhÊt.

II.2.5. TÇng phiªn (Session layer)


• TÇng nµy cho phÐp ng−êi sö dông trªn c¸c m¸y kh¸c nhau thiÕt lËp, duy tr×,
huû bá, ®ång bé phiªn truyÒn th«ng gi÷a hä. Cung cÊp mét sè dÞch vô h÷u
Ých cho ng−êi sö dông nh− cho phÐp ng−êi dïng logon vµo hÖ thèng chia sÎ
thêi gian, truyÒn tÖp gi÷a c¸c m¸y tÝnh.
• Qu¶n lý token: c¬ chÕ thÎ bµi ®−îc tÇng phiªn cung cÊp ®Ó tr¸nh hiÖn
t−îng tranh chÊp ®−êng truyÒn trªn m¹ng.
• Thùc hiÖn ®ång bé (Synchronization): thùc hiÖn ®èi víi nh÷ng d÷ liÖu lín
b»ng c¸ch thªm vµo c¸c th«ng tin kiÓm tra, söa lçi.

II.2.6. TÇng tr×nh diÔn (Presentation layer)


• Gi¶i quyÕt vÊn ®Ò liªn quan tíi có ph¸p vµ ng÷ nghÜa cña th«ng tin nh−
chuyÓn ®æi th«ng tin theo mét chuÈn nµo ®ã ®−îc c¶ hai bªn sö dông (m·
ASCII - EDBCDIC).
• NÐn/gi·n d÷ liÖu ®Ó gi¶m sè l−îng bit truyÒn trªn m¹ng.
• M· ho¸ d÷ liÖu ®Ó thùc hiÖn quyÒn truy cËp.

II.2.7. TÇng øng dông (Application layer)


• TÇng øng dông cung cÊp giao diÖn sö dông cho ng−êi dïng vµ m«i tr−êng
truyÒn tin.
• Thùc hiÖn chøc n¨ng chuyÓn file trong ®ã cã gi¶i quyÕt vÊn ®Ò kh«ng
t−¬ng thÝch nh− c¸ch ®Æt tªn file hay c¸c m· ®iÒu khiÓn trong mét tÖp v¨n
b¶n...
• Cung cÊp c¸c dÞch vô Electronic mail, Remote login, Directory lookup...

15
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

II.3. Nh÷ng vÊn ®Ò vÒ OSI


B¶n th©n OSI kh«ng ph¶i lµ mét kiÕn tróc m¹ng bëi v× nã kh«ng chØ ra chÝnh
x¸c c¸c dÞch vô vµ c¸c nghi thøc ®−îc sö dông trong mçi tÇng. M« h×nh nµy
chØ ra mçi tÇng cÇn thùc hiÖn nhiÖm vô g×. ISO ®· ®−a ra c¸c tiªu chuÈn cho
tõng tÇng, nh−ng c¸c tiªu chuÈn nµy kh«ng ph¶i lµ mét bé phËn cña m« h×nh
tham chiÕu.
M« h×nh OSI ra ®êi sau khi c¸c giao thøc TCP/IP (TCP/IP sÏ ®−îc tr×nh bµy ë
phÇn sau) ®· ®−îc sö dông réng r·i, nhiÒu c«ng ty ®· ®−a ra c¸c s¶n phÈm
TCP/IP, v× vËy, m« h×nh OSI chØ ®−îc sö dông trong thùc tÕ nh− mét chuÈn vÒ
lý thuyÕt.
Trong m« h×nh OSI, mét sè chøc n¨ng nh− ®iÒu khiÓn th«ng l−îng, kiÓm tra
lçi xuÊt hiÖn lÆp l¹i trong mét sè tÇng. §iÒu nµy cã nguyªn nh©n do m« h×nh
OSI ®−îc chia lµm c¸c tÇng kh¸c nhau, mçi tÇng t−¬ng øng víi mét ®èi t−îng
®éc lËp (cã d÷ liÖu vµ c¸c ph−¬ng thøc riªng cña nã, ®éc lËp víi c¸c ®èi t−îng
kh¸c).
M« h×nh OSI kh«ng cã c¸c dÞch vô vµ giao thøc kh«ng h−íng kÕt nèi mÆc dï
hÇu hÕt c¸c m¹ng ®Òu cã sö dông. M« h×nh qu¸ phøc t¹p cho viÖc cµi ®Æt lµm
cho OSI khã cã thÓ øng dông réng r·i trªn thùc tÕ.

III. KiÕn tróc giao thøc IPX/SPX

Mét hÖ thèng m¹ng m¸y PC ®−îc sö dông phæ biÕn nhÊt trªn thÕ giíi trong
thêi gian võa qua lµ m¹ng Novell Netware. Nã ®−îc thiÕt kÕ cho c¸c c«ng ty,
®Ó chuyÓn tõ viÖc sö dông m¸y tÝnh lín (Mainframe) sang sö dông PC. Mçi
PC lµm chøc n¨ng kh¸ch hµng (client), mét sè m¸y m¹nh ho¹t ®éng nh− m¸y
phôc vô (Server), chóng cung cÊp c¸c dÞch vô file, c¸c dÞch vô CSDL vµ c¸c
dÞch vô kh¸c cho mét nhãm kh¸ch hµng. Nãi c¸ch kh¸c, Novell Netware ho¹t
®éng theo m« h×nh file-server.

III.1. KiÕn tróc giao thøc IPX/SPX

Application SAP File server

16
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Transport NCP SPX


Network IPX
Datalink Ethernet Token ring ARCnet
Physical Ethernet Token ring ARCnet

Novell Netware sö dông chång giao thøc IPX/SPX dùa trªn mét hÖ thèng
m¹ng cò cña h·ng Xerox-XNSTM nh−ng cã mét sè thay ®æi. Novell Netware ra
®êi tr−íc OSI vµ kh«ng dùa trªn m« h×nh nµy.
• TÇng vËt lý vµ tÇng Data link cã thÓ ®−îc chän trong sè nhiÒu chuÈn c«ng
nghiÖp kh¸c nhau bao gåm Ethernet, IBM token ring vµ ARCnet.
• TÇng m¹ng kh«ng ®Þnh h−íng nèi kÕt, kh«ng b¶o ®¶m (unreliable
connectionless) cã tªn lµ IPX (Internet Packet eXchange). Nã chuyÓn c¸c
packet tõ nguån tíi ®Ých mét c¸ch trong suèt víi ng−êi dïng ngay c¶ khi
nguån vµ ®Ých n»m ë c¸c m¹ng kh¸c nhau. IPX sö dông ®Þa chØ 12 byte.
• TÇng giao vËn:
◊ Giao thøc NCP (Network Core Protocol) cung cÊp nhiÒu dÞch vô
kh¸c ngoµi viÖc vËn chuyÓn d÷ liÖu cña ng−êi sö dông, nã chÝnh lµ
tr¸i tim cña Novell Netware.
◊ Giao thøc thø hai cña tÇng nµy lµ SPX (Sequenced Packet
eXchange). Nã chØ thùc hiÖn viÖc vËn chuyÓn.
C¸c øng dông cã thÓ lùa chän sö dông mét trong c¸c giao thøc cña tÇng nµy
vÝ dô hÖ thèng file sö dông NCP, Lotus Note sö dông SPX.
• TÇng Application n»m trªn cïng, cã nhiÒu giao thøc kh¸c nhau cung cÊp
cho ng−êi sö dông c¸c dÞch vô nh− ®· tr×nh bµy ë trªn.

III.2. Gãi tin IPX


§iÓm mÊu chèt cña kiÕn tróc IPX/SPX lµ gãi tin IPX cã cÊu tróc nh− sau

Offset Field Length (byte)

0 Checksum 2

17
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

2 Packet length 2
4 Transport control 1
5 Packet type 1
6 Destination Address 12
18 Source Address 12
30 ?

• Checksum: Ýt khi sö dông v× tÇng Data link bªn d−íi ®· cung cÊp checksum
• Packet length: chøa chiÒu dµi cña packet tÝnh c¶ header vµ data
• Packet type: ®¸nh dÊu c¸c packet ®iÒu khiÓn kh¸c nhau.
• Destination Address: ®Þa chØ ®Ých cña gãi tin.
• Source Address: ®Þa chØ nguån cña gãi tin.
• Data: ChiÕm phÇn cuèi cña gãi, cã ®é dµi phô thuéc vµo tr−êng paket
length trªn.

III.3. C¬ chÕ ho¹t ®éng cña Novell Netware


Cø kho¶ng mçi phót mét lÇn, mçi server l¹i ph¸t ®i (broadcast) mét packet,
cho biÕt ®Þa chØ cña chÝnh nã vµ c¸c dÞch vô mµ nã cung cÊp. ViÖc nµy sö
dông giao thøc SAP (Service Advertising Protocol). C¸c packet nµy ®−îc tiÕn
tr×nh dÞch vô (special agent process) ch¹y trªn c¸c m¸y router nhËn vµ thu
thËp. C¸c agent sö dông th«ng tin chøa trong ®ã ®Ó x©y dùng CSDL vÒ c¸c
server.
Khi mét m¸y client khëi ®éng, nã ph¸t mét request ®Ó hái xem server gÇn
nhÊt ë ®©u. Agent trªn m¸y router ®Þa ph−¬ng tiÕp nhËn yªu cÇu nµy, kiÓm tra
CSDL vÒ server, lùa chän server phï hîp göi l¹i th«ng tin cho client. Tõ thêi
®iÓm ®ã, Client cã thÓ thiÕt lËp kÕt nèi NCP víi server vµ sö dông c¸c dÞch vô
cña server. Trong qu¸ tr×nh kÕt nèi, client vµ server tho¶ thuËn víi nhau vÒ
chiÒu dµi cùc ®¹i cña d÷ liÖu, trong qu¸ tr×nh sö dông, client cã thÓ tra cøu
CSDL cña server ®Ó biÕt th«ng tin cña c¸c server kh¸c.

18
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Ch−¬ng III. Giao thøc TCP/IP

I. Giao thøc TCP/IP

Vµo cuèi nh÷ng n¨m 1960 vµ ®Çu 1970, Trung t©m nghiªn cøu cÊp cao
(Advanced Research Projects Agency - ARPA) thuéc bé quèc phßng MÜ
(Department of Defense - DoD) ®−îc giao tr¸ch nhiÖm ph¸t triÓn m¹ng
ARPANET. M¹ng ARPANET bao gåm m¹ng cña nh÷ng tæ chøc qu©n ®éi,
c¸c tr−êng ®¹i häc vµ c¸c tæ chøc nghiªn cøu vµ ®−îc dïng ®Ó hç trî cho
nh÷ng dù ¸n nghiªn cøu khoa häc vµ qu©n ®éi (Ngµy nay, ARPA ®−îc gäi lµ
DARPA). N¨m 1984, DoD chia ARPANET ra thµnh 2 phÇn: ARPANET sö
dông cho nghiªn cøu khoa häc vµ MILNET sö dông cho qu©n ®éi. §Çu nh÷ng
n¨m 1980, mét bé giao thøc míi ®−îc ®−a ra lµm giao thøc chuÈn cho m¹ng
ARPANET vµ c¸c m¹ng cña DoD mang tªn DARPA Internet protocol suit,
th−êng ®−îc gäi lµ bé giao thøc TCP/IP hay cßn gäi t¾t lµ TCP/IP.
N¨m 1987 tæ chøc nghiªn cøu quèc gia Hoa Kú (National Science Foundation
- NSF) tµi trî cho viÖc kÕt nèi 6 trung t©m siªu tÝnh trªn toµn liªn bang l¹i víi
nhau thµnh mét m¹ng víi tªn gäi NSFNET. VÒ mÆt vËt lý, m¹ng nµy kÕt nèi
13 ®iÓm lµm viÖc b»ng ®−êng ®iÖn tho¹i cao tèc ®−îc gäi lµ NSFNET
backbone. Kho¶ng 8 ®−êng backbone ®· ®−îc x©y dùng. NSFNET ®−îc më
réng víi hµng chôc m¹ng ®Þa ph−¬ng kÕt nèi vµo nã vµ kÕt nèi vµo m¹ng
Internet cña DARPA. C¶ NSFNET vµ c¸c m¹ng con cña nã ®Òu sö dông bé
giao thøc TCP/IP.
TCP/IP cã mét sè −u ®iÓm nh− sau:
• Giao thøc chuÈn më s½n sµng ph¸t triÓn ®éc lËp víi phÇn cøng vµ hÖ ®iÒu
hµnh. TCP/IP lµ giao thøc lý t−ëng cho viÖc hîp nhÊt phÇn cøng vµ phÇn
mÒm kh¸c nhau, ngay c¶ khi truyÒn th«ng trªn Internet. Sù ®éc lËp rµnh
m¹ch víi phÇn cøng vËt lý cña m¹ng cho phÐp TCP/IP hîp nhÊt c¸c m¹ng
kh¸c nhau. TCP/IP cã thÓ ch¹y trªn m¹ng Ethernet, m¹ng Token ring,

19
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

m¹ng quay sè (Dial-up line), m¹ng X.25, m¹ng ¶o vµ mäi lo¹i m«i tr−êng
vËt lý truyÒn th«ng.
• Mét s¬ ®å ®Þa chØ dïng chung cho phÐp mçi thiÕt bÞ TCP/IP cã duy nhÊt
mét ®Þa chØ trªn m¹ng ngay c¶ khi ®ã lµ m¹ng toµn cÇu Internet.
• Tiªu chuÈn ho¸ møc cao cña giao thøc phï hîp víi Ých lîi cña dÞch vô
ng−êi dïng. §−îc tÝch hîp vµo hÖ ®iÒu hµnh UNIX, Hç trî m« h×nh client-
server, m« h×nh m¹ng b×nh ®¼ng, Hç trî kü thuËt dÉn ®−êng ®éng.
DARPA hç trî viÖc nghiªn cøu kÕt nèi nhiÒu lo¹i m¹ng kh¸c nhau l¹i thµnh
mét m¹ng toµn cÇu Internet. Ngoµi viÖc sö dông cho tÊt c¶ c¸c m¸y trªn
Internet, TCP/IP cßn ®−îc sö dông trong m¹ng néi bé cña mét sè tæ chøc
chÝnh phñ hoÆc th−¬ng m¹i, nh÷ng m¹ng nµy gäi lµ Intranet. TCP/IP võa cã
thÓ kÕt nèi mét sè l−îng lín c¸c m¸y tÝnh (150.000 m¸y trªn n−íc MÜ, Ch©u
¢u, Ch©u ¸) l¹i cã thÓ chØ kÕt nèi hai m¸y tÝnh trong phßng lµm viÖc.
D−íi ®©y, chóng ta xem xÐt mét sè néi dung vÒ bé giao thøc truyÒn th«ng
TCP/IP.

II. KiÕn tróc cña bé giao thøc TCP/IP

II.1. KiÕn tróc ph©n tÇng cña TCP/IP

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

C¸c líp t−¬ng øng gi÷a OSI vµ TCP/IP

20
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Cã nhiÒu giao thøc trong bé giao thøc truyÒn th«ng TCP/IP, nh−ng hai giao
thøc quan träng nhÊt ®−îc lÊy tªn ®Æt cho bé giao thøc nµy lµ TCP
(Transmission Control Protocol) vµ IP (Internet Protocol).
Bé giao thøc TCP/IP ®−îc ph©n lµm 4 tÇng
• TÇng m¹ng (Network Layer)
• TÇng Internet (Internet Layer)
• TÇng giao vËn (Transport Layer)
• TÇng øng dông (Application Layer)

FTP TELNET SMTP DNS SNMP


Application
Layer
RIP
Transsmission Control User Datagram
Transport Layer Protocol Protocol
(Host Layer)

ICMP
Internet Layer
Internet Protocol
(Getway Layer) ARP
Network
Interface Layer
Ethernet Token Ring Token Bus Fiber

C¸c tÇng cña bé giao thøc TCP/IP

• FTP (File transfer Protocol): Giao thøc truyÒn tÖp cho phÐp ng−êi dïng lÊy
hoÆc göi tÖp tíi mét m¸y kh¸c.
• Telnet: Ch−¬ng tr×nh m« pháng thiÕt bÞ ®Çu cuèi cho phÐp ng−êi dïng
login vµo mét m¸y chñ tõ mét m¸y tÝnh nµo ®ã trªn m¹ng.
• SMTP (Simple Mail Transfer Protocol): Mét giao thøc th− tÝn ®iÖn tö.
• DNS (Domain Name server): DÞch vô tªn miÒn cho phÐp nhËn ra m¸y tÝnh
tõ mét tªn miÒn thay cho chuçi ®Þa chØ Internet khã nhí.

21
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• SNMP (Simple Network Management Protocol): Giao thøc qu¶n trÞ m¹ng
cung cÊp nh÷ng c«ng cô qu¶n trÞ m¹ng.
• RIP (Routing Internet Protocol): Giao thøc dÉn ®−êng ®éng.
• ICMP (Internet Control Message Protocol): Nghi thøc th«ng b¸o lçi.
• UDP (User Datagram Protocol): Giao thøc truyÒn kh«ng kÕt nèi cung cÊp
dÞch vô truyÒn kh«ng tin cËy nh−ng tiÕt kiÖm chi phÝ truyÒn.
• TCP (Transmission Control Protocol): Giao thøc h−íng kÕt nèi cung cÊp
dÞch vô truyÒn th«ng tin t−ëng.
• IP (Internet Protocol): Giao thøc Internet chuyÓn giao c¸c gãi tin qua c¸c
m¸y tÝnh ®Õn ®Ých.
• ARP (Address Resolution Protocol): C¬ chÕ chuyÓn ®Þa chØ TCP/IP thµnh
®Þa chØ vËt lý cña c¸c thiÕt bÞ m¹ng.

Host A Host B

Application Identical Application


Message
Transport Transport
Identical
Packet
Internet Internet
Identical
Datagram
Network Interface Network Interface

Identical
Frame

Physical Net

Còng gièng nh− trong m« h×nh tham chiÕu OSI, d÷ liÖu göi tõ tÇng
Application ®i xuèng ng¨n xÕp, mçi tÇng cã nh÷ng ®Þnh nghÜa riªng vÒ d÷ liÖu

22
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

mµ nã sö dông. T¹i n¬i göi, mçi tÇng coi gãi tin cña tÇng trªn göi xuèng lµ d÷
liÖu cña nã vµ thªm vµo gãi tin c¸c th«ng tin ®iÒu khiÓn cña m×nh sau ®ã
chuyÓn tiÕp xuèng tÇng d−íi. T¹i n¬i nhËn, qu¸ tr×nh diÔn ra ng−îc l¹i, mçi
tÇng l¹i t¸ch th«ng tin ®iÒu khiÓn cña m×nh ra vµ chuyÓn d÷ liÖu lªn tÇng trªn.

Application Data

Transport TCP Data


Header

Internet IP TCP Data


Header Header

Network Ethernet IP TCP Data Ethernet


Header Header Header trailer

II.2. C¬ chÕ ®Þa chØ Internet


M¹ng Internet dïng hÖ thèng ®Þa chØ IP (32 bit) ®Ó "®Þnh vÞ" c¸c m¸y tÝnh liªn
kÕt víi nã. Cã hai c¸ch ®¸nh ®Þa chØ phô thuéc vµo c¸ch liªn kÕt cña tõng m¸y
tÝnh cô thÓ:
• NÕu c¸c m¸y tÝnh ®−îc kÕt nèi trùc tiÕp víi m¹ng Internet th× trung t©m
th«ng tin Internet (Network Information Centre-NIC) sÏ cÊp cho c¸c m¸y
tÝnh ®ã mét ®Þa chØ IP (IP Address).
• NÕu c¸c m¸y tÝnh kh«ng kÕt nèi trùc tiÕp víi m¹ng Internet mµ th«ng qua
mét m¹ng côc bé th× ng−êi qu¶n trÞ m¹ng sÏ cÊp cho c¸c m¸y tÝnh ®ã mét
®Þa chØ IP (tuy nhiªn còng d−íi sù cho phÐp cña NIC)

23
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

HÖ thèng ®Þa chØ nµy ®−îc thiÕt kÕ mÒm dÎo qua mét sù ph©n líp, cã 5 líp ®Þa
chØ IP lµ : A, B, C, D, E. Sù kh¸c nhau c¬ b¶n gi÷a c¸c líp ®Þa chØ nµy lµ ë kh¶
n¨ng tæ chøc c¸c cÊu tróc con cña nã.
0 1 2 3 4 8 16 24
Class A 0 Netid Hostid
Class B 1 0 Netid Hostid
Class C 1 1 0 Netid Hostid
Class D 1 1 1 0 Multicast address
Class E 1 1 1 1 0 Reverved for future use

Sau ®©y chóng ta sÏ nghiªn cøu vÒ 3 líp ®Þa chØ chÝnh cña TCP/IP ®ã lµ c¸c
líp A,B,C lµ c¸c líp ®−îc sö dông réng r·i trªn m¹ng Internet.

II.2.1. §Þa chØ líp A


Líp A sö dông byte ®Çu tiªn cña 4 byte ®Ó ®¸nh ®Þa chØ m¹ng. Nh− h×nh trªn,
nã ®−îc nhËn ra bëi bit ®Çu tiªn trong byte ®Çu tiªn cña ®Þa chØ cã gi¸ trÞ 0. 3
bytes cßn l¹i ®−îc sö dông ®Ó ®¸nh ®Þa chØ m¸y trong m¹ng.
Cã 126 ®Þa chØ líp A (®−îc ®¸nh ®Þa chØ trong byte thø nhÊt) víi sè m¸y tÝnh
trong m¹ng lµ 2563 - 2 = 16.777.214 m¸y cho mçi mét ®Þa chØ líp A (do sö
dông 3 bytes ®Ó ®¸nh ®Þa chØ m¸y). §Þa chØ líp A th−êng ®−îc cÊp cho nh÷ng
tæ chøc cã sè l−îng m¸y tÝnh lín.
Nguyªn nh©n chØ cã 126 networks trong khi dïng 8 bit v× bit ®Çu tiªn mang
gi¸ trÞ 0 dïng ®Ó ®Þnh nghÜa líp A vËy con l¹i 7 bit ®¸nh sè tõ 0-127 tuy nhiªn
ng−êi ta kh«ng sö dông mét ®Þa chØ chøa toµn c¸c con sè 1 hoÆc 0 do vËy, chØ
cßn l¹i 126 m¹ng líp A ®−îc sö dông. Do vËy gi¸ trÞ byte ®Çu tiªn cña ®Þa chØ
líp A sÏ lu«n lu«n n»m trong kho¶ng tõ 1 tíi 126, mçi mét byte trong 3 bytes
cßn l¹i sÏ cã gi¸ trÞ trong kho¶ng 1 ®Õn 254.
§èi víi viÖc chØ cã 16.777.214 m¸y trong khi sö dông 24 bit ®¸nh ®Þa chØ m¸y
trong m¹ng còng ®−îc gi¶i thÝch t−¬ng tù.
§Þa chØ líp A cã d¹ng: <Network.Host.Host.Host>

24
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

víi con sè thËp ph©n ®Çu tiªn nhá h¬n 128


VÝ dô: 9. 6. 7. 8 : Nót ®−îc g¸n Host ID lµ 6. 7. 8, n»m trong m¹ng líp A cã
®Þa chØ lµ 9. 0. 0. 0

II.2.2. §Þa chØ líp B


Mét ®Þa chØ líp B ®−îc nhËn ra bëi 2 bit ®Çu tiªn cña byte thø nhÊt mang gi¸
trÞ 10. Líp B sö dông 2 byte ®Çu tiªn cña 4 byte ®Ó ®¸nh ®Þa chØ m¹ng vµ 2
byte cuèi ®¸nh ®Þa chØ m¸y trong m¹ng.
Cã 64*256 - 2 = 16.128 ®Þa chØ m¹ng líp B víi 65.534 m¸y cho mçi mét ®Þa
chØ líp B.
§Þa chØ líp B cã d¹ng: <Network.Network.Host.Host>
Byte ®Çu tiªn cña mét ®Þa chØ líp B n»m trong kho¶ng 128 tíi 191.
VÝ dô: 190. 2. 2 . 1 : Nót ®−îc g¸n Host ID lµ 2. 1, n»m trong m¹ng líp B cã
®Þa chØ lµ 190. 2. 0. 0

II.2.3. §Þa chØ líp C


Mét sè tæ chøc cã quy m« nhá cã thÓ xin cÊp ph¸t ®Þa chØ líp C. Mét ®Þa chØ
líp C ®−îc nhËn ra víi 3 bit ®Çu mang gi¸ trÞ 110. M¹ng líp C sö dông 3 byte
®Çu ®Ó ®¸nh ®Þa chØ m¹ng vµ 1 byte cuèi ®¸nh ®Þa chØ m¸y trong m¹ng. Cã
2.097.150 ®Þa chØ líp C, mçi ®Þa chØ líp C cã 254 m¸y.
§Þa chØ líp C cã d¹ng: <Networkr.Network.Network.Host>
§Þa chØ líp C ®−îc nhËn ra víi byte ®Çu tiªn trong kho¶ng 192 tíi 223
VÝ dô: 200. 6. 5. 4 : Nót ®−îc g¸n Host ID lµ 4, n»m trong m¹ng líp C cã
®Þa chØ lµ 200. 6. 5. 0

II.3. M¹ng con vµ Subnet mask


M¹ng Internet sö dông ®Þa chØ IP 32 bit vµ ph©n chia ra c¸c líp rÊt mÒm dÎo,
tuy nhiªn, víi mét hÖ thèng ®Þa chØ nh− vËy viÖc qu¶n lý vÉn rÊt khã kh¨n.
NÕu nh− mét m¹ng ®−îc cÊp mét ®Þa chØ líp A th× cã nghÜa nã chøa tíi
16*1.048.576 m¸y tÝnh, do vËy ng−êi ta dïng mÆt n¹ bit ®Ó ph©n chia m¹ng ra
thµnh nh÷ng m¹ng con gäi lµ Subnet. Subnet mask lµ mét con sè 32 bit bao

25
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

gåm n bit 1 (th−êng lµ c¸c bit cao nhÊt) dïng ®Ó ®¸nh ®Þa chØ m¹ng con vµ m
bit 0 dïng ®Ó ®¸nh ®Þa chØ m¸y trong m¹ng con víi n+m=32

0 16
Network Number Host Number
Network Number Subnet Number Host Number
1111111 11111111 11111111 00000000

MÆt n¹ subnet ph¶i ®−îc cÊu h×nh cho mçi m¸y tÝnh trong m¹ng vµ ph¶i ®−îc
®Þnh nghÜa cho mçi router. Nh− vËy, ta ph¶i dïng cïng mét Subnet mask cho
toµn bé m¹ng vËt lý cïng chung mét ®Þa chØ Internet.
VÝ dô:
Ta cã mét ®Þa chØ líp B 128.001.000.000 vµ cÇn chia nã thµnh 254 m¹ng con
víi 254 m¸y trong mçi m¹ng, ta gi¶i quyÕt vÊn ®Ò nµy b»ng Subnet mask nh−
sau
Network num 10000000 00000001 00000000 00000000 = 128.001.000.000
Subnet mask 11111111 11111111 11111111 00000000 = 255.255.255.000

MÆt n¹ trªn ®Þnh nghÜa 254 m¹ng con víi ®Þa chØ nh− sau:
Subnet #1 10000000 00000001 00000001 00000000 = 128.001.001.000
Subnet #2 10000000 00000001 00000010 00000000 = 128.001.002.000
Subnet #3 10000000 00000001 00000011 00000000 = 128.001.003.000
.
.
Subnet #254 10000000 00000001 11111110 00000000 = 128.001.254.000

Sè m¸y trong m¹ng con thø nhÊt sÏ n»m trong kho¶ng sau:
Subnet #1 10000000 00000001 00000001 00000000 = 128.001.001.000
Low Address 10000000 00000001 00000001 00000001 = 128.001.001.001
High Address 10000000 00000001 00000001 11111110 = 128.001.001.254

26
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Chó ý r»ng mét ®Þa chØ chøa toµn sè 1 dïng cho boardcasting, chøa toµn sè 0
dµnh cho Subnet mask do vËy, ®Þa chØ m¸y cña Internet kh«ng bao giê chøa
toµn c¸c con sè 1 hoÆc 0.

III. TÇng m¹ng (Network Layer)

TÇng m¹ng lµ tÇng thÊp nhÊt cña kiÕn tróc giao thøc TCP/IP. C¸c giao thøc
trong tÇng nµy cung cÊp biÖn ph¸p cho hÖ thèng chuyÓn giao d÷ liÖu gi÷a c¸c
thiÕt bÞ ®−îc kÕt nèi trùc tiÕp. Nã m« t¶ c¸ch sö dông m¹ng ®Ó truyÒn mét gãi
th«ng tin IP. Kh«ng gièng nh÷ng giao thøc cña tÇng cao h¬n lµ sö dông dÞch
vô cña tÇng d−íi nã vµ cung cÊp dÞch vô cho tÇng trªn, giao thøc cña tÇng
m¹ng cÇn ph¶i biÕt chi tiÕt cña m¹ng vËt lý phÝa d−íi (cÊu tróc cña gãi, ®Þa
chØ, vv...) ®Ó ®Þnh d¹ng ®óng th«ng tin sÏ ®−îc truyÒn tu©n theo nh÷ng rµng
buéc cña m¹ng. TÇng m¹ng cña TCP/IP chøa c¸c chøc n¨ng t−¬ng øng cña 3
tÇng thÊp nhÊt cña m« h×nh tham chiÕu OSI (tÇng m¹ng, tÇng liªn kÕt d÷ liÖu,
tÇng vËt lý). TÇng m¹ng th−êng kh«ng ®−îc ng−êi dïng ®Ó ý tíi v× thiÕt kÕ cña
TCP/IP che dÊu nh÷ng chøc n¨ng cña tÇng thÊp nhÊt nµy vµ nh÷ng ®iÒu cÇn
biÕt cho ng−êi sö dông còng nh− ng−êi lËp tr×nh chØ lµ nh÷ng giao thøc cña
c¸c tÇng cao h¬n (IP, TCP, UDP, vv...). Mçi khi cã c«ng nghÖ phÇn cøng xuÊt
hiÖn, nh÷ng giao thøc tÇng m¹ng ph¶i ®−îc ph¸t triÓn ®Ó TCP/IP cã thÓ sö
dông phÇn cøng míi (th«ng th−êng ®ã chÝnh lµ c¸c tr×nh ®iÒu khiÓn cña chÝnh
nhµ cung cÊp phÇn cøng ®ã). C¸c chøc n¨ng tr×nh diÔn trong tÇng nµy bao
gåm ®ãng gãi gãi th«ng tin IP thµnh c¸c "Frame" ®−îc truyÒn dÉn trªn m¹ng
vµ chuyÓn ®Þa chØ IP thµnh ®Þa chØ vËt lý sö dông bëi m¹ng m¸y tÝnh. Mét
trong sè c¸c ®iÓm m¹nh cña TCP/IP lµ ®Þa chØ cña nã ®−îc phèi hîp sao cho
trªn m¹ng Internet kh«ng cã mét thiÕt bÞ m¹ng nµo cïng tªn. §Þa chØ nµy ph¶i
®−îc chuyÓn ®æi thÝch hîp víi ®Þa chØ m¹ng vËt lý n¬i mµ d÷ liÖu ®−îc truyÒn
®i.
Hai vÝ dô RFCs m« t¶ giao thøc sö dông cho tÇng m¹ng lµ:
• RFC 826: Giao thøc chuyÓn ®æi ®Þa chØ chuyÓn ®æi ®Þa chØ IP thµnh ®Þa
chØ Ethernet

27
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• RFC 894: Mét chuÈn cho viÖc truyÒn gãi tin IP qua m¹ng Ethernet m« t¶
c¸ch thøc ®ãng gãi ®Ó truyÒn th«ng tin qua m¹ng Ethernet.
Khi cµi ®Æt trong UNIX, giao thøc cña tÇng nµy ®−îc xem nh− sù phèi hîp cña
ch−¬ng tr×nh ®iÒu khiÓn thiÕt bÞ vµ c¸c ch−¬ng tr×nh liªn quan. Nh÷ng ®¬n
vÞ t−¬ng øng víi nh÷ng thiÕt bÞ m¹ng lµm nhiÖm vô ®ãng gãi d÷ liÖu vµ
chuyÓn giao cho m¹ng.

IV. TÇng Internet (Internet Layer)

TÇng Internet cung cÊp mét hÖ thèng chuyÓn giao kh«ng kÕt nèi vµ ®«i khi
ng−êi ta cßn gäi lµ kh«ng tin cËy. Kh«ng kÕt nèi bëi mçi gãi tin ®−îc truyÒn
®i trªn m¹ng mét c¸ch ®éc lËp, sù kÕt hîp d÷ liÖu cña c¸c gãi tin ®−îc cung
cÊp bëi c¸c dÞch vô líp trªn. Mçi gãi tin IP chøa ®Þa chØ n¬i göi vµ ®Þa chØ n¬i
nhËn vµ dùa vµo ®ã nã cã thÓ ®−îc truyÒn trªn m¹ng tíi ®Ých. Nh−ng chÝnh
viÖc d÷ liÖu cã thÓ ®i tíi ®Ých trªn nhiÒu ®−êng kh¸c nhau t¹o nªn sù mÒm dÎo
cho Internet khi mét ®−êng bÞ ®øt hay mét nót nµo ®ã bÞ qu¸ t¶i, c¸c gãi tin cã
thÓ ®−îc truyÒn ®i theo nh÷ng con ®−êng kh¸c, nÕu mét gãi tin nµo cã lçi th×
chØ ph¶i truyÒn l¹i gãi tin ®ã thay vµo viÖc ph¶i truyÒn l¹i toµn bé th«ng b¸o.
Kh«ng tin cËy bëi v× IP kh«ng cã c¬ chÕ kiÓm tra tÝnh ®óng ®¾n cña d÷ liÖu
®−îc truyÒn nhËn, dÞch vô tin t−ëng ph¶i ®−îc cung cÊp bëi c¸c giao thøc líp
trªn.
VÊn ®Ò chñ chèt trªn tÇng Internet lµ viÖc chän lùa con ®−êng tèi −u ®Ó truyÒn
c¸c gãi tin tõ tr¹m nguån tíi tr¹m ®Ých. Chóng ta sÏ xem xÐt c¸c kü thuËt chän
®−êng vµ thuËt to¸n dÉn ®−êng sö dông ®èi víi tÇng nµy sau ®©y.

28
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

IV.1. Gãi tin IP


0 31
Vers Hlen Service type Total length
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)

Destination Source Type IP data CRC


Address Address field

Gãi th«ng tin IP trong mét frame Ethernet


• Vers : Dµi 4 bits, m« t¶ chÝnh x¸c version cña IP
• Hlen : Dµi 4 bits, m« t¶ ®é dµi cña IP header (tÝnh b»ng tõ
32 bit).
• Service type: dµi 8 bits m« t¶ thø tù −u tiªn cña data.
• Total length: Dµi 16 bits (2 bytes), ®©y lµ ®é dµi cña datagram (in bytes-
cã nghÜa lµ ®é dµi vïng data cña IP datagram cã thÓ lªn tíi 65535 bytes).
• Identification, flags, fragment offset: Kh«ng ph¶i bÊt kú size nµo cña
datagram còng ®−îc truyÒn trªn m¹ng (vÝ dô Ethernet LAN chØ hç trî cho
size lín nhÊt cña datagram lµ 1518 bytes). Do vËy khi size cña datagram
v−ît qu¸ kÝch th−íc cho phÐp, nã sÏ bÞ chia nhá ra vµ c¸c tr−êng nµy sÏ

29
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

®¶m b¶o r»ng c¸c datagram ®· bÞ ph©n chia nµy lµ tõ mét datagram ban
®Çu.
• Time to live: Dïng ®Ó x¸c ®Þnh xem datagram nµy cã bÞ truyÒn lÆp l¹i hay
kh«ng (th«ng th−êng nã ®−îc g¸n lµ 1, nÕu bÞ lÆp l¹i nã sÏ bÞ g¸n lµ 0)
• Protocol: Tr−êng nµy cho biÕt líp giao thøc cao h¬n nµo sÏ ®−îc sö dông
(UDP hay lµ TCP).
• CRC: Tr−êng nµy ®−îc dïng ®Ó kiÓm tra sù toµn vÑn cña header.
• IP option: Chøa c¸c th«ng tin nh−: "dß" ®−êng, b¶o mËt, x¸c nhËn thêi
gian.
• Padding: Tr−êng ®iÒn thªm c¸c sè 0 ®Ó ®¶m b¶o header kÕt thóc t¹i mét
®Þa chØ béi cña 32
• Source IP address, destination IP address: chøa ®Þa chØ cña station göi
vµ ®Þa chØ cña station ®Ých.
Gãi tin IP chøa mét tr−êng checksum ®Ó kiÓm tra tÝnh toµn vÑn cña IP header,
nÕu IP header lçi, gãi tin IP bÞ lo¹i bá vµ giao thøc líp trªn sÏ truyÒn mét gãi
tin kh¸c.
TÇng IP lµm c«ng viÖc dÉn ®−êng c¸c gãi tin qua m¹ng Internet tõ m¸y tÝnh
nµy tíi m¸y tÝnh kh¸c, qua c¸c m¹ng kh¸c nhau cho tíi khi nã ®Õn ®−îc tr¹m
®Ých hoÆc bÞ lçi. ViÖc truyÒn gãi tin qua c¸c m¹ng ®−îc thùc hiÖn th«ng qua
mét thiÕt bÞ kÕt nèi gi÷a hai m¹ng gäi lµ gateway. Khi mét th«ng tin truyÒn
qua c¸c m¹ng kh¸c nhau, nã cã thÓ bÞ chia ra thµnh nhiÒu gãi nhá h¬n. Th«ng
tin truyÒn cã thÓ qu¸ lín ®Ó cã thÓ truyÒn trªn mét gãi tin trªn mét m¹ng
kh¸c. VÊn ®Ò nµy chØ gÆp ph¶i khi gateway ®−îc nèi gi÷a c¸c m¹ng vËt lý
kh¸c nhau. Mçi kiÓu m¹ng cã mét ®é dµi tèi ®a gãi tin cã thÓ truyÒn
(Maximum Transmission Unit-MTU) nÕu th«ng tin nhËn ®−îc tõ m¹ng nµy
dµi h¬n MTU cña m¹ng kia, nã cÇn ph¶i ®−îc chia nhá ra thµnh nhiÒu m¶nh
®Ó truyÒn.

30
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Host A Host B

Application Identical Application


Message

Transport Identical Transport


Packet
Gateway G
Internet Internet
Internet
Identical Identical
Datagram Datagram
Network Interface Network Interface Network Interface

Identical Identical
Frame Frame

Physical Net Physical Net

ViÖc xö lý nh− vËy ®−îc gäi lµ sù ph©n m¶nh. §Ó trùc quan, ta so s¸nh víi
viÖc chuyªn chë hµng b»ng tµu ho¶, mçi toa tµu cã thÓ chë nhiÒu hµng h¬n
mét chiÕc xe t¶i sÏ trë hµng trªn ®−êng, hµng ho¸ sÏ ®−îc chia vµo nhiÒu xe
t¶i. Ta cã thÓ so s¸nh viÖc ®−êng ray kh¸c vÒ vËt lý víi ®−êng «t«, Ethernet
kh¸c X.25 vÒ vËt lý, IP ph¶i c¾t gãi tin Ethernet thµnh nh÷ng gãi th«ng tin
nhá h¬n ®Ó truyÒn qua m¹ng X.25. §Þnh d¹ng cña mçi gãi tin chia c¾t gièng
nh− víi tõng b¶n tin. Tõ thø hai cña header chøa th«ng tin sö dông cho qu¸
tr×nh tËp hîp l¹i b¶n tin bao gåm: gãi tin thuéc b¶n tin nµo, vÞ trÝ cña nã
trong toµn bé dßng d÷ liÖu truyÒn, gãi tin ®· ®−îc kÕt nèi ch−a.
Khi nh÷ng gãi tin truyÒn ®Õn mét gateway qu¸ nhanh, chóng cã thÓ bÞ lo¹i bá
vµ IP tr¶ l¹i mét th«ng b¸o lçi (ICMP).

31
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

IV.2. Giao thøc chuyÓn ®Þa chØ ARP (Address Resolution Protocol) vµ
c¬ giao thøc chuyÓn ng−îc ®Þa chØ RARP (Reverse Address Resolution
Protocol)

Mäi m¸y tÝnh cïng n»m trªn mét m¹ng cã cïng mét net id vµ c¸c m¸y tÝnh
cïng trªn mét m¹ng vËt lý cã thÓ göi frame vËt lý trùc tiÕp cho nhau nªn viÖc
truyÒn th«ng tin gi÷a hai m¸y tÝnh trong cïng mét m¹ng vËt lý kh«ng cÇn sö
dông gateway. ViÖc dÉn ®−êng trùc tiÕp chØ sö dông phÇn ®Þa chØ m¸y host id
trong ®Þa chØ IP. Tr¹m göi chØ viÖc kÕt khèi d÷ liÖu vµo frame, chuyÓn ®Þa chØ
IP cña tr¹m ®Ých thµnh ®Þa chØ vËt lý vµ göi trùc tiÕp frame tíi m¸y nhËn.
Mét c¬ chÕ sö dông ®Ó chuyÓn ®Þa chØ IP thµnh ®Þa chØ vËt lý lµ ARP (Address
Resolusion Protocol). Khi hai m¸y tÝnh cïng nèi vµo mét m¹ng vËt lý, chóng
biÕt ®−îc ®Þa chØ IP cña nhau nh−ng ®Ó truyÒn th«ng gi÷a hai m¸y, chóng ph¶i
biÕt ®−îc ®Þa chØ vËt lý cña nhau. ARP gi¶i quyÕt vÊn ®Ò chuyÓn tõ ®Þa chØ IP
32 bit sang ®Þa chØ Ethernet 48 bit. Ng−êi ta sö dông hai c¬ chÕ chuyÓn ®Þa chØ
lµ:
• ChuyÓn giao trùc tiÕp
• ChuyÓn giao gi¸n tiÕp

IV.2.1. ChuyÓn giao trùc tiÕp


§Þa chØ vËt lý lµ mét hµm cña ®Þa chØ IP vÝ dô sö dông trªn m¹ng token ring
proNET-10 lµ m¹ng cho phÐp ®Æt ®Þa chØ IP vµ ®Þa chØ vËt lý tho¶i m¸i. Ng−êi
ta cã thÓ ®Æt ®Þa chØ IP lµ 192.5.48.3 vµ ®Þa chØ vËt lý lµ 3, khi ®ã ta cã
PA=f(IA). Víi PA lµ ®Þa chØ vËt lý, IA lµ ®Þa chØ Internet vµ f lµ hµm chuyÓn ®æi.

IV.2.2. ChuyÓn giao ®Þa chØ ®éng


ChuyÓn giao ®Þa chØ ®éng ®−îc thùc hiÖn b»ng c¸ch m¸y tÝnh göi th«ng tin
göi mét th«ng b¸o tíi toµn bé c¸c m¸y tÝnh trªn m¹ng, trong th«ng b¸o ®ã cã
chøa ®Þa chØ IP cña m¸y tÝnh nã cÇn liªn l¹c, mäi m¸y sÏ nhËn ®−îc th«ng b¸o

32
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

vµ m¸y nµo thÊy ®Þa chØ IP cña m×nh th× tr¶ l¹i mét th«ng b¸o chøa ®Þa chØ vËt
lý, khi ®ã, hai m¸y tÝnh cã thÓ “nãi chuyÖn” víi nhau.

Host A Host B Host C Host D

ARP Request

Host A Host B Host C Host D

ARP Reply

Ngoµi ra, ng−êi ta cßn sö dông b¶ng chØ ®−êng ®Ó l−u tr÷ t¹m thêi c¸c ®Þa chØ
sö dông míi nhÊt (Address Reslution Cache) ®Ó t¨ng tèc ®é cña viÖc chuyÓn
giao ®Þa chØ.

IV.2.3. Gãi tin ARP


Mét gãi th«ng tin ARP lµ mét Ethernet Frame ®−îc truyÒn trùc tiÕp tõ m¸y
nµy tíi m¸y kh¸c. V× kh«ng ph¶i sö dông IP, gãi tin nµy kh«ng cã ®Þa chØ IP
còng nh− kh«ng cÇn ®−îc dÉn ®−êng, nã ph¶i ®−îc göi broadcasts tíi tÊt c¶
c¸c m¸y trªn m¹ng Ethernet (víi ®Þa chØ FF-FF-FF-FF-FF-FF).
Gãi th«ng tin ARP ®−îc m« t¶ nh− sau:

33
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

0 31
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)

Destination Source Type or (ARP) Data CRC


Address Address Length

Kh«ng gièng phÇn lín c¸c giao thøc kh¸c, d÷ liÖu trong ARP kh«ng cã mét
®Þnh d¹ng chuÈn cho header. §Ó ARP cã thÓ lµm viÖc víi nhiÒu c«ng nghÖ
kh¸c nhau, ng−êi ta dïng mét tr−êng ®Ó chøa ®é dµi cña nh÷ng tr−êng ®i sau
nã.

Trong tr−êng hîp m¸y tr¹m kh«ng cã thiÕt bÞ nhí phô, vµ v× vËy nã kh«ng biÕt
®Þa chØ IP cña chÝnh m×nh khi khëi ®éng, ng−êi ta sö dông c¬ chÕ chuyÓn
ng−îc ®Þa chØ (Reverse Address Resolution Protocol - RARP) ho¹t ®éng

34
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

t−¬ng tù ARP ®Ó gi¶i quyÕt vÊn ®Ò nµy. Theo c¬ chÕ ®ã, cã mét m¸y chñ chøa
b¶ng ®Þa chØ IP cña c¸c m¸y tr¹m, khi m¸y tr¹m khëi ®éng, nã göi mét request
tíi tÊt c¶ c¸c m¸y vµ m¸y chñ göi tr¶ l¹i mét gãi tin chøa ®Þa chØ IP cña m¸y
tr¹m yªu cÇu.

IV.3. Giao thøc ®iÒu khiÓn truyÒn tin (Internet Control Message
Protocol - ICMP)
ViÖc dÉn ®−êng qua c¸c m¹ng sö dông giao thøc ®iÒu khiÓn truyÒn tin
(Internet Control Message Protocol - ICMP) ®−îc ®Þnh nghÜa trong RFC 792.
ICMP sö dông gãi tin IP ®Ó chuyÓn th«ng b¸o cña nã. ICMP göi c¸c th«ng b¸o
lµm c¸c c«ng viÖc: §iÒu khiÓn, th«ng b¸o lçi vµ chøc n¨ng th«ng tin cho
TCP/IP.. Th«ng th−êng ICMP ®−îc göi khi mét gãi tin kh«ng thÓ ®i tíi ®Ých,
mét gateway kh«ng cßn ®ñ chç nhí ®Ó nhËn thªm gãi tin hay mét gateway
h−íng dÉn m¸y tÝnh sö dông gateway kh¸c ®Ó truyÒn th«ng tin theo mét con
®−êng tèi −u h¬n..

IV.3.1. Gãi tin ICMP


MÆc dÇu mçi th«ng b¸o ICMP cã mét kiÓu ®Þnh d¹ng riªng cña nã, song c¸c
th«ng b¸o ®Òu chøa 3 tr−êng ®Çu tiªn gièng nhau:
• TYPE: §Þnh nghÜa th«ng b¸o ®i sau.
• CODE: Cung cÊp th«ng tin thªm vÒ th«ng b¸o.
• CHECKSUM: Chøa checksum cña th«ng b¸o.

Type Field ICMP Message Type

0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect (Change a router)
8 Echo Request

35
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

11 Time Exceeded for a Datagram


12 Parameter Problem on a Datagram
13 Timestamp Request
14 Timestamp Reply
15 Information Request
16 Information Reply
17 Address Mask Request
18 Address Mask Reply

IV.3.2. §iÒu khiÓn dßng d÷ liÖu


Khi tr¹m nguån göi d÷ liÖu tíi qu¸ nhanh, tr¹m ®Ých kh«ng kÞp xö lý, tr¹m
®Ých - hay mét thiÕt bÞ dÉn ®−êng göi tr¶ tr¹m nguån mét th«ng b¸o ®Ó nã t¹m
ngõng viÖc truyÒn th«ng tin.

IV.3.3. Th«ng b¸o lçi


Khi kh«ng t×m thÊy tr¹m ®Ých, mét th«ng b¸o lçi Destination Unreachable
®−îc gateway göi tr¶ l¹i tr¹m nguån. NÕu mét sè hiÖu cæng kh«ng phï hîp,
tr¹m ®Ých göi th«ng b¸o lçi l¹i cho tr¹m nguån (cæng sÏ ®−îc tr×nh bµy trong
phÇn giao thøc tÇng giao vËn).

IV.3.4. §Þnh h−íng l¹i


Mét gateway göi th«ng b¸o ®Þnh h−íng l¹i ®Ó tr¹m göi sö dông mét gateway
kh¸c bëi v× gateway ®ã lµ mét lùa chän thÝch hîp h¬n. Tr−êng hîp nµy chØ
x¶y ra khi tr¹m göi nèi vµo m¹ng cã trªn 2 gateway.

VÝ dô m¸y tÝnh B muèn göi th«ng tin ®Õn m¸y C, nÕu th«ng b¸o ®ã ®Õn
gateway 1, th× gateway 1 ph¶i göi th«ng b¸o redirect m¸y tÝnh ®ã qua gateway
2. Ng−îc l¹i, mçi m¸y tÝnh trªn m¹ng X.25 muèn göi th«ng b¸o tíi m¸y tÝnh
n»m trªn m¹ng Token Ring th× viÖc nµy kh«ng cÇn thiÕt v× gateway 1 ®−îc nèi
trùc tiÕp víi m¹ng Token Ring.

36
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Token Ring

Gateway 1 Host A Host B

X.25

Gateway 2 Host C

Ethernet

IV.3.5. KiÓm tra tr¹m lµm viÖc


Khi mét m¸y tÝnh muèn kiÓm tra mét m¸y kh¸c cã tån t¹i vµ ®ang ho¹t ®éng
hay kh«ng, nã göi mét th«ng b¸o Echo Request. Khi tr¹m ®Ých nhËn ®−îc
th«ng b¸o ®ã, nã göi l¹i mét Echo Reply. LÖnh ping cña UNIX sö dông c¸c
th«ng b¸o nµy.

IV.4. ThuËt to¸n dÉn ®−êng


Internet lµ mét m¹ng chuyÓn m¹ch gãi vµ ®Ó chuyÓn c¸c gãi tin IP trªn m¹ng,
ng−êi ta sö dông thuËt to¸n dÉn ®−êng. ThuËt to¸n dÉn ®−êng ®−îc thùc hiÖn
bëi tiÕn tr×nh lùa chän mét ®−êng ®Ó truyÒn gãi tin vµ viÖc dÉn ®−êng cho c¸c
gãi tin ®−îc thùc hiÖn bëi mäi m¸y tÝnh trªn ®−êng ®i cña nã.
Ng−êi ta chia viÖc dÉn ®−êng trªn m¹ng Internet ra lµm 2 kiÓu:
• DÉn ®−êng trùc tiÕp (direct routing): DÉn ®−êng trùc tiÕp tõ m¸y tÝnh nµy
sang m¸y tÝnh kia chØ thùc hiÖn ®−îc khi c¶ hai m¸y tÝnh ®Òu kÕt nèi vµo
mét m¹ng vËt lý. DÉn ®−êng trùc tiÕp chØ sö dông phÇn hostid cña ®Þa chØ
Internet vµ sö dông 2 giao thøc chuyÓn ®Þa chØ ARP vµ RARP.

37
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

12.0.0.3 14.0.0.1
Network Network
Gateway 1
12.0.0.0 14.0.0.0
14.0.0.2
12.0.0.2

13.0.0.2 Gateway 2
Gateway 3
13.0.0.1
12.0.0.1 15.0.0.1

Gateway 4 Network Network


13.0.0.0 13.0.0.3 15.0.0.0
11.0.0.2
15.0.0.2
13.0.0.4
Gateway 5 16.0.0.1 Gateway 6

Network
11.0.0.0 Network 16.0.0.2
Port1 Port 3 16.0.0.3 16.0.0.0
11.0.0.1
Gateway 8 10.0.0.1
Gateway 7
Port 2
Network 10.0.0.2
10.0.0.0

Tíi m¸y trªn m¹ng DÉn ®−êng tíi Th«ng qua cæng

10.0.0.0 Direct 2
11.0.0.0 Direct 1
12.0.0.0 11.0.0.2 1
13.0.0.0 Direct 3
14.0.0.0 13.0.0.2 3
15.0.0.0 10.0.0.2 2
16.0.0.0 10.0.0.2 2

B¶ng dÉn ®−êng trªn gateway 8

• DÉn ®−êng gi¸n tiÕp (indirect routing): Khi tr¹m ®Ých kh«ng cïng n»m
trªn mét m¹ng víi tr¹m göi cÇn th«ng qua gateway ®Ó truyÒn ®i. Tr¹m göi

38
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

ph¶i ®ãng gãi th«ng tin vµ göi tíi mét gateway ®Ó chuyÓn tíi ®Ých. DÉn
®−êng gi¸n tiÕp chØ sö dông net id trong ®Þa chØ IP.

D÷ liÖu sÏ chuyÓn tõ gateway nµy tíi gateway kh¸c ®Õn khi nã cã thÓ ®−îc
truyÒn trùc tiÕp tíi m¸y nhËn. ThuËt to¸n dÉn ®−êng th−êng sö dông b¶ng dÉn
®−êng (Internet routing table - IP routing table) trªn mçi m¸y tÝnh ®Ó chøa
th«ng tin vÒ c¸c m¸y tÝnh vµ c¸ch ®i ®Õn chóng. V× viÖc dÉn ®−êng ®−îc thùc
hiÖn bëi c¶ host vµ gateway, mçi thiÕt bÞ ®Òu chøa mét b¶ng dÉn ®−êng. B¶ng
dÉn ®−êng chøa th«ng tin vÒ c¸c m¹ng vµ gateway ®Ó kÕt nèi ®Õn ®ã.
Ng−êi ta sö dông mét kü thuËt ®Ó che dÊu th«ng tin vµ gi¶m thiÓu kÝch th−íc
cña b¶ng dÉn ®−êng lµ sö dông kü thuËt dïng gateway ngÇm ®Þnh (default
gateway). NÕu m¸y tÝnh kh«ng t×m thÊy ®Þa chØ ®Ých trong b¶ng dÉn ®−êng
cña nã th× gãi tin ®−îc chuyÓn tíi mét thiÕt bÞ lµ default gateway. Kü thuËt
nµy ®Æc biÖt thÝch hîp víi tr−êng hîp m¹ng m¸y tÝnh ®−îc nèi vµo Internet
th«ng qua mét m¸y tÝnh duy nhÊt.
ThuËt to¸n dÉn ®−êng cô thÓ cµi ®Æt cho TCP/IP
Mçi nót m¹ng cã mét c¬ së d÷ liÖu m« t¶ tr¹ng th¸i tæng thÓ cña m¹ng (topo,
®é trÔ truyÒn dÉn..) gäi lµ b¶ng dÉn ®−êng. C¸c th«ng tin nµy dïng cho viÖc
tÝnh tÝnh c¸c con ®−êng tèi −u ®Ó chuyÓn c¸c gãi tin ®Õn ®Ých. Chóng ®−îc cËp
nhËt th−êng xuyªn sau mét kho¶ng thêi gian nµo ®ã hoÆc cËp nhËt mçi khi cã
mét thay ®æi x¶y ra.
(Mét sè thuËt to¸n sö dông cho viÖc t×m ®−êng ®i tèi −u ®−îc tr×nh bµy trong
phÇn phô lôc B)
Khi cã mét gãi th«ng tin ®Õn mét m¸y tÝnh hay gateway, thuËt to¸n dÉn ®−êng
ch¹y trªn m¸y tÝnh ®ã sÏ ph©n tÝch ®Þa chØ ®Ých cña gãi th«ng tin vµ quyÕt ®Þnh
truyÒn nã theo ®−êng tèt nhÊt tíi ®Ých (dùa vµo th«ng tin trong b¶ng dÉn
®−êng). ViÖc nµy bao gåm c¶ cëi gãi, chän ®−êng, cËp nhËt b¶ng dÉn ®−êng,
®ãng gãi ...

39
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

T¸ch ®Þa chØ m¹ng ®Ých


(IN) tõ ®Þa chØ ®Ých (ID)

IN nèi trùc + ChuyÓn trùc tiÕp qua


tiÕp vµo m¹ng
m¹ng

ID lµ tªn mét +
m¸y tÝnh
trong b¶ng

ChuyÓn theo th«ng tin


-
trong b¶ng

IN lµ tªn mét +
m¹ng trong
b¶ng

Cã tån t¹i + ChuyÓn tíi


default default gateway
gateway

-
Göi th«ng b¸o lçi CËp nhËt b¶ng dÉn
®−êng

KÕt thóc thuËt to¸n


dÉn ®−êng

40
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

V. tÇng giao vËn

TÇng giao thøc ngay trªn tÇng Internet lµ TÇng giao vËn (Host-to-Host
Transport Layer hay th−êng gäi lµ Transport Layer). Hai giao thøc quan träng
nhÊt cña tÇng nµy lµ Transmission Control Protocol (TCP) vµ User Datagram
Protocol (UDP). TCP cung cÊp dÞch vô chuyÓn giao th«ng tin cã kÕt nèi
(connection-oriented), nã bao gåm c¶ viÖc kiÓm tra vµ söa lçi. UDP cung cÊp
dÞch vô kÐm tin cËy h¬n (unreliable) vµ kh«ng thiÕt lËp liªn kÕt tr−íc
(connectionless). C¶ hai giao thøc ®Òu chuyÓn giao th«ng tin gi÷a tÇng øng
dông vµ tÇng Internet. Ch−¬ng tr×nh øng dông cã thÓ lùa chän dÞch vô nµo
thÝch hîp víi nã.

V.1. Giao thøc kh«ng kÕt nèi (User Datagram Protocol - UDP)
UDP cho phÐp ch−¬ng tr×nh øng dông truy cËp trùc tiÕp ®Õn gãi tin cña dÞch
vô chuyÓn giao gièng nh− dÞch vô mµ giao thøc IP cung cÊp. Nã cho phÐp
øng dông trao ®æi th«ng tin qua m¹ng víi Ýt th«ng tin ®iÒu khiÓn nhÊt. UDP lµ
giao thøc kh«ng kÕt nèi, kÐm tin cËy v× nã kh«ng cã c¬ chÕ kiÓm tra tÝnh ®óng
®¾n cña d÷ liÖu truyÒn.

V.1.1. Gãi th«ng tin UDP

0 31
Source port Destination port
Message length checksum
Data

Destination Source Type IP UDP data CRC


Address Address field header

41
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Mçi gãi th«ng tin UDP gäi lµ mét Datagram ®−îc ph©n lµm 2 phÇn header vµ
data trong ®ã header chøa th«ng tin vÒ ®Þa chØ cæng nguån, ®Þa chØ cæng ®Ých,
®é dµi cña gãi vµ checksum

V.1.2. Ph©n kªnh, hîp kªnh vµ Ports


Ph©n kªnh, hîp kªnh chÝnh lµ viÖc lùa chän nh÷ng tiÕn tr×nh øng dông trong
mét sè lín c¸c tiÕn tr×nh sö dông giao thøc UDP, vµ cÇn chän ra nh÷ng øng
dông t−¬ng øng víi gãi th«ng tin chuyÓn ®Õn.

Port 1 Port 2 Port 3

UDP: Demultiplexing
Based on Port

UDP Datagram arrives

IP Layer

ViÖc nµy ®−îc gi¶i quyÕt b»ng c¬ chÕ cæng (Port mechanism) c¬ chÕ nµy g¾n
mçi øng dông víi mét con sè gäi lµ sè hiÖu cæng (Port number) vµ mçi gãi
th«ng tin mµ øng dông göi ®i ®Òu mang mét tr−êng SOURCE PORT.

T¹i n¬i nhËn, dùa vµo th«ng tin trong tr−êng DESTINATION PORT mµ gãi
tin ®ã ®−îc truyÒn ®Õn cæng t−¬ng øng víi øng dông. VÝ dô mäi b¶n TCP/IP
®Òu cã dÞch vô FTP (File Transfer Protocol) g¾n víi cæng 21 vµ TFTP (Trivial
File Transfer Protocol) g¾n víi cæng 69 cña UDP.
ViÖc sö dông c¸c port number còng cã nhiÒu c¸ch
• Dïng nh÷ng cæng dµnh riªng cho tõng øng dông ®· ®−îc ®¨ng ký tr−íc
(Well-known port assignment).
• Mét port number sÏ ®−îc sinh ra khi cã mét øng dông ®ßi hái (Dynamic
binding).

42
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• C¸ch tiÕp cËn kÕt hîp c¸c kiÓu trªn (Hybird) võa sö dông Well-known port
assignment cho mét sè port number võa cã thÓ ®Þnh nghÜa c¸c port number
kh¸c khi cÇn thiÕt. C¸c port number th«ng dông cña UDP th−êng ®−îc
dµnh chç tõ 1 tíi 255. Mét sè hÖ ®iÒu hµnh (nh− 4.3 BSD UNIX) cßn dµnh
chç tíi port number 1023, c¸c port number cã thÓ sö dông ®−îc lµ tõ sè
1024 trë lªn.

Mét sè cæng UDP dµnh riªng

0 Reserved
7 Echo
9 Discard
11 Active users
13 Daytime
15 Who is up or NETSTAT
17 Quote of the day
19 Character generator
37 Time
42 Name server
43 Who is
53 Domain name server
67 Boottrap protocol server
68 Boottrap protocol client
69 Trivial File Tranfer Protocol ( TFTP)
111 Sun RPC
123 Network time protocol
161 SNMP net monitor
162 SNMP traps
512 UNIX comsat
513 UNIX rwho process

43
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

514 System log


525 Timed

Cã mét sè lý do ®Ó ng−êi lËp tr×nh øng dông lùa chän UDP nh− mét dÞch
vô giao vËn:
• NÕu mét sè l−îng lín c¸c gãi tin nhá ®−îc truyÒn, th«ng tin cho viÖc kÕt
nèi vµ söa lçi cã thÓ lín h¬n nhiÒu so víi th«ng tin cÇn truyÒn. Trong
tr−êng hîp nµy, UDP lµ gi¶i ph¸p hiÖu qu¶ nhÊt.
• Nh÷ng øng dông kiÓu "Query-Response" còng rÊt phï hîp víi UDP, c©u
tr¶ lêi cã thÓ dïng lµm sù x¸c nhËn cña mét c©u hái. NÕu kh«ng nhËn
®−îc sù tr¶ lêi sau mét thêi gian nµo ®ã, øng dông chØ cÇn göi ®i mét c©u
hái kh¸c.
• Mét sè øng dông ®· tù nã cung cÊp c«ng nghÖ riªng ®Ó chuyÓn giao th«ng
tin tin cËy, vµ kh«ng ®ßi hái dÞch vô nµy cña transport layer.

V.2. Giao thøc ®iÒu khiÓn truyÒn tin (Transmission Control Protocol -
TCP)
Mét sè øng dông ®ßi hái giao thøc giao vËn cung cÊp dÞch vô chuyÓn giao
th«ng tin tin cËy sö dông TCP bëi nã cung cÊp dÞch vô kiÓm tra ®óng ®¾n vµ
d÷ liÖu ®−îc truyÒn víi mét sù phèi hîp thÝch hîp. Mét sè ®Æc ®iÓm cña dÞch
vô tin cËy mµ TCP cung cÊp lµ:
• H−íng dßng (Stream Orientation): TCP coi d÷ liÖu nã göi ®i lµ mét dßng
byte kh«ng ph¶i lµ gãi tin. Do ®ã, TCP ®¶m b¶o sè thø tù cña c¸c byte
göi nhËn. Tr−êng Sequence number vµ Acknowledgment number trong
header cña TCP gi÷ dÊu cña c¸c byte trong toµn bé dßng d÷ liÖu truyÒn.
TCP chuÈn kh«ng b¾t hÖ thèng ph¶i sö dông mét sè ®Æc biÖt nµo ®Ó ®¸nh
sè dßng byte, mçi hÖ thèng tù chän mét sè mµ nã sÏ dïng lµm ®iÓm b¾t
®Çu. Mçi tr¹m cuèi ph¶i biÕt sè thø tù mµ tr¹m kia dïng. Chóng ph¶i trao
®æi mét segment ®Ó ®ång bé hÖ thèng sè sÏ ®−îc sö dông (Synchronize
sequenence number - SYN) trong qu¸ tr×nh b¾t tay. Tr−êng Sequent

44
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

number trong SYN segment chøa sè b¾t ®Çu (ISN) cña dßng sè ®¸nh thø tù,
sè nµy ®−îc chän ngÉu nhiªn. Mçi byte trong d÷ liÖu ®−îc gi÷ dÊu bëi sè
ISN do ®ã byte ®Çu tiªn cña d÷ liÖu mang sè ISN+1. Sequent number chøa
vÞ trÝ cña dßng byte trong gãi tin nÕu ISN=0 vµ 4000 byte ®· ®−îc chuyÓn
giao th× con sè tiÕp theo sÏ lµ 4001.
• ChuyÓn giao bé ®Öm (Buffered Transfer): §Ó gi¶m sè l−îng truyÒn th«ng,
giao thøc cè g¾ng sö dông sè l−îng tèi thiÓu c¸c segment ®Ó truyÒn t¶i
th«ng tin, do vËy, giao thøc sö dông tèi ®a ®é dµi cã thÓ cña segment.
Tr−êng window trong TCP header cho biÕt sè byte tèi ®a mµ tr¹m ®Ých cã
thÓ nhËn ®−îc, nÕu tr¹m ®Ých cã kh¶ n¨ng chÊp nhËn 6000 byte th× tr−êng
window sÏ lµ 6000, tr¹m göi cã thÓ ®iÒu chØnh l¹i d÷ liÖu cho phï hîp. NÕu
tr−êng window mang gi¸ trÞ 0 cã nghÜa lµ tr¹m göi ph¶i chê tíi khi nhËn
®−îc mét sè kh¸c 0.
• KÕt nèi hai chiÒu (Full Duplex Connection): TCP/IP cung cÊp kÕt nèi cho
c¶ hai ®Çu cña liªn kÕt. §iÒu nµy cã nghÜa lµ tÇng phÝa d−íi cung cÊp kh¶
n¨ng göi tr¶ th«ng b¸o tõ tr¹m ®Ých trë l¹i tr¹m nguån. TCP lµ giao thøc
h−íng kÕt nèi. Nã thiÕt lËp quan hÖ logic gi÷a 2 tr¹m tham gia liªn kÕt.
Th«ng tin ®iÒu khiÓn gäi lµ handshake ®−îc trao ®æi gi÷a 2 tr¹m ®Ó thiÕt
lËp héi tho¹i tr−íc khi th«ng tin ®−îc truyÒn. TCP chØ dÉn ch−¬ng tr×nh
®iÒu khiÓn cña mét segment b»ng c¸ch ®Æt mét bit dµnh riªng cña cê t¹i
word thø 4 cña segment header. KiÒu b¾t tay cña TCP gäi lµ three way
handshake bëi v× 3 segment ®−îc trao ®æi. Tr¹m A b¾t ®Çu kÕt nèi b»ng
c¸ch göi mét segment víi bit Synchronize sequenence number (SYN).
Segment nµy b¸o cho tr¹m B thø tù tr¹m A sÏ sö dông cho nh÷ng segment
cña nã göi, sè thø tù nµy ®¶m b¶o cho d÷ liÖu mét trËt tù thÝch hîp. Tr¹m
B ®¸p l¹i tr¹m B víi mét segment víi bit Acknowledgment (ACK) vµ
SYN ®−îc ®Æt. Segment cña B th«ng b¸o r»ng nã ®· nhËn ®−îc th«ng b¸o
cña A vµ b¸o cho A biÕt sè thø tù mµ nã sÏ sö dông. Cuèi cïng, A göi
mét segment b¸o cho B nã ®· nhËn ®−îc th«ng b¸o vµ truyÒn gãi d÷ liÖu
®Çu tiªn. Chó ý r»ng, gãi tin thø nhÊt chøa bit SYN vµ c¸c gãi tiÕp theo

45
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

chøa bit ACK. Sau khi trao ®æi, tr¹m A x¸c ®Þnh hiÓn nhiªn tr¹m ®Ých tån
t¹i vµ ®· s½n sµng nhËn d÷ liÖu. Ngay sau khi kÕt nèi ®−îc thiÕt lËp, d÷
liÖu cã thÓ truyÒn. Khi kÕt thóc hîp t¸c truyÒn giao d÷ liÖu, chóng sÏ trao
®æi three way hanshake chøa bit th«ng b¸o hÕt d÷ liÖu truyÒn No more
data from sender gäi lµ (FIN) ®Ó kÕt thóc kÕt nèi. §ã lµ sù trao ®æi gi÷a
hai tr¹m cung cÊp mét kÕt nèi logic gi÷a hai hÖ thèng.

TCP cung cÊp dÞch vô tin cËy víi mét c¬ chÕ gäi lµ "Positive Ackowledgment
with Retransmission" (PAR). §¬n gi¶n lµ tr¹m nguån tiÕp tôc göi th«ng tin ®i
cho tíi khi nã nhËn ®−îc th«ng b¸o d÷ liÖu ®· ®−îc nhËn chÝnh x¸c t¹i tr¹m
®Ých. §¬n vÞ th«ng tin chuyÓn giao gi÷a c¸c øng dông gäi lµ segment, mçi
segment chøa checksum ®Ó ®¶m b¶o r»ng segment kh«ng bÞ ph¸ huû trªn
®−êng truyÒn, nÕu segment kh«ng bÞ ph¸ huû, tr¹m nhËn göi th«ng b¸o x¸c
nhËn l¹i tr¹m göi, nÕu segment bÞ ph¸ huû, tr¹m nhËn huû bá nã vµ sau mét
thêi gian nµo ®ã, tr¹m göi sÏ göi l¹i gãi tin mµ nã kh«ng nhËn ®−îc th«ng
b¸o x¸c nhËn.

T¹i tr¹m göi Th«ng tin trªn m¹ng T¹i tr¹m nhËn

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

V.2.1. Gãi tin TCP


0 4 8 12 20 24 28 31
Source Port Desstination Port

46
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Sequence Number
Acknowledgment Number
Offset Reserved Flags Window
Checksum Urgent Pointer
Opions Padding
Data

Destination Source Type IP TCP Segment CRC


Address Address field header

Gãi tin TCP chøa trong mét Ethernet frame

• Source Port Cæng nguån


• Destination Port Cæng ®Ých
• Sequence Number Sè thø tù cña gãi tin
• Offset Sè thø tù cña byte ®Çu tiªn
• Reserved §Ó dµnh
• Flags Cê chØ dÉn
• Window Sè byte tèi ®a tr¹m ®Ých cã thÓ nhËn
• Checksum Checksum kiÓm tra tÝnh toµn vÑn
• Urgent Pointer §é dµi d÷ liÖu khÈn ®i sau
• Option Tuú chän
• Padding PhÇn ®iÒn thªm vµo c¸c con sè 0
• Data D÷ liÖu b¾t ®Çu t¹i ®©y

V.2.2. Cæng, kÕt nèi vµ ®iÓm kÕt nèi


TCP còng dïng c¸c port number ®Ó g¸n cho c¸c øng dông vµ cho phÐp truy
cËp tíi c¸c øng dông nµy th«ng qua c¸c port number ®ã.

Cæng TCP dµnh riªng

0 Reserved
1 TCP multiplexor
5 RJE
7 Echo

47
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

9 Discard
11 Active users
13 Daytime
15 Network status program
17 Quote of the day
19 Character generator
20 FTP - data connection
21 FTP - command connection
23 TELNET
25 Simple mail transport protocol
37 Time
42 Name server
43 Who is
53 Domain name server
77 Any private RJE server
79 Finger - find a active user
93 Device control protocol
95 SUPDUP protocol
101 Network info.center host name server
102 OSI - transport service access point
103 X.400 mail service
104 X.400 mail sending
111 Sun microsystems remote procedural call
113 Authentication service
117 UNIX to UNIX copy(UUCP)path service
119 Usenet news tranfer protocol
129 Password generater protocol
139 NetBIOS session service
160-223 Reserved

48
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Tuy còng dïng c¸c port number ®Ó ®Þnh danh cho c¸c øng dông nh−ng mét
cæng kh«ng ®ñ ®Ó ®Þnh danh cho mét thùc thÓ duy nhÊt trªn m¹ng, TCP lµ mét
giao thøc h−íng kÕt nèi do ®ã nã cÇn ph¶i ®Þnh danh cho c¶ hai ®Çu cña liªn
kÕt. TCP ®−a ra ®Þnh nghÜa endpoint lµ mét cÆp sè nguyªn (host, port) trong
®ã, host lµ ®Þa chØ IP cña mét m¸y tÝnh cßn port lµ port number mµ m¸y tÝnh
®ã sö dông. VÝ dô: (190.2.2.1,23) ®Þnh nghÜa cæng 23 cho m¸y tÝnh cã ®Þa chØ
IP lµ 190.2.2.1. Chóng ta sÏ quay l¹i víi kh¸i niÖm endpoint trong ch−¬ng sau.

VI. TÇng øng dông cña TCP/IP

PhÇn lín ng−êi sö dông chØ quan t©m tíi c¸c dÞch vô th«ng tin ®−îc cung cÊp
trªn Internet. C¸c øng dông cã sím nhÊt cña Internet lµ Telnet, FTP, SMTP,
DNS ngoµi ra ngµy nay cã hµng ngµn øng dông kh¸c ®ang ph¸t triÓn vµ ngµy
mét nhiÒu. Sau ®©y chóng ta t×m hiÓu vµ ph©n tÝch mét sè øng dông cña
Internet.

VI.1. DÞch vô tªn miÒn (Domain Name Service - DNS)


ViÖc ®Þnh vÞ c¸c m¸y tÝnh trªn m¹ng b»ng c¸c ®Þa chØ IP cã nhiÒu lîi ®iÓm nh−
®· tr×nh bµy ë phÇn trªn, tuy nhiªn víi ng−êi sö dông, viÖc nhí c¸c con sè ®ã
lµ mét viÖc tÎ nh¹t khã chÞu. H¬n n÷a, ®Þa chØ IP kh«ng mang th«ng tin vÒ ®Þa
lý, tæ chøc hay ng−êi dïng. V× thÕ, ng−êi ta x©y dùng hÖ thèng ®Æt tªn gäi lµ
Domain Name Server ®Ó cung cÊp cho ng−êi dïng c¸ch ®Æt tªn cho c¸c m¸y
tÝnh víi c¸ch ®Æt tªn th«ng th−êng quen thuéc.
Mét domainame th«ng th−êng cã d¹ng:
Tªn_ng−êi_dïng@Tªn_miÒn
víi tªn miÒn ®−îc ph©n lµm c¸c cÊp nèi víi nhau bëi dÊu “.”. Tªn miÒn ®−îc
NIC cung cÊp.
Tªn miÒn cao nhÊt lµ cÊp quèc gia ®−îc ®Æt bëi 2 ch÷ c¸i:
• ar: Argentina
• at: Austria
• au: Australia

49
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• 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: ViÖt nam
• .......
nÕu kh«ng cã g× th× ®−îc hiÓu nh− thuéc USA

Møc tiÕp theo chØ l·nh vùc ho¹t ®éng:


• edu: gi¸o dôc
• gov: chÝnh phñ
• com: th−¬ng m¹i
• mil: qu©n sù
• org: c¸c tæ chøc phi lîi nhuËn
• net: c¸c tæ chøc ph¸t triÓn m¹ng

50
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Sau ®ã cã thÓ lµ tªn c«ng ty vµ tªn m¸y tÝnh.

vn

gov edu com mil org nic

vnuh hut vdc fpt

fit

Ph©n cÊp domain name

Mét m¸y tÝnh cã thÓ cã nhiÒu tªn nh−ng trªn m¹ng, mçi tªn lµ duy nhÊt. ViÖc
¸nh x¹ ®Þa chØ IP vµo tªn miÒn ®−îc thùc hiÖn bëi c¸c Name Server cµi ®Æt t¹i
m¸y Server vµ Name Resolver cµi ®Æt trªn m¸y tr¹m.

VI.2. §¨ng nhËp tõ xa (Telnet)


Telnet cho phÐp ng−êi sö dông tõ mét tr¹m lµm viÖc cña m×nh cã thÓ ®¨ng
nhËp (login) vµo mét tr¹m xa nh− lµ mét ®Çu cuèi (teminal) nèi trùc tiÕp víi
tr¹m xa ®ã.

51
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Client ®äc tõ
tr¹m cuèi Telnet Server nhËn Telnet
th«ng b¸o tõ Server
Client client
Server
göi th«ng
User’s Client göi b¸o tíi
Terminal th«ng b¸o m¸y tÝnh
®Õn server thùc hiÖn
HÖ ®iÒu hµnh HÖ ®iÒu hµnh

TCP/IP
Internet

§Ó ®¨ng nhËp vµo mét m¸y tÝnh ta ®¸nh lÖnh:


telnet [domain name | IP address]

VI.3. Th− ®iÖn tö (Electronic Mail)

§©y lµ mét dÞch vô phæ biÕn nhÊt trªn Internet tr−íc khi World Wide Web ra
®êi, th«ng qua dÞch vô nµy, ng−êi sö dông trªn m¹ng cã thÓ trao ®æi c¸c th«ng
b¸o cho nhau trªn ph¹m vi thÕ giíi. §©y lµ mét dÞch vô mµ hÇu hÕt c¸c m¹ng
diªn réng ®Òu cµi ®Æt vµ còng lµ dÞch vô c¬ b¶n nhÊt cña mét m¹ng khi gia
nhËp Internet. NhiÒu ng−êi sö dông m¸y tÝnh tham gia m¹ng chØ dïng duy
nhÊt dÞch vô nµy. DÞch vô nµy sö dông giao thøc SMTP (Simple Mail Transfer
Protocol) trong hä giao thøc TCP/IP.

Th− ®iÖn tö lµ ph−¬ng thøc trao ®æi th«ng tin nhanh chãng vµ thuËn tiÖn.
Ng−êi sö dông cã thÓ trao ®æi nh÷ng b¶n tin ng¾n hay dµi chØ b»ng mét
ph−¬ng thøc duy nhÊt. RÊt nhiÒu ng−êi sö dông th−êng truyÒn tËp tin th«ng
qua th− ®iÖn tö chø kh«ng ph¶i b»ng c¸c ch−¬ng tr×nh truyÒn tËp tin th«ng
th−êng.

52
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

§Æc ®iÓm cña dÞch vô th− ®iÖn tö lµ kh«ng tøc thêi (off-line) - tÊt c¶ c¸c yªu
cÇu göi ®i kh«ng ®ßi hái ph¶i ®−îc xö lý ngay lËp tøc.

Khi ng−êi sö dông göi mét bøc th−, hÖ thèng sÏ chuyÓn th− nµy vµo mét vïng
riªng (gäi lµ spool) cïng víi c¸c th«ng tin vÒ ng−êi göi, ng−êi nhËn, ®Þa chØ
m¸y nhËn... HÖ thèng sÏ chuyÓn th− ®i b»ng mét ch−¬ng tr×nh ch¹y nÒn
(background). Ch−¬ng tr×nh göi th− nµy sÏ x¸c ®Þnh ®Þa chØ IP m¸y cÇn göi
tíi, t¹o mét liªn kÕt víi m¸y ®ã. NÕu liªn kÕt thµnh c«ng, ch−¬ng tr×nh göi th−
sÏ chuyÓn th− tíi vïng spool cña m¸y nhËn. NÕu kh«ng thÓ kÕt nèi víi m¸y
nhËn th× ch−¬ng tr×nh göi th− sÏ ghi l¹i nh÷ng th− ch−a ®−îc chuyÓn vµ sau ®ã
sÏ thö göi l¹i mét lÇn nã ho¹t ®éng. Khi ch−¬ng tr×nh göi th− thÊy mét th−
kh«ng göi ®−îc sau mét thêi gian qu¸ l©u (vÝ dô 3 ngµy) th× nã sÏ tr¶ l¹i bøc
th− nµy cho ng−êi göi.

Mäi th− trªn Internet ®Òu tu©n theo mét d¹ng chuÈn. Bao gåm phÇn header
chøa ®Þa chØ ng−êi göi, ®Þa chØ ng−êi nhËn d¹ng domain name vµ sau ®ã lµ
phÇn néi dung th−. C¶ hai phÇn ®Òu lµ c¸c ký tù ASCII chuÈn. Th− chuyÓn
trªn m¹ng vµ ®Õn ®−îc ®Ých lµ nhê vµo th«ng tin chøa trong phÇn header cña
th−.

Ban ®Çu th− ®iÖn tö chØ nh»m môc ®Ých trao ®æi c¸c th«ng b¸o (thùc chÊt lµ
c¸c tÖp v¨n b¶n) gi÷a ng−êi sö dông víi nhau. DÇn dÇn ng−êi ta ®· ph¸t triÓn
thªm c¸c biÕn thÓ trªn nã ®Ó phôc vô ng−êi sö dông tèt h¬n hoÆc dïng cho
nh÷ng môc ®Ých riªng biÖt. §ã lµ c¸c dÞch vô th«ng tin dùa trªn th− ®iÖn tö.
Thùc chÊt cña c¸c dÞch vô nµy lµ sö dông th− cã néi dung tu©n theo mét có
ph¸p ®Æc biÖt thÓ hiÖn yªu cÇu cña ng−êi sö dông. C¸c th− nµy ®−îc göi tíi
mét ng−êi sö dông ®Æc biÖt lµ c¸c server, c¸c server nµy ph©n tÝch néi dung
th−, thùc hiÖn c¸c yªu cÇu råi göi tr¶ l¹i kÕt qu¶ cho ng−êi yªu cÇu còng d−íi
d¹ng th− ®iÖn tö.

Cã hai server phæ biÕn trong ho¹t ®éng nµy lµ

• name server cung cÊp dÞch vô tra cøu ®Þa chØ trªn m¹ng

53
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• archive server cho phÐp ng−êi sö dông t×m kiÕm vµ lÊy vÒ nh÷ng tÖp tin
dïng chung.

VI.4. Giao thøc truyÒn tÖp (File Transfer Protocol - FTP)


§©y lµ mét ph−¬ng ph¸p sao chÐp tÖp tõ mét m¸y tÝnh ë xa vÒ m¸y tÝnh cña
ng−êi dïng ta cã thÓ ngåi t¹i m¸y tÝnh cña m×nh truyÒn hoÆc lÊy file trªn mét
m¸y chñ nµo ®ã
VÝ dô lÊy tÖp nettcp.c trªn m¸y chñ sco5 vÒ m¸y tÝnh cña m×nh:
$ ftp sco5
Connected to sco5.
220-
220 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.
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.
$

54
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

VI.5. Nhãm tin (News groups)


News groups lµ nh÷ng nhãm ng−êi dïng th¶o luËn trùc tuyÕn. Mçi ng−êi göi
nh÷ng bµi b×nh luËn vÒ mét vÊn ®Ò nµo ®ã, t¹o thµnh mét nhãm th¶o luËn,
nh÷ng nhãm tin cho phÐp ng−êi dïng tiÕp xóc víi hµng triÖu ng−êi trªn thÕ
giíi cã cïng mèi quan t©m. Internet cã gÇn 20.000 nhãm tin nh− vËy

VI.6. T×m kiÕm tÖp (Archie)

Do trªn Internet hiÖn nay cã kho¶ng trªn 3 triÖu tÖp vµ hµng ngh×n ftp server
vµ sè l−îng ®ã ngµy cµng t¨ng nhanh. Archie lµ mét dÞch vô gióp ®ì t×m kiÕm
c¸c tÖp tin kh¸c nhau theo mét sè c¸c th«ng tin nµo ®ã. Th«ng th−êng dÞch vô
nµy cho phÐp t×m kiÕm tÖp theo tªn hoÆc mét x©u con cña tªn tÖp. Nã ch−a
cho phÐp t×m kiÕm theo chñ ®Ò hay néi dung. Tuy vËy nã trî gióp cho ftp rÊt
nhiÒu ®Ó cã thÓ lÊy tÖp dÔ dµng h¬n.

VI.7. Tra cøu th«ng tin theo thùc ®¬n (Gopher)

Sö dông giao thøc Gopher protocol ®Ó t×m kiÕm tµi nguyªn cña m¹ng. DÞch vô
nµy cho phÐp t×m kiÕm vµ tra cøu th«ng tin theo chñ ®Ò cña th«ng tin. ViÖc tra
cøu nµy ®−îc thùc hiÖn qua hÖ thèng thùc ®¬n th©n thiÖn h¬n víi ng−êi sö
dông. Nã cã −u ®iÓm lµ cã thÓ tra cøu trªn nhiÒu m¸y chñ cïng mét lóc. H¹n
chÕ cña Gopher lµ hiÓn thÞ th«ng tin qu¸ tãm t¾t, c¸c chøc n¨ng cung cÊp
trong thùc ®¬n cßn ch−a nhiÒu.

VI.8. T×m kiÕm th«ng tin theo chØ sè (WAIS)

Kh¸c víi Gopher t×m kiÕm th«ng tin qua c¸c ®Ò môc ®Þnh s½n, WAIS cho phÐp
nguêi dïng t×m kiÕm c¸c tÖp d÷ liÖu cã chøa c¸c x©u ®Þnh tr−íc. Ngoµi c¸c
øng dông client, server WAIS cßn cã mét phÇn ®Æc biÖt lµ indexer lµm nhiÖm
vô cËp nhËt c¸c tµi liÖu míi, s¾p xÕp chóng d−íi d¹ng thÝch hîp ®Ó thuËn tiÖn
cho viÖc t×m kiÕm. WAIS server khi nhËn ®−îc c©u hái cña client sÏ t×m kiÕm
trong c¬ së d÷ liÖu t¹o ra bëi indexer vµ tr¶ lêi cho client.

55
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

VI.9. Siªu v¨n b¶n (WWW)


Ng−êi ta nãi r»ng WWW lµ linh hån cña Internet v× nã cung cÊp cho ng−êi
dïng mét giao diÖn lý t−ëng khi lµm viÖc víi Internet. Ng−êi dïng m¸y tÝnh
kh«ng cÇn cã hiÓu biÕt s©u vÒ m¸y tÝnh còng cã thÓ sö dông nã nh− mét c«ng
cô ®¾c lùc ®Ó ngåi t¹i nhµ xem toµn bé thÕ giíi víi sè l−îng th«ng tin ®å sé
®−îc cËp nhËt tõng gi©y.
WWW dùa trªn ý t−ëng siªu v¨n b¶n Hypertext trong ®ã chøa c¸c Hyperlink
®Õn c¸c v¨n b¶n kh¸c vµ nh− vËy, ta cã thÓ më réng m·i m·i trang v¨n b¶n cña
m×nh.
WWW ngµy nay ®−îc më réng víi kh¸i niÖm siªu ph−¬ng tiÖn Hypermedia
bao gåm c¶ h×nh ¶nh, ©m thanh..
Ngµy nay, phÇn lín øng dông trªn Internet tõ gi¶i trÝ ®Õn truy cËp c¬ së d÷
liÖu ®Òu ®−îc thùc hiÖn trªn WWW.

56
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Ch−¬ng IV.X©y dùng øng dông truyÒn tÖp

I. Giao diÖn lËp tr×nh

I.1. Giao diÖn lËp tr×nh


Bé giao thøc TCP/IP ®· ®Þnh nghÜa ®Çy ®ñ c¸c giao thøc truyÒn th«ng ®Ó c¸c
m¸y tÝnh trªn m¹ng cã thÓ giao tiÕp víi nhau, che ®i cÊu tróc vËt lý cña m¹ng.
Tuy nhiªn, ®Ó x©y dùng c¸c øng dông th× sö dông TCP/IP lµ kh«ng ®ñ, bëi v×
ng−êi lËp tr×nh sÏ ph¶i tù m×nh x©y dùng nh÷ng thñ tôc gi¶i quyÕt tõng sù
kiÖn, mét giao diÖn (Application Program Interface) lËp tr×nh lµ cÇn thiÕt ®Ó
cung cÊp cho ng−êi lËp tr×nh mét c¸ch tiÕp cËn ®¬n gi¶n, dÔ hiÓu h¬n.

TiÕn tr×nh øng dông

Th− viÖn

Giao diÖn víi nh©n hÖ ®iÒu hµnh

Giao diÖn víi phÇn cøng

PhÇn cøng

UNIX cung cÊp cho ng−êi lËp tr×nh hai giao diÖn chÝnh cho lËp tr×nh C:
• Sockets lÇn ®Çu tiªn xuÊt hiÖn trong b¶n BSD UNIX n¨m 1982 vµ nhanh
chãng ph¸t triÓn réng r·i trong mét kho¶ng thêi gian ng¾n. §−îc ph¸t triÓn
thªm vµo n¨m 1990 ®Ó hç trî giao thøc ISO. Socket ®−îc g¾n víi kh¶ n¨ng
truyÒn th«ng dÔ dµng gi÷a c¸c tiÕn tr×nh c¶ trªn m¹ng vµ trªn mét m¸y
tÝnh. Môc tiªu cña nã lµ che dÊu cµng nhiÒu cµng tèt nh÷ng g× x¶y ra ë tÇng
truyÒn th«ng phÝa d−íi.

57
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• TLI (Transport Layer Interface) Ph¸t triÓn ®Çu tiªn cho UNIX System V
3.0 cã nh÷ng hµm vµ thñ tôc t−¬ng ®−¬ng víi Socket nh−ng m« h×nh phøc
t¹p h¬n ®Ó ®¹t ®−îc tÝnh mÒm dÎo h¬n.

I.2. Network I/O vµ file I/O


HÖ ®iÒu hµnh UNIX, cã 6 lêi gäi hÖ thèng vµo ra file ®ã lµ:
• open: Më file.
• creat: T¹o file.
• close: §ãng file.
• read: §äc tõ file.
• write: Ghi file.
• lseek: ChuyÓn con trá file.
Vµ UNIX coi mçi thiÕt bÞ ®Òu nh− mét file, cã thÓ ®−îc truy cËp nh− mét file.

Tuy nhiªn viÖc vµo ra trªn m¹ng víi giao diÖn lËp tr×nh øng dông phøc t¹p
h¬n v×:
• M« h×nh Client-Server lµ kh«ng ®èi xøng, ta ph¶i x¸c ®Þnh ch−¬ng tr×nh
nµo ®ãng vai trß Client, ch−¬ng tr×nh nµo ®ãng vai trß Server.
• Mét ®èi tho¹i trªn m¹ng cã thÓ lµ h−íng kÕt nèi hoÆc kh«ng kÕt nèi.
• Mét tiÕn tr×nh con cã thÓ sö dông file descriptor cña ch−¬ng tr×nh cha
truyÒn cho ®Ó lµm viÖc víi file mµ kh«ng cÇn biÕt ®Õn tªn file thùc sù. C¸c
øng dông trªn m¹ng cÇn biÕt ®−îc ®Çu kia cña kÕt nèi ®Ó ch¾c ch¾n r»ng nã
®−îc phÐp ®ßi hái dÞch vô.
• Trong phÇn nãi vÒ giao thøc TCP/IP chóng ta ®· biÕt ®Ó thiÕt lËp kÕt nèi
cÇn nhiÒu tham sè h¬n ®èi víi file I/O, ®ã lµ giao thøc (protocol), ®Þa chØ
IP ®Ých (Destination IP Address), ®Þa chØ IP nguån (Source IP Address), sè
hiÖu cæng ®Ých (Destination port number), sè hiÖu cæng nguån (Source port
number).

58
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• Giao diÖn m¹ng ph¶i hç trî nhiÒu giao thøc truyÒn th«ng vÝ dô c¸c chuÈn
cña tÇng cao víi tÇng thÊp h¬n.

I.3. Lµm viÖc víi Socket


Nh− ®· giíi thiÖu ë trªn, Socket ®−îc g¾n víi kh¶ n¨ng truyÒn th«ng dÔ dµng
gi÷a c¸c tiÕn tr×nh c¶ trªn m¹ng vµ trªn mét m¸y tÝnh. Vµ nã lµ che dÊu cµng
nhiÒu cµng tèt nh÷ng g× x¶y ra ë tÇng truyÒn th«ng phÝa d−íi. Chóng ta sÏ lùa
chän Socket ®Ó ph¸t triÓn øng dông cña m×nh trªn m¹ng dùa trªn m« h×nh
Client-Server.

Application

Socket Library

User

Kernel

Stream Head

SHOCKMOD

TPI
Transport Provider

I.3.1. Socket

Nãi chung c¬ chÕ socket t−¬ng tù víi c¬ chÕ truy nhËp tÖp trong UNIX. Khi
cÇn thiÕt tiÕn tr×nh cã thÓ t¹o ra mét socket, hÖ thèng tr¶ l¹i kÕt qu¶ lµ mét
socket descriptor. Sù kh¸c biÖt gi÷a file descriptor vµ socket descriptor ë chç
file descriptor ®−îc g¾n liÒn víi mét tÖp hay thiÕt bÞ cè ®Þnh cßn socket
descriptor kh«ng bÞ g¾n víi mét ®Þa chØ nµo. Ch−¬ng tr×nh cã thÓ cung cÊp ®Þa
chØ t¹i mçi lÇn truy nhËp tíi socket hay còng cã thÓ g¾n socket descriptor víi

59
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

mét ®Þa chØ nhÊt ®Þnh. Do nã t−¬ng thÝch víi c¬ chÕ truy nhËp tÖp, nªn vÉn cã
thÓ dïng c¸c lÖnh th«ng dông nh− read, write ®èi víi socket.

Mét Socket ®−îc dïng nh− mét endpoint. Mçi Socket g¾n víi mét nhãm
• SHOCK_STREAM sö dông cho dÞch vô h−íng kÕt nèi .
• SHOCK_DGRAM sö dông cho dÞch vô kh«ng kÕt nèi.
• SHOCK_RAW cung cÊp truy cËp trùc tiÕp vµo giao thøc ®Ó x©y dùng c«ng
cô qu¶n trÞ ë møc user.
• SHOCK_SEQPACKET Gièng nh− SHOCK_STREAM nh−ng cung cÊp
biªn giíi c¸c mesage.
• SHOCK_RDM Cung cÊp dÞch vô kh«ng kÕt nèi ®¬n gi¶n.

I.3.2. §Þa chØ Socket

Cã hai lo¹i ®Þa chØ ®−îc g¸n víi mét socket: §Þa chØ local vµ ®Þa chØ TCP/IP.
§Þa chØ nµy ®−îc khai b¸o lµ nh÷ng b¶n ghi vµ ®−îc dïng lµm tham sè cho
nh÷ng lÖnh hÖ thèng vµ thñ tôc truy nhËp socket. §Þa chØ local lµ ®Þa chØ ®Ó
x¸c ®Þnh socket trong néi bé m¸y.

CÊu tróc ®Þa chØ côc 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; /* address family */
char sa_data[14]; /* up to 14 bytes address */
};

Tr−êng address family sÏ quyÕt ®Þnh cÊu tróc ®Þa chØ cña tr−êng Address bytes
phÝa sau v× socket hç trî cho nhiÒu giao thøc kh¸c nhau nªn øng víi mçi giao
thøc tr−êng ®Þa chØ sÏ cã cÊu tróc kh¸c nhau.

60
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Protocol family Description

PF_UNSPEC Unspecified family


PF_UNIX UNIX domain
PF_INET Internet protocols
PF_IMPLINK Arpanet IMP address
PF_PUP Old Xerox protocols
PF_CHAOS M.I.T. CHAOS protocols
PF_NS Xerox Network system protocols
PF_NBS NBS protocols
PF_ECMA European Computer Manual
PF_DATAKIT DATAKIT protocols
PF_CCITT CCITT protocols
PF_SNA IBM System Network Architeture
PF_DECnet DECnet protocols
PF_DLI DEC direct data link interface
PF_LAT LAN terminal interface
PF_HYLINK NSC Hyperchannel
PF_APPLETALK Apple Talk protocols
PF_NIT Network interface tap
PF_802 IEEE 802.2
PF_OSI OSI protocols
PF_X25 CCITT X.25
PF_OSINET OSI protocols
PF_GOSIP U.S.government OSI protocols
Protocol Families

§Þa chØ TCP/IP ®−îc khai b¸o víi tªn sockaddr_in. Nã chøa sè hiÖu port vµ
®Þa chØ IP 32-bit.

61
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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 sin_family; /* = AF_INET */
u_short sin_port; /* 16-bit port number */
struct in_addr sin_addr; /* 32-bit IP Addresss */
char sa_zero[14]; /*unused*/
};
I.3.3. Mét sè lêi gäi t¹o lËp socket
Lêi gäi socket():
Muèn lµm viÖc víi socket th× viÖc ®Çu tiªn lµ ph¶i t¹o socket ®ã. §Ó lµm viÖc
®ã cÇn gäi lÖnh socket() víi c¸c tham sè cÇn thiÕt. Hµm tr¶ l¹i mét socket
descriptor nÕu thµnh c«ng, -1 nÕu cã lçi.
int socket (int family, int type, int protcol)

• Tham sè family x¸c ®Þnh hä giao thøc ®−îc sö dông víi socket nh− ®· nãi
®Õn ë trÖn.

AF_UNIX Giao thøc néi bé UNIX


AF_INER Giao thøc Internet(TCP/IP)
AF_NS Giao thøc Xeror NS
AF_IMPLINK Giao thøc líp IMP
• Tham sè type x¸c ®Þnh kiÓu cña liªn kÕt. Nh÷ng kiÓu cã thÓ sö dông lµ
d¹ng stream cã ®é tin cËy cao (SOCK_STREAM), d¹ng datagram
(SOCK_DGRAM) hay d¹ng th« (SOCK_RAW) cho phÐp truy nhËp tíi
møc thÊp cña m¹ng.

VÝ dô:

62
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

AF_UNIX AF_INET AF_NS


SOCK_STREAM Cã TCP Cã
SOCK_DGRAM Cã UDP Cã
SOCK_RAW IP Cã

Do ®ã tham sè thø ba x¸c ®Þnh chÝnh x¸c giao thøc nµo ®−îc sö dông cho
socket. Tuy vËy trong rÊt nhiÒu øng dông tham sè nµy kh«ng ®−îc sö dông.

Lêi gäi bind()


Khi míi ®−îc t¹o ra, socket kh«ng ®−îc g¾n víi bÊt cø ®Þa chØ nµo. Nãi riªng
víi TCP/IP lµ nã ch−a ®−îc g¸n víi sè hiÖu port cña tiÕn tr×nh göi, sè hiÖu port
cña tiÕn tr×nh nhËn còng nh− ®Þa chØ IP. NhiÒu ch−¬ng tr×nh kh«ng quan t©m
®Õn sè hiÖu port vµ ®Þa chØ cña nã, vµ dµnh cho phÇn mÒm giao thøc tù g¸n.
Tuy nhiªn c¸c ch−¬ng tr×nh kh¸c vÉn cÇn biÕt ®Õn ®Þa chØ cña m×nh. LÖnh bind
g¸n thiÕt lËp mét ®Þa chØ local cho socket vµ ®¨ng ký nã víi hÖ thèng.

int bind(int sock, struct sockaddr * localaddr, int addrlen)

Lêi gäi bind() ®−îc sö dông trong c¸c tr−êng hîp sau:
• Ch−¬ng tr×nh server ®¨ng ký mét ®Þa chØ th«ng dông víi hÖ thèng. Mäi d÷
liÖu ®Õn ®Þa chØ nµy sÏ ®−îc chuyÓn cho nã.
• Mét ch−¬ng tr×nh client ®¨ng ký mét ®Þa chØ ®Æc biÖt.
• Mét ch−¬ng tr×nh client cã kiÓu kh«ng kÕt nèi (connectionless) muèn kiÓm
tra xem ®Þa chØ cña nã cã hîp lÖ hay kh«ng.
Lêi gäi connect
§Ó thiÕt lËp ®−îc mét liªn kÕt gi÷a client víi server, tiÕn tr×nh cÇn ph¶i gäi
lÖnh connect.

int connect(int sock, struct sockaddr * seraddr, int addrlen)

Tham sè lÖnh nµy t−¬ng tù ®èi víi lÖnh bind() nh−ng seraddr trá tíi ®Þa chØ
cña server (tøc lµ ®Çu kia cña liªn kÕt).

• §èi víi c¸c giao thøc cã liªn kÕt (connection-oriented), connect() sÏ t¹o lËp
mét liªn kÕt thùc sù gi÷a hai m¸y. C¸c th«ng tin ®−îc trao ®æi nh»m thèng

63
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

nhÊt mäi tham sè liªn quan. Nã sÏ ch−a tho¸t ra nÕu nh− ch−a thiÕt lËp
®−îc liªn kÕt hoÆc ch−a nhËn ®−îc th«ng b¸o lçi.

• §èi víi c¸c giao thøc kh«ng liªn kÕt (connectionless) lÖnh connect() ®¬n
gi¶n chØ cÊt gi÷ ®Þa chØ server (biÕn seraddr) ®Ó tiÕn tr×nh sau nµy sö dông
khi trao ®æi d÷ liÖu. Víi giao thøc nµy viÖc gäi lÖnh connect() cã thÓ bá
qua nh−ng viÖc sö dông nã sÏ t¹o ra sù thuËn tiÖn ®èi víi ng−êi lËp tr×nh.
Sau khi ®¨ng ký ®Þa chØ víi hÖ thèng th× sÏ kh«ng cÇn ph¶i x¸c ®Þnh l¹i ®Þa
chØ mçi khi göi ®i c¸c datagram. Ng−êi sö dông cã thÓ dïng c¸c lÖnh read,
write, recv, send t−¬ng tù nh− c¸c socket cã kÕt nèi.

Ngoµi ra, connect cßn kiÓm tra xem cã thùc sù mét tiÕn tr×nh nµo nhËn th«ng
tin m×nh sÏ göi hay kh«ng. NÕu ®Þa chØ göi kh«ng tån t¹i connect sÏ tr¶ l¹i lçi
cho tiÕn tr×nh gäi. ViÖc nµy lµm cho tiÕn tr×nh cã thÓ xö lý lçi tèt h¬n so víi
c¸c giao thøc kh«ng kÕt nèi (vÝ dô UDP). Mét datagram cã thÓ chøa mét ®Þa
chØ sai vµ hoµn toµn kh«ng cã ng−êi nhËn.

Lêi gäi listen()

Ta sÏ xem xÐt mét tiÕn tr×nh server, tiÕn tr×nh nµy ®Çu tiªn t¹o ra mét socket,
g¾n nã víi mét port th«ng dông råi chê cho ®Õn khi cã mét yªu cÇu ®−îc göi
tíi. NÕu nã lµ mét liªn kÕt kÕt nèi thùc sù, hoÆc nã ph¶i xö lý qu¸ l©u ®èi víi
mçi yªu cÇu, sÏ x¶y ra tr−êng hîp lµ mét yªu cÇu míi sÏ tíi trong khi yªu cÇu
cò ch−a ®−îc xö lý xong. §Ó tr¸nh viÖc c¸c yªu cÇu míi bÞ tõ chèi, server ph¶i
khai b¸o víi phÇn mÒm cña giao thøc t¹o ra cho nã mét hµng ®îi c¸c yªu cÇu.
LÖnh listen() sÏ khai b¸o hµng ®îi nµy.

int listen(int sock, int qlen)

• Tham sè sock lµ socket descriptor ®−îc dïng bëi server.

• Tham sè qlen quyÕt ®Þnh chiÒu dµi hµng ®îi c¸c yªu cÇu. Gi¸ trÞ tèi ®a cña
tham sè nµy lµ 5.

64
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Khi hµng ®îi nµy ®· ®Çy, hÖ thèng sÏ kh«ng chÊp nhËn thªm mét yªu cÇu nµo
kh¸c. Mäi yªu cÇu tíi sau ®ã sÏ bÞ huû bá. listen() chØ ¸p dông víi socket
kiÓu STREAM.

Lêi gäi accept()

Sau khi tiÕn tr×nh server gäi c¸c lÖnh socket(), bind(), listen() ®Ó t¹o ra mét
socket, g¾n nã víi mét port th«ng dông, x¸c ®Þnh chiÒu dµi hµng ®îi, server sÏ
gäi lÖnh accept() ®Ó t¹o ra mét kÕt nèi hoµn thiÖn.

int accept(int sock, struct sockaddr * addr, int addrlen)

Tham sè addr dïng ®Ó tr¶ l¹i ®Þa chØ cña tiÕn tr×nh göi yªu cÇu (client).
accept() sÏ lÊy yªu cÇu ®Çu tiªn trong hµng ®îi vµ t¹o ra mét socket míi cã
cïng thuéc tÝnh víi sock. NÕu trong hµng ®îi kh«ng cã mét yªu cÇu nµo th×
nã sÏ chê cho ®Õn khi cã mét yªu cÇu ®−îc göi tíi. Socket sock vÉn ®−îc gi÷
nguyªn do vËy server vÉn tiÕp tôc chÊp nhËn c¸c yªu cÇu kh¸c göi tíi socket
nµy.

Víi c¸ch tiÕp cËn t−¬ng t¸c, server tù xö lý gi¶i quyÕt yªu cÇu sau ®ã ®ãng
socket nµy l¹i vµ quay vÒ xö lý tiÕp c¸c yªu cÇu sau ®ã.

Cßn ®èi víi ph−¬ng ph¸p ®ång thêi, sau khi lÖnh accept() tr¶ l¹i kÕt qu¶ server
sÏ sinh ra mét tiÕn tr×nh con ®Ó gi¶i quyÕt yªu cÇu. TiÕn tr×nh con sÏ nhËn
®−îc mét b¶n sao cña socket míi. Trong khi ®ã tiÕn tr×nh server sÏ lËp tøc
®ãng socket míi cña nã sau khi t¹o ra tiÕn tr×nh con vµ trë l¹i gäi accept() ®Ó
nhËn mét yªu cÇu míi.

Lêi gäi close()

Khi mét tiÕn tr×nh th«i kh«ng sö dông socket th× nã gäi lÖnh close()

int close(int sock)


sock lµ socket cÇn huû bá. Khi mét tiÕn tr×nh kÕt thóc víi mäi lý do, hÖ thèng
sÏ ®ãng tÊt c¶ c¸c socket cßn më. §èi víi c¸c giao thøc tin cËy, mÆc dï socket

65
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

®· bÞ ®ãng nh−ng kernel vÉn cè g¾ng göi ®i c¸c d÷ liÖu cßn l¹i trong hµng ®îi
d÷ liÖu.

I.3.4. Mét sè lêi gäi göi d÷ liÖu qua socket

Cã 5 lêi gäi ®−îc dïng ®Ó göi d÷ liÖu qua socket. C¸c lÖnh write, writev, send
lµm viÖc víi c¸c socket ®· kÕt nèi v× chóng kh«ng cho phÐp khai b¸o ®Þa chØ
ng−êi nhËn.

Lêi gäi send()

Lêi gäi send cã 4 tham sè :

int send(int sock, char * buff, int len, int flag)

• sock chØ ®Þnh socket ®−îc sö dông,

• buff trá tíi vïng d÷ liÖu ®−îc göi ®i,

• len x¸c ®Þnh sè byte trong buff ®−îc göi ®i.

• flag cho phÐp ng−ßi göi chän mét sè c¸ch thøc ®Ó göi d÷ liÖu vÝ dô nh− göi
d÷ liÖu out-of-band...

C¸c tham sè nµy kh¸c nhau ®èi víi mçi lo¹i socket. send() tr¶ l¹i m· lçi cho
ch−¬ng tr×nh gäi ®Ó ch−¬ng tr×nh biÕt ®−îc thao t¸c cã thµnh c«ng hay kh«ng.

Lêi gäi write()

Do c¸ch thøc truy nhËp tíi socket t−¬ng tù truy nhËp ®Õn file nªn cã thÓ dïng
lÖnh hÖ thèng write ®Ó göi d÷ liÖu qua socket.

int write(int fd, char * buff, int len)

Tham sè fd cã thÓ lµ mét socket descriptor hoÆc file descriptor.

Lêi gäi writev()

§Ó göi ®i mét danh s¸ch c¸c khèi d÷ liÖu ta dïng

int writev(int fd, struct iovec iovector[], int vectorlen)

66
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

C¸c lêi gäi sendto(), sendmsg()

§−îc dïng cho c¸c socket kh«ng kÕt nèi. Hai lÖnh nµy yªu cÇu ph¶i cung cÊp
®Þa chØ ng−êi nhËn.

int sendto(int sock, char * buff, int len, int flag, struct sockaddr * destaddr,
int addrlen)

• Bèn tham sè ®Çu gièng nh− bèn tham sè cña send().

• Hai tham sè sau lµ ®Þa chØ cña ng−êi nhËn vµ ®é dµi cña ®Þa chØ.

Do sendto() cã qu¸ nhiÒu tham sè, lËp tr×nh viªn cã thÓ sö dông lêi gäi
sendmsg()

int sendmsg(int sock, struct msghdr msg[], int flag)

Víi tham sè msg lµ mét cÊu tróc cã chøa ®Þa chØ vµ danh s¸ch nhiÒu ®o¹n d÷
liÖu cÇn göi ®i.

I.3.5. Mét sè lêi gäi nhËn d÷ liÖu tõ socket

T−¬ng øng víi 5 lÖnh ®Ó göi d÷ liÖu cã 5 lÖnh dïng ®Ó nhËn d÷ liÖu víi tham
sè vµ c¬ chÕ hoµn toµn gièng 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)

67
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

II. M« h×nh Client-Server

Theo c¸ch nh×n cña ng−êi lËp tr×nh, TCP/IP gièng nh− hÇu hÕt c¸c giao thøc
truyÒn th«ng kh¸c cung cÊp c¬ chÕ c¬ b¶n ®Ó truyÒn d÷ liÖu. §Æc biÖt, TCP/IP
cho phÐp ng−êi lËp tr×nh thiÕt lËp truyÒn th«ng gi÷a hai ch−¬ng tr×nh øng dông
vµ truyÒn d÷ liÖu qua l¹i. TCP/IP cung cÊp kÕt nèi b×nh ®¼ng gi÷a c¸c øng
dông kÓ c¶ c¸c øng dông ch¹y trªn cïng mét m¸y.
Mét ph¸t triÓn cña m« h×nh peer-to-peer lµ m« h×nh Client-Server ®· trë thµnh
m« h×nh c¬ b¶n ®−îc sö dông trªn m¹ng m¸y tÝnh. Ch−¬ng tr×nh Server lµ mét
ch−¬ng tr×nh chê ®îi kÕt nèi tõ ch−¬ng tr×nh Client vµ cung cÊp dÞch vô cho
Client.
M« h×nh ®−îc m« t¶ nh− sau:
• TiÕn tr×nh Server ®−îc khëi ®éng trªn mét hÖ thèng nµo ®ã sau ®ã chê ®îi
mét tiÕn tr×nh Client kÕt nèi ®Õn yªu cÇu dÞch vô.
• TiÕn tr×nh Client ®−îc khëi ®éng trªn cïng hÖ thèng m¸y víi ch−¬ng tr×nh
Server hoÆc tõ mét hÖ thèng kh¸c kÕt nèi víi hÖ thèng chñ th«ng qua
m¹ng. Client göi yªu cÇu qua m¹ng tíi tiÕn tr×nh Server ®ßi hái mét sè dÞch
vô nh−:
◊ Tr¶ l¹i ngµy giê cho Client
◊ In mét file cho Client
◊ §äc hoÆc ghi file vµo hÖ thèng file cña Server
◊ Cho phÐp Client login vµo hÖ thèng Server
◊ Ch¹y ch−¬ng tr×nh cña Client trªn hÖ thèng Server
• Sau khi cung cÊp dÞch vô cho Client, Server tiÕp tôc nghØ vµ chê ®îi kÕt nèi
kh¸c.
Chóng ta cã thÓ chia tiÕn tr×nh Server lµm 2 kiÓu:
• T−¬ng t¸c (Interative Server): Khi Client ®ßi hái nh÷ng dÞch vô ®· ®¨ng ký
tr−íc víi kho¶ng thêi gian thùc hiÖn nhá, Server tù lµm c«ng viÖc ®ã vÝ dô
dÞch vô tr¶ l¹i ngµy giê.

68
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• §ång thêi (Concurrent Server): Víi nh÷ng yªu cÇu ®ßi hái thêi gian thùc
hiÖn lín, tiÕn tr×nh Server sinh mét tiÕn tr×nh con ®Ó thùc hiÖn yªu cÇu cßn
nã tiÕp tôc chê ®îi yªu cÇu kh¸c. DÞch vô in file, ®äc-ghi file ®−îc thùc
hiÖn theo kiÓu nµy.

II.1. M« h×nh Client-Server sö dông dÞch vô kh«ng kÕt nèi


Víi m« h×nh kh«ng kÕt nèi, client kh«ng kÕt nèi víi server mµ chØ göi d÷ liÖu
®Õn sö dông lêi gäi sento(), ng−îc l¹i, server sö dông lêi gäi recvfrom() chê
®îi d÷ liÖu tõ client chuyÓn ®Õn. Lêi gäi recvfrom() tr¶ l¹i ®Þa chØ cña client,
nhê ®ã server cã thÓ göi kÕt qu¶ l¹i cho client.

Server
(connectionless protocol)

socket()

bind()
Client

recvfrom() socket()

block until data bind()


received from client

data (request) sendto()

process request

sendto() data (reply)


recvfrom()

Lêi gäi socket cho m« h×nh client-server kh«ng kÕt


èi

69
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

II.2. M« h×nh Client-Server sö dông dÞch vô h−íng kÕt nèi


Víi m« h×nh Client-Server sö dông dÞch vô h−íng kÕt nèi, ®Çu tiªn Server
®−îc khëi ®éng vµ chê ®îi mét kÕt nèi tõ client.
Sau khi kÕt nèi ®−îc thiÕt lËp, hai bªn lu©n phiªn nhau göi nhËn d÷ liÖu th«ng
qua ®−êng truyÒn.
Server
(connection-oriented protocol)

socket()

bind()

listen()

accept()
Client

block until connection


socket()
from client
Connection establishment
Connect()

data (request) write()


read()

Process request

write() data (reply)


read()

Lêi gäi socket cho m« h×nh client-server h−íng kÕt nèi

70
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

III. X©y dùng ch−¬ng tr×nh truyÒn tÖp

III.1. ThiÕt kÕ vµ cµi ®Æt ch−¬ng tr×nh

III.1.1. Giao thøc øng dông ®−îc x©y dùng vµ sö dông trong ch−¬ng
tr×nh
B¶n th©n giao thøc TCP lµ mét giao thøc h−íng kÕt nèi vµ ®¸ng tin cËy, giao
thøc nµy ®¶m b¶o d÷ liÖu truyÒn vµo socket ®Çy ®ñ, nh−ng ®Ó t¨ng c−êng tÝnh
tin cËy cña ch−¬ng tr×nh øng dông vµ ®Ó kiÓm so¸t viÖc truyÒn d÷ liÖu nhÊt lµ
trªn c¸c m¹ng cã ®é trÔ lín hay nh÷ng m¹ng th−êng xuyªn x¶y ra hiÖn t−îng
qu¸ t¶i, mét giao thøc øng dông riªng ®−îc x©y dùng cho ch−¬ng tr×nh.

Gãi tin cña giao thøc øng dông ®−îc m« t¶ nh− sau:
0 1 2 D÷ liÖu tèi ®a 4094 byte
Size Data

• Size dµi 2 byte chøa ®é dµi cña phÇn d÷ liÖu cña gãi tin.
• Data chøa d÷ liÖu, tr−êng nµy cã ®é dµi tèi ®a lµ 4094 byte v× giao thøc sö
dông gãi tin dµi tèi ®a 4096 byte.
ViÖc sö dông c¸c kÕt nèi:
Ch−¬ng tr×nh sö dông hai kÕt nèi, mét ®Ó truyÒn lÖnh vµ mét ®Ó truyÒn d÷ liÖu
gi÷a client vµ server.
• Kªnh truyÒn ®iÒu khiÓn dïng ®Ó truyÒn c¸c lÖnh vµ c¸c th«ng b¸o cã tÝnh
chÊt ®iÒu khiÓn, ®iÒu nµy lµm gi¶m tÝnh phøc t¹p trong viÖc ph©n tÝch vµ xö
lý c¸c lÖnh cña ch−¬ng tr×nh.
• Kªnh truyÒn d÷ liÖu ®−îc thiÕt lËp ngay trong qu¸ tr×nh t¹o kÕt nèi gi÷a
tiÕn tr×nh client vµ tiÕn tr×nh server vµ ®−îc dïng ®Õn mçi khi cã d÷ liÖu
cÇn truyÒn nhËn gi÷a client vµ server. C¸c khèi d÷ liÖu cã thÓ ®−îc chia
nhá thµnh c¸c gãi tin vµ truyÒn trªn kªnh d÷ liÖu, kÕt thóc mét khèi d÷ liÖu
lµ mét gãi tin cã ®é dµi b»ng 0.

71
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

ViÖc sö dông hai kªnh truyÒn


Cã 3 lo¹i lÖnh trong ch−¬ng tr×nh sö dông c¸c kªnh truyÒn nh− sau:
• Client göi lÖnh ®Õn server vµ nhËn vÒ mét th«ng b¸o trªn kªnh ®iÒu khiÓn
vÝ dô th«ng b¸o lçi hoÆc hoµn thµnh lÖnh.

Client Server

Göi lÖnh
NhËn lÖnh vµ thi hµnh

Göi th«ng b¸o hoµn


NhËn
thµnh lÖnh hoÆc b¸o lçi
th«ng b¸o

• Client göi lÖnh ®Õn server vµ nhËn vÒ mét th«ng b¸o cã d÷ liÖu truyÒn
“Openning data port”. Khi ®ã, client b¾t ®Çu nhËn d÷ liÖu trªn kªnh d÷ liÖu
cho tíi khi nhËn ®−îc mét gãi tin cã ®é dµi lµ 0.

Client Server

Göi lÖnh
NhËn lÖnh vµ thi hµnh

NhËn Göi th«ng b¸o cã d÷


th«ng b¸o liÖu cÇn truyÒn

NhËn d÷ liÖu ë Göi lÇn l−ît c¸c gãi tin


kªnh d÷ liÖu tíi kÕt thóc bëi mét gãi cã
khi gãi tin cã ®é ®é dµi lµ 0
dµi lµ 0

• Client göi lÖnh yªu cÇu truyÒn tÖp lªn server, server göi l¹i th«ng b¸o chÊp
nhËn. Client ghi d÷ liÖu cÇn truyÒn vµo kªnh d÷ liÖu, sau khi ghi xong,

72
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

client chê ®îi mét th«ng b¸o cña server trªn kªnh ®iÒu khiÓn truyÒn l¹i sè
l−îng byte ®· nhËn vµ th«ng b¸o trªn mµn h×nh cña ng−êi sö dông. Qu¸
tr×nh truyÒn nhËn th«ng tin trªn kªnh d÷ liÖu còng cã thÓ ®−îc ®iÒu khiÓn
trùc tiÕp trªn kªnh ®iÒu khiÓn vÝ dô dõng truyÒn.

Client Server

Göi yªu cÇu


truyÒn d÷ liÖu NhËn lÖnh

Göi th«ng b¸o chÊp


nhËn
Göi lÇn l−ît c¸c gãi tin
NhËn d÷ liÖu ë
kÕt thóc bëi mét gãi cã
kªnh d÷ liÖu tíi
®é dµi lµ 0
khi gãi tin cã ®é
dµi lµ 0
NhËn vµ th«ng b¸o víi
Th«ng b¸o sè byte ®·
ng−êi sö dông sè byte
nhËn
truyÒn

III.1.2. Cµi ®Æt ch−¬ng tr×nh


Ch−¬ng tr×nh truyÒn tÖp ®−îc x©y dùng dùa trªn m« h×nh client-server sö dông
th− viÖn socket, giao thøc líp d−íi lµ giao thøc h−íng kÕt nèi TCP. TiÕn tr×nh
server ho¹t ®éng theo kiÓu ®ång thêi (concurrent), server “nghe” ë cæng 1998,
khi cã mét tiÕn tr×nh client kÕt nèi ®Õn, server nhËn sè hiÖu cæng cña client,
sinh tiÕn tr×nh con ®Ó phôc vô cßn b¶n th©n tiÕn tr×nh cha tiÕp tôc quay l¹i
nghe. TiÕn tr×nh server phôc vô t¹o mét kÕt nèi lÖnh ®Ó truyÒn lÖnh vµ mét kÕt
nèi d÷ liÖu ®Ó truyÒn c¸c khèi d÷ liÖu gi÷a client vµ server.

PhÇn server ch¹y trªn c¸c m¸y chñ Unix, Windows NT phôc vô cho phÇn
client ch¹y trªn c¸c m¸y Dos, Windows vµ Unix. Ch−¬ng tr×nh ho¹t ®éng gÇn
gièng FTP nh−ng cã mét sè tÝnh n¨ng n©ng cao:

73
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• Thùc hiÖn lÖnh tõ xa víi EXEC: Ch−¬ng tr×nh server nhËn lÖnh göi tíi tõ
client, thùc hiÖn lÖnh ®ã vµ göi tr¶ kÕt qu¶ vµo kªnh truyÒn, ch−¬ng tr×nh
client ®äc vµ hiÓn thÞ kÕt qu¶ ®ã trªn mµn h×nh cña ng−êi sö dông.
• Thùc hiÖn lÖnh cña hÖ ®iªu hµnh trªn m¸y tr¹m !CMD: Mét sè lÖnh cña hÖ
®iÒu hµnh cã thÓ ®−îc thùc hiÖn trªn m¸y tr¹m, chóng ®−îc tiÕn tr×nh client
gi¶i quyÕt b»ng c¸ch gäi ch−¬ng tr×nh th«ng dÞch cña hÖ ®iÒu hµnh.
• Kh¶ n¨ng thay ®æi kÝch th−íc bé ®Öm víi BUFSIZ kÝch th−íc cña bé ®Öm
cã thÓ ®−îc thay ®æi b»ng c¸ch thay ®æi biÕn m«i tr−êng chøa kÝch th−íc
bé ®Öm. ViÖc nµy lµm t¨ng n¨ng suÊt cña viÖc truyÒn th«ng tin trªn m¹ng.
• Mét sè thao t¸c víi th− môc trªn m¸y chñ nh− t¹o th− môc, xo¸ th− môc
®−îc thùc hiÖn b»ng c¸ch gäi c¸c lÖnh cña hÖ ®iÒu hµnh Unix hoÆc nh÷ng
hµm møc thÊp trong th− viÖn cña C.
• Ch−¬ng tr×nh cßn cung cÊp mét sè lÖnh lµm viÖc trùc tiÕp víi tÖp nh−
OPEN, LSEEK, READ, WRITE... nh÷ng lÖnh nµy sö dông th− nh÷ng lêi
gäi møc thÊp cña hÖ thèng.

Sau ®©y lµ nh÷ng lÖnh ®· cµi ®Æt trªn server


LÖnh M« t¶
EXEC command [option] Ch¹y mét lÖnh Unix
USER username [PASS password] §¨ng nhËp hÖ thèng
PASSWD password NhËp password
CHPWD newpassword §æi password
PORT portnumber §¨ng ký mét cæng truyÒn d÷ liÖu
ABORT Lo¹i bá qu¸ tr×nh truyÒn
PWD LÖnh ®æi th− môc
LIST [option] [directory] LÖnh xem th− môc
CHDIR [directory] LÖnh ®æi th− môc
MKDIR directory [mode] T¹o th− môc míi

74
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

RMDIR directory Xo¸ th− môc


UNLINK filename Xo¸ tÖp
OPEN path openflag [mode] Më tÖp
LSEEK fildes offset whence ChuyÓn con trá tÖp
READ fildes nbytes §äc tõ tÖp
WRITE fildes nbytes Ghi tÖp
LOCKF fildes mode size Kho¸ tÖp
CLOSE filedes §ãng tÖp
TMPNAM [path[prefix]] T¹o mét tÖp t¹m thêi
PUT filename TruyÒn tÖp lªn m¸y chñ
APPEND filename Më tÖp ®Ó append
GET filename LÊy tÖp tõ m¸y chñ
HELP Trî gióp
UNIX Ho¹t ®éng ë mode Unix
TNET Ho¹t ®éng ë mode Tnet
QUIT Tho¸t
UMASK [mode] §Æt mÆt n¹ mode cho file truyÒn
FMODE filename Xem mode cña file
FSIZE filename Xem ®é dµi cña file
BUFSIZ size_of_buffer §Æt l¹i kÝch th−íc cho bé ®Öm
REXEC host user passwd command Ch¹y mét lÖnh tõ xa

PhÇn client giao tiÕp víi ng−êi sö dông, nhËn lÖnh, ph©n tÝch lÖnh, xö lý hoÆc
göi cho server, nhËn vµ tr¶ kÕt qu¶ l¹i cho ng−êi sö dông.
(V¨n b¶n ch−¬ng tr×nh client ®−îc in trong phÇn phô lôc C)

75
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

III.2. Mét sè vÊn ®Ò n¶y sinh trong qu¸ tr×nh thùc hiÖn vµ c¸ch gi¶i
quyÕt

III.2.1. VÊn ®Ò chuyÓn ®æi tÖp gi÷a hai hÖ ®iÒu hµnh.


Do kh¸i niÖm vÒ tÖp vµ sù qu¶n lý truy nhËp ë hai hÖ ®iÒu hµnh DOS vµ UNIX
cã nhiÒu ®iÓm kh¸c nhau nªn sù chuyÓn ®æi tÖp gi÷a hai hÖ ®iÒu hµnh gÆp
ph¶i mét sè vÊn ®Ò.
C¸c tÖp tin trªn DOS hoµn toµn kh«ng cã c¸c th«ng tin vÒ quyÒn së h÷u hay
quyÒn truy nhËp nªn th«ng tin nµy sÏ bÞ mÊt khi sao chÐp mét tÖp tõ m¸y
UNIX sang mét m¸y DOS.

Ngoµi ra mét vÊn ®Ò hÕt søc quan träng vµ còng khã cã c¸ch gi¶i quyÕt tèi −u
lµ vÊn ®Ò tªn tÖp. Tªn tÖp trªn UNIX cã thÓ dµi tíi 14 ký tù (®èi víi UNIX
System V) hoÆc h¬n n÷a, c¸c ký tù cã thÓ lµ ch÷ in hoa, ch÷ th−êng hay c¸c
ký tù ®Æc biÖt ®Òu ®−îc chÊp nhËn. C¸c th− môc trong ®−êng dÉn cña UNIX
®−îc ph©n c¸ch bëi dÊu '/'. Trong khi ®ã tªn tÖp cña DOS chØ ®−îc phÐp dµi tèi
®a 8 ký tù céng víi 3 ký tù cña phÇn më réng vµ bÞ h¹n chÕ toµn bé lµ ch÷ in
hoa kh«ng sö dông ch÷ th−êng cïng víi hµng lo¹t dÊu vµ ký tù ®Æc biÖt. C¸c
th− môc trong ®−êng dÉn ®−îc ph©n c¸ch bëi dÊu '\'. Cho nªn mét ¸nh x¹ 1-1
gi÷a hai lo¹i tªn tÖp lµ kh«ng thÓ tån t¹i. NÕu cã mét hµm nµo ®ã thùc hiÖn
®−îc ¸nh x¹ nµy th× sau khi chuyÓn mét tÖp tõ m¸y UNIX tíi m¸y DOS, tªn
tÖp ®Ých sÏ hoµn toµn xa l¹ víi tªn tÖp nguån g©y ra khã kh¨n cho ng−êi sö
dông.

VÝ dô, ta muèn cã mét tiÖn Ých thùc hiÖn viÖc backup mét sè tÖp trªn m¸y
UNIX sang m¸y DOS. Ta sÏ ®¬n gi¶n chuyÓn c¸c tÖp ®ã sang m¸y DOS
nh−ng khi cÇn chuyÓn c¸c tÖp nµy vÒ vÞ trÝ cò th× ta kh«ng thÓ x¸c ®Þnh chÝnh
x¸c vÞ trÝ cò cña tÖp vµ kh«ng thÓ phôc håi l¹i ®Çy ®ñ tªn cña tÖp. NÕu dïng
mét hµm nµo ®ã ®Ó t¹o ra ¸nh x¹ 1-1 th× khi sao chÐp sang m¸y DOS sÏ t¹o ra
nh÷ng tªn tÖp ®Æc biÖt rÊt khã cho viÖc qu¶n lý.

76
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

• Víi bµi to¸n nµy UNIX cã tiÖn Ých tar gi¶i quyÕt b»ng c¸ch gom tÊt c¶ c¸c
tÖp vµo thµnh mét tÖp kÌm theo th«ng tin chi tiÕt vÒ tÖp ®ã, khi cÇn, cã thÓ
phôc håi l¹i tÖp mét c¸ch chÝnh x¸c. Nh−ng tiÖn Ých nµy kh«ng thÓ ¸p dông
cho mäi bµi to¸n vÝ dô cÇn ®äc vµ xö lý tÖp d−íi m«i tr−êng DOS...
• Cã mét gi¶i ph¸p t¹m thêi cho vÊn ®Ò nµy lµ ph¶i c¾t bá phÇn ®»ng sau cña
tªn tÖp trªn UNIX. §©y còng chÝnh lµ gi¶i ph¸p ®èi víi tªn tÖp dµi cña
Windows 95 khi c¸c tÖp nµy ®−îc truy nhËp bëi DOS 6.x (hoÆc c¸c phiªn
b¶n DOS tr−íc). Víi c¸ch lµm nµy chóng ta ph¶i chó ý tíi sù trïng tªn sau
khi c¾t bá phÇn ®u«i vµ xö lý mét sè ký tù ®Æc biÖt cßn l¹i.
VÝ dô : Hai tÖp
testdata001.dat vµ testdata002.dat
Cã thÓ sÏ bÞ c¾t thµnh testdata.dat vµ hai tÖp sÏ bÞ trïng tªn nhau, mét trong
hai tÖp sÏ kh«ng thÓ tån t¹i.

• Mét gi¶i ph¸p t−¬ng tù nh− trong Windows 95 sÏ ®−îc sö dông ®ã lµ


chuyÓn hai tÖp trªn thµnh
testda~1.dat vµ testda~2.dat
• Gi¶i ph¸p ®Æt tªn cho c¸c tÖp trªn m¸y UNIX t−¬ng tù nh− trªn m¸y DOS
lµ mét gi¶i ph¸p tåi. Nã kh«ng tËn dông tèi ®a kh¶ n¨ng cña hÖ ®iÒu hµnh
lµ tªn tÖp linh ®éng h¬n. Nh−ng ta nhËn thÊy r»ng ph−¬ng ph¸p nµy ®«i khi
còng tá ra cã hiÖu qu¶ ®èi víi c¸c øng dông ®Æc biÖt. VÝ dô : phÇn më réng
3 ký tù cña tªn tÖp ®−îc dïng ®Ó x¸c ®Þnh néi dung tÖp ®−îc dïng kh¸
réng r·i trªn c¶ c¸c hÖ ®iÒu hµnh cã tªn tÖp dµi nh− UNIX, Windows 95...
• Mét gi¶i ph¸p kh¸c lµ viÖc thay thÕ hÖ ®iÒu hµnh DOS b»ng hÖ ®iÒu hµnh
Windows 95. Trong Windows 95 tªn tÖp cã thÓ dµi h¬n (tíi 255 ký tù) vµ
cã thÓ chøa mét sè ký tù mµ DOS kh«ng cho phÐp nh− dÊu trèng, dÊu
chÊm... ViÖc chuyÓn ®æi tªn tÖp sÏ ®¬n gi¶n chØ lµ xö lý mét sè tr−êng hîp
c¸c ký tù ®Æc biÖt. Víi sù ph¸t triÓn hiÖn nay hÖ ®iÒu hµnh DOS ®ang dÇn
bÞ thay thÕ bëi Windows 95 (kh«ng chØ bëi ®Æc tÝnh tªn tÖp mµ bëi nhiÒu

77
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

tÝnh n¨ng v−ît tréi cña Windows 95) th× viÖc thay thÕ nµy hoµn toµn thÝch
hîp.

III.2.2. VÊn ®Ò vÒ mét sè lÖnh t−¬ng t¸c


V× ch−¬ng tr×nh ®−îc x©y dùng víi môc ®Ých truyÒn file, c¸c giao thøc ®−îc
x©y dùng nh»m h−íng tíi sù b¶o ®¶m tÝnh toµn vÑn cho tÖp tin. ViÖc ch¹y øng
dông ®−îc giao cho hÖ ®iÒu hµnh, ch−¬ng tr×nh chØ lµm nhiÖm vô truyÒn tham
sè dßng lÖnh vµ nhËn kÕt qu¶ tr¶ vÒ. V× lý do ®ã, mét sè lÖnh t−¬ng t¸c víi
ng−êi dïng (cÇn nhËn th«ng tin tõ bµn phÝm) kh«ng thÓ ch¹y ®−îc víi lÖnh
EXEC.

78
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

K Õt luËn
M¹ng m¸y tÝnh ®ang lµ xu h−íng ph¸t triÓn trong t−¬ng lai cña ngµnh c«ng
nghÖ th«ng tin, viÖc nghiªn cøu vÒ c¸c vÊn ®Ò liªn quan vµ ph¸t triÓn c¸c phÇn
mÒm trªn m¹ng ®ßi hái nhiÒu thêi gian vµ c«ng søc.

Trong b¶n luËn v¨n nµy, em ®· tr×nh bµy nh÷ng kh¸i niÖm c¬ b¶n nhÊt vÒ
m¹ng m¸y tÝnh, nghiªn cøu kü l−ìng vÒ mét giao thøc ®ang ®−îc sö dông
nhiÒu nhÊt hiÖn nay trªn m¹ng ®ã lµ bé giao thøc TCP/IP vµ tõ nh÷ng kÕt qu¶
nghiªn cøu ®ã, x©y dùng mét giao thøc øng dông riªng ®Ó sö dông trong
ch−¬ng tr×nh truyÒn tÖp cña m×nh.

Trong b−íc ®Çu thö nghiÖm, ch−¬ng tr×nh ®· ho¹t ®éng cho kÕt qu¶ kh¶ quan,
mét sè vÊn ®Ò nh− chuyÓn ®æi tÖp gi÷a c¸c hÖ ®iÒu hµnh ®· thùc hiÖn tèt. Tuy
nhiªn trong ch−¬ng tr×nh cßn mét sè vÊn ®Ò tån t¹i cÇn gi¶i quÕt ®ã lµ thùc
hiÖn nh÷ng lÖnh t−¬ng t¸c, sö dông hai ®−êng truyÒn vµ mét sè lÖnh ®iÒu
khiÓn. Xu h−íng ph¸t triÓn tiÕp theo sÏ lµ ph¸t triÓn giao thøc ®Ó sö dông mét
®−êng truyÒn vµ t¨ng tÝnh ®ång bé cña ch−¬ng tr×nh.

Trong kho¶ng thêi gian ng¾n lµm luËn v¨n, em kh«ng tr¸nh khái nh÷ng sai
sãt, em xin ch©n thµnh c¶m ¬n c¸c thÇy c« gi¸o vµ b¹n bÌ ®· gãp ý, gióp ®ì
em trong suèt qu¸ tr×nh lµm luËn v¨n.

NguyÔn NhËt B×nh

79
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Tμi liÖu tham kh¶o


T¸c gi¶ Tªn s¸ch Nhµ xuÊt b¶n N¨m xuÊt b¶n
Douglas Internetworking with Prentice-Hall International 1991
E.Comer TCP/IP
Andrew Computer Network Prentice-Hall International 1988
S.Tanenbaum
W.Richard Unix Network Prentice-Hall International 1991
Stevens Programming
Bill Rieken Unix Network John Wiley & Sons 1992
and Application
Lyle Weiman Programming
NguyÔn Thóc M¹ng m¸y tÝnh vµ c¸c Nhµ xuÊt b¶n Gi¸o Dôc 1997
H¶i hÖ thèng më
Mét sè tµi liÖu kü
thuËt cña CSE

80
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Phô lôc A Mét sè kü thuËt m¹ng côc bé

I. M¹ng Ethernet vμ IEEE 802.3

Ethernet vµ IEEE 802.3 lµ hai chuÈn phæ biÕn nhÊt trong kiÕn tróc m¹ng côc
bé. Chóng sö dông c«ng nghÖ gäi lµ CSMA/CD (Carrier Sense Multiple
Access/Collision Detect). Multiple Access cã nghÜa lµ mäi m¸y tÝnh vµ thiÕt bÞ
m¹ng cã thÓ truy cËp ®−êng truyÒn cïng mét lóc. C«ng nghÖ Carrier Sense
cho phÐp c¸c thiÕt bÞ nhËn biÕt khi nµo ®−êng truyÒn ®ang bËn. Tr−íc khi thiÕt
bÞ truyÒn th«ng tin, nã kiÓm tra ®−êng truyÒn, nÕu ®−êng truyÒn bËn, nã ®îi
mét kho¶ng thêi gian ngÉu nhiªn nµo ®ã vµ tiÕp tôc. NÕu ®−êng truyÒn kh«ng
bËn, nã b¾t ®Çu truyÒn d÷ liÖu cña m×nh. NÕu 2 tr¹m cïng truyÒn th«ng tin
mét lóc, d÷ liÖu cã thÓ bÞ ph¸ huû (collision), Collision Detection ®iÒu khiÓn
thiÕt bÞ collision controller göi tÝn hiÖu “jam signal” ®Ó b¸o cho mäi thiÕt bÞ
trªn m¹ng biÕt ®iÒu g× ®ang s¶y ra. NÕu gÆp collision, thiÕt bÞ ®îi mét kho¶ng
thêi gian ngÉu nhiªn nµo ®ã tÝnh theo chu kú ®ång hå cña nã vÝ dô mét sè
thiÕt bÞ ®îi trong kho¶ng 1 - 255 nhÞp. NÕu gÆp collision lÇn thø hai, nã ®îi
mét kho¶ng trong 1 - 511. NÕu tiÕp tôc gÆp collision, thiÕt bÞ cè g¾ng thªm 6
lÇn. Thêi gian truyÒn th«ng tin trªn m¹ng Ethernet kh«ng thÓ x¸c ®Þnh ®−îc
chÝnh x¸c v× kh«ng ai cã thÓ ch¾c r»ng gãi th«ng tin kh«ng bÞ collision. Do
vËy, th−êng ng−êi ta kh«ng dïng Ethernet víi c¸c øng dông thêi gian thùc.
Mét ®Æc tÝnh cña m¹ng Ethernet n÷a lµ nã kh«ng cã c¬ chÕ b¸o nhËn, khi sö
dông víi TCP/IP dÞch vô nµy ®−îc tÇng transport (TCP) cung cÊp.

II. M¹ng Token-Pasing Rings (IEEE 802.5)

Tolen-Pasing Rings còng lµ mét c«ng nghÖ m¹ng côc bé phæ biÕn, viÖc ®iÒu
khiÓn l−u th«ng trªn m¹ng nµy ®−îc sö dông bëi mét c¬ chÕ gäi lµ thÎ bµi
“token”. Token lµ mét gãi tin ®−îc chuyÓn vßng quanh m¹ng, mçi thiÕt bÞ chØ
®−îc quyÒn truyÒn d÷ liÖu khi nã nhËn ®−îc token.

81
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

WS

WS WS

Token

WS

Mét ®Æc tÝnh chñ yÕu cña M¹ng Token-Pasing Rings lµ nã ph¶i ®−îc nèi
thµnh vßng, nÕu mét nót m¹ng bÞ lçi, toµn bé m¹ng sÏ ngõng ho¹t ®éng (®èi
víi m¹ng Ethernet chØ mét ngõng ho¹t ®éng khi nã bÞ lçi). NÕu mét m¸y bÞ
t¾t, m¹ng M¹ng Token-Pasing Rings vÉn cÇn giao diÖn cña nã ®Ó truyÒn
th«ng, Token-ring Interface board lÊy n¨ng l−îng tõ c¸p m¹ng ®Ó ho¹t ®éng.
Khi thÎ bµi bÞ mÊt, sau mét thêi gian nµo ®ã, mét thiÕt bÞ ®iÒu khiÓn sÏ sinh
mét thÎ bµi míi.

III. M¹ng Token-Passing Busses (IEEE 802.4)

Token-Passing cßn lµm viÖc trªn topo bus. Mét chuÈn ®Þnh nghÜa cho m¹ng
nµy lµ IEEE 802.4, lµ mét phÇn cña chuÈn MAP (Manufacturing Automation
Protocol). ChuÈn nµy sö dông thiÕt bÞ Broadband kh¸c víi Baseband sö dông
trong Ethernet vµ Token-ring. Baseband chØ sö dông mét tÝn hiÖu trªn ®−êng
truyÒn trong khi broadband sö dông nhiÒu kªnh truyÒn víi c¸c tÇn sè tÝn hiÖu
kh¸c nhau trªn ®−êng truyÒn.
Mét sè m¹ng Broadband sö dông hai d©y dÉn, mét ®Ó truyÒn, mét ®Ó nhËn d÷
liÖu. HÖ thèng kh¸c l¹i chØ sö dông mét d©y nh−ng dïng 2 tÇn sè kh¸c nhau ®Ó
truyÒn vµ nhËn. Th«ng th−êng tÇn sè truyªn vµ nhËn t¹o thµnh mét cÆp tÇn sè
(tÝnh b»ng MHz) ®Ó dÔ chuyÓn ®æi gi÷a tÇn sè göi vµ tÇn sè nhËn. Tuy sö dông

82
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Broadband ®¾t vµ phøc t¹p nh−ng nã lµm viÖc rÊt tèt víi h×nh ¶nh analog vµ
©m thanh.

Broadband
Baseband

83
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Phô lôc B Mét sè kü thuËt chän ®−êng ®i tèi −u


ViÖc chän con ®−êng tèi −u ®Ó truyÒn c¸c gãi tin ®i trªn m¹ng ph¶i thùc hiÖn
mét sè c«ng viÖc sau:
• QuyÕt ®Þnh chän ®−êng theo nh÷ng tiªu chuÈn tèi −u nµo ®ã.
• CËp nhËt th«ng tin chän ®−êng.
Cã mét sè kü thuËt chän ®−êng tèi −u th−êng ®−îc sö dông khi x©y dùng tÇng
m¹ng
• Chän ®−êng tËp trung ®Æc tr−ng bëi sù tån t¹i cña mét sè trung t©m ®iÒu
khiÓn m¹ng thùc hiÖn viÖc chän ®−êng sau ®ã göi c¸c b¶ng chän ®−êng tíi
c¸c nót m¹ng. C¸c nót m¹ng ®Òu ®Æn göi th«ng tin cña chóng tíi c¸c chung
t©m theo mét kho¶ng thêi gian hoÆc khi cã mét sù kiÖn nµo ®ã.
• Chän ®−¬ng ph©n t¸n ®−îc thùc hiÖn t¹i mçi nót cña m¹ng. ViÖc nµy ®ßi
hái sù trao ®æi th«ng tin th−êng xuyªn gi÷a c¸c nót.

I. Gi¶i thuËt Dijkstra cho viÖc chän ®−êng tËp


trung

Gi¶i thuËt nµy t×m con ®−êng cã “®é dµi” (chi phÝ) cùc tiÓu tõ mét nót nguån
tíi mçi nót cßn l¹i cña m¹ng
Gäi l(i,j) lµ “®é dµi” cña ®−êng nèi trùc tiÕp 2 nót i vµ j
l(i,j) =∞ nÕu kh«ng tån t¹i ®−êng nèi
Nk lµ tËp hîp t¹o thµnh bëi k+1 phÇn tö (nguån vµ k nót gÇn nguån nhÊt
sau k b−íc thùc hiÖn giai thuËt).
Dk lµ “®é dµi” tõ nguån tíi nót n theo con ®−êng “ng¾n” nhÊt bao hµm
trong Nk
ThuËt to¸n sö dông c¸c b−íc ®Ö quy sau:
B−íc 0 (khëi ®éng)
N0={1}

84
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

D0(v)=l(1,v) v ∉ N0
B−íc k (tÝnh vµ cËp nhËt)
Nk = Nk-1 ∪ {w}
trong ®ã w tho¶ m·n biÓu thøc
Dk-1(w) = min Dk-1(v), v ∉ Nk-1
Dk(v) = min [Dk-1(v), Dk-1(w) + l(w,v)], v ∉ Nk
ThuËt to¸n dõng khi tÊt c¶ c¸c nót ®· n»m trong N

II. Gi¶i thuËt Ford& Fulkerson cho viÖc chän ®−êng


ph©n t¸n

Gi¶i thuËt nµy cho phÐp t×m tÊt c¶ c¸c con ®−êng “ng¾n” nhÊt tõ tÊt c¶ c¸c nut
tíi mét ®Ých chung. Sau k b−íc lÆp, mçi nót ®−îc ®¸nh dÊu bëi cÆp gi¸ trÞ
(nk(v), Dk(v))
Dk(v) lµ “®é dµi” cùc tiÓu (hiÖn t¹i) tõ nót v tíi ®Ých
nk(v) lµ nót tiÕp theo (hiÖn t¹i) trªn con ®−êng “tèi −u” tõ nót v tíi ®Ých, ®−îc
tÝnh ë b−íc k.
B−íc 0 (khëi ®éng)
D0(1) = 0 vµ tÊt c¶ c¸c nót ®−îc ®¸nh dÊu (•,∞)
B−íc k (tÝnh vµ cËp nhËt)
Víi mäi v ≠ 1 (®Ých), cËp nhËt Dk(v) nh− sau:
Dk(v) = min [Dk-1(w) + l(v,w)]
w∈Nv
trong ®ã Nv lµ tËp c¸c nót l¸ng giÒng cña v.
CËp nhËt nk(v) nh− sau:
nk(v) = w1, víi w1 tho¶ m·n biÓu thøc :
Dk-1(w1) + l(v,w1) = min [Dk-1(w) + l(v,w)]
w∈Nv

85
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

ThuËt to¸n dõng khi tÊt cÆp gi¸ trÞ ®¸nh dÊu cña mçi nót gi÷ nguyªn kh«ng
thay ®æi n÷a.

86
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

Phô lôc C V¨n b¶n ch−¬ng tr×nh (phÇn client)

I. Ch−¬ng tr×nh chÝnh (main.c)


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

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 CMD_ABORT 1
#define CMD_APPEND 2
#define CMD_BUFSIZE 33
#define CMD_CHDIR 3
#define CMD_CHPWD 4
#define CMD_CLOSE 5
#define CMD_EXEC 6
#define CMD_FMODE 7
#define CMD_FSIZE 8
#define CMD_FSTAT 9
#define CMD_GET 10
#define CMD_HELP 11
#define CMD_LIST 12
#define CMD_LOCKF 13
#define CMD_LSEEK 14
#define CMD_MKDIR 15
#define CMD_OPEN 16
#define CMD_PASS 17
#define CMD_PORT 18
#define CMD_PUT 19

87
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

#define CMD_PWD 20
#define CMD_QUIT 21
#define CMD_READ 22
#define CMD_REXE 23
#define CMD_RMDIR 24
#define CMD_TMPNAM 25
#define CMD_TNET 26
#define CMD_UMASK 27
#define CMD_UNIX 28
#define CMD_UNLINK 29
#define CMD_USER 30
#define CMD_WRITE 31

#define CMD_HASH 35
#define CMD_DEL 36
#define CMD_LCD 37
#define CMD_LDIR 38
#define CMD_HOST 39
#define CMD_LHELP 40
#define CMD_DISCON 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,
23, "REXE", 1, NULL,
24, "RMDIR", 0, NULL,
25, "TMPNAM", 0, NULL,
26, "TNET", 0, NULL,
27, "UMASK", 0, NULL,
28, "UNIX", 0, NULL,
29, "UNLINK", 0, NULL,
30, "USER", 0, NULL,
31, "WRITE", 2, NULL,
35, "HASH", 0, NULL,

88
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

36, "DEL", 0, NULL,


37, "LCD", 0, NULL,
38, "LDIR", 0, NULL,
39, "HOST", 0, NULL,
40, "LHELP", 0, NULL,
41, "DIS", 0, NULL,
41, "DISCONNECT",0, 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++;
}
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] == '#') {

89
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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 :
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];

90
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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;
}
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;

91
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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)


{
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);

92
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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;
}

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− viÖn sö dông (Socket.c)


/************************************************************************
/
/***** CM
*****/
/***** Module : SOCKET.C
*****/
/***** Purposes : Provide socket doing functions
*****/
/***** Date : 14-03-1998
*****/
/************************************************************************
/

93
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

#include <windows.h>
#include <io.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#include <memory.h>
#include <time.h>
#include "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);
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];

94
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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;
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;

95
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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;
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);

96
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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);
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;
}

97
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

else if (*cmd_and_size != ACK) {


_lclose(handle);
return FALSE;
}
#endif
if (HASH) printf("#");
}
} while (len == BUFF_SIZE - 2);
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);

98
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

}
sin.sin_family = AF_INET;
sin.sin_port = htons((unsigned short)port);
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)


{
shutdown(data_sock, 2);

99
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh

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;
}

100

You might also like