http://www.ebook.edu.vn 171
Chương 7
Lp trình ng dng cho giao thc UDP
1. Tng quan v giao thc UDP
TCP/IP là mt h các giao thc được gi là h giao thc IP, bao gm bn tng. Cn
nh rng TCP/IP không phi là mt giao thc mà thc s là mt h các giao thc, và bao
gm các giao thc mc thp khác như IP, TCP, và UDP. UDP nm tng giao vn, phía
trên giao thc IP. Tng giao vn cung cp kh năng truyn tin gia các mng thông qua các
gateway. Nó s dng các địa ch IP để gi các gói tin trên Internet hoc trên mng thông qua
các trình điu khin thiết b khác nhau. TCP và UDP là mt phn ca h giao thc TCP/IP;
mi giao thc có nhng ưu và nhược đim riêng ca nó.
Giao thc UDP là giao thc đơn gin, phi liên kết và cung cp dch v trên tng giao
vn vi tc độ nhanh. Nó h tr liên kết mt-nhiu và thường được s dng thường xuyên
trong liên kết mt-nhiu bng cách s dng các datagram multicast và unicast.
Giao thc IP là giao thc cơ bn ca Internet. TCP và UDP đều là hai giao thc tng
giao thc vn trên cơ s ca giao thc IP. Hình dưới đây ch ra cách ánh x mô hình OSI
ánh x vào kiến trúc TCP/IP và h giao thc TCP/IP.
Các tng OSI H giao thc
TCP TCP/IP Stack
7 Tng ng dng
6 Tng trình din
5 Tng phiên
Tng ng dng
HTTP
FTP
SMTP
RIP
DNS
4 Tng giao vn Tng giao vn TCP UDP
3 Tng mng Tng Internet ICMP,IP, IGMP
2 Tng liên kết d liu
1 Tng vt lý Tng mng Ethernet, ATM, Frame
Relay,..
Bng 7.1
1.1. Mt s thut ng UDP
Trước khi kim tra xem giao thc UDP hot động như thế nào, chúng ta cn làm quen
vi mt s thut ng. Trong phn dưới đây, chúng ta s định nghĩa mt s thut ng cơ bn
có liên quan đến giao thc UDP.
Packet
Trong truyn s liu, mt packet là mt dãy các s nh phân, biu din d liu và các
tín hiu điu khin, các gói tin này được chuyn đi và chuyn ti ti host. Trong gói tin,
thông tin được sp xếp theo mt khuôn dng c th.
Datagram
Mt datagram là mt gói tin độc lp, t cha, mang đầy đủ d liu để định tuyến t
ngun ti đích mà không cn thông tin thêm.
http://www.ebook.edu.vn 172
MTU
MTU là viết tt ca Maximum Transmission Unit. MTU là mt đặc trưng ca tng liên
kết mô t s byte d liu ti đa có th truyn trong mt gói tin. Mt khác, MTU là gói d liu
ln nht mà môi trường mng cho trước có th truyn. Ví d, Ethernet có MTU c định là
1500 byte. Trong UDP, nếu kích thước ca mt datagram ln hơn MTU, IP s thc hin
phân đon, chia datagram thành các phn nh hơn (các đon), vì vy mi đon nh có kích
thước nh hơn MTU.
Port
UDP s dng các cng để ánh x d liu đến vào mt tiến trình c th đang chy trên
mt máy tính. UDP định đường đi cho packet ti v trí xác định bng cách s dng s hiu
cng được xác định trong header ca datagram. Các cng được biu din bi các s 16-bit,
vì thế các cng nm trong di t 0 đến 65535. Các cng cũng được xem như là các đim
cui ca các liên kết logic, và đưc chia thành ba loi sau:
o Các cng ph biến: T 0 đến 1023
o Các cng đã đăng ký: 1024 đến 49151
o Các cng động/dành riêng 49152 đến 65535
Chú ý rng các cng UDP có th nhn nhiu hơn mt thông đip mt thi đim.
Trong mt s trường hp, các dch v TCP và UDP có th s dng cùng mt s hiu cng,
như 7 (Echo) hoc trên cng 23 (Telnet).
UDP có các cng thông dng sau:
Cng UDP Mô t
15 Netstat- Network Status-Tình trng mng
53 DNS-Domain Name Server
69 TFTP-Trivial File Transfer Protocol
Giao thc truyn tp thông thường
137 NetBIOS Name Service
138 Dch v Datagram NetBIOS
161 SNMP
Bng 7.2
TTL (Time To Live)
Giá tr TTL cho phép chúng ta thiết lp mt gii hn trên ca các router mà mt
datagram có th đi qua. Giá tr TTL ngăn nga các gói tin khi b kt trong các vòng lp định
tuyến vô hn. TTL được khi to bi phía gi và giá tr được gim đi bi mi router qun lý
datagram. Khi TTL bng 0, datagram b loi b.
Multicasting
Multicasting là phương pháp da trên chun có tính cht m để phân phi các thông tin
ging nhau đến nhiu người dùng. Multicasting là mt đặc trưng chính ca giao thc UDP.
Multicasting cho phép chúng ta truyn tin theo kiu mt nhiu, ví d gi tin hoc thư đin t
ti nhiu người nhn, đài phát thanh trên Internet, hoc các chương trình demo trc tuyến.
1.2. Hot động ca giao thc UDP
Khi mt ng dng da trên giao thc UDP gi d liu ti mt host khác trên mng,
UDP thêm vào mt header có độ dài 8 byte cha các s hiu cng ngun và đích, cùng vi
http://www.ebook.edu.vn 173
tng chiu dài d liu và thông tin checksum. IP thêm vào header ca riêng nó vào đâu mi
datagram UDP để to lên mt datagram IP:
1.3. Các nhược đim ca giao thc UDP
So vi giao thc TCP, UDP có nhng nhược đim sau:
Thiếu các tín hiu bt tay. Trước khi gi mt đon, UDP không gi các tín hiu bt
tay gia bên gi và bên nhn. Vì thế phía gi không có cách nào để biết datagram đã
đến đích hay chưa. Do vy, UDP không đảm bo vic d liu đã đến đích hay chưa.
S dng các phiên. Để TCP là hướng liên kết, các phiên được duy trì gia các host.
TCP s dng các ch s phiên (session ID) để duy trì các liên kết gia hai host. UDP
không h tr bt k phiên nào do bn cht phi liên kết ca nó.
Độ tin cy. UDP không đảm bo rng ch có mt bn sao d liu ti đích. Để gi d
liu ti các h thng cui, UDP phân chia d liu thành các đon nh. UDP không
đảm bo rng các đon này s đến đích đúng th t như chúng đã được to ra
ngun. Ngược li, TCP s dng các s th t cùng vi s hiu cng và các gói tin
xác thc thường xuyên, điu này đảm bo rng các gói tin đến đích đúng th t
đã được to ra.
Bo mt. TCP có tính bo mt cao hơn UDP. Trong nhiu t chc, firewall và router
cm các gói tin UDP, điu này là vì các hacker thường s dng các cng UDP.
Kim soát lung. UDP không có kim soát lung; kết qu là, mt ng dng UDP được
thiết kế ti có th làm gim băng thông ca mng.
1.4. Các ưu đim ca UDP
Không cn thiết lp liên kết. UDP là giao thc phi liên kết, vì thế không cn phi thiết
lp liên kết. Vì UDP không s dng các tín hiu handshaking, nên có th tránh được
thi gian tr. Đó chính là lý do ti sao DNS thường s dng giao thc UDP hơn là
TCP-DNS s chm hơn rt nhiu khi dùng TCP.
Tc độ. UDP nhanh hơn so vi TCP. Bi vì điu này, nhiu ng dng thường đưc
cài đặt trên giao thc UDP hơn so vi giao thc TCP.
H tr hình trng (Topology). UDP h tr các liên kết 1-1, 1-n, ngược li TCP ch h
tr liên kết 1-1.
Kích thước header. UDP ch có 8 byte header cho mi đon, ngược li TCP cn các
header 20 byte, vì vy s dng băng thông ít hơn.
Bng dưới đây tng kết nhng s kác nhau gia hai giao thc TCP và UDP:
Các đặc trưng UDP TCP
Hướng liên kết Không
S dng phiên Không
Độ tin cy Không
Xác thc Không
Đánh th t Không
Điu khin lung Không
Bo mt Ít Nhiu hơn
http://www.ebook.edu.vn 174
Bng 7.3
1.5. Khi nào thì nên s dng UDP
Rt nhiu ng dng trên Internet s dng UDP. Da trên các ưu và nhược đim ca
UDP chúng ta có th kết lun UDP có ích khi:
S dng cho các phương thc truyn broadcasting và multicasting khi chúng ta mun
truyn tin vi nhiu host.
Kích thước datagram nh và trình t đon là không quan trng
Không cn thiết lp liên kết
ng dng không gi các d liu quan trng
Không cn truyn li các gói tin
Băng thông ca mng đóng vai trò quan trng
Vic cài đặt ng dng UDP trong Java cn có hai lp là DatagramPacket và
DatagramSocket. DatagramPacket đóng gói các byte d liu vào các gói tin UDP được gi là
datagram và cho phép ta m các datagram khi nhn được. Mt DatagramSocket đồng thi
thc hin c hai nhim v nhn và gi gói tin. Để gi d liu, ta đặt d liu trong mt
DatagramPacket và gi gói tin bng cách s dng DatagramSocket. Để nhn d liu, ta
nhn mt đối tượng DatagramPacket t DatagramSocket và sau đó đọc ni dung ca gói tin.
UDP không có bt k khái nim nào v liên kết gia hai host. Mt socket gi tt c d
liu ti mt cng hoc nhn tt c d liu t mt cng mà không cn quan tâm host nào gi.
Mt DatagramSocket có th gi d liu ti nhiu host độc lp hoc nhn d liu t nhiu
host độc lp. Socket không dành riêng cho mt liên kết c th th nào c như trong giao thc
TCP. Các socket TCP xem liên kết mng như là mt lung: ta gi và nhn d liu vi các
lung nhp và lung xut nhn được t socket. UDP không cho phép điu này; ta phi làm
vic vi tng gói tin. Tt c d liu được đặt trong datagram được gi đi dưới dng mt gói
tin. Gói tin này cũng có th nhn được bi mt nhóm hoc cũng có th b mt. Mt gói tin
không nht thiết phi liên quan đến gói tin tiếp theo. Cho trước hai gói tin, không có cách nào
để biết được gói tin nào được gi trước và gói tin nào được gi sau.
2. Lp DatagramPacket
Các datagram UDP đưa rt ít thông tin vào datagram IP. Header UDP ch đưa tám
byte vào header IP. Header UDP bao gm s hiu cng ngun và đích, chiu dài ca d liu
và header UDP, tiếp đến là mt checksum tùy chn. Vì mi cng được biu din bng hai
byte nên tng s cng UDP trên mt host s là 65536. Chiu dài cũng được biu din bng
hai byte nên s byte trong datagram ti đa s là 65536 tr đi tám 8 byte dành cho phn thông
tin header.
http://www.ebook.edu.vn 175
Trong Java, mt datagram UDP được biu din bi lp DatagramPacket:
public final class DatagramPacket extends Object
Lp này cung cp các phương thc để nhn và thiết lp các địa ch ngun, đích t
header IP, nhn và thiết lp các thông tin v cng ngun và đích, nhn và thiết lp độ dài d
liu. Các trường thông tin còn li không th truy nhp được t mã Java thun túy.
DatagramPacket s dng các constructor khác nhau tùy thuc vào gói tin được s
dng để gi hay nhn d liu.
2.1. Các constructor để nhn datagram
Hai constructor to ra các đối tượng DatagramSocket mi để nhn d liu t mng:
public DatagramPacket(byte[] b, int length)
public DatagramPacket(byte[] b, int offset, int length)
Khi mt socket nhn mt datagram, nó lưu tr phn d liu ca datagram trong
vùng đệm b bt đầu ti v trí b[0] và tiếp tc cho ti khi gói tin được lưu tr hoàn toàn hoc
cho ti khi lưu tr hết length byte. Nếu s dng constructor th hai, thì d liu được lưu tr
bt đầu t v trí b[offset]. Chiu dài ca b phi nh hơn hoc bng b.length-offset. Nếu ta xây
dng mt DatagramPacket có chiu dài vượt quá chiu dài ca vùng đệm thì constructor s
đưa ra ngoi l IllegalArgumentException. Đây là kiu ngoi l RuntimeException nên
chương trình ca ta không cn thiết phi đón bt ngoi l này.
Ví d, xây dng mt DatagramPacket để nhn d liu có kích thước lên ti 8912 byte
byte b[]=new byte[8912];
DatagramPacket dp=new DatagramPacket(b,b.length);
2.2. Constructor để gi các datagram