UDP ไม่รู้อะไรเกี่ยวกับ MTU แพ็กเก็ต UDP สามารถมีขนาดตั้งแต่ 8 ถึง 65535 ไบต์ เลเยอร์โปรโตคอลด้านล่าง UDP สามารถส่งแพ็คเก็ตที่มีขนาดเฉพาะหรือปฏิเสธที่จะส่งแพ็คเก็ตนั้นด้วยข้อผิดพลาดหากมีขนาดใหญ่เกินไป
เลเยอร์ด้านล่าง UDP มักเป็น IP ทั้ง IPv4 หรือ IPv6 และแพ็คเก็ต IP สามารถมีขนาดใดก็ได้ตั้งแต่ 20 (IPv4) / 40 (IPv6) ถึง 65535 ไบต์นั่นเป็นค่าสูงสุดเท่ากับ UDP อย่างไรก็ตาม IP สนับสนุนกลไกที่เรียกว่าการแตกแฟรกเมนต์ หากแพ็กเก็ต IP มีขนาดใหญ่กว่าสิ่งที่เลเยอร์ด้านล่างสามารถขนส่งได้ IP สามารถแบ่งแพ็คเก็ตเดียวเป็นหลาย ๆ แพ็คเก็ตที่เรียกว่าแฟรกเมนต์ ในความเป็นจริงทุกชิ้นส่วนนั้นเป็นแพ็คเก็ต IP ของตัวเอง (มีส่วนหัว IP ของตัวเอง) และถูกส่งไปยังปลายทางด้วยตัวเอง จากนั้นเป็นหน้าที่ของปลายทางในการรวบรวมชิ้นส่วนทั้งหมดและสร้างแพ็กเก็ตใหม่ให้เต็มก่อนที่จะส่งข้อมูลที่ได้รับไปยังเลเยอร์ที่สูงขึ้นถัดไป (เช่น UDP)
โปรโตคอลอีเธอร์เน็ตสามารถขนส่งเฟรมที่มีน้ำหนักบรรทุกระหว่าง 46 ถึง 1500 ไบต์เท่านั้น (มีข้อยกเว้น แต่อยู่นอกเหนือขอบเขตของการตอบกลับนี้) หากข้อมูลส่วนของข้อมูลมีค่าน้อยกว่า 46 ไบต์ข้อมูลนั้นจะถูกเพิ่มเป็น 46 ไบต์ หากข้อมูลส่วนของข้อมูลเกินกว่า 1500 ไบต์อินเทอร์เฟซจะปฏิเสธที่จะยอมรับ หากเป็นเช่นนั้นจะขึ้นอยู่กับเลเยอร์ IP ที่จะตัดสินใจแยกส่วนแพ็กเก็ตดังนั้นจึงไม่มีแฟรกเมนต์ที่ใหญ่กว่า 1500 ไบต์หรือรายงานข้อผิดพลาดไปยังเลเยอร์ที่สูงกว่าถัดไปหากการแยกส่วนถูกปิดใช้งานหรือถูกห้ามสำหรับการเชื่อมต่อนี้
การกระจายตัวโดยทั่วไปจะหลีกเลี่ยงเช่น
- เป็นการสิ้นเปลืองทรัพยากรที่ด้านผู้ส่ง
- มันเสียทรัพยากรที่ด้านผู้รับ
- มันเพิ่มโอเวอร์เฮดของโปรโตคอลสำหรับข้อมูลจำนวนเท่ากัน
- ถ้าแฟรกเมนต์เดียวหายไปแพ็กเก็ตทั้งหมดจะหายไป
- ถ้าแฟรกเมนต์เดียวเสียหายแพ็กเก็ตทั้งหมดเสียหาย
- ในกรณีที่ส่งอีกครั้งชิ้นส่วนทั้งหมดจะต้องส่งใหม่
นั่นเป็นสาเหตุที่ TCP ใช้ขนาดเฟรมอย่างชาญฉลาดเพื่อให้แพ็กเก็ตไม่ต้องการ IP เพื่อแยกส่วน สิ่งนี้สามารถทำได้โดยการห้าม IP กับแพ็คเก็ตส่วนและถ้า IP รายงานว่าแพ็คเก็ตใหญ่เกินไปที่จะส่ง TCP จะลดขนาดเฟรมและลองอีกครั้งจนกว่าจะไม่มีการรายงานข้อผิดพลาดอีกต่อไป
อย่างไรก็ตามสำหรับ UDP นี่จะเป็นงานของแอปพลิเคชั่นเองเนื่องจาก UDP เป็นโปรโตคอล "โง่" จึงไม่มีตรรกะการจัดการของตัวเองซึ่งทำให้ยืดหยุ่นรวดเร็วและง่ายมาก
ขนาด UDP เดียวที่คุณวางใจได้ที่จะขนส่งได้คือ 576 ลบ 8 ไบต์ส่วนหัว UDP และลบ 20 (v4) / 40 (v6) ไบต์ส่วนหัวของ IP เนื่องจากมาตรฐาน IP ต้องการให้โฮสต์ IP ทุกเครื่องสามารถรับแพ็กเก็ต IP ที่มี ขนาดทั้งหมด 576 ไบต์ การใช้โปรโตคอลของคุณจะไม่เป็นไปตามมาตรฐานหากไม่สามารถยอมรับแพ็คเก็ตที่มีขนาดอย่างน้อยนั้น อย่างไรก็ตามมาตรฐานที่ไม่ได้บอกว่า 576 โดยไม่มีการกระจายตัวดังนั้นแม้แพ็คเก็ต IP 576 ไบต์อาจได้รับการแยกส่วนระหว่างสองโฮสต์
ขนาดแพ็คเก็ตเท่านั้นที่คุณเชื่อถือได้ที่สามารถขนส่งได้โดยไม่มีการแตกแฟรกเมนต์คือ 24 ไบต์สำหรับ IPv4 และ 56 ไบต์ IPv6 เป็นส่วนหัว IP ที่เล็กที่สุดสำหรับส่วนคือ 20/48 ไบต์ (v4 / v6) และชิ้นส่วนต้องมีอย่างน้อย 4/8 ข้อมูลส่วนของข้อมูลไบต์ (v4 / v6) ดังนั้นระบบการขนส่งที่อยู่ต่ำกว่าชั้น IP ที่ไม่สามารถส่งอย่างน้อยหนึ่งซองที่มีขนาดเหล่านี้ไม่สามารถใช้เพื่อการรับส่งข้อมูล IP
และก่อนที่ทุกคนจะแสดงความคิดเห็นว่าส่วนหัว IPv6 มีเพียง 40 ไบต์: ถูกต้อง แต่ไม่เหมือนกับส่วนหัวของ IPv4 ส่วนหัว IPv6 มาตรฐานจะไม่มีฟิลด์ส่วนหัวสำหรับการกระจายตัว หากแพ็คเก็ตจะต้องมีการแยกส่วนแล้วส่วนหัวของการกระจายตัวของการกระจายตัวจะต้องเพิ่มด้านล่างส่วนหัวฐาน IPv6 และส่วนหัวของส่วนขยายนี้มีความยาว 8 ไบต์ แตกต่างจาก IPv4 เช่นการแตกแฟรกเมนต์ใน IPv6 นับเป็น 8 ไบต์และไม่ใช่ 4 ไบต์ดังนั้นแฟรกเมนต์สามารถขนย้ายข้อมูลที่มีหลาย 8 ไบต์ในกรณีของ IPv6 เท่านั้น