Jaki jest rozmiar „in-the-wire” ramki Ethernet? 1518 czy 1542?

22

Zgodnie z tabelą tutaj napisano, że MTU = 1500 bajtów, a część danych to 1500 - 42 bajty lub 1458 bajtów (<- to w rzeczywistości źle!). Teraz musisz dodać nagłówki IPv4 i UDP, które mają 28 bajtów (20 IP + 8 UDP). To pozostawia mój maksymalny możliwy komunikat aplikacji do 1430 bajtów! Ale szukając tego numeru w Internecie widzę 1472 zamiast tego. Czy źle wykonuję te obliczenia?

Chcę tylko dowiedzieć się, jaki jest maksymalny komunikat aplikacji, który mogę wysłać przewodem bez ryzyka fragmentacji. To zdecydowanie nie jest 1500, ponieważ obejmuje nagłówki ramek. Czy ktoś może pomóc?


Pomyłka polega na tym, że PAYLOAD może faktycznie mieć nawet 1500 bajtów i to jest MTU. Więc teraz jaki jest rozmiar in-the-wire dla ładunku o wartości 1500? Z tej tabeli może wynosić nawet 1542 bajty.

Tak więc maksymalne komunikaty aplikacji, które mogę wysłać, to 1472 (1500 - 20 (ip) - 8 (udp)) dla maksimum w rozmiarze drutu 1542. Dziwi mnie, jak sprawy mogą się tak skomplikować, kiedy są naprawdę proste. I nie mam pojęcia, jak ktoś wymyślił liczbę 1518, jeśli tabela mówi 1542.

chrisapotek
źródło
Prawdziwe pytanie brzmi: co rozumiesz przez „w rozmiarze drutu” i co zrobisz z tymi informacjami? Czy próbujesz obliczyć pakiety na sekundę?
Mike Pennington,
@MikePennington Próba ustalenia czasu tranzytu w sieci. Rozmiar pakietu i prędkość sieci Ethernet (10 gigabitów) pozwalają to obliczyć.
chrisapotek

Odpowiedzi:

26

Schemat na Wikipedii jest okropny. Mam nadzieję, że to, co zamierzam napisać, jest wyraźniejsze.


Maksymalna ładowność w sieci Ethernet 802.3 wynosi 1500 bajtów.
Są to dane, które próbujesz wysłać drogą przewodową (i do czego odnosi się MTU).
[payload]<- 1500 bajtów

Ładunek jest zamknięty w ramce Ethernet (która dodaje MAC źródła / miejsca docelowego, znacznik VLAN, długość i sumę kontrolną CRC. Jest to w sumie 22 bajtów dodatkowych „rzeczy”
[SRC+DST+VLAN+LENGTH+[payload]+CRC]<- 1522 bajtów

Ramka jest przesyłana przewodem - zanim karta Ethernet to zrobi, w zasadzie wstaje i krzyczy naprawdę głośno, aby upewnić się, że nikt inny nie korzysta z drutu (CSMA / CD) - To jest ogranicznik preambuły i początku ramki (SFD) - dodatkowe 8 bajtów, więc teraz mamy:
[Preamble+SFD+[Ethernet Frame]]<- 1530 bajtów

Na koniec, gdy nadajnik-odbiornik ethernetowy wysyła ramkę, 802.3 wymaga przesłania 12 bajtów ciszy („przerwa między ramkami”), zanim będzie mogła wysłać następną ramkę.
[Preamble+SFD+[Ethernet Frame]+Silence]<- 1542 bajtów przesłanych przewodem.


Preambuła, SFD i przerwa między ramkami nie liczą się jako część ramki. Są strukturą wsparcia dla samego protokołu Ethernet.

MTU ma zastosowanie do ładunku - jest to największa jednostka danych, którą można wcisnąć do pakietu. Zatem pakiet ethernetowy z jednostką MTU 1500 bajtów będzie faktycznie ramką 1522 bajtów i 1542 bajtami na przewodzie (zakładając, że istnieje znacznik vLAN).

Więc odpowiedź na twoje pytanie - jaki jest największy pakiet, jaki mogę wysłać przez sieć Ethernet 802.3 bez fragmentacji? - ma 1500 bajtów danych ładunku .

JEDNAK warstwa Ethernet może nie być czynnikiem ograniczającym. Aby dowiedzieć się, czy coś po drodze ogranicza MTU do mniejszej niż 1500 bajtów danych ładunku, użyj jednej z następujących czynności:

  • Windows: ping hostname -f -l sizeofdata(technika wymieniona przez Johna K)
  • BSD: ping -D -s sizeofdata hostname
  • Linux: ping -M do -s sizeofdata hostname

Największą wartością sizeofdatatego działania jest MTU (na określonej ścieżce, którą podążają twoje dane).

voretaq7
źródło
Jednak muszę wykluczyć nagłówki IP i UDP z tego 1500, prawda? Zatem moja maksymalna długość wiadomości aplikacji wynosi 1472 dla UDP.
chrisapotek
@chrisapotek Poprawnie - Nagłówki IP i UDP (lub TCP, GRE itp.) są częścią ładunku umieszczanego w ramce ethernet
voretaq7
2
traceroute --mtu {target} w systemie Linux wyświetli również max mtu
Rqomey
czy powinniśmy być bardziej „fizyczni”? pl.wikipedia.org/wiki/8b/10b_encoding
SaveTheRbtz
@SaveTheRbtz oh proszę nie - zejście do reprezentacji binarnej wystarczająco boli mnie głowa :-)
voretaq7
2

To zależy od ilości danych umieszczonych w ramce. Jeśli umieścisz 1500 bajtów danych w ramce, całkowity rozmiar ramki wyniesie 1518 bajtów. Z 1472 bajtami danych, uzyskasz całkowity rozmiar ramki 1500 ..

http://en.wikipedia.org/wiki/Ethernet_frame

Biorąc to pod uwagę, jeśli naprawdę chcesz przetestować fragmentację, dobrym sposobem na przetestowanie tego jest dobry dobry ping z kilkoma flagami:

ping nazwa hosta -f -l sizeofdata

Flaga -f spowoduje, że ping nie powiedzie się, jeśli pakiet zostanie pofragmentowany. Kluczem do zrozumienia tutaj jest „sizeofdata” to ilość danych, które można umieścić w wiadomości bez fragmentacji - więc jeśli wyślesz ładunek 1500, zaczniesz fragmentować, gdy przekroczysz 1500 bajtów. Zmniejsz to jednak do 1472 (1500 - 18 bajtów nad głową), a zobaczysz, że przechodzą pingi.

Univ426
źródło
Przepraszam, 1542 bajty są znacznie powyżej standardowej ramki Ethernet zdefiniowanej przez IEEE 802.3. Nieoznakowany 1500-bajtowy ładunek ethernetowy to 1518 bajtów (bez SFD / preable). Ramka z tagiem 802.1q ma 1522 bajty (te same zastrzeżenia)
Mike Pennington,
To bardzo mylące. MTU = 1500, ale rozmiar ramki to 1542 ??? Tak więc MTU to tylko ładowność, innymi słowy, jest to rozmiar ramki 1542 minus 42 dodatkowe rzeczy. Czy to jest poprawne?
chrisapotek
Przepraszam, wpisałem to źle - właśnie zaktualizowałem odpowiedź, ale jeśli nadal się mylę, daj mi znać - oto matematyka, którą pamiętam: S
Univ426
Przepraszam, muszę się mylić - myślałem, że to rozumiem, ale najwyraźniej mam wyłączone numery, wygląda na to, że jest 1518: Przykro mi z tego
powodu
Nie jesteście zdezorientowani, ale wszyscy. Więc moje pytania są kontynuowane. Jaka jest różnica między rozmiarem MTU a rozmiarem ramki Ethernet? Czy ładowność wynosi 1500, czy mniej?
chrisapotek
0

W przypadku podstawowej ramki Ethernet_II rozmiar ramki wynosi 1518 bajtów (na przewodzie lub poza nim). Składa się z 6 bajtów dla każdego adresu docelowego i źródłowego, 2 bajtów dla pola typu od 46 do 1500 bajtów dla ładunku (w Twoim przypadku całego pakietu IP z nagłówkiem IP i nagłówkiem UDP) i 4 bajtów dla FCS. Oprócz tego istnieje ograniczenie dotyczące wielkości ramki (64 bajty). Dlatego zakres wynosi od 46 bajtów (dodaj to do dwóch adresów i typu oraz FCS, a otrzymasz 64 bajty - 46 + 6 + 6 + 2 + 4 = 64).

Jeśli ramka znajduje się w sieci, która obsługuje wiele vlanów i musisz oznaczyć ramkę tagiem vlan, wówczas przed polem typu zostanie dodane jedno dodatkowe pole. To 4 bajty. Oznacza to teraz, że zakres rozmiarów ładunku można zmniejszyć o 4 bajty na dole i nadal mieć co najmniej 64 bajty. Stąd 42. (Tak 42 + 6 + 6 + 2 + 4 + 4 dla tagu vlan = 64)

Więc kiedy zapisany jest zakres 1500-42, to nie znaczy 1500 minus 42, oznacza to, że wszystko od 1500 do 42 bajtów jest poprawne. Jeden drut, ta oznakowana ramka może mieć wielkość 1522 bajtów (jeśli używany jest tylko jeden znacznik lub 1526, jeśli używane są dwa znaczniki). Nic z tego nie wyjaśnia liczby 1542.

Aby dostać się do tego numeru, musisz rozważyć, w jaki sposób ramkę można wysłać w sieci Ethernet. W sieci Ethernet LAN nie ma zegara, więc nadajnik ramki wysyła serię 1 i 0, aby ustawić zegar. Nazywa się to preambułą. Nie każdy słuchacz „usłyszy” całą preambułę, ale większość powinna usłyszeć jej część. Aby zasygnalizować koniec preambuły, jeden z 8 ostatnich wysłanych bitów jest odwracany, tak że zamiast 10101010 staje się 10101011. Ten bajt nazywa się początkiem ogranicznika ramki (SDF). Nie jest to technicznie przydatne do przechwytywania drutu, więc 7 bajtów preambuły i 1 bajt SDF normalnie nie są liczone, ale gdyby były naszym pierwotnym 1518, to teraz byłoby 1526. Wciąż nie 1542 ..

Po wysłaniu ramki dochodzi do wymuszonej ciszy na przewodzie, zwanej przerwą między ramkami. Jest to równoważne transmisji 12 bajtów. To również nie jest liczone ani przechwytywane, ale gdyby tak było, doprowadziłoby nas to do 1538 bajtów. Jedynym sposobem na przejście do 1542 z 1538 jest powiedzenie, że ramka jest oznaczona (tzn. Zawiera 4-bajtową etykietę planu). Uff, w końcu 1542 r.

Wszystko to w terminologii. Standardowa ramka ma 1518 bajtów na przewodzie (w odniesieniu do dowolnego urządzenia przechwytującego). Oznaczona ramka (pojedynczy znacznik) ma 1522 bajtów na przewodzie. Zajmują one 1538 bajtów lub 1542 bajtów przestrzeni transmisyjnej w przewodzie.

Mam nadzieję, że to pomoże wyjaśnić ..

Joevpt
źródło
-1

nie chcesz fragmentacji, dlatego pakiet trzeba fragmentować, ale zestaw plików df weź to w ten sposób: 2-kierunkowa autostrada z całą masą półwyrobów w porównaniu z tą samą autostradą z całą masą małych inteligentnych samochodów, które obie będą te same półwyspy docelowe przewożą więcej ładunku, ale są wolniejsze i mogą łatwiej przejeżdżać, mniejsze samochody przewożą mniej, ale podróżują szybciej MSS to nie to samo co MTU

Joseph
źródło
1
Ta odpowiedź jest prawie, ale nie do końca, całkowicie niezwiązana z pytaniem.
kasperd