Apa sebenarnya masalah MTU / MRU, apa yang disebabkan oleh dan bagaimana cara memperbaikinya?


13

Dalam kasus koneksi internet hang, beku, lambat, tidak responsif, penyebabnya biasanya diidentifikasi secara tidak masuk akal sebagai "masalah MTU / MRU" dengan beberapa "obat ajaib" yang diajukan dengan tergesa-gesa (biasanya tidak valid atau tidak dapat diterapkan untuk situasi) seperti perintah yang melibatkan iptablesatau ifconfig, dan lainnya " jepit MTU ke TSS "mantra.

Apa yang ingin saya ketahui adalah apa sebenarnya masalah MTU / MRU, mengapa hal itu mempengaruhi kecepatan koneksi dan latensi, dan bagaimana itu disembuhkan (metode yang dikenal dan modern), karena saya ingin secara hati-hati mendekati resolusi untuk masalah ini, tidak secara ajaib.

Jawaban:


23

Ini sedikit pertanyaan yang rumit, jadi saya akan mulai dengan dasar-dasarnya. Maafkan saya jika Anda sudah tahu semua ini.

MTU adalah Unit Transmisi Maksimum, paket data terbesar yang akan dikirim antarmuka komputer. Untuk Ethernet standarnya adalah 1500 Bytes. Frame Ethernet biasanya diizinkan hingga 1522-1542 (tergantung pada apa yang Anda hitung) dan ruang ekstra 'dicadangkan' untuk informasi header.

Berbagai koneksi mungkin memiliki kemampuan berbeda. Sangat umum untuk menjalankan tautan di Internet yang memiliki MTU yang sedikit lebih kecil dari 1500. Ini biasanya disebabkan oleh tautan yang menggunakan informasi tajuk tambahan atau menggunakan media selain dari Ethernet 'standar' (sebagian besar Internet sebenarnya berjalan di Koneksi ATM / SoNet). Biasanya lalu lintas yang menjumpai tautan semacam itu dipecah menjadi beberapa bagian dan dikirim bersama.

Karena ini umum, dan pada saat IP ditemukan, bagian dari tanggung jawab protokol ICMP adalah untuk mengkomunikasikan masalah dengan MTU. Jika suatu paket dengan alasan apa pun tidak dapat dipecah dan diteruskan, ICMP digunakan untuk mengkomunikasikan masalah kembali ke komputer pengirim. Komputer pengirim mengambil tindakan yang tepat, memecah informasi menjadi potongan-potongan kecil dan semua orang senang. Seluruh proses ini ditangani di belakang layar. Dalam jaringan yang berfungsi dengan baik , tidak perlu bercampur dengan pengaturan MTU .

Kualifikasi pada kalimat terakhir itu adalah kicker. Ada tiga alasan umum proses otomatis rusak:

  1. Implementasi Rusak - Perangkat lunak pada titik tertentu tidak berfungsi sebagaimana mestinya. Tidak ada undang-undang yang mengatakan orang harus mengikuti standar Internet yang relevan dan ada perusahaan yang melanggar standar, biasanya murah.
  2. Implementasi yang dinonaktifkan secara administratif - Orang yang memiliki niat baik merusak perangkat lunak karena mereka tidak benar-benar tahu apa yang mereka lakukan. Saya pribadi melihat orang-orang memblokir ICMP karena mereka pikir itu hanya digunakan untuk paket ICMP.0.0 (gema, kebanyakan orang tahu ini oleh pingutilitas).
  3. Alasan lain sepenuhnya di luar proses 'normal' ini. Paling umum ini berarti koneksi sangat lossy sehingga hanya paket yang lebih pendek yang dapat melewati koneksi secara andal (atau tanpa sejumlah besar percobaan ulang). Beberapa DSL dan CableModem awal memiliki masalah seperti ini. Dan sebelum itu, dial-up umumnya memiliki masalah seperti ini ketika menggunakan saluran telepon yang berkualitas sangat buruk dan pengkodean saluran yang agresif.

Jadi, mengapa itu umum: teknisi / perusahaan yang malas. Hampir secara universal 'lebih mudah' untuk menghalangi koneksi dengan MTU kecil daripada memperbaiki salah satu masalah yang diuraikan di atas. Seperti yang dinyatakan di atas, tidak ada yang harus setiap hari harus bermain-main dengan MTU (satu-satunya pengecualian yang bisa saya pikirkan adalah mengaktifkan frame Jumbo, tapi itu benar-benar bukan yang sedang kita bahas di sini). Penyembuhan yang benar dalam hal apapun adalah mencari tahu masalah yang mendasarinya dan memperbaikinya; kasus klasik mengobati penyakit bukan gejalanya.

Bagaimana MTU memengaruhi koneksi? Memotong data menjadi bagian-bagian kecil berarti setiap bagian akan memiliki peluang yang lebih baik untuk mencapai tujuan, terutama di seluruh koneksi yang sangat tidak dapat diandalkan. Menjadi potongan yang lebih kecil, ada lebih banyak overhead per data yang dikirim. Ini berarti kecepatan koneksi efektif berkurang; secara substansial jika MTU benar-benar kecil. Latensi mungkin terpengaruh, meskipun saya perkirakan kecil, karena pemrosesan ekstra dan overhead header dan proses fragmentasi / reassembly.

Pembaruan: - Mengenai --clamp-mss-to-pmtu
Secara Pribadi Saya tidak pernah bercanda dengan MTU; Saya akui saya agak perfeksionis dan ketika dihadapkan dengan peretasan jelek seperti ini, saya selalu menemukan akar masalahnya dan telah bisa memperbaikinya. Untuk itu iptablespilihannya --clamp-mss-to-pmtutidak saya kenal. Tampaknya ini sangat umum, dan mungkin sangat tidak beralasan dalam sebagian besar situasi, untuk menggunakan peretasan ini. Ini masih merupakan peretasan untuk mengkompensasi salah satu masalah di atas. Saya mengutip dari manual Linux untuk iptables (8):

Target ini digunakan untuk mengatasi ISP jahat atau server yang memblokir paket 'ICMP Fragmentation Needed' atau 'ICMPv6 Packet Too Big'.

Bahasa manual yang relatif keras harus menjadi indikasi seberapa banyak penghinaan dikumpulkan oleh ISP dan Jaringan yang tidak mengikuti RFC (dan tidak berusaha untuk mencoba atau memberikan kompensasi).

Berbicara tentang penggunaan UDP dalam VPN, ini biasanya paling umum untuk meminimalkan overhead VPN dan memungkinkan titik akhir yang ada untuk mengelola informasi sesi. Tidak ada cara bagi VPN untuk mengetahui bagaimana sesi harus ditangani, sehingga tugas itu sebaiknya diserahkan kepada aplikasi yang tahu.

Banyak protokol tunneling VPN modern dibangun pada level yang lebih rendah (dengan overhead yang lebih sedikit), seperti GRE dan L2TP; atau terowongan di tingkat yang lebih tinggi (biasanya untuk kompatibilitas dengan firewall yang membatasi atau alasan lain), seperti SSTP atau SSH. Ini secara bertahap akan menggantikan UDP sebagai mekanisme transportasi.

Pembaruan 2: - Mendiagnosis Masalah MTU / ICMP
Jadi Anda pikir Anda memiliki masalah MTU / ICMP dan ingin memastikan. Ada dua langkah dasar untuk proses ini. Arahan adalah untuk kotak Linux atau BSD, tetapi dapat disesuaikan dengan OS apa saja.

  1. Pilih target Ping ICMP (mis. Google.com, Yahoo.com, Facebook.com, dll). Coba ping mereka dengan perintah berikut: ping -c 2 -s 1472 -D google.com.
    • Ini harus berhasil. Jika tidak berhasil, itu harus mengembalikan "paket perlu difragmentasi". Jika salah satu dari ini benar, hentikan, koneksi Anda berfungsi dengan baik.
    • Jika ini tidak mengembalikan apa pun, atau memberikan pesan "batas waktu" maka Anda memiliki masalah.
  2. Hanya untuk koneksi yang terputus: jalankan traceroute -F google.com 1472. Ini akan memberi tahu Anda yang hop rusak. Catatan: cukup umum bagi CPE untuk tidak menanggapi permintaan traceroute, jadi jangan khawatir jika hop pertama tidak merespons.
    • Apapun yang merupakan hop terakhir untuk merespons adalah yang terakhir yang bekerja dengan benar untuk Anda.
    • Jika tidak ada dari mereka yang menjawab itu adalah jalur CPE atau DSL Anda (mencari tahu mana yang bisa sedikit rumit, tetapi hampir tidak pernah CPE jika itu modern). Catatan: Jika koneksi Anda berfungsi dengan baik, traceroute akan selesai dengan sukses.

Sebagai catatan: ISP apa yang menggunakan PPTP hari ini ?! Itu adalah ledakan dari masa lalu yang kuno dan tidak berguna. Mereka setidaknya harus menggunakan PPPoE; tetapi hanya mengesahkan modem oleh MAC dan Segmen akan jauh lebih mudah (lebih mudah untuk ISP dan Pelanggan).


Keberadaan flag IP don't fragmentadalah salah satu alasan tidak dapat memecah paket menjadi paket yang lebih kecil.
Khaled

Cemerlang, tetapi Anda tidak membahas masalah vpn / tunneling enkapsulasi yang membenarkan trik "clamp_mss_to_mtu"
Olivier S

@ OlivierS Bukankah itu alasan untuk menjalankan lalu lintas VPN melalui UDP? Saya mungkin berada di atas kepala saya, jadi tolong perbaiki saya jika saya salah
Joel E Salas

Ya, apa trik berikut:# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
mbaitoff

@ Chris: Anda mengatakan bahwa Anda lebih suka mendiagnosis dan menghilangkan penyebabnya, bukan gejalanya. Bagaimana saya bisa mendiagnosis kasus masalah MTU / MRU? Sebagai contoh, saya memiliki koneksi ke ISP pptpyang kadang-kadang macet, dan semua orang memberi tahu saya untuk memainkan iptablestrik itu. Bagaimana saya bisa menyelidiki masalah dan mengidentifikasi "braindead" yang ada dalam rantai koneksi?
mbaitoff
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.