Apa Ukuran Paket UDP Aman terbesar di Internet

201

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?

KM
sumber
2
Gandakan, lihat stackoverflow.com/questions/900697/…
ChrisW
10
Ini adalah pertanyaan yang agak berbeda. Saya bertanya apa paket terbesar yang dapat saya kirim melalui internet (tanpa sepengetahuan jaringan lain, atau menyelidiki) yang tidak akan mengalami fragmentasi. Pada dasarnya ukuran maksimum yang aman, yang akan bekerja pada semua hal tanpa harus khawatir tentang menyelidiki koneksi.
KM
2
Anda tidak dapat menghilangkan kemungkinan fragmentasi, tetapi ini tidak membuat segalanya menjadi kurang aman. Jika sebuah fragmen dijatuhkan, itu sama dengan jika seluruh paket dijatuhkan, yang terjadi dengan UDP. Tidak aman adalah jika suatu paket melebihi ukuran minimum yang harus didukung oleh router, dan dengan demikian tidak dijamin akan terkirim (versus dijamin akan dikirimkan). Di sinilah angka 512-byte masuk.
Beejor

Jawaban:

129

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.

mark4o
sumber
36
Hanya untuk menjadi jelas: memiliki ukuran kecil untuk menghindari fragmentasi tidak membuat pengiriman paket "Aman", masih ada sejumlah kemungkinan membuat pengiriman tidak dapat diandalkan seperti anjing memakan kabel jaringan saya. Yang mengatakan; memiliki lebih sedikit fragmen membuat pengiriman "lebih aman" karena jika ada lebih dari satu dan salah satu dari mereka tidak pernah berhasil - seluruh paket (datagram) dijatuhkan oleh UDP.
markmnl
3
Untuk keperluan pertanyaan, seseorang harus menggunakan definisi poster 'aman', bukan definisi dalam beberapa buku standar yang belum pernah mereka lihat.
Astara
Apakah router dunia nyata diketahui menjatuhkan paket UDP daripada memecah-mecahnya?
user253751
60

Batas teoritis (pada Windows) untuk ukuran maksimum paket UDP adalah 65507 byte. Ini didokumentasikan di sini :

Ukuran pesan UDP maksimum yang benar adalah 65507, sebagaimana ditentukan oleh rumus berikut: 0xffff - (sizeof (IP Header) + sizeof (Header UDP)) = 65535- (20 + 8) = 65507

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.

Reed Copsey
sumber
39
Tautan Microsoft bukan referensi normatif. RFC adalah referensi normatif; dan apa yang Anda kutip hanya berlaku untuk IPv4.
Marquis of Lorne
2
Hanya karena MS memperbolehkannya tidak berarti itu selalu merupakan ide yang bagus, karena router perantara, dll. Mungkin terpaksa memecah-mecah ukuran paket yang lebih besar (seperti yang Anda sebutkan).
rogerdpack
1
@ EJP Mereka tidak menjelaskannya dengan jelas pada tautan Microsoft, tetapi tampaknya itu merupakan konsekuensi yang perlu dari IPv4: Bidang panjang total IPv4 adalah 16 bit, dan nilai itu harus mencakup panjang header IP dan panjang Header UDP.
jtpereyda
@ jtpereyda Saya sepenuhnya menyadari semua itu. Maksud saya persis apa yang sudah saya nyatakan: Anda harus mengutip referensi normatif di mana mereka ada.
Marquis of Lorne
Saya tidak berpikir ukuran paket UDP maks akan menjadi 65.507 byte, mengingat bahwa kartu wifi saya (IEEE 802.3) hanya dapat melakukan 1500 MTU, dan frame jumbo hanya 9k byte.
Christian Stewart
52

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

Beejor
sumber
2
Paket UDP apa pun, secara default, dianggap "_U_nr reliable". Satu-satunya ukuran paket UDP aman yang dapat Anda harapkan akan diterima adalah 1, paket tidak terfragmentasi. Jika Anda ingin paket "aman", gunakan protokol paket di atas TCP.
Astara
26
@Astara Benar, secara alami UDP tidak bisa diandalkan. Tetapi pertanyaannya adalah apakah paket dengan ukuran tertentu dijamin akan dikirimkan, tidak dijamin akan dikirimkan. Paket dengan ukuran tertentu dapat (dan) dijatuhkan oleh router apa pun dengan alasan apa pun, sedangkan yang lebih kecil harus merupakan upaya terbaik yang ditangani oleh semua router, sesuai dengan standar industri. Jadi "aman" dalam hal ini berarti "akankah mobil saya pas di bawah jembatan" dan tidak "akan mobil saya macet di lalu lintas".
Beejor
1
Saya merekomendasikan untuk berhenti mengulangi apa yang dikatakan oleh beberapa orang secara acak dan memeriksa faktanya, karena UDP sebenarnya cukup dapat diandalkan. BTW Saya memiliki paket aman di atas UDP tanpa overhead TCP yang tidak perlu. openmymind.net/How-Unr dapat diandalkan
Pablo Ariel
5
UDP bukan "tidak dapat diandalkan" karena jumlah paket yang dijatuhkan, tetapi karena paket dapat (dan sedang) dijatuhkan. Anda tidak dapat "mengandalkan" pada kedatangan paket tertentu, pesanan, atau konfirmasi. Data rapuh, dan ini seperti mengatakan kemudi mobil yang bekerja 99% dari waktu, dan 89% ke arah yang benar, dapat diandalkan. Bukan berarti UDP tidak bagus untuk banyak hal, hanya saja mengharuskan Anda untuk menulis versi "TCP" Anda sendiri di atasnya. Inilah kasus dunia nyata yang menarik di dunia permainan dev (meskipun agak ketinggalan jaman): gamasutra.com/view/feature/131781
Beejor
@ Beejor Anda berada di jalur yang benar, tetapi "pada dasarnya mengharuskan Anda untuk menulis versi" TCP "di atasnya" salah besar. UDP sangat bagus untuk penyiaran dan bagus untuk pengiriman cepat data 'tidak kritis'. (Sehubungan dengan game) Anda dapat menemukan (LAN) server / layanan menggunakan UDP dan menggunakan UDP untuk mengirim lokasi pemain dengan cepat. Jika satu paket dijatuhkan; Anda tidak peduli karena paket selanjutnya akan memiliki lokasi yang lebih terkini dari pemain lain. TCP dapat memiliki paket "out-of-order", memiliki overhead dan tidak cukup melakukan koneksi satu-ke-banyak. Dalam beberapa kasus, UDP mungkin lebih berlaku.
Paul
46

576 adalah ukuran penyangga reassembly minimum maksimum , yaitu setiap implementasi harus dapat merakit kembali paket setidaknya ukuran itu. Lihat IETF RFC 1122 untuk detailnya.

pengguna607811
sumber
2
Jika, dan hanya jika Anda memiliki jaringan yang tidak membawa IPv6. Jika ia membawa IPv6, gunakan ukuran paket maksimum dari header IPv6 kemudian kurangi header enkapsulasi untuk melakukan IPv4 melalui IPv6. ;-)
Astara
@Astara Di IPv6, fragmentasi dilakukan oleh pengirim, jadi tidak ada masalah dengan router perantara yang cerdik dan tidak patuh. Dan jika penerima bukan ukuran tertanam yang dibatasi memori maka mungkin dapat merakit kembali paket hingga 64kB setidaknya.
user253751
@ user253751 Bukan hanya router yang tidak patuh yang dapat memecah. Ada Path MTU Discovery, tetapi bahkan itu tidak cukup untuk sepenuhnya menghilangkan fragmentasi.
dstromberg
@dstromberg Dalam situasi apa router IPv6 diizinkan untuk memecah datagram?
user253751
@ user253751 Saya belum memiliki banyak IPv6, tetapi inilah salah satu contoh: bayangkan sebuah jaringan IPv6 mengirim jumbogram (> 65536 bytes) ke jaringan IPv6 lain yang juga mendukung jumbogram. Lebih lanjut anggap bahwa Path MTU Discovery mengatakan bahwa jumbogram tersebut harus didukung tanpa fragmentasi. Tetapi kemudian router dinyalakan dengan tenaga, dan bagian dari jalur jaringan diganti dengan peralatan yang tidak dikonfigurasikan untuk jumbogram.
dstromberg
14

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

edW
sumber
11

Ukuran buffer reassembly minimum IPv4 adalah 576, IPv6 memilikinya pada 1500. Kurangi ukuran header dari sini. Lihat Pemrograman Jaringan UNIX oleh W. Richard Stevens :)

Nikolai Fetissov
sumber
1
Minimal, tentu saja. Terima kasih telah melihatnya. Tidak tahu bagaimana tidak ada yang memperhatikan kesalahan selama bertahun-tahun.
Nikolai Fetissov
1
Sementara IPv6 mungkin memiliki buffer reassembly minimum 1500, paket IPv6 tidak diizinkan untuk difragmentasi, dan IPU6 MTU minimum adalah 1280. Perangkat akhir tidak perlu perlu memasang kembali paket IPv6 yang terfragmentasi.
Ron Maupin
1
Paket @RonMaupin IPv6 dapat difragmentasi oleh titik akhir. Hanya saja tidak oleh router di antara keduanya.
Navin
3
@Navin, tidak, paket IPv6 tidak akan terfragmentasi, data harus difragmentasi sebelum dikemas ke dalam paket IPv6, tetapi paket itu sendiri tidak terfragmentasi. Ada perbedaan. Tidak seperti header paket IPv4 yang memiliki bidang untuk menangani fragmentasi, header paket IPv6 tidak memiliki apa pun untuk menangani fragmentasi. Header paket IPv6 jauh lebih sederhana daripada header paket IPv4.
Ron Maupin
6

512 adalah taruhan terbaik Anda. Ini digunakan di tempat lain dan merupakan angka genap (setengah dari 1024).

Justin Niessner
sumber
6

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).

Astara
sumber
1
bagaimana Anda menghitung 1472? ethernet memiliki MTU 1500, apakah itu yang Anda maksud?
rogerdpack
4
@rogerdpack Saya pikir maksudnya karena IPv4 dan IPv6 cenderung berbagi banyak infrastruktur, dan IPv6 semakin populer, harus aman untuk mengasumsikan batas IPv6 (dengan demikian 1500). Namun, betapa validnya alasan ini, saya tidak tahu.
Thomas
2
1500 harus didukung oleh komponen yang kompatibel dengan IPv6 dalam "rantai" jaringan - jika seseorang menggunakan IPv4, yang dapat melakukan perjalanan melalui rantai pendukung IPv6 (meskipun sebaliknya tidak benar), maka karena ukuran header IPv4 adalah 20 byte, dan Ukuran header UDP adalah 8 byte, yang berarti 1500-20-8 = 1472 sebagai ukuran maksimum yang aman (karena IPv6 tidak memungkinkan fragmentasi). Catatan - jika orang menambahkan cukup lapisan enkapsulasi, orang bisa saja tidak memiliki ruang untuk DATA. Karena Anda meminta MAX, orang akan menganggap beberapa lapisan overhead enkapsulasi TIDAK digunakan.
Astara
" 1500 harus didukung oleh komponen yang kompatibel dengan IPv6 dalam rantai jaringan. " Tidak, MTU IPv6 minimum adalah 1280. MTU ethernet adalah 1500.
Ron Maupin
@RonMaupin - Q asli adalah ukuran paket UDP aman terbesar, bukan MTU. Lihat RFC2460. Serta menyebutkan MTU dari 1280 oktet, ia menyatakan: Nodes harus dapat menerima paket terfragmentasi, bahwa ketika dirakit kembali hingga 1500 oktet. Paket penanganan yang lebih besar dari 1500 adalah opsional.
Astara
6

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.

Babi
sumber
1
Anda tidak menjawab pertanyaan itu. Si penanya ingin tahu apa ukuran terbesar yang bisa mereka gunakan untuk menghindari fragmen paket.
Astara
0

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 ))

user5588495
sumber
1
Header UDP memiliki bidang panjang datagram yang 16 bit, yang berarti bahwa datagram UDP teoretis terbesar adalah 65.535, tetapi itu tidak pernah dapat dicapai karena UDP dienkapsulasi di dalam paket IP, yang memiliki panjang keseluruhan keseluruhan teoritis 65.535 (yang sama) tetapi Anda harus mengurangi header IP dan UDP dari ukuran itu untuk mengetahui ukuran data maksimum teoretis.
Ron Maupin
Saya menanyakan hal ini sejak lama tapi itu mencari jawaban pragmatis (apa yang bekerja dalam kehidupan nyata) daripada apa yang tertulis dalam spesifikasi / atau dalam teori. Saya ingin mendapatkan paket dari a hingga b tanpa fragmentasi, itu untuk masalah jaringan waktu nyata - saya pikir ada banyak solusi yang dikembangkan oleh orang-orang pintar sekarang :)
KM