Pini të gjitha nyjet IPv6 në një kanal

Kanë mbetur edhe pak ditë deri në fillimin e një fluksi të ri në normë "Inxhinier i rrjetit" nga OTUS. Në këtë drejtim, ne dëshirojmë të ndajmë me ju një përkthim të materialit të dobishëm për këtë temë.

Pini të gjitha nyjet IPv6 në një kanal

Një seri postimesh në blog mbi këshilla dhe truket për zgjidhjen e problemeve me ping IPv6 (ICMPv6 Echo Request/Echo Reply)

Ju lutemi vini re se unë jam duke përdorur Linux (veçanërisht Fedora 31), megjithatë sintaksa e komandës ping për sistemet e tjera operative duhet të shpresojmë të jetë shumë e ngjashme.

Pini të gjitha nyjet IPv6 në një kanal

Këshilla e parë dhe më e thjeshtë është të bëni ping të gjitha nyjet IPv6 në lidhje.

IPv6 përdor adresa multicast për të gjitha llojet e komunikimeve një-me-shumë. Nuk ka adresa IPv6 transmetimi (ose transmetimi). Kjo e dallon IPv6 nga IPv4, ku ka disa lloje adresash transmetimi, për shembull, adresa "transmetim i kufizuar" 255.255.255.255 [RFC1122].

Sidoqoftë, ekziston një adresë IPv6 "të gjitha nyjet multicast", kështu që ne do ta përdorim atë për të bërë ping të gjitha nyjet IPv6 në lidhje. (Një adresë "transmetimi" është në fakt vetëm një adresë multicast e emërtuar posaçërisht, e cila është një grup multicast që përfshin të gjitha nyjet. Vini re se, për shembull, biti i adresës "grupi" ose multicast është i aktivizuar në adresat e transmetimit Ethernet në shtresën e lidhjes ).

Adresa IPv6 multicast me të gjitha nyjet për kanalin: ff02::1. ff tregon një adresë IPv6 multicast. 0-ja tjetër është pjesa e flamurit me pjesë të pacaktuara.

Më tej 2 përcakton zonën e një grupi multicast. Ndryshe nga adresat IPv4 multicast, adresat IPv6 multicast kanë një shtrirje. Vlera e shtrirjes tregon pjesën e rrjetit mbi të cilën lejohet të përcillet një paketë multicast. Sapo një paketë të arrijë kufirin e shtrirjes së specifikuar, paketa duhet të hiqet, pavarësisht nëse fusha e saj Hop Count është jo zero. Sigurisht, nëse numri i hop-eve arrin zero përpara se të arrijë kufirin e specifikuar të grupit multicast, ai gjithashtu rivendoset menjëherë. Këtu është një listë e plotë e fushës së multicast IPv6.

Së fundi, ::1 specifikon një grup multicast me të gjitha nyjet.

Rreth adresës ff02::1 Duhet të theksohet se është e paqartë. Në një host IPv6 me ndërfaqe të shumta, të tilla si një ruter ose një host multihomed, adresa ff02::1 nuk ka asgjë ku mund të specifikoni se cilës ndërfaqe t'i dërgoni kërkesat për jehonë ICMPv6 ose të prisni që të merrni përgjigje për jehonën ICMPv6 kur të mbërrijnë. ff02::1 është e vlefshme dhe mund të përdoret në çdo ndërfaqe dhe kanale të bashkangjitura në nyjen me shumë ndërfaqe.

Pra, kur bëjmë ping të gjitha nyjet IPv6 në një lidhje, duhet t'i tregojmë disi edhe programit ping për IPv6, cila ndërfaqe për t'u përdorur.

Përcaktimi i ndërfaqeve - Opsioni i linjës së komandës

Siç e kemi parë tashmë, adresa multicast me të gjitha nyjet që duam të përdorim është - ff02::1 - nuk jep asnjë informacion në lidhje me atë ndërfaqe për të dërguar dhe marrë ICMPv6 kërkesë për jehonë dhe paketat e përgjigjes së jehonës.

Pra, si ta specifikojmë ndërfaqen që do të përdoret për hapësirën e adresave multicast ose hapësirën e adresave unicast Link-Local?

Mënyra e parë dhe më e dukshme është ta japim atë si parametër për aplikacionin që përdorim.

Për dobi ping ne e ofrojmë atë përmes opsionit -I.

[mark@opy ~]$ ping -w 1 -I enp3s2 ff02::1
ping: Warning: source address might be selected on device other than: enp3s2
PING ff02::1(ff02::1) from :: enp3s2: 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.589 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=5.15 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=58.0 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=62.3 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=62.8 ms (DUP!)
 
--- ff02::1 ping statistics ---
1 packets transmitted, 1 received, +5 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.438/31.544/62.786/29.566 ms
[mark@opy ~]$

Duke përdorur këtë ping multicast me të gjitha nyjet, morëm përgjigje nga 6 nyje IPv6. Përgjigjet erdhën nga adresat e nyjeve Link-Local IPv6, duke filluar me prefiksin fe80::/10.

ping nuk vazhdon të dërgojë kërkesa për echo ICMPv6 për një kohë të pacaktuar derisa ta ndërpresim atë, ne zakonisht specifikojmë numrin e paketave për të dërguar përmes opsionit -c. Megjithatë, kjo gjithashtu parandalon që ping të pranojë dhe të shfaqë më shumë se një përgjigje jehone ICMPv6 kur dërgon një kërkesë për jehonë ICMPv6 multicast. Në vend të kësaj, ne përdorëm opsionin -w për të specifikuar që ping duhet të përfundojë pas 1 sekonde, pa marrë parasysh se sa kërkesa për jehonë ICMPv6 ose përgjigje jehonë janë dërguar ose pranuar.

Një gjë tjetër që duhet t'i kushtoni vëmendje është (DUP!) rezultati në përgjigjen e dytë dhe të mëvonshme. Këto pako identifikohen si përgjigje të kopjuara sepse kanë të njëjtën vlerë të sekuencës ICMP si kërkesat individuale për echo ICMPv6 që u dërguan në fillim. Ato shfaqen sepse një kërkesë eko multicast ICMPv6 rezulton në përgjigje të shumta individuale unicast. Numri i dublikatave tregohet gjithashtu në përmbledhjen e statistikave.

Përcaktimi i ndërfaqeve - Zonë ID

Një mënyrë tjetër për të ekspozuar një ndërfaqe për përdorim është si pjesë e një parametri adrese IPv6.

Ne mund të shohim një shembull të kësaj në daljen ping, ku adresat e hosteve IPv6 që përgjigjen gjithashtu kanë prapashtesën %enp3s2, për shembull:

64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms

Kjo metodë e specifikimit të ndërfaqeve përshkruhet zyrtarisht në [RFC4007], "Arkitektura e Adresave të Përcaktuara IPv6". Megjithëse zakonisht quhen ndërfaqja e sistemit operativ, ato në fakt përcaktojnë diçka më të përgjithshme - një "zonë" ose "fushë".

Arsyeja për të pasur zona më të përgjithshme ose zona të shtrirjes është se, siç përmendet në [RFC4007], një nyje IPv6 mund të ketë disa ndërfaqe të ndryshme IPv6 të lidhura në të njëjtin kanal. Këto ndërfaqe janë anëtarë të së njëjtës zonë.

Duhet të jetë e mundur të grupohen ndërfaqe të shumta brenda një zone nën sistemin operativ; Aktualisht nuk e di nëse kjo është e mundur nën Linux ose si ta bëj atë.

Duke përdorur prapashtesën %<zone_id>, mund të heqim opsionin e linjës së komandës -I ping.

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.606 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=6.23 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=157 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=159 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=161 ms (DUP!)
64 bytes from fe80::23d:e8ff:feec:958c%enp3s2: icmp_seq=1 ttl=64 time=179 ms (DUP!)
 
--- ff02::1%enp3s2 ping statistics ---
1 packets transmitted, 1 received, +7 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.106/82.858/179.216/81.281 ms
 
[mark@opy ~]$

Lidhje-Përgjigjet e adresave lokale

Nga ky ping multicast me të gjitha nyjet morëm gjithsej 6 përgjigje unike.

Këto përgjigje erdhën nga adresat e hostit unicast Link-Local IPv6. Për shembull, këtu është përgjigja e parë:

64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms

Adresat Unicast Link-Local IPv6 kërkohen në të gjitha ndërfaqet e aktivizuara me IPv6 [RFC4291], “IP Version 6 Addressing Architecture”. Arsyeja për këtë është se një nyje IPv6 ka gjithmonë automatikisht një adresë IPv6 unicast, të cilën të paktën mund ta përdorë për të komunikuar me nyjet e tjera në lidhjet e saj të lidhura drejtpërdrejt. Kjo përfshin komunikimin me aplikacionet në hostet e tjerë nëpërmjet adresave të hostit Link-Local.

Kjo thjeshton hartimin dhe zbatimin e protokolleve si IPv6 Neighbor Discovery dhe OSPFv3. Ai gjithashtu lejon që aplikacionet e përdoruesve fundorë në host të komunikojnë përmes kanalit pa kërkuar ndonjë infrastrukturë tjetër mbështetëse IPv6 në kanal. Komunikimi i drejtpërdrejtë midis hosteve të lidhur IPv6 nuk kërkon një ruter IPv6 ose server DHCPv6 në lidhje.

Adresat Link-Local fillojnë me një prefiks 10-bit fe80, e ndjekur nga 54 bit zero dhe më pas një identifikues i ndërfaqes 64-bit (IID). Në përgjigjen e parë të mësipërme 2392:6213:a15b:66ff është një ID 64-bit.

Looped Multicast

Si parazgjedhje, paketat multicast kthehen brenda në nyjen që i ka dërguar. Kjo ndodh si për adresimin IPv6 ashtu edhe për IPv4.

Arsyeja për këtë sjellje të paracaktuar është se kur dërgohen paketat multicast, mund të ketë gjithashtu një aplikacion lokal multicast që dëgjon të ekzekutohet në vetë hostin dërgues, si dhe diku në rrjet. Ky aplikacion lokal duhet gjithashtu të marrë paketa multicast.

Ne mund ta shohim këtë lak lokal multicast në daljen tonë të ping:

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
...

Përgjigja e parë dhe më e shpejtë (0,106 ms në krahasim me 0,453 ms) vjen nga adresa Link-Local e konfiguruar në vetë ndërfaqen enp3s2.

[mark@opy ~]$ ip addr show dev enp3s2 | grep fe80
    inet6 fe80::2392:6213:a15b:66ff/64 scope link noprefixroute 
[mark@opy ~]$

Shërbim ping ofron një mënyrë për të shtypur reagimet lokale multicast duke përdorur parametrin -L. Nëse dërgojmë një ping multicast me të gjitha nyjet me këtë flamur, atëherë përgjigjet kufizohen në nyjet e largëta. Ne nuk marrim përgjigje nga adresa Link-Local e ndërfaqes dërguese.

[mark@opy ~]$ ping -L -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.383 ms
 
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.467 ms (DUP!)
...

Ping Link-Adresa lokale

Siç mund ta merrni me mend, adresat unicast Link-Local në vetvete gjithashtu nuk ofrojnë informacion të mjaftueshëm për të treguar se cilën ndërfaqe të përdorni për t'i arritur ato. Ashtu si me ping multicast me të gjitha nyjet, ne gjithashtu duhet të specifikojmë ndërfaqen si një parametër të linjës së komandës ping ose ID-në e zonës me adresë kur pingoni adresat Link-Local.

Këtë herë mund ta përdorim -cpër të kufizuar numrin e paketave dhe përgjigjeve të dërguara dhe të marra ping, meqenëse po kryejmë ping unicast.

[mark@opy ~]$ ping -c 1 fe80::f31c:ccff:fe26:a6d9%enp3s2
 
PING fe80::f31c:ccff:fe26:a6d9%enp3s2(fe80::fad1:11ff:feb7:3704%enp3s2) 56 data bytes
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.395 ms
 
--- fe80::f31c:ccff:fe26:a6d9%enp3s2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.395/0.395/0.395/0.000 ms
[mark@opy ~]$

Ping (të gjitha) adresat e tjera IPv6?

Në këtë artikull, ne pamë se si të bëni ping të gjitha nyjet IPv6 në një kanal duke përdorur një adresë IPv6 multicast me të gjitha nyjet ff02::1. Ne pamë gjithashtu se si të specifikojmë se cilën ndërfaqe të përdoret me një adresë IPv6 multicast me të gjitha nyjet, pasi vetë adresa nuk mund ta sigurojë këtë informacion. Ne përdorëm ose opsionin e linjës së komandës ping, ose specifikoi ndërfaqen duke përdorur prapashtesën %<zone_id>.

Më pas mësuam për adresat unicast Link-Local, të cilat janë adresa të përdorura për t'iu përgjigjur kërkesave për jehonë multicast ICMPv6 me të gjitha nyjet.

Ne pamë gjithashtu se si paketat multicast kthehen në nyjen dërguese si parazgjedhje dhe si ta çaktivizojmë këtë për programin ping.

Më në fund, ne pinguam një adresë të vetme Link-Local duke përdorur prapashtesën %<zone_id>, pasi vetë adresat Link-Local gjithashtu nuk japin informacion në lidhje me ndërfaqen dalëse.

Po në lidhje me ping për të gjitha nyjet e tjera dhe për të marrë adresat e tyre globale unicast (GUA) (d.m.th., adresat e tyre publike në internet) ose adresat e tyre unike lokale unicast (ULA)? Ne do ta shohim këtë në postimin tjetër në blog.

Kjo eshte e gjitha.

Mund të mësoni më shumë rreth kursit tonë në shënimet e ditës së hapur.

Burimi: www.habr.com

Shto një koment