IPv6 adresinde neden yüzde işareti var?


125

.NET FrameworkMakinemin IP adreslerini almak için sınıfları kullanıyorum .

Dns.GetHostAddresses(Dns.GetHostName())

Hem IPv4 hem de IPv6 adresine sahip bir VirtualBox adaptörüne sahibim. .NET kodunu kullanarak IPv6 adresini aşağıdaki gibi alıyorumfe80::71a3:2b00:ddd3:753f%16

Sonunda% 16 dikkat edin?

Ancak, aynı sorguyu kullanarak sorgularsam, WMIadresi 'fe80 :: 71a3: 2b00: ddd3: 753f' olarak alıyorum

Peki,% 16'nın özel bir önemi var mı?

Düzenle:

Bunun hakkında biraz daha gözlem yaptım. Ve Stephen Jennings'in cevabında söyledikleri ile çok iyi uyuşuyorlar.

Hangi IPv6 adresini verdiğini görmek için Vmware'i yükledim. Adresler şunlardı: fe80 :: 3dd0: 7f8e: 57b7: 34d5% 19

fe80 :: b059: 65f4: e877: c40% 20

Açıkça,% sonrasındaki sayılar bazı onaltılık gösterimler değildir. Wmi kullanarak bir ağ bağdaştırıcısının tüm özelliklerini kontrol ettim ve sayıların her ağ bağdaştırıcısının InterfaceIndex özelliği ile tamamen aynı olduğunu gördüm. Gereğince MSDN , bu benzersiz her ağ bağdaştırıcısı tanımlar ve bu özellik Vista'da tanıtıldı.

Beni hala şaşırtan şey, IPAdresi sınıfının neden geçerli olmadığı sürece bu biçimde bir ip adresi oluşturmanıza izin vermesiydi. Cevap Stephen tarafından sağlandı. Sayı kapsam kimliğidir. IPAdresinin, adresini VE kapsam kimliğini kabul eden bir kurucusu vardır.

Oh, ve bu üç ağ bağdaştırıcısının tümü yerel bağlantıdaydı. İpconfig ile onaylandı

Güzel. Bu ilginçti!!


2
Senden önce ne olduğunu bilmiyordum. Bugün IPv6 hakkında da iyi bir şey öğrendim (ne tür biziz).
Stephen Jennings,

@Stephen, ipv6 ile daha önce çalıştınız mı? Çabucak beni şaşırttın. Soruyu buraya göndermeden önce epeyce googledim. İyi iş!
Amith George

"İpv6 adres yüzdesi" nde arama yapmak, ihtiyacım olan adı almamı sağladı ve oradan etrafı araştırıp kafa karıştırıcı teknik belgeleri anlamayı denemek en çok zaman aldı. IPv6'nın başarmaya çalıştığı şeyi elde ediyorum, ancak araştırma ve anlama konusunda edinmediğim birçok yeni kavram var. Bu bir şeydi ve hiçbir şey size bir başkasına açıklamaya çalışmaktan daha iyi bir anlayış vermez.
Stephen Jennings

Alternatif bir gösterim olabilir fe80:10( 0x0010varlık 16). Yerel yerel IPv6 adresleriyle çalışırken tarayıcımda kullanıyorum , ancak bunun standartlara göre olduğundan% 100 emin değilim. (URL’lerin yüzdesini kullanmak tarayıcılarda dağınıktır; aslında bunun çalışmasını hiç alamadım.)
Arjan

Yanıtlar:


134

'%' İşaretinden sonraki sayı kapsam kimliğidir.

IPv6, adresler için en az üç erişilebilirlik kapsamı tanımlar:

  1. Genel olarak adreslenebilir. Bu, ISS'niz tarafından size verilen bir IPv6 adresidir. İnternet üzerinden kullanılabilir.

  2. Bağlantı yerel. Bu, 169.254.XX aralığına benzer. Yerel iletişimi kolaylaştırmak için bir bilgisayarın kendisini atadığı bir adres. Bu adresler genel olarak İnternet üzerinde yönlendirilmiyor çünkü genel olarak benzersiz değiller.

  3. Düğüm-yerel. Bu, 127.0.0.1'e benzer şekilde yerel arayüzü tanımlayan bir adrestir. Temel olarak, bu adres :: 1.

Microsoft, bulduğum en az kafa karıştırıcı makale olan IPv6 adreslemeyi açıklayan bu makaleyi yayımladı . Makale, adresinizde bir kapsam kimliğinin varlığının yerel bağlantı adresi olduğunu gösterir . Adres yerel olarak başladığı için yerel bağlantı olduğunu da söyleyebilirsin fe80.

Bu konuyla ilgili açık ve anlaşılır bir bilgi nadir görünüyor, bu yüzden bunun geri kalanını RFC 4007 hakkındaki en iyi anlayışıma ve oradaki diğer bilgilere dayanarak bir araya getiriyorum .

Bir bilgisayarın, her biri farklı kapsamda olan birden fazla yerel bağlantı adresi olabilir. Kapsam kimliği, adresin hangi kapsam için olduğunu gösterir. Örneğin, her biri farklı ağlarda yerel bağlantı adresi olan iki NIC'li bir bilgisayarın senaryosunu hayal edin. Fe80 ile başlayan başka bir adrese bir şey göndermeye çalışırsanız, bilgisayar hangi NIC’nin gönderileceğini nasıl bilecek? Kapsam kimliği bunun için bir çözüm gibi görünüyor.


Teşekkürler! Sorumu, yanıt beklerken gözlemlediğim ekstraları eklemek üzere düzenledim. Ve ben onları göndermeye geldiğimde, cevabınızı gözlemleri doğrulayan görmekten şaşırdım :)
Amith George

Güzel cevap Bakalım bunu tamamen anladıysam. Böylece iki NIC'li bir cihaz iki farklı yönlendiriciye bağlanabilir ve aynı DHCP adresini atayabilir fe80::42. Ayrıca, yönlendiriciler aynı adrese sahip fe80::1. Şimdi, fe80::1%Xyönlendiriciler arasında ayrım yapmak için kullanılabilir, ancak fe80::42%Xmüşteriye çok az faydası var, değil mi?
user123444555621

2
@ Pumbaa80 Müşteri, fe80::1%1NIC # 1'e fe80::1%2bağlı yönlendiriciye ulaşmak için mesajlar gönderir ve NIC # 2'ye bağlı yönlendiriciye ulaşmak için mesajlar gönderir . Kenara bir bağlantı olarak, yerel bağlantı adresleri DHCP aracılığıyla değil, ana bilgisayar tarafından otomatik olarak yapılandırılır, bu nedenle muhtemelen iki NIC'sine aynı IP'yi atamaz. Ayrıca, yerel bağlantı adreslerinin yönlendirilebilir olmadığını, bu nedenle genellikle yönlendiriciye mesaj göndermeyeceğinizi, iki ana bilgisayar arasında mesaj göndereceğinizi unutmayın.
Stephen Jennings

deneylerle, sondaki görünüyor %nn, örneğin, en azından bazı komutlar için ihmal edilebilir ping, tracert.
matt wilkie

Çok iyi cevap. Sadece kapsam kimliğinin sıfır olduğunu belirtmek özeldir ve bu IP'nin kapsamı ile ara yüzler listesinden bir kapsam kimliği seçmek için uygulamaya özel bir algoritma olduğunu gösteriyor gibi görünmektedir.
Arran Cudbard-Bell

21

Fe80 :: / 64 ön ekli IPv6 adresleri, bu öneki ağ aygıtının donanım adresiyle birleştirerek oluşturulan yerel bağlantı adresleridir, örneğin 71a3: 2b00: ddd3: 753f. (IPv4'teki analog, 169.254.0.0/16'dır.) Önek, bir makinedeki tüm yerel bağlantı adresleri için aynı olduğundan, yönlendirmenin bazen hangi arabirimden bahsettiğinizi bilmesi gerekebilir. Ve bu, yüzde dizisinden sonra bölge dizini adı verilen sayıyı belirtir. Özellikler işletim sistemine göre değişir: Windows'ta, %1616 numaralı arabirimdir; mesela Linux'ta bir şey görebilirsiniz %eth0.

Bazı araçlar veya API'ler bu bölge endeksini kendi amaçları için önemsiz veya örtülü olarak değerlendirecektir. Örneğin, Linux'ta ifconfigaraç bunu göstermez, çünkü bir adresin hangi arabirime ait olduğu açıktır. Ancak genel olarak dikkate alınmalıdır.


18

% Öğesinden sonraki karakterler (örneğinizde sayılar olabilir) Arabirim Tanımlayıcısıdır. Bu karakterler, insanların genellikle "ağ kartı" olarak adlandırdığı bir "ağ arayüzü" tanımlamak için kullanılır. Örneğin, bir paketin kablolu bir Ethernet kartı mı yoksa bir kablosuz Wi-Fi adaptörü kullanıp kullanmayacağını belirlemeye yardımcı olabilir.

Microsoft Windows kullandığınızı tahmin ediyorum. Arabirim tanımlayıcıları olarak sayıları kullanır.

Karşılaştırma noktası olarak, Unix benzeri sistemler% işaretinden sonra harf kullanabilir. Örneğin:fe80::71a3:2b00:ddd3:753f%eth0

Bu durumda, Arabirim tanımlayıcısı, eth0ağ kartının adı ile eşleşir.

Microsoft Windows'ta, yönlendirme tablosunu kontrol eden komut satırlarından birini kullanarak (sayısal) arabirim tanımlayıcılarının bir listesini alabilirsiniz. netstat -nrDiğer işletim sistemlerinde de çalıştığı için " " tercih ediyorum , ancak Microsoft Windows da " route print" özelliğini destekliyor . Raporlanan sonuç çıktısı büyük olasılıkla bir ekran uzunluğundan fazla olacaktır, bu nedenle daha fazlasını elde etmediğiniz sürece geriye kaydırmaya hazır olun.

örneğin, sistemimde:

=========================================================================== Interface List 14...5c f9 dd 6d 98 b8 ......Realtek PCIe GBE Family Controller 12...e0 06 e6 7e fc 4e ......Bluetooth Device (Personal Area Network) 1...........................Software Loopback Interface 1 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter 15...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2 ===========================================================================

Bu durumda, fe80 :: 71a3: 2b00: ddd3: 753f% 14 gibi bir adres Realtek PCIe GBE Ailesi Denetleyicime başvuracaktı. "GBE", Gigabit Ethernet'i ifade eder.

Şimdi, işte zor kısım: Uzak bir adrese ping yapmak istiyorsanız, uzaktaki sistemin IPv6 adresini, ancak yerel sistemin Arabirim Tanımlayıcısını kullanmanız gerekebilir. Öyleyse, örneğin, Bilgisayar A kullanıyorsanız ve yerel olarak bir IPv6 adresi olan ve Arabirim numarası 14'e eklenmiş bir fe80 :: 1 adresim varsa ve B Bilgisayarına ping işlemi yapmak istiyorum ve ekli bir yerel IPv6 adresi de fe80 :: 2 var. Arabirim numarası 16, sonra ne kullanırdım:

ping fe80::2%14

Bu yüzden pingkomut, ICMPv6 paketini uzaktaki bilgisayara ait olan uzak IPv6 adresine (fd80 :: 2) gönderecek ve bunu tanımlamak için Tanıtıcı 14 ile Arabirimi kullanacaktır. Arabirim Tanımlayıcısı 14, uzaktaki sistemden değil, kullandığım sistemden bir sayıdır.

Şimdi, bunun neden gerekli olabileceğine bakalım.

Google’ın IPv6 adresini pinglemek istersem (bu cevabı yazdığım sırada 2607: f8b0: 400a: 802 :: 200e), yönlendirme tablosu hangi ağ kartının 2607: f8b0: 400a ile başlayan adresleri ele aldığını kontrol eder: 802. Yönlendirme tablosu, ağ kartlarımdan hiçbirinin, 2607: f8b0: 400a: 802 ile başlayan adresleri kullanarak doğrudan bir ağa bağlı olmadığını gösterecek, böylece bilgisayarım bir "ağ geçidi" adresi kullanacak. Çalıştığım kuruluşun bir parçası olan başka bir ağa bağlanıyorsam, trafiği özel bir ağa yönlendiren özel bir "ağ geçidi" adresim olabilir. Bu durumda, daha belirli bir ağ geçidim yok, bu yüzden IPv6 "varsayılan ağ geçidi" kullanacağım. IPv6, yerel bağlantı adresleri dışında çoğu zaman bu şekilde çalışır. Bu aynı zamanda IPv4'ün çoğu zaman nasıl çalıştığını da gösterir.

Göre RFC 4291 bölüm 2.8 , IPv6 kullanarak her bilgisayar her ağ arabirimine bir bağlantı yerel adresi atamak gerekir. RFC 4291 bölüm 2.5.6 , yerel bağlantı adreslerinin "fe80: 0000: 0000: 0000:" ile başlamasına neden olan bağlantı yerel adreslerinin başlaması gereken bitleri gösterir. ). Bu adreslerin "fe80:" ile başlaması, RFC 4291 bölüm 2.4 ile de açıklanmaktadır .

Uzak bir sisteme ping yapmaya çalışırsanız (örneğin, "2607: f8b0: 400a: 802"), genel işlem genellikle adresin bir parçası olduğu, bitlere bakarak yapılan bir ağı veya alt ağı bulmaktır. adresin başında. Ardından, bu bitler trafiğin nasıl yönlendirileceğini belirlemek için kullanılır.

Bununla birlikte, bu işlem bir IPv6 yerel bağlantı adresi için çalışmaz, çünkü her bir (işlemsel, aktif) ağ arabirimi, alt ağ önekini / boyutunu kullanan alt ağda "fe80:" ile başlayan yerel bağlantı adresi vardır / 64" . Bir dizüstü bilgisayar kullanıyorsanız, hem Ethernet kartınızın hem de Wi-Fi adaptörünüzün böyle bir IPv6 adresine sahip olması beklendiğini algılamanız olasıdır.

Şimdi, pinginizi fe80 :: 2'ye gönderdiğinizde, bilgisayarınızın bu paketi doğru ağ kartına göndermesini istiyorsunuz. Kablolu bir ağa bağlı bir yazıcınız varsa, trafiği yazıcıya gitmesine neden olmayacak bir ağ yolu / yolu kullanarak trafiği Wi-Fi kartınızdan göndermek istemezsiniz. Wi-Fi kartınızı kullanarak kablosuz bir cihazla iletişim kurmaya çalışıyorsanız, trafiğinizin Ethernet kartından çıkmasını istemezsiniz.

Çözüm, trafiğin hangi ağ cihazını kullanmasını istediğinizi belirlemenizi sağlamaktır. Yani, ağ tanımlayıcısının amacı budur.


2
Tamam, Peter Eisentraut'un cevabını tekrar okuduktan sonra, teknik olarak doğru görünüyor. Umarım bilgilerim biraz daha netlik sağlar. Stephen Jennings'in cevabına katılmıyorum , çünkü bu cevap "kapsam kimliği" nin "bağlantı yerelini" tanımladığı gibi görünmesini sağlıyor. Bununla birlikte, iki farklı ağ arayüzü her ikisi de "yerel bağlantı" olabilir, ancak aynı "kapsam" ı kullanmayacaklar (numaralı listesinde gösterilen örnekler uyarınca). Bunun yerine, bu numaraların ağı "arayüz" olarak tanımladığını söylüyorum.
TOOGAM
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.