Saya telah membaca sejumlah artikel tentang ukuran paket UDP tetapi belum dapat menyimpulkan apa yang benar.
Sejumlah layanan membatasi paket UDP terbesar hingga 512 byte (seperti dns)
Mengingat MTU minimum di internet adalah 576, dan ukuran header IPv4 adalah 20 byte, dan header UDP 8 byte. Ini menyisakan 548 byte yang tersedia untuk data pengguna
Apakah saya dapat menggunakan paket hingga ukuran 548 tanpa fragmentasi paket? Atau apakah ada sesuatu yang diketahui oleh pembuat DNS, dan itulah sebabnya mereka membatasi hingga 512 byte.
Bisakah saya lebih tinggi dari 548 byte dengan aman?
Jawaban:
Memang benar bahwa header IPv4 khas adalah 20 byte, dan header UDP adalah 8 byte. Namun dimungkinkan untuk memasukkan opsi IP yang dapat meningkatkan ukuran header IP hingga 60 byte. Selain itu, kadang-kadang perlu untuk node perantara untuk merangkum datagram di dalam protokol lain seperti IPsec (digunakan untuk VPN dan sejenisnya) untuk merutekan paket ke tujuannya. Jadi, jika Anda tidak tahu MTU di jalur jaringan tertentu, yang terbaik adalah meninggalkan margin yang masuk akal untuk informasi header lainnya yang mungkin tidak Anda antisipasi. Payload UDP 512-byte umumnya dianggap melakukan itu, meskipun itu tidak meninggalkan ruang yang cukup untuk header IP ukuran maksimum.
sumber
Batas teoritis (pada Windows) untuk ukuran maksimum paket UDP adalah 65507 byte. Ini didokumentasikan di sini :
Karena itu, sebagian besar protokol membatasi ukuran yang jauh lebih kecil - biasanya 512 atau kadang-kadang 8192. Anda sering dapat lebih tinggi dari 548 dengan aman jika Anda berada di jaringan yang dapat diandalkan - tetapi jika Anda menyiarkan di internet secara luas, semakin besar Anda pergi, semakin besar kemungkinan Anda akan mengalami masalah transmisi dan kehilangan paket.
sumber
Muatan UDP maksimum yang aman adalah 508 byte. Ini adalah ukuran paket 576, minus tajuk IP 60-byte maksimum dan tajuk UDP 8-byte. Setiap muatan UDP ukuran ini atau lebih kecil dijamin akan dikirimkan melalui IP (meskipun tidak dijamin akan dikirimkan). Apa pun yang lebih besar diizinkan langsung dijatuhkan oleh router apa pun dengan alasan apa pun. Kecuali pada rute khusus IPv6, di mana muatan maksimumnya adalah 1.212 byte. Seperti yang telah disebutkan orang lain, tajuk protokol tambahan dapat ditambahkan dalam beberapa keadaan. Nilai yang lebih konservatif sekitar 300-400 byte mungkin lebih disukai.
Paket UDP dapat terfragmentasi. Tapi ini tidak terlalu penting, karena kehilangan sebuah fragmen memiliki efek yang sama dengan kehilangan paket yang tidak terfragmentasi: seluruh paket dijatuhkan. Dengan UDP, ini akan terjadi.
Menariknya, ukuran paket teoretis maksimum adalah sekitar 30 MB (1.500 ethernet MTU - 60 IP header x 65.536 jumlah fragmen maksimum), meskipun kemungkinan melalui akan sangat kecil.
Sumber: RFC 791, RFC 2460
sumber
576 adalah ukuran penyangga reassembly minimum maksimum , yaitu setiap implementasi harus dapat merakit kembali paket setidaknya ukuran itu. Lihat IETF RFC 1122 untuk detailnya.
sumber
Artikel ini menjelaskan unit transmisi maksimum (MTU) http://en.wikipedia.org/wiki/Maximum_transmission_unit . Ini menyatakan bahwa host IP harus dapat memproses 576 byte untuk paket IP. Namun, catatan minumum adalah 68. RFC 791: "Setiap modul internet harus dapat meneruskan datagram 68 oktet tanpa fragmentasi lebih lanjut. Ini karena header internet mungkin hingga 60 oktet, dan fragmen minimum adalah 8 oktet . "
Dengan demikian, ukuran paket aman 508 = 576 - 60 (header IP) - 8 (header udp) masuk akal.
Seperti yang disebutkan oleh user607811, fragmentasi oleh lapisan jaringan lain harus disusun kembali. https://tools.ietf.org/html/rfc1122#page-56 3.3.2 Reassembly Lapisan IP HARUS mengimplementasikan reassembly dari datagram IP. Kami menetapkan ukuran datagram terbesar yang dapat dipasang kembali oleh EMTU_R ("MTU yang efektif untuk menerima"); ini kadang-kadang disebut "ukuran penyangga reassembly". EMTU_R HARUS lebih besar dari atau sama dengan 576
sumber
Ukuran buffer reassembly minimum IPv4 adalah 576, IPv6 memilikinya pada 1500. Kurangi ukuran header dari sini. Lihat Pemrograman Jaringan UNIX oleh W. Richard Stevens :)
sumber
512 adalah taruhan terbaik Anda. Ini digunakan di tempat lain dan merupakan angka genap (setengah dari 1024).
sumber
Mengingat bahwa IPV6 memiliki ukuran 1500, saya akan menegaskan bahwa operator tidak akan menyediakan jalur terpisah untuk IPV4 dan IPV6 (keduanya adalah IP dengan tipe yang berbeda), memaksa mereka ke peralatan untuk ipv4 yang akan menjadi tua, berlebihan, lebih mahal untuk mempertahankan dan kurang bisa diandalkan. Itu tidak masuk akal. Selain itu, melakukan hal itu mungkin dengan mudah dianggap memberikan perlakuan istimewa untuk beberapa lalu lintas - tidak, tidak, berdasarkan peraturan, mereka mungkin tidak terlalu peduli (kecuali mereka tertangkap).
Jadi 1472 harus aman untuk penggunaan eksternal (meskipun itu tidak berarti aplikasi seperti DNS yang tidak tahu tentang EDNS akan menerimanya), dan jika Anda berbicara jaring internal, Anda lebih mungkin mengetahui tata letak jaringan Anda dalam hal ini ukuran paket jumbo berlaku untuk paket non-terfragmentasi jadi untuk 4096 - 4068 byte, dan untuk kartu intel dengan buffer 9014 byte, ukuran paket ... tunggu ... 8086 byte, apakah akan maks ... kebetulan? kekek
****MEMPERBARUI****
Berbagai jawaban memberikan nilai maksimum yang diizinkan oleh 1 vendor SW atau berbagai jawaban dengan asumsi enkapsulasi. Pengguna tidak meminta nilai serendah mungkin (seperti "0" untuk ukuran UDP yang aman), tetapi ukuran paket aman terbesar.
Nilai enkapsulasi untuk berbagai lapisan dapat dimasukkan beberapa kali. Karena begitu Anda merangkum aliran - tidak ada yang melarang, katakanlah, lapisan VPN di bawahnya dan duplikasi lengkap lapisan enkapsulasi di atasnya.
Karena pertanyaannya adalah tentang nilai keamanan maksimum, saya berasumsi bahwa mereka berbicara tentang nilai aman maksimum untuk paket UDP yang dapat diterima. Karena tidak ada paket UDP yang dijamin, jika Anda menerima paket UDP, ukuran aman terbesar adalah 1 paket dari IPv4 atau 1472 byte.
Catatan - jika Anda menggunakan IPv6, ukuran maksimumnya adalah 1452 byte, karena ukuran header IPv6 adalah 40 byte vs ukuran 20 byte IPv4 (dan bagaimanapun, satu masih harus mengizinkan 8 byte untuk header UDP).
sumber
Saya sudah membaca beberapa jawaban bagus di sini; Namun, ada beberapa kesalahan kecil. Beberapa menjawab bahwa bidang Panjang Pesan di header UDP adalah maksimal 65535 (0xFFFF); ini benar secara teknis. Beberapa menjawab bahwa maksimum sebenarnya adalah (65535 - IPHL - UDPHL = 65507). Kesalahannya, adalah bahwa bidang Panjang Pesan di Header UDP mencakup semua muatan (Layers 5-7), ditambah panjang Header UDP (8 Bytes). Apakah ini berarti bahwa jika bidang panjang pesan adalah 200 Bytes (0x00C8), payload sebenarnya 192 Bytes (0x00C0).
Apa yang sulit dan cepat adalah bahwa ukuran maksimum datagram IP adalah 65535 Bytes. Jumlah ini sampai pada jumlah total header L3 dan L4, ditambah muatan Layers 5-7. IP Header + Header UDP + Layers 5-7 = 65535 (Maks).
Jawaban yang paling benar untuk apa ukuran maksimum datagam UDP adalah 65515 Bytes (0xFFEB), karena datagram UDP menyertakan header UDP. Jawaban yang paling benar untuk berapa ukuran maksimum muatan UDP adalah 65507 Bytes, karena muatan UDP tidak termasuk header UDP.
sumber
Saya khawatir saya menimbulkan reaksi kesal, namun demikian, untuk mengklarifikasi bagi saya jika saya salah atau mereka yang melihat pertanyaan ini dan tertarik pada jawaban:
pemahaman saya tentang https://tools.ietf.org/html/rfc1122 yang berstatus "spesifikasi resmi" dan karena itu merupakan referensi untuk terminologi yang digunakan dalam pertanyaan ini dan yang tidak digantikan oleh RFC lain atau errata yang bertentangan dengan berikut:
secara teoritis, yaitu. berdasarkan spesifikasi tertulis., UDP seperti yang diberikan oleh https://tools.ietf.org/html/rfc1122#section-4 tidak memiliki "ukuran paket". Dengan demikian jawabannya bisa "tidak terbatas"
Dalam praktiknya, pertanyaan apa yang kemungkinan besar dicari (dan yang dapat diperbarui untuk tindakan teknologi saat ini), ini mungkin berbeda dan saya tidak tahu.
Saya minta maaf jika saya menyebabkan kesal. https://tools.ietf.org/html/rfc1122#page-8 "Internet Protocol Suite" dan "Asumsi Arsitektur" tidak menjelaskan kepada saya tentang "asumsi" saya, berdasarkan apa yang saya dengar, bahwa yang lapisan terpisah . Yaitu. lapisan UDP tidak perlu khawatir dengan lapisan IP di (dan lapisan IP memang memiliki hal-hal seperti Reassembly, EMTU_R, Fragmentasi dan MMS_R ( https://tools.ietf.org/html/rfc1122#halaman- 56 ))
sumber