Czym dokładnie jest problem MTU / MRU, co jest spowodowany i jak go naprawić?


13

W przypadku zawieszania się, zamrażania, powolnych, niereagujących połączeń internetowych przyczyna jest zwykle nierozsądnie identyfikowana jako „problem MTU / MRU” z kilkoma pospiesznie zaproponowanymi „magicznymi lekarstwami” (zwykle nieważnymi lub niestosowalnymi w danej sytuacji), takimi jak polecenia obejmujące iptableslub ifconfiginne zaciskaj MTU na czary TSS.

Chcę wiedzieć, czym dokładnie jest problem MTU / MRU, dlaczego wpływa on na szybkość i opóźnienie połączenia oraz jak jest naprawiany (znane i nowoczesne metody), ponieważ chciałbym fachowo podejść do rozwiązania problemu, nie magicznie.

Odpowiedzi:


23

To trochę skomplikowane pytanie, więc zacznę od podstaw. Wybacz mi, jeśli już to wszystko wiesz.

MTU to Maximum Transmission Unit, największy pakiet danych, który wyśle ​​interfejs komputerowy. W przypadku sieci Ethernet wartością domyślną jest 1500 bajtów. Ramki Ethernet zwykle mogą mieć maksymalnie 1522–1542 (zależnie od tego, co się liczy), a dodatkowa przestrzeń jest „zarezerwowana” na informacje nagłówka.

Różne połączenia mogą mieć różne możliwości. Dość powszechne jest bieganie przez łącze w Internecie, które ma MTU nieco mniejsze niż 1500. Jest to zwykle spowodowane tym, że łącze wykorzystuje dodatkowe informacje nagłówka lub używa innego medium niż „standardowy” Ethernet (większość Internetu faktycznie działa na Połączenia ATM / SoNet). Zwykle ruch napotkany na takie łącze jest po prostu dzielony na wiele części i przesyłany dalej.

Ponieważ jest to powszechne i było w momencie wynalezienia IP, częścią protokołu ICMP było komunikowanie wszelkich problemów z MTU. Jeśli pakiet z jakiegokolwiek powodu nie może zostać uszkodzony i przesłany dalej, ICMP służy do przekazania problemu z powrotem do komputera wysyłającego. Komputer wysyłający podejmuje odpowiednie działania, dzieląc informacje na mniejsze części i wszyscy są zadowoleni. Cały proces odbywa się za kulisami. W prawidłowo działającej sieci nigdy nie jest konieczne wycinanie ustawień MTU .

Kwalifikatorem tego ostatniego zdania jest kicker. Istnieją trzy typowe przyczyny awarii procesu automatycznego:

  1. Zepsuta implementacja - oprogramowanie w pewnym momencie po prostu nie działa tak, jak powinno. Nie ma przepisów mówiących, że ludzie muszą przestrzegać odpowiednich standardów Internetu, a są firmy, które łamią te standardy, zwykle byle tanie.
  2. Wdrożenie wyłączone administracyjnie - zdarza się, że ludzie o dobrych intencjach łamią oprogramowanie, ponieważ tak naprawdę nie wiedzą, co robią. Osobiście widziałem, jak ludzie blokują ICMP, ponieważ myślą, że jest on używany tylko dla pakietów ICMP.0.0 (echo, większość ludzi wie o tym przez pingnarzędzie).
  3. Inne powody całkowicie poza tym „normalnym” procesem. Najczęściej oznacza to, że połączenie jest tak stratne, że tylko krótsze pakiety niezawodnie przechodzą przez połączenie (lub bez ogromnej liczby ponownych prób). Niektóre wczesne DSL i CableModems miały takie problemy. A wcześniej dial-up często miał takie problemy, gdy korzystał z linii telefonicznych bardzo złej jakości i agresywnego kodowania linii.

Dlaczego więc jest to powszechne: leniwi technicy / firmy. Niemal „łatwiej” uprościć połączenie za pomocą małego MTU, niż naprawić jeden z problemów opisanych powyżej. Jak wspomniano powyżej, nikt nie powinien dziś mieć problemów z MTU (jeden wyjątek, który mogę wymyślić, aby włączyć ramki Jumbo, ale tak naprawdę nie o tym tutaj rozmawiamy). Właściwe lekarstwo w każdym przypadku polega na znalezieniu problemu i naprawieniu go; klasyczny przypadek leczenia choroby, a nie objawu.

Jak MTU wpływa na połączenie? Posiekanie danych na małe kawałki oznacza, że ​​każdy kawałek będzie miał większe szanse na dotarcie do miejsca docelowego, szczególnie przez wysoce zawodne połączenia. Ponieważ są mniejsze, mają jednak większy koszt na przesyłane dane. Oznacza to, że efektywna prędkość połączenia jest zmniejszona; zasadniczo jeśli MTU jest naprawdę mały. Może to mieć wpływ na opóźnienie, ale spodziewam się, że będzie niewielkie, ze względu na dodatkowe przetwarzanie i narzut nagłówka oraz proces fragmentacji / ponownego składania.

Aktualizacja: - Jeśli chodzi o --clamp-mss-to-pmtu
osobiście, nigdy nie zwariowałem z MTU; Przyznaję, że jestem trochę perfekcjonistą i kiedy mam takie brzydkie hacki, zawsze znajduję źródło problemu i udało mi się go naprawić. W tym celu iptablesopcja --clamp-mss-to-pmtujest mi nieznana. Najwyraźniej korzystanie z tego hacka jest niezwykle powszechne i prawdopodobnie nieuzasadnione w większości sytuacji. Nadal jest to hack, aby zrekompensować jeden z powyższych problemów. Cytuję z podręcznika systemu Linux dla iptables (8):

Ten cel służy do pokonania przestępczych dostawców usług internetowych lub serwerów, które blokują pakiety „Potrzebne fragmentowanie ICMP” lub „Zbyt duży pakiet ICMPv6”.

Względnie ostry język strony podręcznika powinien wskazywać, ile pogardy budzą dostawcy usług internetowych i sieci, którzy nie przestrzegają RFC (i nie podejmują żadnych prób, aby to zrekompensować).

Mówiąc o wykorzystaniu UDP w sieciach VPN, było to najczęściej stosowane w celu zminimalizowania obciążenia sieci VPN i umożliwienia istniejącym punktom końcowym zarządzania informacjami o sesji. VPN nie ma sposobu, aby wiedzieć, jak należy obsługiwać sesję, więc to zadanie najlepiej pozostawić znanym aplikacjom.

Wiele nowoczesnych protokołów tunelowania VPN jest zbudowanych na niższych poziomach (z jeszcze mniejszym narzutem), takich jak GRE i L2TP; lub tunelowany na wyższych poziomach (zwykle w celu zachowania zgodności z restrykcyjnymi zaporami ogniowymi lub z innych powodów), takich jak SSTP lub SSH. Będą one stopniowo zastępować UDP jako mechanizm transportowy.

Aktualizacja 2: - Diagnozowanie problemów z MTU / ICMP
Więc uważasz, że masz problem z MTU / ICMP i chcesz być pewien. Proces ten składa się z dwóch podstawowych kroków. Wskazówki dotyczą systemu Linux lub BSD, ale można je dostosować do prawie dowolnego systemu operacyjnego.

  1. Wybierz cel ICMP Ping (np. Google.com, Yahoo.com, Facebook.com itp.). Spróbuj wywołać je za pomocą następującego polecenia: ping -c 2 -s 1472 -D google.com.
    • To powinno się powieść. Jeśli to się nie powiedzie, powinno zwrócić „pakiet musi zostać pofragmentowany”. Jeśli którakolwiek z tych prawd jest prawdą, przestań, twoje połączenie działa dobrze.
    • Jeśli to nic nie zwraca lub wyświetla komunikat o przekroczeniu limitu czasu, oznacza to, że masz problem.
  2. Tylko w przypadku przerwanych połączeń: uruchom traceroute -F google.com 1472. Dzięki temu dowiesz się, który chmiel jest zepsuty. Uwaga: CPE często nie odpowiada na żądania traceroute, więc nie przejmuj się, jeśli pierwszy skok nie odpowie.
    • W zależności od tego, który z odpowiedzi jest ostatnim przeskokiem, ten ostatni działa poprawnie dla Ciebie.
    • Jeśli żaden z nich nie zareaguje, jest to twoja linia CPE lub DSL (zastanawianie się, co może być nieco trudne, ale prawie nigdy nie jest CPE, jeśli jest nowoczesne). Uwaga: Jeśli twoje połączenie działa poprawnie, traceroute zakończy się powodzeniem.

Na marginesie: Jaki ISP używa obecnie PPTP ?! To podmuch starożytnej i bezużytecznej przeszłości. Powinny przynajmniej używać PPPoE; ale po prostu autoryzacja modemu przez MAC i Segment byłaby o wiele łatwiejsza (zarówno dla usługodawcy internetowego, jak i klienta).


Istnienie flagi IP don't fragmentjest jednym z powodów niemożności podzielenia pakietu na mniejsze pakiety.
Khaled

Genialne, ale nie rozwiązuje się problemu enkapsulacji VPN / tunelowania, która uzasadnia sztuczki „clamp_mss_to_mtu”
Olivier S

@OlivierS Czy nie jest to uzasadnienie dla uruchamiania ruchu VPN przez UDP? Być może jestem nad głową, więc popraw mnie, jeśli się mylę
Joel E Salas

Tak, jaka jest następująca sztuczka:# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
mbaitoff,

@ChrisS: Mówisz, że wolisz diagnozować i eliminować przyczynę, a nie objawy. Jak zdiagnozować przypadek problemu MTU / MRU? Na przykład mam połączenie z usługodawcą internetowym, przez pptpktóre czasami zawiesza się i wszyscy każą mi grać w tę iptablessztuczkę. Jak mogę zbadać problem i zidentyfikować „braindead” w łańcuchu połączeń?
mbaitoff,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.