Bộ giao thức Internet |
---|
Tầng ứng dụng (Application layer) |
|
Tầng giao vận (Transport layer) |
|
Tầng mạng (Internet layer) |
|
Tầng liên kết (Link layer) |
|
UDP (User Datagram Protocol) là một trong những giao thức quan trọng trong bộ giao thức TCP/IP. Với UDP, các chương trình trên mạng có thể gửi các đoạn dữ liệu ngắn, gọi là datagram, đến các máy khác. Không như TCP, UDP không đảm bảo tính tin cậy và thứ tự của dữ liệu; các gói có thể đến sai thứ tự hoặc bị mất mà không có thông báo. Tuy nhiên, UDP nhanh chóng và hiệu quả cho các tình huống yêu cầu kích thước nhỏ và thời gian phản hồi nhanh. Vì tính chất không trạng thái của nó, UDP rất phù hợp cho các ứng dụng cần xử lý lượng lớn yêu cầu nhỏ.
Các ứng dụng thường dùng UDP bao gồm DNS (Hệ thống tên miền), ứng dụng truyền phát trực tuyến, thoại qua IP, giao thức truyền tệp đơn giản (TFTP), và trò chơi trực tuyến.
Cổng kết nối
UDP sử dụng cổng để cho phép các ứng dụng có thể giao tiếp với nhau.
Cổng sử dụng 16 bit để định địa chỉ, do đó số cổng nằm trong khoảng từ 0 đến 65.535. Cổng 0 được dự trữ và không nên dùng.
Cổng từ 1 đến 1023 được gọi là cổng 'well-known' và trên các hệ điều hành giống Unix, kết nối tới các cổng này cần quyền root.
Cổng từ 1024 đến 49.151 là các cổng đã được đăng ký.
Cổng từ 49.152 đến 65.535 là các cổng tạm thời, chủ yếu được client dùng để kết nối tới server.
Cấu trúc của gói tin
UDP là giao thức hướng thông điệp đơn giản nhất của tầng giao vận, được miêu tả trong RFC 768 của IETF.
Trong bộ giao thức TCP/IP, UDP cung cấp giao diện rất đơn giản giữa tầng mạng bên dưới (như IPv4) và tầng phiên hoặc tầng ứng dụng phía trên.
UDP không đảm bảo rằng thông điệp đã được gửi tới tầng trên và người gửi không theo dõi trạng thái thông điệp UDP sau khi gửi (vì thế UDP còn được gọi là Giao thức Datagram Không Đáng Tin Cậy).
UDP chỉ thêm thông tin multiplexing và trao đổi. Các thông tin tin cậy cho truyền dữ liệu, nếu cần, phải được xây dựng ở các tầng trên.
+ | Bits 0 - 15 | 16 - 31 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Source Port | Destination Port | ||||||||||||||||||||||||||||||
32 | Length | Checksum | ||||||||||||||||||||||||||||||
64 | Data |
Phần header của UDP chỉ có 4 trường dữ liệu, trong đó 2 trường là tùy chọn (ô nền đỏ trong bảng).
- Cổng nguồn
- Trường này chỉ ra cổng của người gửi và có ý nghĩa nếu cần nhận phản hồi từ người nhận. Nếu không sử dụng, hãy đặt bằng 0.
- Cổng đích
- Trường này xác định cổng để nhận thông tin và là bắt buộc phải có.
- Độ dài
- Trường 16 bit này chỉ ra tổng chiều dài của datagram, bao gồm cả phần header và dữ liệu. Chiều dài tối thiểu là 8 byte nếu gói tin không có dữ liệu, chỉ có header.
- Checksum
- Trường 16 bit checksum dùng để kiểm tra lỗi của phần header và dữ liệu. Cách tính checksum được nêu trong RFC 768.
Vì thiếu tính tin cậy, các ứng dụng sử dụng UDP thường phải chấp nhận mất mát, lỗi hoặc trùng lặp dữ liệu. Một số ứng dụng như TFTP cần thêm các kỹ thuật đảm bảo tin cậy vào tầng ứng dụng. Phần lớn các ứng dụng UDP không cần các kỹ thuật này và có thể bỏ qua. Streaming media, game trực tuyến và voice over IP (VoIP) là các ví dụ phổ biến cho các ứng dụng thường dùng UDP. Nếu cần độ tin cậy cao hơn, có thể dùng các giao thức như TCP hoặc mã erasure thay thế.
Thiếu các cơ chế kiểm soát tắc nghẽn và luồng, cần phải sử dụng các kỹ thuật mạng để giảm thiểu hiệu ứng tắc nghẽn dây chuyền do tải UDP cao không được kiểm soát. Cụ thể, vì người gửi gói UDP không thể phát hiện tắc nghẽn, các thiết bị mạng như router sử dụng hàng đợi gói hoặc kỹ thuật bỏ gói để giảm tải UDP. Giao thức Datagram Congestion Control Protocol (DCCP) được thiết kế để giải quyết vấn đề này bằng cách thêm cơ chế kiểm soát tắc nghẽn cho các dòng dữ liệu UDP như streaming media.
Dù tổng lượng dữ liệu UDP trên mạng thường chỉ chiếm vài phần trăm, nhiều ứng dụng quan trọng vẫn sử dụng UDP, bao gồm DNS, SNMP, DHCP và RIP.
Liên kết bên ngoài
- RFC 768
- IANA Port Assignments
- The Trouble with UDP Scanning (PDF)
- Phân tích khung UDP Lưu trữ 2009-01-22 tại Wayback Machine
- UDP trên MSDN Magazine