Giao th c UDP

Một phần của tài liệu GIÁO TRÌNH MÔN HӐC MҤNG MÁY TÍNH (Trang 106)

Giao th c UDP (User Datagram Protocol) cho phộp ng i s d ng g i b n tin mà khụng c n thi t l p liờn k t, do ú khụng b o m vi c giao nh n chớnh xỏc ho c th t b n tin. Giao th c UDP dựng cho d ch v khụng tin c y 100%. Th c t trong cỏc m ng 99% b n tin UDP c giao nh n ỳng ớch. Do ớt ch c n ng ph c

p nờn UDP ho t ng nhanh h n so v i TCP.

Source Port Destination Port

Message Length Checksum

DATA

Hỡnh 7-6. Khuụn d ng c a UDP Datagram.

Cỏc tr ng cú ý ngh a nh sau:

Source Port - S hi u c ng ngu n (c a mỏy g i): M t tr ng cú th l a ch n c v i s hi u c ng. N u m t s hi u c ng khụng xỏc nh thỡ tr ng này cú giỏ tr là 0.

Destination Port - S hi u c ng trờn mỏy nh n.

Message Length - Chi u dài c a d li u trong ú c ph n Header và d li u.

Tr ng Checksum: là 16 bit bự m t c a phộp t ng bự m t c a tr ng d li u, cú c ph n pseudoHeader gi ng nh c a TCP.

Tr ng checksum c a UDP c ng cú th l a ch n c, nh ng khụng c dựng. Khụng m t checksum nào c dựng cho ph n d li u vỡ ph n checksum c a IP ch dựng cho ph n Header IP mà thụi. N u ph n checksum khụng c dựng thỡ cỏc bit c a tr ng này c thi t l p là 0.

Giao th c UDP c s d ng trong m t s tỡnh hu ng c bi t :

- Khi truy n m t d li u nh thỡ dựng UDP cú hi u qu h n so v i vi c k t n i và h y k t n i khi s d ng TCP.

- Cỏc ng d ng h i ỏp, mong mu n tr l i trong m t th i gian ng n sau khi ng i s d ng g i i yờu c u. Tr l i c ng là m t c ch bỏo nh n. Ng i ta

d ng giao th c UDP nh trong cỏc d ch v ng d ng khụng yờu c u chớnh xỏc cao nh thụng bỏo gi hay cỏc d ch v g i nh n tin, t giỏ .. .

- M t s mụ hỡnh nộn truy n cỏc thụng tin audio, video, cú th ch p nh n c m t vài gúi d li u b h ng hay th t l c.

- M t vài ng d ng cú ụ tin c y riờng trong khi truy n d li u thỡ nờn dựng UDP h n là TCP.

7.4 C ng và Socket

7.4.1 S hi u c ng

Khi m t mỏy khỏch k t n i vào mỏy ch thỡ cú th yờu c u nhi u d ch v khỏc nhau trờn mỏy ch . M i d ch v u cú cỏch g i và nh n d li u theo quy c riờng. TCP và UDP ch ch u trỏch nhi m a d li u t m t mỏy tớnh nỏy n m t mỏy tớnh khỏc, cũn d li u ú c g i n d ch v theo cỏch nào thỡ ph i thụng qua

ng c a d ch v .

ng c c tr ng b i m t s cú giỏ tr t 0 n 65535. Cỏc c ng chu n t 0 - 1023 là c ng c dựng cho cỏc d ch v ph bi n nh FTP, eMAIL, POP3, HTTP, ... Khụng th cú hai ti n trỡnh cựng s d ng chung m t s hi u c ng.

Cỏc s hi u c ng (Port Numbers) c dựng thụng d ng trong th c t :

UDP Port TCP Port

0 Reversed 7 Echo 37 Time

42 Name Server

53 Domain Name Server

69 Trivial File Transfer Program ( TFTP ) 514 System Log . . . . 0 Reversed 1 TCP Multiplexor 20 FTP_ Data Connection 21 FTP_ Command Connection 23 TELNET 25 SMTP 42 Name Server

53 Domain Name Server 79 Finger_ find a active user 80 HTTP

7.4.2 Socket

i socket xỏc nh m t m cu i trong liờn k t truy n thụng hai chi u gi a cỏc ti n trỡnh giao ti p trờn m ng, là i t ng mà qua ú cỏc d ch v ng d ng truy n ho c nh n cỏc gúi d li u trờn m ng. Khi c n g i d li u i, cỏc ti n trỡnh ghi d li u vào socket, khi cú d li u n, cỏc ti n trỡnh s c socket l y d li u. Trong nh ng n m 80, do nhu c u c n cú m t giao di n l p trỡnh ng d ng API (Application Programming Interface) phỏt tri n cỏc trỡnh ng d ng trờn m ng TCP/IP, giao di n socket ó c xõy d ng l n u tiờn trờn h u hành UNIX. Lo i Berkelay Socket (Berkeley Software Distribution - BSD, t i Tr ng i h c

California Berkeley) c thi t k v i nguyờn t c truy n thụng liờn ti n trỡnh (IPC - InterProcess Communication) trờn m ng g n li n v i TCP/IP.

Cỏc Socket cung c p kh n ng g i và nh n d li u thụng qua k t n i m ng mà khụng i sõu vào cỏc m c và khuụn d ng gúi tin, c ch qu n lý b m. C ch trao i Socket c s d ng trong cỏc mụ hỡnh m ng nh sau :

• Mụ hỡnh Client/Server

• Mụ hỡnh m ng ngang hàng, nh cỏc trỡnh ng d ng "chat"

• o cỏc cu c g i th t c t xa ( Remote Procedure Calls - RPC ) Cỏc ki u socket :

1. Stream socket :

d ng v i giao th c TCP, cú thi t l p k t n i gi a hai mỏy tr c khi trao i li u.

Stream socket cung c p c ch trao i d li u theo hai chi u, tin c y, cú th và khụng phỏt l p.

Khụng cú biờn gi i gi a cỏc record.

2. Datagram socket

d ng v i giao th c UDP, khụng c n thi t l p liờn k t gi a hai mỏy tr c khi truy n d li u. Vi c nh v Server và Client s thụng qua a ch ớch trong gúi tin.

Datagram socket cung c p c ch trao i d li u theo hai chi u, khụng b o m tin c y và cú th t , cú th phỏt l p.

Biờn gi i gi a cỏc record trong d li u g i i c b o toàn.

3. Raw socket

Cung c p s truy xu t vào cỏc giao th c giao ti p n n cú h tr socket. Cỏc Socket này tỡnh hu ng là cỏc gúi tin cú nh h ng m c dự tin c y ph thu c vào giao di n c cung c p b i giao th c.

Raw socket ch dành cho cỏc ng i s d ng mu n phỏt tri n cỏc giao th c giao ti p m i ho c mu n truy xu t sõu vào cỏc ti n ớch bớ m t c a giao th c

ú.

t socket cú ba thành ph n chớnh :

• Giao di n c liờn k t : là a ch IP c a mỏy.

• Lo i socket : Stream socket ho c Datagram socket.

t liờn k t gi a hai mỏy trờn v i nhau c xỏc nh b i m t c p socket : Socket (Host1, Port1) và Socket (Host2, Port2). S Socket là duy nh t cho phộp

t ti n trỡnh cú th giao ti p v i m t ti n trỡnh khỏc trờn m ng.

Hỡnh 7-7. Nhi u mỏy ngu n n i v i m t mỏy ớch.

t liờn k t cú th c thi t l p theo m t trong hai cỏch : ch ng (active) ho c b ng. Cỏc th c th t ng trờn s d ng TCP thụng qua b ng cỏch g i cỏc hàm ch v nguyờn th y. D ch v TCP c thi t l p nh m t liờn k t logic gi a m t p Socket. M t Socket cú th tham gia nhi u liờn k t v i cỏc Socket xa khỏc nhau. Vỡ cỏc khung tin c a qua c ng u cú y cỏc thụng tin v socket (v i a ch IP), cho nờn khụng cú xung t d li u x y ra.

7.5 Mụ hỡnh giao ti p Client/Server

TCP/IP ph thu c vào khỏi ni m mỏy khỏch (Client) và mỏy ch (Server). Thu t ng Server dựng ch nh ng ch ng trỡnh cung c p cỏc d ch v thụng qua ng. Cỏc Server nh n m nhi m ch c n ng ỏp ng cỏc yờu c u c a mỏy khỏch, th c hi n vi c ph c v và tr l i k t qu . Thu t ng Client dựng ch cỏc ch ng trỡnh ng d ng g i cỏc yờu c u n Server và ch k t qu tr v .

Cỏc ch ng trỡnh Client và Server th ng th c thi trờn cỏc mỏy khỏc nhau. i ch ng trỡnh Server cú th cựng ỏp ng cho nhi u ch ng trỡnh Client trờn nhi u mỏy tớnh khỏc nhau cựng m t lỳc.

7.5.1 Quỏ trỡnh trao i d li u dựng Stream Socket

Stream socket d a trờn n n giao th c TCP ũi h i ph i t o m t k t n i tr c khi hai bờn cú th truy n ho c nh n d li u cho nhau. Stream Socket cung c p m t dũng cỏc byte d li u khụng cú phõn cỏch cú th truy n hai chi u. Cỏc dũng d li u cú th tin c y c phõn phỏt tu n t , d li u khụng trựng l p, ngh a là cỏc gúi d li u c phõn phỏt theo th t c phỏt, và m i l n ch cú m t gúi riờng bi t

c truy n. Mỏy C Mỏy B hi u c ng ngu n 350, c ng ớch là 23 hi u c ng ngu n 351, c ng ớch là 23 hi u c ng ngu n 352, c ng ớch là 23 Mỏy A Mỏy ớch

ng socket này r t thớch h p v i mụ hỡnh Client/Server. Server s t o m t socket, gỏn cho nú m t tờn (cung c p m t a IP c a mỏy và m t port giao ti p), và i client n i k t n socket. Bờn client c ng t o m t socket và n i k t n tờn socket trờn server. Khi server phỏt hi n cú yờu c u k t n i t client, nú s t o m t socket m i và s d ng socket m i ú giao ti p v i client. Socket c ti p t c i

t n i t cỏc client khỏc.

trao i d li u gi a Client/Server b ng cỏch dựng Socket c bi u di n nh sau : Start connect() send()/recv() socket() Kết thúc close() CLIENT socket() bind() Start End Wait for connections from clients accept() send() / recv() listen() close() SERVER

Hỡnh 7-8. S trao i d li u gi a Client/Server b ng StreamSocket.

7.5.2 Quỏ trỡnh trao i d li u dựng Datagram Socket

Datagram Socket d a trờn giao th c UDP khụng ũi h i ph i thi t l p m t k t i tr c khi truy n và nh n d li u. D li u ch là m t gúi n, vỡ v y d ng socket này th ng dựng truy n cỏc m u tin, khụng c n nhi u cỏc header l p ng d ng. ng socket này cung c p lu ng d li u khụng b o m theo th t ho c khụng b trựng l p, khụng b o m d li u s n c n i nh n. D li u cú th n khụng theo th t c phỏt và cú kh n ng b trựng l p. Nh ng s phõn cỏch gi a cỏc

u tin thỡ c duy trỡ. Trong m ng LAN datagram cú kh n ng tin c y t ng i t, nh ng trong m ng WAN, nh m ng Internet thỡ khụng c m b o.

Đ u client/server s d ng giao th c UDP

socket() bind() Start End send() / recv() close() SERVER Start send()/recv() socket() End close() CLIENT

Hỡnh 7-9. S trao i d li u gi a Client/Server b ng DatagramSocket.

7.5.3 Vớ d ch ng trỡnh client/server

Trong vớ d d i õy ch ng trỡnh server th c hi n cỏc b c thi t l p cho vi c ch i m t k t n i t ch ng trỡnh client. Sau khi thi t l p k t n i v i client, c hai th c hi n m t s thao tỏc truy n và nh n thụng tin r i k t thỳc ch ng trỡnh.

7.5.3.1 l nh ch ng trỡnh Server

- T o ra m t socket v i hàmsocket().

- Ràng bu c socket v i m t a ch b ng hàmbind ().

- Dựng hàmlisten() ch i m t k t n i.

- Nh n b t k thụng tin nào yờu c u k t n i b ng hàmaccept().

- Nh n cỏc thụng bỏo g i n b ng hàmread()và g i thụng bỏo n client b ng hàmwrite().

-

/* mksock.c make and bind to a socket - userver*/

#include<stdio.h> #include<sys/socket.h> #include<sys/un.h> #include<unistd.h> void die(char * message); void copyData(int from, int to);

int main(void) {

struct sockaddr_un address; int sock,conn; size_t addrLength; if ((sock=socket(PF_UNIX,SOCK_STREAM,0))<0) die("socket"); /*unlik("./sample_socket");*/ address.sun_family=AF_UNIX; strcpy(address.sun_path,"./sample_socket"); addrLength=sizeof(address.sun_family)+strlen(address.sun_path); if(bind(sock,(struct sockaddr *)&address,addrLength))

die("bind"); if(listen(sock,5)) die("listen"); while((conn=accept(sock,(struct sockaddr*)&address,&addrLength))>=0) { printf("---getting data\n"); copyData(conn,1); printf("---done\n"); close(conn); } if (conn<0) die("accept"); close(sock); return 0; }

void die(char * message){ perror(message); exit(1);

}

void copyData(int from,int to){ char buf[1024]; int amount; while ((amount=read(from,buf,sizeof(buf)))>0){ if(write(to,buf,amount)!=amount){ die ("write"); return; } } if (amount<0) die("read"); } 7.5.3.2 l nh ch ng trỡnh client

ch ng trỡnh client , th c hi n c m t k t n i n server và truy n nh n thụng tin ch c n th c hi n 2 b c c b n nh sau:

- T o m tsocket() ng ng v i ch ng trỡnhserver th .

- Yờu c u n server th c hi n k t n i b ng cỏch g i hàmconnect().

u m t k t n i c t o ra, client cú th g i yờu c u b ng hàm write() và nh n cỏc ỏp ng ph n h i b ng hàmread().

/* sockconn.c - connect to a socket - uclient*/

#include<sys/socket.h> #include<sys/un.h> #include<unistd.h> void die (char * message);

void copyData(int from, int to);

int main(void){

struct sockaddr_un address; int sock;

size_t addrLength;

if ((sock=socket(PF_UNIX,SOCK_STREAM,0))<0) die("socket"); address.sun_family=AF_UNIX;

strcpy(address.sun_path,"./sample_socket");

addrLength=sizeof (address.sun_family) + strlen(address.sun_path); if(connect(sock,(struct sockaddr *)& address,addrLength)) die("connect"); copyData(0,sock);

close(sock); return 0; }

void die(char * message){ perror(message); exit(1);

}

void copyData(int from, int to){ char buf[1024]; int amount; while ((amount=read(from,buf,sizeof(buf)))>0){ if(write(to,buf,amount)!=amount) { die("write"); return; } } if (amount<0) die("read"); } --- BÀI T P 1. Tỡm hi u cỏc mụ t Socket và c u trỳc d li u c a socket mà h u hành p phỏt l u tr cỏc thụng tin c n thi t cho k t n i m ng.

2. Tỡm hi u cỏc th vi n l p trỡnh WinSock trờn h u hành Windows. 3. Vi t cỏc ch ng trỡnh giao ti p Client/Server theo mụ hỡnh giao ti p

Ch ng 8 NG PHIấN

ng phiờn (Session Layer) làm nhi m v t ch c và ng b s chuy n i li u gi a cỏc ti n trỡnh ng d ng khỏc nhau. T ng Phiờn làm vi c v i t ng ng ng cung c p cỏc t p d li u, c g i là cỏc m ng b , cỏc m này cho phộp m t ng d ng bi t quỏ trỡnh truy n và nh n d li u c th c hi n nh th nào.

ng phiờn ch u trỏch nhi m thi t l p và duy trỡ m t phiờn truy n thụng gi a hai tr m ho c nỳt m ng. M t phiờn truy n thụng qua m t m ng ho t ng cú ph n gi ng v i m t cu c g i qua cỏc ng dõy n tho i. T ng Phiờn c g ng thi t l p t phiờn truy n thụng gi a hai nỳt trờn m t m ng. C hai nỳt u th a nh n phiờn truy n thụng này th ng s c gỏn m t s hi u nh n di n. M i nỳt cú th ng t phiờn truy n thụng gi a hai nỳt trờn m t m ng c g i là t c ng lu n lý

(Socket). Khi m t phiờn truy n thụng c thi t l p, m t c ng lu n lý s c m ra. M t phiờn truy n thụng c k t thỳc c g i là t c ng lu n lý b úng

(Close Socket).

c tiờu c a t ng phiờn là cú kh n ng cung c p cho ng i s d ng cỏc ch c ng c n thi t qu n lý cỏc phiờn ng d ng c th nh :

- u ph i vi c trao i d li u gi a cỏc ng d ng b ng cỏch thi t l p và gi i phúng (m t cỏch logic) cỏc phiờn (hay g i là cỏc h i tho idialogues).

- Cung c p cỏc m ng b húa ki m soỏt vi c trao i d li u.

- ỏp t cỏc qui t c cho cỏc t ng tỏc gi a cỏc ng d ng c a ng i s d ng. - Cung c p c ch l y l t (n m quy n) trong cỏc quỏ trỡnh trao i d li u.

Trong t ng phiờn thỡ v n ng b húa c th c hi n t ng t nh m t c ch ki m tra / ph c h i (check point/reset).Trong m t h qu n tr t p tin, d ch v này cho phộp ng i s d ng xỏc nh cỏc m ng b húa trong dũng d li u và cú th khụi ph c l i vi c h i tho i b t u t m t trong cỏc m ú.

8.1 D ch v OSI cho t ng Phiờn

ng phiờn làm vi c qu n lý cỏc cu c tho i gi a hai mỏy tớnh b ng cỏch thi t p, qu n lý, và k t thỳc cỏc phiờn truy n thụng.

8.1.1 Cung c p cho ng i s d ng d ch v t ng phiờn (SS-user)

- Thi t l p m t liờn k t v i m t ng i s d ng d ch v t ng phiờn khỏc, trao i li u v i ng i s d ng ú m t cỏch ng b và h y b liờn k t m t cỏch cú

Một phần của tài liệu GIÁO TRÌNH MÔN HӐC MҤNG MÁY TÍNH (Trang 106)

Tải bản đầy đủ (PDF)

(182 trang)