Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (869.2 KB, 91 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b>TRNG I H C KHOA H C T NHIÊNKHOA CÔNG NGH THÔNG TIN</b>
<b> MÔN CÔNG NGH PH N M M</b>
<b>GIANG QU C MINH – H PH M THÁI VINH</b>
<b>KHOÁ LU N C NHÂN TIN H C</b>
<b>TP. HCM,M 2005</b>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><b>TRNG I H C KHOA H C T NHIÊNKHOA CÔNG NGH THÔNG TIN</b>
<b> MÔN CÔNG NGH PH N M M</b>
<b>GIANG QU C MINH - 0112016 H PH M THÁI VINH - 0112081</b>
<b>KHÓA LU N C NHÂN TIN H C</b>
<b>GIÁO VIÊN HNG D N</b>
<b>GVC CAO NG TÂN</b>
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">Chúng em xin chân thành cám n Ban giám hi u, quý Th y cô atr ng i H c Khoa H c T Nhiên TP. H Chí Minh, c bi t là các Th ycô trong Khoa Công ngh Thông tin ã t n tình gi ng y, trang cho chúngem nh ng ki n th c c n thi t, b ích trong su t nh ng n m c t p i tr ng.Chúng em xin chân thành m n Th y Cao ng Tân, ng i Th y ãt n tình quan tâm h ng d n, giúp chúng em trong su t th i gian làm lu n
n này.
Chúng con xin g i lòng bi t n sâu s c và s kính tr ng n ơng bà, cha, cùng tồn th gia ình, nh ng ng i ã nuôi y chúng con tr ng thànhnh ngày hôm nay.
Chúng tôi xin chân thành cám n s giúp , ng viên, nh n xét, ónggóp ý ki n c a các anh ch , n bè trong quá trình th c hi n lu n v n này.
TP. H Chí Minh, 7/2005Nhóm sinh viên th c hi nGiang Qu c Minh – H Ph m Thái Vinh
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6"><b>B C CA LU N V N</b>
Lu n v n g m có 3 ph n và 7 ch ng
<b>PH N 1: T NG QUAN Chng 1 Gi i thi u v</b> tài
<b>PH N 2: TÌM HI U CÁC V N</b> L P TRÌNH. Ph n này gi i thi ucác v n l p trình c n nh t xây d ng 1 ng ng có kh ng b tcác gói tin và cho phép ng i dùng có th i u khi n t xa qua mơitr ng ng.
<b>Chng 2. Tìm hi u th vi n l p trình m ng c p th p libpcap, ây là</b>
“trái tim” a h u h t các ng ng b t gói tin mã ngu n m hi n nay.
<b>Chngg 3. Gi i thi u MySQL, m t h qu n tr</b> s d li u t m trungc s d ng ph bi n nh t hi n nay.
<b>Chng 4. Tìm hi u</b> thu t l p trình socket vi t các ng ng trênmôi tr ng ng
<b>Ph n 3 Xây</b> ng ng ng PacketCap. Ph n này s d ng các ki nth c ã tìm hi u <b>chng 2, 3, 4</b> xây d ng m t ng ng b t gói tin,u các k t qu b t c vào c s d li u phân tích các thơng tin
<b>Chng 5. Phân tích, thi t k</b> ng ng PacketCap
<b>Chng 6. Cài </b> t và th nghi m PacketCap
<b>Chng 7. T ng k t. Ch</b> ng này trình bày nh ng k t qu t c,nh ng n ch và h ng phát tri n PacketCap trong t ng lai.
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">4.4. S d ng socket trong ng ng minh a ... 58
PH N 3: XÂY D NG NG NG TH NGHI M PACKETCAP ... 59
Ch ng 5: Phân tích và thi t k PacketCap ... 60
5.3.1. Phân tích h ng phát tri n d a trên Ethereal... 63
5.3.2. Phân tích h ng phát tri n d a trên libcap ... 64
5.3.3. L a ch n h ng phát tri n PacketCap ... 64
5.4. Các thành ph n PacketCap ... 65
5.5. Xây d ng mơ hình use case... 66
5.5.1. Xác nh Actor và use case ... 66
5.5.2. Mơ hình use case ... 66
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">5.8.3. C u trúc d li u trao i gi a PCServer và PCManager... 83
5.9.Thi t k giao di n PCManager( phiên n ch y trên Windows) ... 85
2.1. PCManager trên môi tr ng Linux ... 93
2.2. PCManager trên môi tr ng Windows... 94
TÀI LI U THAM KH O ... 95
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">Ph n 1: T ng quan
<b>PH N 1: T NG QUAN</b>
Ch ng 1. Gi i thi u tài
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">Vi c Công ngh thông tin và m ng Intenet phát tri n và ngày càng nhi ucác thông tin quan tr ng c trao i trên m ng làm n y sinh m t s v n quan tr ng là b o m t thơng tin trên m ng tránh rị r hay ng n không chotruy c p vào các d li u không cho phép gây thi t h i kinh t , qu n lý b ngthông t ng kh n ng áp ng thông tin, giao d ch v i khách hàng ng th itránh c tình tr ng ngh n m ch l u thông trên m ng.
Vi c phân tích l u l ng m ng ịi h i n ng l c tính tốn r t l n, vì v ymu n làm c vi c này c n ph i trang b các siêu máy tính th c hi n bàitoán này. Trong u ki n kinh t n c ta thì khơng th trang b nh ng hth ng này c vì chúng quá t .
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">Ch ng 1: Gi i thi u tài
y gi i pháp nào gi i quy t bài toán này ?
• Grid Computing là h th ng tính toán song song và phân táncho phép chúng ta th c hi n nh ng bài toán l n d a trên các
th ng nh g m nhi u máy tính c n i m ng v i nhau.
• Hi n nay chúng ta l i có r t nhi u h th ng máy tính n ing nh ng ch a s d ng c h t kh n ng tính tốn c achúng.
• i s l ng các máy tính l n thì vi c tri n khai GridComputing s cho chúng ta m t h th ng tính tốn c c kình g p nhi u l n 1 siêu máy tính ( lúc ó các siêu máy tínhcó th ch là m t node trong h th ng Grid Computing).
i nh ng u m trên chúng tôi ch n tài “ ng d ng th nghi mGrid Computing trong vi c phân tích thơng tin m ng ph c v qu n lý”.1.2. Gi i thi u tài
tài “ ng ng th nghi m Grid Computing trong vi c phân tíchthơng tin ng ph c qu n lý” là m t l n g m 2 nhóm th c hi n.Nhóm th 1 xây d ng ng d ng phân tán trên m ng cho phép thi t l p txa ch l c và b t các gói tin, trích l c và l u vào các c s d li u trên
ng ph c cho vi c theo dõi và phân tích thơng tin ng (Ph n I).Nhóm th 2 tìm hi u Grid Computing và xây d ng ng ng phântích hi n tr ng c a m ng d a trên thông tin t s d li u do nhóm th 1xây d ng (Ph n II).
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">Ph n 2: Tìm hi u các v n l p trình
<b>PH N 2: TÌM HI U CÁC V NL P TRÌNH</b>
Ch ng 2. Th vi n l p trình ng libpcapCh ng 3. H qu n tr s d li u MySQLCh ng 4. L p trình socket
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">Ch ng 2: Th vi n l p trình ng libpcap
2.1. Gi i thi u libpcap
Libpcap là m t th vi n mã ngu n m tr l p trình ng c p th p,cho phép b t các gói tin trên ng truy n theo nhi u h ng khác nhau, chophép phân tích các frame v a tìm c.
Th vi n libcap c s d ng r ng rãi trong các ph n m m snifferpacket. Các ph n m m s d ng libcap ph bi n là TCPdump, TCPflow.
Hi n nay phiên n m i nh t a libpcap là 0.9.1.2.2. Cài t th vi n libpcap
Ch ng trình ngu n c a libpcap có th download a chwww.tcpdump.org , các phiên n m i nh t a libpcap u có a ch này.
Gi s b n i v gói libpcap-0.8.3.tar.tar, ti n hành cài t:
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">Ch ng 2: Th vi n l p trình ng libpcap
3.3. Các b c xây d ng ch ng trình s d ng libpcapCó 5 b c chính trong vi c s d ng th vi n libpcap
• c 1: Xác nh interface (card ng) mà ta mu n b t frame vào(Trong Linux, interface th ng là eth0,eth1…..Ta có th dùng cáchàm pcap_lookupdev() c a th vi n libpcap l y t t c cácinteface.
• c 2: Kh i t o pcap. Cung c p cho pcap bi t interface nào trong các interface ã l y v b c trên s c ch n sniff.
• c 3: L c frame .pcap cho chúng ta c ch ch n l a khi l c cácframe khi b t (ví d ch b t frame TCP/IP có source IP
<b>192.168.8.8 và port 23 …). ta ph i t o ra filter r i biên</b> ch filternày báo cho pcap bi t b l c nó s dùng.
• c 4: Pcap th c thi vi c sniff frames.
• c 5: óng phiên làm vi c và k t thúc ng d ng
Trên ây là qui trình t ng quát cách libpcap b t gói tin trong ó b c 3là tùy ch n có th có ho c khơng.
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">Ch ng 2: Th vi n l p trình ng libpcap
3.4. Chi ti t các b c
<b>3.4.1. Ch n Interface( cardng)</b>
Có 3 cách thi t l p devices sniff các frames d li u
• Cách 1 : Cho ng i dùng nh p tên thi t b t dòng l nh
<i>#include <stdio.h>#include <pcap.h></i>
<i>int main(int argc , char* argv[]){</i>
<i>Char * dev = argv[1]</i>
<i>Printf( Devices : %s \n ,dev);}</i>
Trong ó argv[1] là tham s dịng l nh u tiên
• Cách 2 : S d ng hàm pcap_lookupdev() c a libpcap tìmki m các interface t n i trên máy tính.
<i>#include <stdio.h>#include <pcap.h></i>
<i>int main(int argc , char* argv[]){</i>
<i>Char* dev,errbuf[PCAP_ERRBUF_SIZE]dev = pcap_lookupdev(errbuf);</i>
<i>if(dev == NULL) {</i>
<i> printf("%s\n",errbuf); exit(1);</i>
<i> }</i>
<i> printf("DEV: %s\n",dev);}</i>
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20"><i>int main(int argc , char* argv[]){</i>
<i> pcap_if_t *devlist;char devname[10][100];</i>
<i>Char* dev,errbuf[PCAP_ERRBUF_SIZE]int devcount=0;</i>
<i>retvalue=pcap_findalldevs(&devlist,err);if(retvalue==-1 || devlist==NULL) return 0;</i>
<i>for(d=devlist,i=0; d && i<10 ;d=d->next,i++) sprintf(devname[i],"%s",d->name);</i>
<b>3.4.2. M devicel ng nghe( sniff) d li u</b>
Kh i t o phiên làm vi c cho các thi t b s d ng hàmpcap_open_live(). C u trúc hàm này nh sau :
pcap_t *pcap_open_lives(
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">Ch ng 2: Th vi n l p trình ng libpcap
• snaplen cho bi t s byte l n nh t mà pcap có th b t frames
• promisc n u t b ng 1 thì interface s ho t ng trong chpromiscuos mode. ây là ch libpcap s sniff t t c các frametrên dây d n. N u t b ng 0 thì interface s ho t ng chnon promiscuos mode, trong ch này,pcap ch sniff nh ngframe g i n máy.
<i>Pcap_t *descr</i>
<i>descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf); if(descr == NULL)</i>
<i> {</i>
<i> printf("pcap_open_live(): %s\n",errbuf); exit(1);</i>
<i>int pcap_compile(pcap_t *p, struct bpf_program *ft, char *str, int optimize, bpf_u_int32 netmask )</i>
Tham s u tiên là handle c a phiên làm vi c (pcap_t). Tham sth hai là tham s ch n n i l u compile version c a filter. str làchu i mô t cho filter bi t nh ng gói tin c n b t. K n là s nguyêncho bi t str là opyimize hay không (1 là true, 0 là false). Cu i cùng lànetmask c a ng m ng.
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">Ch ng 2: Th vi n l p trình ng libpcap
<i>int pcap_setfilter(pcap_t *p,struct_bpf_program *fp)</i>
Tham s th nh t là handle qu n lý phiên làm vi c. Tham s th hailà tham chi u ch n compile version c a filter ( ã c nh ngh atrong pcap_compile())
nh d ng str mô t cho filter:
• Filter theo source ip
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23"><i> char *dev;</i>
<i> char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;</i>
<i> const u_char *packet;</i>
<i> struct pcap_pkthdr hdr; /* pcap.h */ struct bpf_program fp; /* hold compiled program */ bpf_u_int32 maskp; /* subnet mask */ bpf_u_int32 netp; /* ip */ dev = pcap_lookupdev(errbuf);</i>
<i> if(dev == NULL) {</i>
<i> fprintf(stderr,"%s\n",errbuf); exit(1);</i>
<i> }</i>
<i> descr = pcap_open_live(dev,BUFSIZ,1,-1,errbuf); if(descr == NULL)</i>
<i> {</i>
<i> printf("pcap_open_live(): %s\n",errbuf); exit(1);</i>
<i>}</i>
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">Hàm này có c u trúc sau :
<i>u_char *pcap_next(pcap_t *p,struct pcap_hkthdr *h )</i>
Tham s u tiên là handle qu n lý phiên làm vi c. Tham s thhai là pointer ch n c u trúc l u gi thông tin chung v frame ( th igian b t, chi u dài frame …). pcap_next tr v m t con tr có d ngu_char tr n frame c mô t b i c u trúc này
<i>struct pcap_pkthdr{</i>
<i> struct timeval ts; time stamp</i>
<i> bpf_u_int32 caplen; length of portion present bpf_u_int32; lebgth this packet (off wire)</i>
<i> }</i>
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">Ch ng 2: Th vi n l p trình ng libpcap
Ví d v sniff frame s d ng c u trúc này
<i>#include <stdio.h>#include <stdlib.h>#include <pcap.h>#include <errno.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netinet/if_ether.h>int main(int argc, char **argv){</i>
<i> int i; char *dev;</i>
<i> char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;</i>
<i> const u_char *packet;</i>
<i> struct pcap_pkthdr hdr; /* pcap.h */</i>
<i> struct ether_header *eptr; /* net/ethernet.h */</i>
<i> u_char *ptr; /* printing out hardware header info */ dev = pcap_lookupdev(errbuf);</i>
<i> if(dev == NULL) {</i>
<i> printf("%s\n",errbuf); exit(1);</i>
<i> }</i>
<i> printf("DEV: %s\n",dev);</i>
<i> descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf);</i>
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">Ch ng 2: Th vi n l p trình ng libpcap
<i> if(descr == NULL) {</i>
<i> printf("pcap_open_live(): %s\n",errbuf); exit(1);</i>
<i> }</i>
<i> packet = pcap_next(descr,&hdr); if(packet == NULL)</i>
Ch ng trình này in ra chi u dài và th i gian b t gói tin u tiên mànó b t c. Hàm pcap_close() dùng óng phiên làm vi c.
t k thu t khác ph c t p h n là dùng hàm pcap_loop() c alibpcap. C u trúc hai hàm này nh sau :
<i>int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)</i>
Tham s u tiên là handle qu n lý phiên làm viêc, tham s th hailà s frame s c sniff tr c khi thoát ra. N u tham s này là s âm
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">#include <stdio.h>#include <stdlib.h>#include <errno.h>
void my_callback(u_char *useless,const struct pcap_pkthdr*pkthdr,const u_char*packet)
tatic int count = 1;
fprintf(stdout,"%d, ",count); if(count == 4)
fprintf(stdout,"Come on baby sayyy you love me!!!");
if(count == 7)
fprintf (stdout,"Tiiimmmeesss!! "); fflush(stdout);
count++;}
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">Ch ng 2: Th vi n l p trình ng libpcap
int main(int argc,char **argv) {
int i; char *dev;
char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr;
const u_char *packet;
struct pcap_pkthdr hdr; /* pcap.h */
struct ether_header *eptr; /* net/ethernet.h */ if(argc != 2)
{
fprintf(stdout,"Usage: %s numpackets\n",argv[0]); return 0;
}
dev = pcap_lookupdev(errbuf); if(dev == NULL)
{
printf("%s\n",errbuf); exit(1);
}
descr = pcap_open_live(dev,BUFSIZ,0,-1,errbuf); if(descr == NULL)
{
printf("pcap_open_live(): %s\n",errbuf);
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">Ch ng 2: Th vi n l p trình ng libpcap
pcap_loop(descr,atoi(argv[1]),my_callback,NULL); fprintf(stdout,"\nDone processing packets... wheew!\n"); return 0;
}
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">MySQL ho t ng theo mơ hình client-server, r t n gi n, khơng có cáctính n ng cao c p nh qu n lý giao tác, chia s k t n i. c s d ng r ng rãitrong Linux i v i các ng d ng cgi hay Perl trong môi tr ng Web,Internet.
a ch download MySQL : 3.2. Cài t MySQL
<b>3.2.1. Cài t MySQL t các gói nh phân</b>
</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">$ make$ su
$ make intall
$scripts/mysql_intal.db
</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">Ch ng 3: H qu n tr c s d li u MySQL
3.3. S d ng MySQL
<b>3.3.1. L nh mysql</b>
ây là l nh thâm nh p trình qu n lý c s d li u và a ra cácnh qu n tr khác .
• <i>status: thơng tin v tr ng thái hi n hành c a trình ch</i>
• <i>version cho bi t thông tin v phiên b n c a trình ch my sql</i>
<b>3.3.3. L nh mysqlshow</b>
L nh này cho bi t thông tin v database. N u khơng có tham s shi n th toàn b database, ng c i n u có tham s là tên database thìhi n th t t c các b ng trong database.
u tham s là tên database và tên b ng thì tồn b tên các c ttrong b ng s c hi n th
</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">Ch ng 3: H qu n tr c s d li u MySQL
<b>3.3.4. L nh grant</b>
p quy n cho ng i dùng database Cú pháp :
<i>grant privilege on object to user[user-password] [opt]</i>
• privilege là quy n c p cho tài kho n ng i dùng bao g m:§ Alter : quy n thay i b ng và file ch m c
§ Creat : quy n t o b ng vàdatabase§ Delete : quy n xoá d li u trong database§ Drop : quy n xố database
§ Index : quy n qu n lý ch m c index§ Insert : quy n chèn d li u m i vào§ Select : quy n xem d li u
§ Update : quy n c p nh t d li u§ All : t t c các quy n
• Object : databasename.table
Có th dùng databasename.* s tác ng n m i b ngtrên databasename.
u ý: mysql cho phép c p quy n trên database ch a cócho m t ng i dùng sau này s t o
• User : username.host Ví d rick@”%”
• Password : n u grant ta m i user ta t password b ngcách thêm identyfied by password
• Ví d : t o m i user khtn v i password cntt tồn quy n trêndatabase tên packet(packet có th ch a có)
mysql>grant all on packet.* to khtn@”%” indentified by cntt
</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">Ch ng 3: H qu n tr c s d li u MySQL
<b>3.3.5. L nh Revoke</b>
L nh này dùng c quy n ng i dùng Cú pháp:
<i>revoke privilege on object from user</i>
<b>3.3.6. Ví d v t o m t c s d li u</b>
o c s d li u packet v i username là khtn và password la cntt :
<i>$mysql>grant all on packet.* to khtn@ identified by cntt;</i>
nh trên c th c hi n v i t cách qu n tr root c a MySQL.
<i>(Thoát v d u nh c l nh $mysql>quit )</i>
R i gõ ti p các l nh sau:
<i> $mysql u khtn p cntt</i>
<i> $ mysql>create database packet;</i>
<i> $mysql>use packet (s d ng database tên packet)</i>
Bây gi m i truy v n sql u lác ng lên database packet.3.4. L p trình MySQL trên ngôn ng C
M t s hàm th ng dùng khi l p trình v i MySQL
<b>4.4.1 mysql_init</b>
Kh i t o c u trúc x lý k t n i Cú pháp :
<i>MYSQL *mysql_init (MYSQL *old_connect)</i>
Tham s :
• old_connect =NULL :t o k t n i m i
• old_connect khác NULL :tái k t n i v i con tr old_connect
</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35"><i>unsigned port_num ,const char * unit_socket_name ,unsigned int flag )</i>
Tham s :
• <i>Connection : tr</i> n c u trúc MYSQL c kh i t o b i hàmmysqlconnect.
• <i>Server_host : a ch IP c a máy ch n i d ch vu mysql</i>
server ang ch y.
• <i>sql_username,sql_pass : là </i> i s ch ng th c quy n ngnh p h th ng
• <i>db_name : tên c a database</i>
• <i>port_num : s hi u c ng mysql dùng (m c nh b ng 0)</i>
• <i>unit_socket_name ki u socket (m c nh NULL)</i>
• <i>flag: ki u giao th c s k t n i</i>
</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36"><i>my_ulonglong mysql_affected_rows(MYSQL *connection)</i>
Khi s d ng hàm này ph i ép ki u giá tr tr v là unsigned long
</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37"><i>void mysql_free_result (MYSQL_RES *result)</i>
</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">Ch ng 4: L p trình socket
4.1. Gi i thi u v l p trình socket
Khi vi t ng ng và có nhu c u t ng tác v i m t ng ng khác,chúng ta th ng d a vào mô hình khách/ ch (client/server). Theo mơ hìnhnày, ng ng có kh ng ph c ho c cung c p nh ng thơng tin gì ó g ilà ng ng ch (trình ch hay server). ng ng g i yêu c u n trình ch
c i là ng ng khách (trình khách hay client). M r ng h n n a, servercó th là m t máy tính v i c u hình nh cịn client là r t nhi u máy con khácn i vào máy ch .
Nh v y, tr c khi yêu c u m t ch c a trình ch th c hi n i u gìó, trình khách (client) ph i có kh ng k t n i c v i trình ch . Quá trìnhk t n i này c th c hi n thông qua m t c ch tr u t ng hóa i là socket( m ch là “c ch c m”). K t n i gi a trình khách và trình ch ng tnh vi c c m phích i n vào c m i n. Trình khách th ng c coi nhphích c m i n, cịn trình ch c coi nh c m i n, m t c m có th c mvào ó nhi u phích i n khác nhau ng nh m t máy ch có th k t n i vàph c cho r t nhi u máy khách.
N u k t n i thành cơng thì trình khách và trình ch có th trao i dli u v i nhau, th c hi n các yêu c u v trao i d li u.
4.2. Nguyên lý ho t ng a socket
u tiên server m m t c m socket. ây ch là quá trình h i u hànhphân b tài nguyên chu n k t n i. Dùng hàm socket() t o “ c m”cho trình ch server.
Ti p n, ng ng khách bi t n c m socket a trình ch , n
</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">Ch ng 4: L p trình socket
(v i y ng d n). n ch c n t tên còn ng d n th ng t trongth c /tmp hay /usr/tmp. i v i giao ti p ng thông qua giao th cTCP/IP tên a socket c thay th b ng khái ni m c ng (port). C ng là m ts nguyên 2 bytes (kho ng 65000 c ng n có th ch n t cho socket) thayth cho tên t p tin. N u trình khách và trình ch n m trên hai máy kháchnhau, giao th c TCP/IP còn yêu c u xác nh thêm a ch IP k t n i nmáy ch xa.
Sau khi ã ch nh tên ho c s hi u port cho socket, n i hàm bind() ràng bu c hay t tên chính th c cho socket a trình ch . Ti p n là chk t n i t phía trình khách, trình ch s g i hàm listen() t o hàng i nh ncác k t n i do trình khách a n. N u có yêu c u k t n i t phía trìnhkhách, trình ch g i hàm accept() ti p nh n yêu c u a trình khách.accept() t o m t socket vô danh khác (unnamed socket), c m k t n i atrình khách vào socket vơ danh này và th c hi n quá trình chuy n d li u trao
i gi a khách ch . Socket c t tên tr c ó v n ti p c ho t ngch nh n yêu c u t trình khách khác.
i giao ti p c ghi thông qua socket ng n gi n nh vi c dùngl nh read/write c ghi trên file. N u file d a vào s mô (file descriptor)
xác nh socket c n c ghi cho hàm read/write.
Phía trình khách ch c m o m t socket vơ danh, ch nh tên và v trísocket a trình ch . Yêu c u k t n i b ng hàm connect() và c ghi, truyxu t d li u a socket b ng l nh read/ write ho c l nh send/ recv.
</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">ng d n a ch , trong khi giao th c TCP/IP i l y a ch IP (32 bits)tham chi u và th c hi n k t n i v t lý.
<b>4.3.1.1. Vùng( domain)</b>
Vùng dùng xác nh t ng ng n i giao ti p a Socketdi n ra. Vùng giao ti p Socket thông ng nh t hi n nay làAF_INET hay gia ti p socket theo chu n ng Internet. Chu n nàys d ng a ch IP xác nh nút k t n i v t lý trên ng. Ngoàira, n u n ch c n giao ti p c b , n có th dùng vùng giao ti ptheo chu n a Sun AF_UNIX, ó là dùng ng d n và h th ngfile t tên và xác nh k t n i gi a hai hay nhi u ng ng.Ch ng n nh ví d trên, chúng ta ã th c hi n b ng cách t têncho socket là server_socket, và Linux ã t o ra file server_socketngay trên th c hi n hành (hay trong th c m /tmp tùy theophiên n a Linux và UNIX). Tuy nhiên vùng giao ti pAF_UNIX l i ít c s d ng trong th c t . Ngày nay h u h t cácng ng ng s d ng socket u theo vùng AF_INET là ch y u.Chúng ta bàn sâu v phân vùng này ngay sau ây.
</div>