Discussion:
Ramka Ethernet - minimalna wielkość a pakiet ARP?
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Grzegorz Kuczyński
2010-01-04 19:01:44 UTC
Permalink
Witam
Analizuje dokładnie protokoły, natrafiłem na pewien rzadki przypadek.
Pakiet ARP w ramce Ethernet ma 42 oktany, a minimalna wielkość ramki
Ethernet bez CRC ma 60. Gdy otrzymuje pakiet ARP dodawany jest tzw.
trailer 18 razy '00' aby dopiąć ramkę do 60 (42+18). Gdy wysyłam
pakiet ARP trailera nie ma a ramka ma wielkość tylko 42 oktany. Gdzieś
udało mi się wyczytać, ale nie było to sprecyzowane, zostaną dodane u
odbiorcy - jego OS tym się zajmie. Jak tak pomyślałem to to by nawet
miało sens, ponieważ przesyła mniejszą ilość bajtów a system odbiorcy
zajmuje się dodaniem zbędnego balastu po drodze.
Czy ktoś się orientuje czy to prawidłowe wytłumaczenie tego zdarzenia?
Krzysztof Oledzki
2010-01-04 20:42:56 UTC
Permalink
Post by Grzegorz Kuczyński
Witam
Witam,
Post by Grzegorz Kuczyński
Analizuje dokładnie protokoły, natrafiłem na pewien rzadki przypadek.
Pakiet ARP w ramce Ethernet ma 42 oktany, a minimalna wielkość ramki
Ethernet bez CRC ma 60. Gdy otrzymuje pakiet ARP dodawany jest tzw.
trailer 18 razy '00' aby dopiąć ramkę do 60 (42+18). Gdy wysyłam
pakiet ARP trailera nie ma a ramka ma wielkość tylko 42 oktany. Gdzieś
udało mi się wyczytać, ale nie było to sprecyzowane, zostaną dodane u
odbiorcy - jego OS tym się zajmie. Jak tak pomyślałem to to by nawet
miało sens, ponieważ przesyła mniejszą ilość bajtów a system odbiorcy
zajmuje się dodaniem zbędnego balastu po drodze.
Czy ktoś się orientuje czy to prawidłowe wytłumaczenie tego zdarzenia?
Odpowiem przez pytanie: w jakim celu dodaje się te dodatkowe oktety i jaki
sens byłby w robieniu tego w stosie IP odbiorcy?

Pozdrawiam,

Krzysztof Oledzki
--
Krzysztof Olędzki
e-mail address: ole(a-t)ans(d-o-t)pl
Registered User: Linux - 189200, BSD - 51140
Nick Handles: KO60-RIPE, KO581 (Network Solutions)
Grzegorz Kuczyński
2010-01-05 08:05:21 UTC
Permalink
Post by Krzysztof Oledzki
Witam
Witam,
Analizuje dok adnie protoko y, natrafi em na pewien rzadki przypadek.
Pakiet ARP w ramce Ethernet ma 42 oktany, a minimalna wielko ramki
Ethernet bez CRC ma 60. Gdy otrzymuje pakiet ARP dodawany jest tzw.
trailer 18 razy '00' aby dopi ramk do 60 (42+18). Gdy wysy am
pakiet ARP trailera nie ma a ramka ma wielko tylko 42 oktany. Gdzie
uda o mi si wyczyta , ale nie by o to sprecyzowane, zostan dodane u
odbiorcy - jego OS tym si zajmie. Jak tak pomy la em to to by nawet
mia o sens, poniewa przesy a mniejsz ilo bajt w a system odbiorcy
zajmuje si dodaniem zb dnego balastu po drodze.
Czy kto si orientuje czy to prawid owe wyt umaczenie tego zdarzenia?
Odpowiem przez pytanie: w jakim celu dodaje si te dodatkowe oktety i jaki
sens by by w robieniu tego w stosie IP odbiorcy?
include/linux/if_ether.h:
22 /* IEEE 802.3 Ethernet magic constants. The frame sizes omit the
preamble
23 and FCS/CRC (frame check sequence). */
24 #define ETH_ALEN 6 /* Octets in one ethernet
addr */
25 #define ETH_HLEN 14 /* Total octets in
header. */
26 #define ETH_ZLEN 60 /* Min. octets in frame
sans FCS */
27 #define ETH_DATA_LEN 1500 /* Max. octets in
payload */
28 #define ETH_FRAME_LEN 1514 /* Max. octets in frame
sans FCS */

http://yuba.stanford.edu/vns/router_faq.html:
Why are the ARP packets I get from sr_send_packet( .. ) 60 bytes
instead of 42?
banan
2010-01-05 21:34:45 UTC
Permalink
Post by Grzegorz Kuczyński
22 /* IEEE 802.3 Ethernet magic constants. The frame sizes omit the
preamble
23 and FCS/CRC (frame check sequence). */
24 #define ETH_ALEN 6 /* Octets in one ethernet
addr */
25 #define ETH_HLEN 14 /* Total octets in
header. */
26 #define ETH_ZLEN 60 /* Min. octets in frame
sans FCS */
27 #define ETH_DATA_LEN 1500 /* Max. octets in
payload */
28 #define ETH_FRAME_LEN 1514 /* Max. octets in frame
sans FCS */
Why are the ARP packets I get from sr_send_packet( .. ) 60 bytes
instead of 42?
Dlugosc ramki jest uwarunkowana warstwa fizyczna (ethernetem), bylo to
potrzebne w sieciach na wspoldzielonej magistrali - lub "hubach", ktore byly
de facto taka zminiaturyzowana magistrala.

Byc moze rozwiazaniem zagadki bedzie fakt, ze wireshark wylapuje ramke na
poziomie logicznym, a padding do 60 oktetow jest dokladany juz na samym
dnie? Dlatego wydaje sie, ze idzie mniej, podczas gdy idzie "wiecej" :)
--
banan
Grzegorz Kuczyński
2010-01-06 17:53:55 UTC
Permalink
Post by banan
Byc moze rozwiazaniem zagadki bedzie fakt, ze wireshark wylapuje ramke na
poziomie logicznym, a padding do 60 oktetow jest dokladany juz na samym
dnie? Dlatego wydaje sie, ze idzie mniej, podczas gdy idzie "wiecej" :)
Też tak myślę, to by nawet się zgadzało z tym co wyczytałem w tym FAQ
- w sumie to tam nie pisze, który OS dodaje te zera.
Dziwi mnie, że w de facto Internecie nic o tym nie ma ;) - może nie
udało mi się odnaleźć.
Krzysztof Halasa
2010-01-05 21:34:26 UTC
Permalink
Post by Grzegorz Kuczyński
Analizuje dokładnie protokoły, natrafiłem na pewien rzadki przypadek.
Pakiet ARP w ramce Ethernet ma 42 oktany,
Malooktanowa jakas, typowe wartosci to 95 i 98. Kiedys byly tez 78, 86
i 94, ale te juz sa "obsolete" :-)
Post by Grzegorz Kuczyński
a minimalna wielkość ramki
Ethernet bez CRC ma 60. Gdy otrzymuje pakiet ARP dodawany jest tzw.
trailer 18 razy '00' aby dopiąć ramkę do 60 (42+18).
Jasne.
Post by Grzegorz Kuczyński
Gdy wysyłam
pakiet ARP trailera nie ma a ramka ma wielkość tylko 42 oktany.
Tylko dla sniffera na tej maszynie, scalak albo driver dolozy brakujace
zera przed wyslaniem w linie.
Post by Grzegorz Kuczyński
Gdzieś
udało mi się wyczytać, ale nie było to sprecyzowane, zostaną dodane u
odbiorcy - jego OS tym się zajmie.
Nie mialoby to sensu.
Post by Grzegorz Kuczyński
Jak tak pomyślałem to to by nawet
miało sens, ponieważ przesyła mniejszą ilość bajtów a system odbiorcy
zajmuje się dodaniem zbędnego balastu po drodze.
Dodanie zbednego balastu mialoby sens? No nie wiem.
--
Krzysztof Halasa
Grzegorz Kuczyński
2010-01-06 17:49:23 UTC
Permalink
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Analizuje dokładnie protokoły, natrafiłem na pewien rzadki przypadek.
Pakiet ARP w ramce Ethernet ma 42 oktany,
Malooktanowa jakas, typowe wartosci to 95 i 98. Kiedys byly tez 78, 86
i 94, ale te juz sa "obsolete" :-)
Co chcesz powiedzieć, że wbrew temu co pisze w podręcznikach i
implementacji linuxa pakiet ARP nie ma 28 bajtów bez ramki Ethernet -
w sumie mniej niż wymagane 60?
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
a minimalna wielkość ramki
Ethernet bez CRC ma 60. Gdy otrzymuje pakiet ARP dodawany jest tzw.
trailer 18 razy '00' aby dopiąć ramkę do 60 (42+18).
Jasne.
Czy mi się zdaje, cy w to też wątpisz :)
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Gdy wysyłam
pakiet ARP trailera nie ma a ramka ma wielkość tylko 42 oktany.
Tylko dla sniffera na tej maszynie, scalak albo driver dolozy brakujace
zera przed wyslaniem w linie.
właśnie o to chodzi, że chyba nie na tej maszynie dołoży, albo na tej
ale już poniżej, tak że sniffer nie jest w stanie tego pokazać
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Gdzieś
udało mi się wyczytać, ale nie było to sprecyzowane, zostaną dodane u
odbiorcy - jego OS tym się zajmie.
Nie mialoby to sensu.
miało, nie miało, mi chodzi o rozwiązanie anie spekulacje. Poza tym
miało by, bo przez siec wysyłane by było mniej danych. Tak samo jak
strony www są gzipowane :)
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Jak tak pomyślałem to to by nawet
miało sens, ponieważ przesyła mniejszą ilość bajtów a system odbiorcy
zajmuje się dodaniem zbędnego balastu po drodze.
Dodanie zbednego balastu mialoby sens? No nie wiem.
źle mnie zrozumiałeś, chodzi o dodanie tego balastu już w systemie
docelowym, poza tym uważasz, że informacje zawarte w linkach, które
podałem są na 100% nieprawdziwe?
Post by Krzysztof Halasa
--
Krzysztof Halasa
Krzysztof Halasa
2010-01-06 19:49:31 UTC
Permalink
Post by Grzegorz Kuczyński
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Pakiet ARP w ramce Ethernet ma 42 oktany,
Malooktanowa jakas, typowe wartosci to 95 i 98. Kiedys byly tez 78, 86
i 94, ale te juz sa "obsolete" :-)
Co chcesz powiedzieć, że wbrew temu co pisze w podręcznikach i
implementacji linuxa pakiet ARP nie ma 28 bajtów bez ramki Ethernet -
w sumie mniej niż wymagane 60?
Nie, to taki zart mial byc, ale chyba malo czytelny.
Post by Grzegorz Kuczyński
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Gdy wysyłam
pakiet ARP trailera nie ma a ramka ma wielkość tylko 42 oktany.
Tylko dla sniffera na tej maszynie, scalak albo driver dolozy brakujace
zera przed wyslaniem w linie.
właśnie o to chodzi, że chyba nie na tej maszynie dołoży, albo na tej
ale już poniżej, tak że sniffer nie jest w stanie tego pokazać
Mysle ze mozesz mi zaufac w tym wzgledzie, tak sie akurat sklada ze
jestem autorem jakichs tam driverow m.in. Ethernet, zdazalo mi sie
tez obserwowac takie przebiegi elektryczne na oscyloskopie.

To driver i/lub transmiter doklada brakujace oktety przed ich wyslaniem
w linie.

Tzn. dlugosc pakietu ARP zalezy np. od dlugosci naglowka MAC (jesli
liczymy z nim) oraz od dlugosci adresu MAC oraz IP. Dla Ethernetu + IPv4
jest to wlasnie 14 + 28 bajtow.
Post by Grzegorz Kuczyński
miało, nie miało, mi chodzi o rozwiązanie anie spekulacje. Poza tym
miało by, bo przez siec wysyłane by było mniej danych.
Problem w tym, ze taki pakiet nie zapewnialby pewnego wykrywania kolizji
w domenie kolizyjnej.
--
Krzysztof Halasa
Robson
2010-01-07 13:05:47 UTC
Permalink
Post by Krzysztof Halasa
Nie, to taki zart mial byc, ale chyba malo czytelny.
Oj czytelny, czytelny, czasami tylko ktos jest w szkole prymasem i szuka
w sklepie episkopatu do kupna ;)
I "nie lapie" takich dowcipow

R
Grzegorz Kuczyński
2010-01-07 17:18:30 UTC
Permalink
Post by Krzysztof Halasa
Nie, to taki zart mial byc, ale chyba malo czytelny.
Jakoś to inaczej odebrałem, prymasem nie jestem ;)
Post by Krzysztof Halasa
Problem w tym, ze taki pakiet nie zapewnialby pewnego wykrywania kolizji
w domenie kolizyjnej.
Trzeba było tak od razu, konkretna informacja.

Mam jeszcze takie pytanie, znajdę implementację tego gdzieś w
sterownikach karty?
Chciał bym zobaczyć jak to dokładnie się dzieje.

Dzięki
Grzegorz Kuczyński
Krzysztof Halasa
2010-01-07 20:14:51 UTC
Permalink
Post by Grzegorz Kuczyński
Post by Krzysztof Halasa
Problem w tym, ze taki pakiet nie zapewnialby pewnego wykrywania kolizji
w domenie kolizyjnej.
Trzeba było tak od razu, konkretna informacja.
Mam jeszcze takie pytanie, znajdę implementację tego gdzieś w
sterownikach karty?
Chciał bym zobaczyć jak to dokładnie się dzieje.
Np. w zrodlach sterownikow. Wezmy takiego Linuksa, dla przykladu driver
RTL8139 (8139too). ETH_ZLEN = 60.

static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb,
struct net_device *dev)
{
...
unsigned int len = skb->len;
...
/* Note: the chip doesn't have auto-pad! */
if (likely(len < TX_BUF_SIZE)) {
if (len < ETH_ZLEN)
^^^^^^^^^^^^^^^^^^^
memset(tp->tx_buf[entry], 0, ETH_ZLEN);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
RTL_W32_F (TxStatus0 + (entry * sizeof (u32)),
tp->tx_flag | max(len, (unsigned int)ETH_ZLEN));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
--
Krzysztof Halasa
Grzegorz Kuczyński
2010-01-10 13:55:06 UTC
Permalink
Wielkie dzięki - o taki dowód mi chodziło.

Grzegorz Kuczyński

Grzegorz Kuczyński
2010-01-07 17:18:44 UTC
Permalink
Post by Krzysztof Halasa
Nie, to taki zart mial byc, ale chyba malo czytelny.
Jakoś to inaczej odebrałem, prymasem nie jestem ;)
Post by Krzysztof Halasa
Problem w tym, ze taki pakiet nie zapewnialby pewnego wykrywania kolizji
w domenie kolizyjnej.
Trzeba było tak od razu, konkretna informacja.

Mam jeszcze takie pytanie, znajdę implementację tego gdzieś w
sterownikach karty?
Chciał bym zobaczyć jak to dokładnie się dzieje.

Dzięki
Grzegorz Kuczyński
Grzegorz Kuczyński
2010-01-06 17:49:30 UTC
Permalink
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Analizuje dokładnie protokoły, natrafiłem na pewien rzadki przypadek.
Pakiet ARP w ramce Ethernet ma 42 oktany,
Malooktanowa jakas, typowe wartosci to 95 i 98. Kiedys byly tez 78, 86
i 94, ale te juz sa "obsolete" :-)
Co chcesz powiedzieć, że wbrew temu co pisze w podręcznikach i
implementacji linuxa pakiet ARP nie ma 28 bajtów bez ramki Ethernet -
w sumie mniej niż wymagane 60?
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
a minimalna wielkość ramki
Ethernet bez CRC ma 60. Gdy otrzymuje pakiet ARP dodawany jest tzw.
trailer 18 razy '00' aby dopiąć ramkę do 60 (42+18).
Jasne.
Czy mi się zdaje, cy w to też wątpisz :)
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Gdy wysyłam
pakiet ARP trailera nie ma a ramka ma wielkość tylko 42 oktany.
Tylko dla sniffera na tej maszynie, scalak albo driver dolozy brakujace
zera przed wyslaniem w linie.
właśnie o to chodzi, że chyba nie na tej maszynie dołoży, albo na tej
ale już poniżej, tak że sniffer nie jest w stanie tego pokazać
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Gdzieś
udało mi się wyczytać, ale nie było to sprecyzowane, zostaną dodane u
odbiorcy - jego OS tym się zajmie.
Nie mialoby to sensu.
miało, nie miało, mi chodzi o rozwiązanie anie spekulacje. Poza tym
miało by, bo przez siec wysyłane by było mniej danych. Tak samo jak
strony www są gzipowane :)
Post by Krzysztof Halasa
Post by Grzegorz Kuczyński
Jak tak pomyślałem to to by nawet
miało sens, ponieważ przesyła mniejszą ilość bajtów a system odbiorcy
zajmuje się dodaniem zbędnego balastu po drodze.
Dodanie zbednego balastu mialoby sens? No nie wiem.
źle mnie zrozumiałeś, chodzi o dodanie tego balastu już w systemie
docelowym, poza tym uważasz, że informacje zawarte w linkach, które
podałem są na 100% nieprawdziwe?
Post by Krzysztof Halasa
--
Krzysztof Halasa
Loading...