Puncte:18

Ce poate cauza pachete de rețea constând din PUU?

drapel us

Avem un sistem care suferă de întreruperi de comunicații pe o rețea ethernet gigabit. Sarcina de trafic în rețea este de așa natură încât să streseze ușor o rețea de 100 Mb, dar există switch-uri gigabit și NIC-uri și cabluri peste tot - sau cel puțin așa mi-a spus clientul care a construit rețeaua la care ne conectăm.

Am conectat un laptop care rulează Wireshark printr-un hub 100baseT și am constatat că a raportat o mulțime de pachete „Ethernet II” în care datele brute, atunci când sunt afișate ca ASCII, arată, practic, așa:

PUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

Desigur, am numit imediat această problemă „Network PUU” și au urmat multe chicoteli.Cu toții avem aproximativ patruzeci de ani, dar cred că unii dintre noi nu cresc niciodată (vinovați!)

Oricum, mai serios, alte pachete perfect valide erau corupte de aceste date. Antetele IPv4 au fost înlocuite cu octeți U octeți, precum și existența corupției datelor care ar determina software-ul să respingă datele, chiar dacă sumele de verificare IP nu au eșuat să se potrivească. Suntem destul de siguri că aceste date care răspândesc în rețea cauzează întreruperile comunicațiilor. Ceea ce nu știm este de unde ar putea veni.

A mai văzut cineva să se întâmple asta? ai rezolvat-o? Ți-ai dat seama de unde a venit?

====EDITAT====

S-a adăugat mențiunea hub-ului la descrierea originală, deoarece, judecând după comentariile de mai jos, este cea mai probabilă sursă a corupției! Instrumentul pe care l-am folosit pentru a încerca să găsim problema de rețea pare să fi adăugat o problemă de rețea nouă și mai gravă.

drapel us
Vă mulțumesc pentru toate răspunsurile dvs. Tocmai am aflat că hub-ul pe care îl folosim pentru a adulmeca traficul este de 100Mb și problema apare doar atunci când se transmite un anumit tip de date (foarte 40+KB, toate trimise odată prin TCP).
drapel us
Pentru Ron și Zac, amândoi le-ați vorbit despre adresa MAC sursă. Pachetul de date brute din rețea este literalmente doar PUUUUU..., deci adresa sursă este 0x55555555 și adresa destinație este 0x50555555. Ar fi. Poate că am ratat câțiva 0x55 octeți.
drapel cn
Observați că ASCII `U` este, de asemenea, `0x55`
NobodyNada avatar
drapel br
@Bergi ...care (dacă nu este evident) este `01010101` în binar, indicând posibil fie o valoare de testare/depanare, fie rezultatul unei defecțiuni a stratului fizic.
drapel cn
@AlastairG Chiar vrei să spui „hub” sau doar „comutator negestionat”. Dacă este într-adevăr un hub, aruncați-l imediat pe fereastră. Hub-urile nu au niciun loc într-o rețea modernă (ca în „acest mileniu”).
Ben Voigt avatar
drapel pl
@Tonny: Hub-urile sunt mult mai utile decât comutatoarele pentru capturarea pachetelor, până la punctul în care comutatoarele de calitate sunt capabile să desemneze un port pentru a acționa ca hub și oglindind tot traficul redirecționat prin toate celelalte căi.
user10489 avatar
drapel nc
Hub-urile sunt inutile într-o rețea modernă, deoarece au încetat să le mai facă înapoi de 100 de milioane de ori. Un hub de 100M nu poate ține pasul cu o rețea 1G. Aruncă-i. Unele comutatoare inteligente acceptă modul promiscuu în care un port de monitorizare poate primi tot traficul.
drapel cn
Hub-urile @BenVoigt nu au buffering (sau doar 1 pachet) și sunt limitate la 100 Mb/s. Asta nu mai este suficient de bun. Și asta nici măcar nu se numără centrele de mizerie create cu gestionarea coliziunilor. Logica de coliziune pentru hub-uri se bazează pe logica semi-duplex veche de peste 50 de ani din zilele coaxiale. Acest lucru nu funcționează bine cu un ethernet modern, în cazul în care fiecare legătură este o legătură full-duplex care, în mod normal, folosește doar coliziunile ca mecanism de reținere/reluare pentru a face față (sperăm că rare) condiții de plin buffer. Captura de pachete este un beneficiu accidental al unui hub, dar avem instrumente mai bune (port-mirroring) pentru asta acum.
drapel us
După cum spune Ben Voigt, am folosit un hub pentru monitorizarea rețelei. Nu sunt un tip IT, nu chiar, chiar dacă am ajuns să fac IT pentru mica mea companie de 10 oameni.Nu știam că poți seta porturile pe comutatoare să fie promiscue. Cred că cunoștințele mele despre ethernet sunt puțin depășite.
Puncte:18
drapel ru

Oricum, mai serios, alte pachete perfect valide erau corupte de aceste date. Antetele IPv4 erau înlocuiți de octeți cu octeți U, precum și coruperea datelor care ar determina software-ul să respingă datele, chiar dacă sumele de verificare IP nu se potriveau.

Este surprinzător că doar biți alternativi (U este ASCII 0x55 sau 01010101b) alcătuiesc de fapt cadre Ethernet valide sau chiar pachete IP valide.Dacă această corupție se accesează cu crawlere și în cadre/pachete în principal intacte, poate fi cauzată doar de - cel mai probabil - un comutator defect (memorie tampon proastă) sau o gazdă defectuoasă (NIC sau RAM).

Dacă datele de cadru sunt corupte în transport, pe cablu, FCS-ul foarte probabil să nu reușească să verifice, făcând chiar următorul comutator să piardă acel cadru. Cu toate acestea, dacă un astfel de cadru este transportat prin rețea cu un FCS valid, trebuie să fi fost corupt inainte de acel FCS a fost calculat, ceea ce impune un comutator sau gazdă defecte.

Va trebui să urmăriți traficul respectiv. Dacă adresa MAC sursă nu este validă sau nu poate fi verificată pe comutatoarele intermediare (negestionate), va trebui să urmăriți drumul înapoi de-a lungul cablurilor.

fraxinus avatar
drapel ng
Votez și pentru un bloc de memorie defect într-un comutator. Se pare că nu toată memoria este proastă, deoarece sparge pachetele doar în rafale de date mai mari.
Andrew Henle avatar
drapel ph
Și nu m-ar surprinde să descopăr că problema este mult exacerbată prin dezactivarea negocierii automate pe conexiunile gigabit. [Negociarea automată este o cerință pentru utilizarea 1000BASE-T conform *Secțiunii 28D.5 Extensii necesare pentru Clauza40 (1000BASE-T)*. Cel puțin sursa de ceas trebuie să fie negociată, deoarece un punct final trebuie să fie master, iar celălalt trebuie să fie slave.](https://en.wikipedia.org/wiki/Gigabit_Ethernet#1000BASE-T) Nu am idee de ce se presupune că -oamenii inteligenți dezactivează negocierea automată în rețele. Nu vă continuați să conduceți mașina la 60 mph/90 km/h cu un plat „pentru că ar trebui”
Zac67 avatar
drapel ru
@AndrewHenle Orice dispozitiv care leagă 1000BASE-T cu negociere automată dezactivată poate fi considerat rupt (și ai avea nevoie de două dintre ele).
Puncte:12
drapel in

Se pare că ai un card NIC prost. Dacă adresa MAC sursă este validă, o puteți găsi verificând tabelele MAC ale comutatorului. Dacă este corupt, va trebui doar să începeți să deconectați dispozitivele pentru a-l găsi.

Puncte:3
drapel cn

Sună ca și cum ai avea un dispozitiv (probabil un comutator de 100 Mb/s) undeva care nu poate face față fluxului de trafic și începe să corupă pachetele atunci când bufferele sale interne depășesc.
(Sau doar are o memorie RAM proastă).

Nu observă că are pachete corupte și le va retransmite cu plăcere, cu sume de control noi proaspăt calculate.Deci pachetele proaste sunt acceptate de alte switch-uri (checksum este bun, switch-urilor nu le pasă că conținutul nu are sens) și redirecționate prin întreaga rețea.

Este de fapt mai rău de atât:
Luați în considerare modul în care comutatoarele învață ce dispozitiv (adresă Mac) se află în spatele fiecărui port. Orice pachet destinat unei adrese mac care nu este încă învățată de către comutator este inundat către toate porturile de comutare (cu excepția celui de la care a venit). Acest lucru transformă efectiv un pachet pentru o adresă Mac neînvățată într-o difuzare temporară.
Deoarece switch-urile dvs. nu vor învăța niciodată aceste adrese mac (la urma urmei sunt corupție, nu adrese mac reale), TOATE sunt tratate ca niște transmisii...
Acest lucru inundă în esență întreaga rețea cu pachete care nu pot fi livrate.
(Și rețineți că atenuările normale ale furtunii de difuzare nu funcționează în acest caz. Ele acționează numai asupra pachetelor de difuzare REALE, nu asupra acestor inundații de învățare.)

Singura modalitate de a depana acest lucru este să dezactivați câte un comutator la un moment dat și să vedeți dacă asta face ca problema să dispară. Dacă îl puteți restrânge la 1 comutator, acesta va fi acel comutator în sine sau un dispozitiv conectat în spatele acelui comutator.

Puncte:-1
drapel nc

Diferența dintre un hub și un comutator este că, atunci când un comutator primește o coliziune, fie aruncă al doilea pachet, fie îl stochează și apoi îl redirecționează când primul pachet se termină; unde un hub va permite cu bucurie să aibă loc coliziunea și doar înlocuiește conținutul pachetului cu 10101... pentru a indica că a fost o coliziune și continuă să trimită până când ambele pachete s-au terminat.

Soluția aici este să scapi de butuci, deoarece sunt depășiți. Au încetat să mai producă hub-uri înainte ca 1G să fie disponibil, așa că un hub trebuie să fie 100M sau mai lent. Standardul de rețea 1G nu acceptă hub-uri.

Pentru un pic de istorie, înainte de a exista hub-uri, au existat repetitoare. Diferența dintre un repetor și un hub este că repetorul primește semnalul analogic, îl curăță ușor înapoi într-un val pătrat frumos și apoi îl retransmite, unde un hub se uită puțin la ceea ce este în pachet și încearcă să asigurați-vă că pachetul este bine format. Cu toate acestea, niciunul dintre ei nu face nimic pentru a remedia coliziunile, ci doar le lasă să se întâmple. Repetoarele și hub-urile sunt din vremea când Ethernetul era considerat a fi o magistrală fără tampon și doar un dispozitiv din rețea poate vorbi odată. Când ethernetul era o magistrală adevărată (10base2 și 10base5), pentru a porni un pachet, transmiteți biți de pornire (10101...) până când primul bit ajunge la cele mai îndepărtate capete ale rețelei și dacă nimeni altcineva nu v-a întrerupt între timp , apoi vă continuați pachetul. Dacă sunteți întrerupt, aveți o coliziune și ambele părți se retrag și încearcă din nou la un moment dat mai târziu. Dacă una dintre părți nu avortează, atunci ai o coliziune târzie. Hub-ul tău transformă coliziunile tale târzii în toate elementele de pornire. Este posibil ca ceva din cale să nu recunoască pachetul ca o coliziune târzie și, în loc să-l abandoneze, îl reformează ca un pachet valid. Sau snifferul dvs. de pachete promiscue vede pachete nevalide, precum și pe cele valide.

Comparați acest lucru cu un comutator, care nu numai că remediază coliziunile, dar poate suporta full duplex, în cazul în care un pachet este transmis în timp ce este primit altul diferit. Standardul 100M acceptă comutatoare care acceptă și nu full duplex, iar acest lucru este negociat între dispozitive atunci când cablul este conectat. Standardul Ethernet 1G necesită ca toate dispozitivele să accepte full duplex, astfel încât un hub nu este permis pe o conexiune 1G, și, prin urmare, hub-urile 1G nu există.

drapel gb
_"un hub va permite vesel să se întâmple coliziunea și doar înlocuiește conținutul pachetului cu 10101... pentru a indica că a fost o coliziune și continuă să trimită asta până când ambele pachete s-au terminat"_ - poți detalia? Știu că hub-uri sunt simple repetoare pe stratul 1 (adică conexiuni fizice, pur electrice), care nu modifică deloc pachetele, cel mult blocând (temporar) porturile care se dovedesc a fi supărătoare.
Zac67 avatar
drapel ru
Un semnal de blocaj are doar 62 de biți alternanți 0101. Modelul din întrebare pare mult mai lung. De asemenea, nu explicați cum un semnal de blocare îl transformă într-un cadru valid. Hub-uri repetitoare Gigabit Ethernet foarte bine definite - vezi IEEE 802.3 Clauza 41 - pur și simplu nu s-au mai materializat (din fericire). Un hub este un *repetor multiport* - diferența este numărul de porturi. Un hub *nu* inspectează cadrele (FCS) în niciun fel, ci doar reacționează la jabber. *transmiți biți de pornire (10101...) până când primul bit ajunge la cele mai îndepărtate capete ale rețelei* - cu siguranță nu.
Zac67 avatar
drapel ru
Preambulul plus SFD are exact 48 de biți. Aici m-am oprit din citit...
user10489 avatar
drapel nc
Este posibil să vă uitați la un standard mai nou. Ceea ce mă uit la 10base2 și 10base5. De asemenea, există o mare diferență între o coliziune normală și o coliziune târzie. Hub-urile s-au uitat doar la pachete suficient pentru a-și da seama de unde încep. Repetitorul nici nu face asta, doar reformează unda pătrată.
user10489 avatar
drapel nc
@Zac67: 48 de biți la 10MHz dacă îmi fac calculele corect este mai mult de 200 m, ceea ce, dacă îmi amintesc corect, era aproape de lungimea maximă a rețelei, deci numerele tale nu sunt de acord, presupunând că memoria mea acoperă 10base2.
Zac67 avatar
drapel ru
48 / 100M * e * .64 pentru 100BASE-TX este de aproximativ 92 m, în timp ce lungimea maximă a domeniului de coliziune este de 300 m (două repetoare). Cu 100BASE-FX, lungimea maximă este de 6000 m. Teoria ta este greșită.
Zac67 avatar
drapel ru
PS: Ne pare rău, 100BASE-FX în HDX este limitat la 400, deci lungimea maximă a domeniului de coliziune este de 1200 m.
user10489 avatar
drapel nc
Ciocnirea prin sincronizarea preambulului nu se aplică la 100base-TX, se aplică doar la 10base2 și 10base5, care dacă îmi amintesc bine, erau 200m și 500m. Diferența de lungime ar fi luată în considerare deoarece factorul de viteză al RG58 este de aproximativ 60%, iar 10base5 necesită un coaxial de grad mult mai mare, care probabil are un factor de viteză în jur de 90-98%
Zac67 avatar
drapel ru
10BASE5 cu două repetoare (regula 5-4-3 permite 3 segmente de amestecare) are o lungime maximă a domeniului de coliziune de 1500m. Factorul de viteză al RG8 este .77 conform clauzei 8. Faceți calculul. 100BASE-TX folosește exact același preambul ca toate variantele Ethernet. Preambulul nu este folosit pentru detectarea coliziunilor nicăieri (în afară de faptul că există un transportator prezent). Ar trebui să citiți cu adevărat IEEE 802.3.
Zac67 avatar
drapel ru
Nu este preambulul, ci *dimensiunea minimă a cadrului* (inclusiv preambulul) care trebuie să acopere întregul domeniu de coliziune și înapoi - expeditorul trebuie să transmită în continuare atunci când o coliziune este detectată/semnalizată sau nu va retransmite.
user10489 avatar
drapel nc
Cablurile coaxiale 10BASE2 au o lungime maximă de 185 de metri. 10baza5 este 500m. Nu știu unde ajungi la 1500 m, poate te gândești la 1600 ft.
user10489 avatar
drapel nc
@Zac67: asta sună corect. Dar există și un mecanism acolo pentru terminarea timpurie a transmisiei pentru a preveni coliziunile târzii pe pachete mari.
Zac67 avatar
drapel ru
O *coliziune tardivă* este o coliziune dincolo de dimensiunea minimă a cadrului. Se poate întâmpla numai dacă domeniul de coliziune este mai lung decât este permis sau dacă expeditorul întârziat funcționează defectuos (sau cu nepotrivire duplex).
user10489 avatar
drapel nc
Dreapta. Dacă totul este conform specificațiilor, nu ar trebui să apară coliziuni târzii.
drapel us
Acesta pare cel mai probabil răspuns, deoarece explică biții alternanți ca indicativi ai unei coliziuni. PUU apare atunci când o parte a sistemului încearcă să trimită ceva de genul 40kB într-o singură scriere la socket. Desigur, acesta este împărțit într-un număr de pachete de dimensiune maximă (1500 de octeți IIRC). Cu toate acestea, se pare că experții care știu mult mai multe decât mine cred că acesta nu poate fi răspunsul corect, deoarece PUU este prea lung. Ciocnirile multiple ar putea cauza problema? Sau aveți un hub de 100MbaseT între două dispozitive Gigabit Ethernet cu un sistem diferit de detectare a coliziunilor?
user10489 avatar
drapel nc
Cred că este foarte probabil ca unul sau ambele switch-uri 1G să nu manipuleze corect hub-ul semi-duplex și să-l alimenteze oricum full-duplex, iar hub-ul să transforme ceva într-o coliziune întârziată. Apoi, din nou, unul sau ambele switch-uri 1G nu gestionează corect coliziunea, deoarece nu primești coliziuni în modul full duplex.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.