Przeczytałem wiele artykułów o rozmiarach pakietów UDP, ale nie byłem w stanie dojść do wniosku, co jest poprawne.
Wiele usług ogranicza największy pakiet UDP do 512 bajtów (jak dns)
Biorąc pod uwagę, że minimalna MTU w Internecie wynosi 576, a rozmiar nagłówka IPv4 wynosi 20 bajtów, a nagłówek UDP 8 bajtów. To pozostawia 548 bajtów dostępnych dla danych użytkownika
Czy byłbym w stanie używać pakietów do rozmiaru 548 bez fragmentacji pakietów? Czy jest coś, o czym wiedzieli twórcy DNS i dlatego ograniczyli go do 512 bajtów.
Czy mogę bezpiecznie przekroczyć 548 bajtów?
Odpowiedzi:
Prawdą jest, że typowy nagłówek IPv4 ma 20 bajtów, a nagłówek UDP ma 8 bajtów. Możliwe jest jednak włączenie opcji IP, które mogą zwiększyć rozmiar nagłówka IP do nawet 60 bajtów. Ponadto czasami konieczne jest, aby węzły pośrednie hermetyzowały datagramy wewnątrz innego protokołu, takiego jak IPsec (używany dla VPN i tym podobnych), aby skierować pakiet do miejsca docelowego. Jeśli więc nie znasz MTU na konkretnej ścieżce sieci, najlepiej zostawić rozsądny margines na inne informacje nagłówkowe, których być może nie spodziewałeś się. Uważa się, że robi to 512-bajtowy ładunek UDP, chociaż nawet to nie pozostawia dość miejsca na nagłówek IP o maksymalnym rozmiarze.
źródło
Teoretyczny limit (w systemie Windows) maksymalnego rozmiaru pakietu UDP wynosi 65507 bajtów. Jest to udokumentowane tutaj :
To powiedziawszy, większość protokołów ogranicza się do znacznie mniejszego rozmiaru - zwykle 512 lub sporadycznie 8192. Często możesz bezpiecznie przekroczyć 548, jeśli jesteś w niezawodnej sieci - ale jeśli transmitujesz w Internecie, im większy idziesz, tym bardziej prawdopodobne jest, że będziesz mieć problemy z transmisją pakietów i utratą.
źródło
Maksymalny bezpieczny ładunek UDP wynosi 508 bajtów. Jest to rozmiar pakietu 576, minus maksymalny 60-bajtowy nagłówek IP i 8-bajtowy nagłówek UDP. Każda ładunek UDP tego rozmiaru lub mniejszy ma gwarancję dostarczenia przez IP (choć nie gwarantuje się, że zostanie dostarczony). Z dowolnego powodu dowolny router może zostać zrzucony przez dowolny router. Z wyjątkiem trasy tylko IPv6, gdzie maksymalna ładowność wynosi 1212 bajtów. Jak wspomnieli inni, w niektórych okolicznościach mogą zostać dodane dodatkowe nagłówki protokołu. Zamiast tego może być preferowana bardziej konserwatywna wartość około 300-400 bajtów.
Każdy pakiet UDP może być pofragmentowany. Nie jest to jednak zbyt ważne, ponieważ utrata fragmentu ma taki sam efekt jak utrata niefragmentowanego pakietu: cały pakiet jest odrzucany. W przypadku UDP stanie się tak w obu przypadkach.
Co ciekawe, maksymalny teoretyczny rozmiar pakietu wynosi około 30 MB (1500 MTU sieci Ethernet - 60 nagłówków IP x 65 536 maksymalnej liczby fragmentów), choć prawdopodobieństwo jego przedostania się byłoby nieskończenie małe.
Źródła: RFC 791, RFC 2460
źródło
576 to minimalny maksymalny rozmiar bufora ponownego składania , tzn. Każda implementacja musi mieć możliwość ponownego złożenia pakietów co najmniej tego rozmiaru. Szczegółowe informacje można znaleźć w IETF RFC 1122 .
źródło
W tym artykule opisano maksymalną jednostkę transmisji (MTU) http://en.wikipedia.org/wiki/Maximum_transmission_unit . Stwierdza, że hosty IP muszą być w stanie przetworzyć 576 bajtów na pakiet IP. Zwraca jednak uwagę, że minumum to 68. RFC 791: „Każdy moduł internetowy musi być w stanie przesłać datagram 68 oktetów bez dalszej fragmentacji. Wynika to z faktu, że nagłówek internetowy może mieć do 60 oktetów, a minimalny fragment to 8 oktetów . ”
Zatem bezpieczny rozmiar pakietu 508 = 576 - 60 (nagłówek IP) - 8 (nagłówek udp) jest rozsądny.
Jak wspomniano przez użytkownika 607811, fragmentacja według innych warstw sieciowych musi zostać ponownie złożona. https://tools.ietf.org/html/rfc1122#page-56 3.3.2 Ponowny montaż Warstwa IP MUSI realizować ponowny montaż datagramów IP. Wyznaczamy największy rozmiar datagramu, który może być ponownie złożony przez EMTU_R („Efektywna MTU do odbioru”); jest to czasami nazywane „rozmiarem bufora ponownego montażu”. EMTU_R MUSI być większy lub równy 576
źródło
Minimalny rozmiar bufora ponownego składania IPv4 to 576, IPv6 ma to 1500. Odejmij rozmiary nagłówków. Zobacz programowanie sieciowe UNIX W. Richarda Stevensa :)
źródło
512 jest najlepszym wyborem. Jest używany gdzie indziej i jest ładną liczbą parzystą (połowa 1024).
źródło
Biorąc pod uwagę, że IPV6 ma rozmiar 1500, zapewniłbym, że przewoźnicy nie zapewnią oddzielnych ścieżek dla IPV4 i IPV6 (oba są IP z różnymi typami), zmuszając ich do urządzeń dla IPv4, które byłyby stare, nadmiarowe, bardziej kosztowne w utrzymaniu i mniej niezawodny. To nie miałoby sensu. Poza tym robienie tego można łatwo uznać za preferencyjne traktowanie niektórych rodzajów ruchu - zgodnie z zasadami, na których prawdopodobnie nie dbają zbytnio (chyba że zostaną złapani).
1472 powinien więc być bezpieczny do użytku zewnętrznego (choć nie oznacza to, że aplikacja taka jak DNS, która nie wie o EDNS, zaakceptuje go), a jeśli mówisz o wewnętrznych sieciach, bardziej prawdopodobne jest, że znasz układ sieci. Wielkie rozmiary pakietów dotyczą pakietów niepodzielonych na fragmenty, czyli 4096 - 4068 bajtów, a także kart Intel z buforami 9014 bajtów, rozmiar pakietu ... czekaj ... 8086 bajtów, czy byłby to maksymalny ... zbieg okoliczności? chichot
****AKTUALIZACJA****
Różne odpowiedzi dają maksymalne wartości dozwolone przez 1 dostawcę oprogramowania lub różne odpowiedzi zakładające hermetyzację. Użytkownik nie poprosił o najniższą możliwą wartość (np. „0” dla bezpiecznego rozmiaru UDP), ale największy bezpieczny rozmiar pakietu.
Wartości enkapsulacji dla różnych warstw można dołączyć wiele razy. Odkąd po enkapsulacji strumienia - nic nie stoi na przeszkodzie, powiedzmy, warstwa VPN poniżej i całkowite powielenie warstw enkapsulacji powyżej.
Ponieważ pytanie dotyczyło maksymalnych bezpiecznych wartości, zakładam, że chodzi o maksymalną bezpieczną wartość pakietu UDP, który można otrzymać. Ponieważ nie jest gwarantowany żaden pakiet UDP, jeśli otrzymasz pakiet UDP, największy bezpieczny rozmiar to 1 pakiet w IPv4 lub 1472 bajtów.
Uwaga - jeśli używasz IPv6, maksymalny rozmiar wynosiłby 1452 bajtów, ponieważ rozmiar nagłówka IPv6 wynosi 40 bajtów w porównaniu z 20-bajtowym rozmiarem IPv4 (w obu przypadkach nagłówek UDP musi nadal pozwalać na 8 bajtów).
źródło
Przeczytałem tutaj kilka dobrych odpowiedzi; są jednak drobne błędy. Niektórzy odpowiedzieli, że pole Długość wiadomości w nagłówku UDP wynosi maksymalnie 65535 (0xFFFF); jest to technicznie prawdą. Niektórzy odpowiedzieli, że faktyczne maksimum wynosi (65535 - IPHL - UDPHL = 65507). Błąd polega na tym, że pole Długość komunikatu w nagłówku UDP zawiera cały ładunek (warstwy 5-7) plus długość nagłówka UDP (8 bajtów). Oznacza to, że jeśli pole długości wiadomości wynosi 200 bajtów (0x00C8), ładunek to w rzeczywistości 192 bajty (0x00C0).
Trudne i szybkie jest to, że maksymalny rozmiar datagramu IP wynosi 65535 bajtów. Ta liczba jest uzyskiwana jako suma sumy nagłówków L3 i L4, plus ładunek warstw 5-7. Nagłówek IP + nagłówek UDP + warstwy 5-7 = 65535 (maks.)
Najbardziej poprawną odpowiedzią na maksymalny rozmiar datagamu UDP jest 65515 bajtów (0xFFEB), ponieważ datagram UDP zawiera nagłówek UDP. Najbardziej poprawną odpowiedzią na maksymalny rozmiar ładunku UDP jest 65507 bajtów, ponieważ ładunek UDP nie zawiera nagłówka UDP.
źródło
Obawiam się, że wywołuję zdenerwowane reakcje, ale dla wyjaśnienia mi, czy się mylę, czy też widzących to pytanie i zainteresowanych odpowiedzią:
moje rozumienie https://tools.ietf.org/html/rfc1122 którego status to „oficjalna specyfikacja” i jako takie stanowi odniesienie do terminologii stosowanej w tym pytaniu i która nie jest ani zastąpiona przez inne RFC, ani nie ma sprzecznych z następujący:
teoretycznie tj. na podstawie zapisanej specyfikacji. UDP, taki jak podany przez https://tools.ietf.org/html/rfc1122#section-4, nie ma „rozmiaru pakietu”. Zatem odpowiedź może być „nieokreślona”
W praktyce, o to prawdopodobnie chodziło o te pytania (i które można by zaktualizować w związku z obecną technologią w akcji), może być inaczej i nie wiem.
Przepraszam, jeśli spowodowałem zdenerwowanie. https://tools.ietf.org/html/rfc1122#page-8 „Internet Protocol Suite” i „Architectural Assumptions” nie wyjaśniają mi „założenia”, na którym się opierałem, w oparciu o to, co słyszałem, że te warstwy są oddzielone . To znaczy. warstwa, w której znajduje się UDP, nie musi zajmować się warstwą, w której jest IP (a warstwa IP zawiera takie rzeczy, jak Reassembly, EMTU_R, Fragmentation i MMS_R ( https://tools.ietf.org/html/rfc1122#page- 56 ))
źródło