Professional Documents
Culture Documents
1
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
2
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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
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
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Î.
5
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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)
7
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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
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
§Ó 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.
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
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.
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).
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.
15
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
16
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
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.
18
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
Application Layer
Presentation Layer Application Layer
Session Layer
Transport Layer Transport Layer
Network Layer Internet Layer
Data link Layer
Physical Layer Network access Layer
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)
ICMP
Internet Layer
Internet Protocol
(Getway Layer) ARP
Network
Interface Layer
Ethernet Token Ring Token Bus Fiber
• 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
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
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.
24
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
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.
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
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
Identical Identical
Frame Frame
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
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.
ARP Request
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Ø.
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)
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..
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
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
X.25
Gateway 2 Host C
Ethernet
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
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
• 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
ID lµ tªn mét +
m¸y tÝnh
trong b¶ng
IN lµ tªn mét +
m¹ng trong
b¶ng
-
Göi th«ng b¸o lçi CËp nhËt b¶ng dÉn
®−êng
40
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
0 31
Source port Destination port
Message length checksum
Data
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
UDP: Demultiplexing
Based on Port
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.
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
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
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
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.
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.
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
50
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
vn
fit
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.
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
§©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ö.
• 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.
54
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
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.
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
56
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
Th− viÖn
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.
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.
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.
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.
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
§Þ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
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.
VÝ dô:
62
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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() ®−î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.
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.
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.
• 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.
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.
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.
Khi mét tiÕn tr×nh th«i kh«ng sö dông socket th× nã gäi lÖnh close()
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.
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.
• 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.
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.
66
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
§−î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)
• 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()
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.
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 recvfrom(int sock, char * buff, int len, int flag, struct sockaddr *
destaddr, int *addrlen)
67
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
Server
(connectionless protocol)
socket()
bind()
Client
recvfrom() socket()
process request
69
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
socket()
bind()
listen()
accept()
Client
Process request
70
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×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
Client Server
Göi lÖnh
NhËn lÖnh vµ thi hµnh
• 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
• 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
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.
74
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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
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.
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.
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.
79
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
80
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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.
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.
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
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
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
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
88
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
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);
i = 0;
while (*cmdPtr == ' ' && *cmdPtr != 0) cmdPtr++;
while (*cmdPtr != ' ' && *cmdPtr != 0) {
dest[i++] = *cmdPtr; cmdPtr++;
}
dest[i] = 0;
return cmdPtr;
}
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;
}
91
LuËn v¨n tèt nghiÖp NguyÔn NhËt B×nh
printf("Password:");
do {
*p++ = (char)_getch();
if (*(p-1) == '\b') p -= 2;
} while (*(p-1) != '\r');
*p = 0;
gets(clr);
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;
}
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;
}
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;
}
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"
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));
}
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
*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;
}
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
/* Inittialize tcp ip */
int FAR PASCAL mInitTcpIp(void)
{
WSADATA WSAData;
int status;
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;
}
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;
}
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