UDP không biết gì về MTU. Các gói UDP có thể có bất kỳ kích thước nào từ 8 đến 65535 byte. Các lớp giao thức bên dưới UDP có thể gửi một gói có kích thước cụ thể hoặc sẽ từ chối gửi gói đó có lỗi nếu quá lớn.
Lớp bên dưới UDP thường là IP, là IPv4 hoặc IPv6. Và gói IP có thể có bất kỳ kích thước nào từ 20 (IPv4) / 40 (IPv6) đến 65535 byte, đó là mức tối đa tương đương với UDP. Tuy nhiên, IP hỗ trợ một cơ chế gọi là phân mảnh . Nếu một gói IP có kích thước lớn hơn những gì lớp bên dưới có thể vận chuyển, IP có thể chia một gói duy nhất thành nhiều gói được gọi là các đoạn. Mỗi mảnh trên thực tế là một gói IP của riêng nó (có tiêu đề IP riêng) và cũng được gửi riêng đến đích; Sau đó, nhiệm vụ của đích là thu thập tất cả các mảnh và xây dựng lại gói đầy đủ từ chúng trước khi truyền dữ liệu nhận được ở lớp cao hơn tiếp theo (ví dụ UDP).
Giao thức Ethernet chỉ có thể vận chuyển các khung có tải trọng từ 46 đến 1500 byte (có trường hợp ngoại lệ nhưng điều đó nằm ngoài phạm vi của câu trả lời này). Nếu dữ liệu tải trọng nhỏ hơn 46 byte, dữ liệu được đệm là 46 byte. Nếu dữ liệu tải trọng vượt quá 1500 byte, giao diện sẽ từ chối chấp nhận nó. Nếu điều đó xảy ra, giờ đây, lớp IP sẽ quyết định phân mảnh gói, do đó không có đoạn nào lớn hơn 1500 byte hoặc báo lỗi cho lớp cao hơn tiếp theo nếu phân mảnh bị vô hiệu hóa hoặc bị cấm đối với kết nối cụ thể này.
Sự phân mảnh nói chung là để tránh, như
- là lãng phí tài nguyên ở phía người gửi.
- nó lãng phí tài nguyên ở phía người nhận.
- nó làm tăng chi phí giao thức cho cùng một lượng dữ liệu tải trọng.
- nếu một mảnh bị mất, toàn bộ gói bị mất.
- nếu một đoạn bị hỏng, toàn bộ gói bị hỏng.
- trong trường hợp gửi lại, tất cả các mảnh vỡ phải được gửi lại.
Đó là lý do tại sao TCP chấp nhận một cách thông minh kích thước khung của nó để các gói không bao giờ yêu cầu IP phân mảnh chúng. Điều này có thể được thực hiện bằng cách cấm IP đối với các gói phân mảnh và nếu IP báo cáo rằng một gói quá lớn sẽ được gửi, TCP sẽ giảm kích thước khung và thử lại, cho đến khi không còn báo cáo lỗi nữa.
Tuy nhiên, đối với UDP, đây sẽ là nhiệm vụ của chính ứng dụng, vì UDP là giao thức "ngu ngốc", nó không có logic quản lý riêng, điều này làm cho nó rất linh hoạt, nhanh chóng và đơn giản.
Kích thước UDP duy nhất bạn có thể dựa vào để luôn có thể vận chuyển là 576 trừ 8 byte tiêu đề UDP và trừ tiêu đề IP 20 (v4) / 40 (v6), vì tiêu chuẩn IP yêu cầu mọi máy chủ IP có thể nhận các gói IP với tổng kích thước 576 byte. Việc thực hiện giao thức của bạn sẽ không tuân thủ tiêu chuẩn nếu nó không thể chấp nhận các gói có kích thước tối thiểu đó. Tuy nhiên, lưu ý rằng tiêu chuẩn không nói 576 mà không bị phân mảnh, do đó, ngay cả gói IP 576 byte cũng có thể bị phân mảnh giữa hai máy chủ.
Kích thước gói duy nhất bạn có thể dựa vào để có thể vận chuyển mà không bị phân mảnh là 24 byte cho IPv4 và 56 byte IPv6, vì các tiêu đề IP nhỏ nhất cho một đoạn là 20/48 byte (v4 / v6) và một đoạn phải có ít nhất 4/8 dữ liệu tải trọng byte (v4 / v6). Do đó, một hệ thống vận chuyển bên dưới lớp IP không thể vận chuyển ít nhất các gói có kích thước luận án, không thể được sử dụng để vận chuyển lưu lượng IP.
Và trước khi mọi người nhận xét rằng một tiêu đề IPv6 chỉ có 40 byte: Điều đó là chính xác, nhưng không giống như tiêu đề IPv4, tiêu đề IPv6 tiêu chuẩn không có trường tiêu đề để phân mảnh. Nếu một gói phải được phân đoạn, thì phải thêm tiêu đề mở rộng phân mảnh bên dưới tiêu đề cơ sở IPv6 và tiêu đề mở rộng này dài 8 byte. Ngoài ra, không giống như IPv4, các phần bù phân mảnh trong IPv6 được tính bằng 8 byte chứ không phải 4 đơn vị byte, do đó, một đoạn chỉ có thể mang tải trọng là bội số của 8 byte trong trường hợp IPv6.