Ana içeriğe geç

Bölüm 21:Fiziksel Adresleme

11 dakikalık okumaGüncelleme:

Ağlar'a “Sen”i Katmak yazısının parçası: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine kadar inen uzun bir teknik yolculuk.

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. Önbellek, Tazelik ve Güven
  6. Port Numarası ve Soket
  7. Bağlantısız Taşıma: UDP
  8. Üç Adımlı El Sıkışma
  9. Simetrik Şifreleme
  10. Açık Anahtarlı Kriptografi
  11. TLS El Sıkışması
  12. Sertifika Zinciri
  13. HTTP Mesajının Anatomisi
  14. Durum, Çerez ve Oturum
  15. HTTP/2'den HTTP/3'e
  16. İçerik Dağıtım Ağları
  17. Diğer Uygulama Protokolleri
  18. Katmanlı Mimari
  19. Kapsülleme ve Başlıklar
  20. Paket Yakalama ve Çözümleme
  21. Ağ Arayüz Kartı
  22. Fiziksel Adresleme
  23. Hata Sezme ve CRC
  24. Adres Çözümleme: ARP
  25. Anahtarlama ve Ortam Erişimi
  26. Ağ Topolojileri
  27. Sanal Yerel Ağlar
  28. Kablosuz Erişim: 802.11
  29. Radyo Kanalı ve Kapasite
  30. Kablosuz Ağ Güvenliği
  31. Hücresel Ağlar
  32. Spektrum ve Kuşaklar
  33. Hareketlilik ve Aktarma
  34. Adres Kiralama: DHCP
  35. Adresin Anatomisi
  36. Adres Tükenmesi ve IPv6
  37. Yönlendirici Mimarisi
  38. Kuyruk Yönetimi
  39. Cihaz Yapılandırma
  40. Yönlendirme Protokolleri
  41. Kontrol Düzlemi ve SDN
  42. Ağ İzleme ve Yönetimi
  43. Alanlar Arası Yönlendirme
  44. Adres Çevirisi
  45. Ara Kutular
  46. Tünelleme ve IPsec
  47. Güvenlik Duvarları
  48. Operatör ve Metro Ağları
  49. Bitten Sinyale
  50. Çoklama Teknikleri
  51. İletim Ortamları
  52. Kablo Sonlandırma
  53. Fiber Optik İletim
  54. Bakır Erişim Ağı: DSL
  55. Pasif Optik Ağlar
  56. Kablo Erişim Ağları
  57. Denizaltı Kabloları
  58. Veri Merkezi Ağları
  59. Kapsülleme Çözme
  60. Güvenilir Aktarım
  61. Tıkanıklık Denetimi
  62. Trafik Çözümleme
  63. Gecikme Bütçesi
  64. Son Söz

Çerçeve kartın halka tamponunda hazır bekliyor. Tamponu da kartın kendi işlemcisini de gezdin; üstüne yazılacak iki adı ise boş bıraktım.

O ad fabrikada verilmiş, kartın belleğinde duruyor ve bu ağın dışında hiçbir anlamı yok. Fabrikanın verdiği bir ad dünyada nasıl tek kalıyor?

Bir adı dünyada tek yapan ne?

Ethernet arayüzünün adı 48 bit. Onaltılık yazımda bu 12 haneye düşüyor, çünkü her onaltılık hane tam 4 bit taşıyor. Haneler ikişer gruplanınca 6 sekizli çıkıyor, ve adresi kısa çizgilerle ayrılmış görmenin sebebi bu. Sayının adı MAC adresi; literatürde fiziksel adres ya da NIC adresi diye de anılıyor, ama bu kitapta tek biçimde kalıyor.

Adın MAC olmasının sebebi Ethernet’in ortam erişim denetimi sistemi. O sistem yalnızca kimin ne zaman konuşacağını ayarlamakla kalmıyor, çerçevenin kendisini ve adreslemesini de kapsıyor.

48 bitlik uzay 281.474.976.710.656 adres tutuyor. Bu kadar geniş bir uzayda iki üreticinin aynı sayıyı vermemesi tesadüf sayılamaz. Uzayın dağıtımını IEEE yönetiyor; kart üretecek şirket oradan bir blok satın alıyor ve ödediği ücret sembolik kalıyor. Tekliği sağlayan şey o satın alma.

Dilimin adı kurumsal tekil tanımlayıcı; Türkçe kaynaklarda Organizasyonel Tek Kimlik, kısaltmasıyla OUI. IEEE her üreticiye 24 bitlik bir OUI veriyor. Üretici adresin ilk 24 bitine kendi OUI’sini koyuyor, kalan 24 biti kendi üretim sayacıyla dolduruyor. Tek dilim 16.777.216 adres taşıyor.

Bugün dilim tek boyda satılmıyor. On altı milyon adres, yılda birkaç yüz cihaz üreten bir şirket için akıl almaz bir israftı; IEEE bu yüzden üç beden tanımladı:

blokayrılan bitüreticiye kalanadres sayısı
MA-L2424 bit16.777.216
MA-M2820 bit1.048.576
MA-S3612 bit4.096

Bunun pratik bir sonucu var ve arıza ararken tökezletiyor: ilk üç sekizli artık tek başına üreticiyi vermeyebilir. MA-S bloğunda ilk 36 bit, yani dört buçuk sekizli IEEE’ye ait; aynı ilk üç sekizliyi 256 ayrı şirket paylaşıyor olabilir. Adresten üretici çözen araçlar bu yüzden tam eşleşme değil, en uzun önek eşleşmesi yapıyor — yönlendirme tablosunda karşına çıkacak mantığın aynısı, başka bir uzayda.

Yine de çoğu durumda ilk üç sekizliye bakarak arayüz yongasının üreticisini bulmak mümkün. Arıza ararken işe yarıyor: elindeki adresin hangi karta ait olduğunu bilmek, o kartı binada aramaktan kolay.

Fabrikanın verdiği adın ikinci yararı, ağ yöneticisinin adres dağıtma ve yönetme işini tamamen ortadan kaldırması. İş üretim hattında bitiyor.

Bir yönlendiricinin alt yüzündeki fabrika etiketi: seri numarasının yanında LAN ve WLAN arayüzleri için ayrı ayrı basılmış iki MAC adresi. Adresin üretim hattında verildiğini ve her arayüzün kendi adını taşıdığını gösteriyor.

Neden kartın kendi adı var?

Arayüz sözleşmesi her katmana kendi adlandırma düzenini bırakıyor, ve üç katman üç ayrı ad kullanıyor. Uygulama katmanında makinenin adı, ağ katmanında IP adresi, bağ katmanında MAC adresi var. Adın sayıya nasıl çevrildiğini kök sunuculardan yetkili sunucuya kadar adım adım takip etmiştik. Oradaki ad insan içindi.

MAC adresi düz bir ad: içinde ağ kısmı, makine kısmı gibi bir bölümlenme yok. Zaten işi de dar; çerçeveyi bir arayüzden, ona fiziksel olarak bağlı başka bir arayüze ulaştırmaktan ibaret. Kart nereye giderse gitsin adresi değişmiyor. 802.11 arayüzü olan bir telefon hangi ağa girerse girsin aynı adı taşıyor. Ad kartla birlikte yolculuk ediyor.

IP adresi ise hiyerarşik. Ağ kısmı ve makine kısmı var, ve makine başka bir alt ağa taşınınca adresin değişmesi gerekiyor.

Kartlara MAC yerine doğrudan IP verilseydi ne olurdu? Başka ağ katmanı protokollerini desteklemek zorlaşırdı; MAC bilerek tarafsız bırakıldı. Kart ağ katmanı adresini tutsaydı, o adresin kart belleğinde saklanması gerekirdi. Her taşınmada ve her açılışta yeniden yapılandırılırdı.

Kartlarda hiç adres olmaması ise başka bir bedel getirirdi. Yerel ağ geniş yayın ortamı, yani ortamdaki veriyi herkes alıyor. Adres olmasaydı makine yerel ağdaki her çerçeve için kesmeye uğrardı. Adres, işletim sistemini rahatsız etmemek için var.

Kart hangi çerçeveyi açar?

Kapsülleme merdivenini çıkarken bu iki alanın genişliğini vermiş, içini kasten boş bırakmıştım. Çerçevede hedef adres önce, kaynak adres sonra geliyor ve ikisi de 6 bayt tutuyor. Sıra keyfi değil ve kartın işini doğrudan belirliyor.

Ethernet arayüzü kablodaki her çerçeveyi en azından hedef adres alanına kadar okumak zorunda. Adres tutmuyorsa geri kalanını okumadan bırakabiliyor. Hedef adres kendisininkiyle eşleşiyorsa ya da yayın adresiyse yükü ağ katmanına çıkarıyor. Eşleşme yoksa çerçeveyi atıyor ve datagramı yukarı hiç vermiyor.

Bu filtre kapatılabiliyor. Yakalamayı karışık modda yaparken kart eşleşmeyen çerçeveleri de yukarı veriyordu; ekranda gördüğün trafik o yüzden kendi adresinle sınırlı kalmıyordu.

Adres alanlarından önce önsöz duruyor: 8 baytlık bir alan. İşi alıcı ile göndericinin saat hızlarını eşitlemek. IEEE 802.3 bu alanı ikiye ayırıyor: ilk 7 bayt önsöz, son 1 bayt çerçeve başlangıç sınırlayıcısı. Desen 7 bayt boyunca 10101010, ardından bir bayt 10101011 geliyor. Sondaki iki 1 biti adres alanının başladığını işaretliyor.

Kaynak adres alanı çerçeveyi gönderen cihazın MAC adresini taşıyor. Bu alan her zaman tek bir arayüzü gösteren adres olmak zorunda, oraya yayın adresi yazılamıyor. Ethernet MAC protokolü kaynak adresi hiçbir şekilde yorumlamıyor. Alan üst katman yazılımı, arıza takibi ve anahtarlar için duruyor. Anahtar, kaynak adresleri kendi portlarıyla eşleyen tabloyu bu alandan kuruyor; anahtarın her portunun da fabrikada atanmış kendi adresi var.

Adreslerden sonra gelen tür alanı içerideki üst katman protokolünü bildiriyor. Çerçevenin sonundaki CRC ise bozulmayı sezmek için duruyor.

DerinleşmeAynı iki bayt hem "uzunluk" hem "tür" olabilir mi?

Ethernet’in iki ayrı çerçeve biçimi var ve ikisi bugün aynı kabloda yan yana yaşıyor.

Ethernet II — piyasadaki adıyla DIX, üç üreticinin baş harflerinden — adreslerden sonraki iki baytı tür olarak kullanıyor: içeride hangi protokol var? IEEE 802.3 ise aynı iki baytı uzunluk olarak tanımladı: veri alanında kaç bayt var?

İki standart aynı alana iki farklı anlam yükleyince alıcının bir ayırt etme yöntemine ihtiyacı oldu. Çözüm sayının kendisinde saklı. Veri alanının üst sınırı 1.500 bayt, yani onaltılıkta 0x05DC; bir uzunluk alanı bu değeri hiçbir zaman aşamaz. Tür değerleri ise kasten 0x0600 yani 1.536’dan başlatıldı.

alandaki değeralıcı ne anlıyor
1.500 ve altıbu bir uzunluk → çerçeve IEEE 802.3
1.536 ve üstübu bir tür → çerçeve Ethernet II
arası (1.501-1.535)tanımsız; kimse kullanmıyor

Aradaki 35 değerlik boşluk boşa harcanmış değil, kasten boş bırakılmış bir tampon. İki biçimin bir arada yaşayabilmesinin bedeli bu.

802.3’ün bir sorunu vardı: alanı uzunluğa harcayınca protokolü söyleyecek yer kalmadı. Bunun için veri alanının başına ayrı bir başlık kondu. LLC başlığı üç bayt taşır: hedef ve kaynak hizmet access point ile bir denetim baytı. Sekiz bitlik bu noktalar protokol dünyasını adreslemeye yetmediği için üstüne bir de SNAP başlığı eklendi: 3 bayt OUI ve 2 bayt tür. Toplam sekiz bayt — yalnızca Ethernet II’nin iki baytta yaptığı işi yapmak için.

Bugün IP taşıyan hemen her çerçeve Ethernet II. 802.3 biçimi ölmedi ama daraldı: anahtarlar arasında döngüyü kıran denetim mesajları ve bazı eski protokoller hâlâ LLC ile konuşuyor. Kendi yakalamanda ethertype IPv4 (0x0800) yazan her satır birinci biçimi, 802.3, LLC yazan her satır ikincisini gösteriyor.

Kırk sekiz bitin nasıl bölündüğünü tek tek açalım:

Çerçeve tele geldikçe kartın verdiği karar
önce gelensonra gelenönsöz + SFDsaat kilidihedef adres6 baytkaynak adres6 bayttürprotokolyükdatagramFCSkuyrukkart karşılaştırıyorkendi adresim mi, yayın mı?eşleşme yokgerisini okumadan atarMAC bu alanı yorumlamazanahtar tablosunu kurareşleşme ya da yayınyükü ağ katmanına çıkarır
Önsöz saatleri eşitliyor. Yedi baytlık tekrarlı desen alıcının saatini gönderene kilitliyor. Sekizinci baytın sonundaki iki 1 biti adres alanının başladığını işaretliyor.
  1. Önsöz saatleri eşitliyor. Yedi baytlık tekrarlı desen alıcının saatini gönderene kilitliyor. Sekizinci baytın sonundaki iki 1 biti adres alanının başladığını işaretliyor.
  2. Hedef adres okunuyor. Tele ilk giren adres alanı hedef adres. Kart onu kendi fabrika adresiyle karşılaştırıyor; yayın adresi de eşleşme sayılıyor.
  3. Eşleşme yoksa bırakıyor. Çerçevenin geri kalanı okunmuyor ve işletim sistemi hiç rahatsız edilmiyor. Kartın her çerçeveyi en azından bu alana kadar okumasının sebebi bu.
  4. Kaynak adres geçiyor. Ethernet MAC protokolü bu alanı yorumlamıyor. Anahtar port tablosunu buradan kuruyor; arıza takibi de çerçeveyi kimin gönderdiğini buradan okuyor.
  5. Yük yukarı çıkıyor. Tür alanı içerideki protokolü söylüyor, yük ağ katmanına veriliyor, sondaki FCS bozulmayı sezmek için kalıyor. Karar hedef adreste verilmişti.

İkinci hane ne söylüyor?

Hedef adresin tele ilk giden biti adresin kime gittiğini söylüyor. Sıfırsa tek bir arayüzün MAC adresi, birse bir gruba gönderim. Fabrikada atanan adresin teknik adı bu yüzden tekli yayın adresi. IEEE 802.3 ikinci bite ayrı bir anlam yüklüyor. Sıfırsa adres küresel yönetiliyor, yani üreticiden gelmiş. Birse yerel olarak yönetiliyor.

Bu iki bit adresin neresinde görünüyor? Sekizliler soldan sağa gönderiliyor ama bir sekizlinin içindeki bitler en anlamsızdan en anlamlıya doğru gidiyor. Sıra tersine dönüyor. Bayrak bitleri bu yüzden adresin ikinci onaltılık hanesinde okunuyor.

ilk sekizli  :  b7 b6 b5 b4 b3 b2 b1 b0
tele çıkış   :  b0 b1 b2 b3 b4 b5 b6 b7
                ^  ^
                |  +--  0: küresel yönetilen  ·  1: yerel yönetilen
                +-----  0: tekli yayın        ·  1: çoklu yayın

Kural bu yüzden tek bir haneye bakarak okunabiliyor:

ikinci haneadres ne anlama geliyor
tek sayı: 1, 3, 5, 7, 9, B, D, Fçoklu yayın
2, 6, A, Eyerel yönetilen tekli yayın
0, 4, 8, Cfabrikadan gelen küresel tekli yayın

Yerel yönetilen tekli yayın için 16 haneden yalnızca 4’ü uygun, yani %25.

Şu adres üstünde yürüyelim: 06-4B-7C-D2-05-9A. İlk sekizli 0x06, ikilik yazımda 0000 0110 oluyor. En anlamsız bitten gönderilince tele 0110 0000 olarak çıkıyor. İlk bit sıfır, yani tekli yayın; ikinci bit bir, yani yerel yönetilen. Bu adres tanımı gereği hiçbir üreticiye ait değil.

48 bitin hepsi bir olursa adres yayın adresine dönüşüyor: FF-FF-FF-FF-FF-FF. Gönderen kart herkesin işlemesini istiyorsa hedef adres alanına o özel değeri yazıyor. Yayın adresine gönderilen bir çerçeveyi yerel ağdaki her istasyon alıyor ve işlemek zorunda kalıyor. Bedeli herkese dağılıyor.

Yayın adresi aslında çoklu yayının özel hâli: bütün istasyonlardan oluşan grup. Bit kuralı da bunu doğruluyor, çünkü ilk bit bir olduğu için adres teknik olarak çoklu yayın. Çoklu yayın adresi tek bir çerçevenin bir istasyon grubu tarafından alınmasını sağlıyor. Arayüz, bir ya da daha fazla grup adresine gelen çerçeveleri alacak şekilde programlanabiliyor.

Ethernet’te yayın adresi tek bir sabit değer. IP’deki yayın adresi ise hangi alt ağda olduğuna göre değişiyor. Düz adres uzayı ile hiyerarşik adres uzayı arasındaki fark tam burada görünüyor.

Bir üst kattaki grup, buradaki adrese nasıl çevriliyor?

Ağ katmanı bir gruba paket yollamak istediğinde elinde bir çoklu yayın IP adresi var, ama kart yalnızca MAC adresi tanıyor. Aradaki dönüşüm bir tablo değil, doğrudan bir hesap — ve tasarımı bu kitapta göreceğin en pratik hilelerden biri.

IPv4’te kural şu: MAC adresinin ilk 25 biti sabit (01:00:5E ve ardından bir sıfır biti), kalan 23 bite IP adresinin son 23 biti kopyalanıyor.

IP  224.0.0.251   →  MAC  01:00:5E:00:00:FB
IP  239.255.255.250 →  MAC  01:00:5E:7F:FF:FA

İlk sekizli 01, yani ilk bit bir: adres tanımı gereği çoklu yayın. Hesap hiçbir sunucuya sormadan, hiçbir tablo tutmadan yapılabiliyor.

Bir kusuru var ve kasten kabul edilmiş. Çoklu yayın IP adresinin makine kısmı 28 bit ama MAC’e yalnızca 23 biti sığıyor; aradaki 5 bit düşüyor. Yani 32 ayrı IP grubu aynı MAC adresine düşüyor. Kart bunlardan birine üye olduğunda öteki 31’inin çerçevelerini de yukarı veriyor, ve ayıklamayı işletim sistemi yapıyor. Donanım filtresinin kaçırdığını yazılım filtresi topluyor.

IPv6 aynı numarayı daha bol yerle yapıyor: 33:33 ile başlıyor ve adresin son 32 bitini kopyalıyor. Çakışma ihtimali pratikte kalmıyor.

Aynı adres bir kat yukarıda yeniden doğuyor

MAC adresinin ikinci bir hayatı daha var. IPv6’da bir makine kendi adresini kendi üretiyor ve o adresin alt yarısını çoğu zaman kartın MAC adresinden çıkarıyor. Yönteme EUI-64 deniyor ve üç adımdan oluşuyor:

  1. 48 bitlik adresi ortadan ikiye böl.
  2. Araya FF:FE iki sekizlisini sok — 48 bit 64 bite çıkar.
  3. İlk sekizlideki yerel yönetim bitini ters çevir.
MAC     00:1B:44:11:3A:B7
adım 1  00:1B:44 | 11:3A:B7
adım 2  00:1B:44:FF:FE:11:3A:B7
adım 3  02:1B:44:FF:FE:11:3A:B7      →   ::021b:44ff:fe11:3ab7

Üçüncü adım ilk bakışta keyfî görünüyor. Değil: EUI-64 uzayında bitin anlamı ters çevrilmiş — orada 1 “küresel”, 0 “yerel” demek. Aynı bit, iki farklı standartta zıt anlamlar taşıyor ve dönüşüm bunu düzeltiyor. Bir bitin anlamının bağlama göre değişmesi, bu kitapta gördüğün en sinsi uyumsuzluk olabilir.

Yöntemin bir bedeli daha vardı ve bu kez kabul edilmedi. MAC adresi değişmediği için ondan türetilen IPv6 adresinin alt yarısı da değişmiyordu; makine hangi ağa giderse gitsin adresinin yarısı aynı kalıyor, yani bu bölümün sonunda konuşacağımız iz kalıcı hâle geliyordu. RFC 8981 bu yüzden geçici adresler tanımladı ve modern işletim sistemleri dışarı çıkarken MAC’ten türetilmiş adresi değil, düzenli aralıklarla yenilenen rastgele bir adresi kullanıyor. Makinenin kendi IPv6 adresini nasıl bulduğunu anlatırken buraya geri döneceğiz.

MAC adresi yazılımla değiştirilebiliyor. Bugün kullanılan Ethernet arayüzlerinin hepsi buna izin veriyor, standart açıkça zorunlu kılmasa da uygulamada durum bu. Fabrika adı bir kilit değil, bir varsayılan.

Yerel yönetilen adresler Ethernet’te uzun süre seyrek kullanıldı. Sebebi sade: her arayüz zaten fabrikada tek bir adres alıyordu. Adres rastgeleleştirmesi tam olarak bu az kullanılan kapıdan geçiyor. İkinci biti bire çekiyor ve fabrikadan gelen adı bırakıyor. Rastgele üretilen sayının ikinci hanesi bu yüzden 2, 6, A ya da E oluyor.

İzlemeyle ilgisi doğrudan MAC’in düz yapısından geliyor. Değişmeyen bir ad, cihaz nereye giderse gitsin aynı kaldığı için tek başına bir iz. Telefonun her ağda aynı adı göstermesi, o telefonu her ağda tanınır yapıyor. Rastgeleleştirme bu izi kesiyor.

Kendi fabrika adını görmek istersen:

getmac /v /fo list

Komut her ağ kartı için bir blok döküyor: bağlantı adı, ağ bağdaştırıcısı, Fiziksel Adres ve taşıma adı. O satırdaki 12 hane, kartın ROM’una yazılmış ad. İkinci haneye bak: 0, 4, 8 ya da C ise elindeki ad gerçekten fabrikadan geliyor.

Özet

Peki, ne öğrendik?

  • MAC adresi 48 bitlik ve bölümsüz: hiyerarşi taşımadığı için kart nereye taşınırsa taşınsın aynı sayıyı gösteriyor.
  • Tekliği IEEE’nin dağıtımı sağlıyor: üretici 24 bitlik OUI’sini adresin ilk yarısına koyuyor, kalan yarıyı kendi üretim sayacıyla dolduruyor.
  • Kart her çerçeveyi hedef adrese kadar okuyor: eşleşme ya da yayın adresi yoksa gerisini okumadan bırakıyor ve işletim sistemini hiç rahatsız etmiyor.
  • Kural tek haneye iniyor: ikinci onaltılık hane tekse çoklu yayın; 2, 6, A ve E yerelde verilmiş, 0, 4, 8 ve C ise küresel tekli yayın anlamına geliyor.
  • Çoklu yayın adresi hesaplanır, sorulmaz: IPv4’te 01:00:5E önekine adresin son 23 biti kopyalanır ve 32 grup aynı MAC’e düşer; ayıklamayı yazılım tamamlar.
  • Aynı adres bir kat yukarıda yeniden doğuyor: EUI-64 araya FF:FE sokup yerel yönetim bitini ters çevirir, çünkü o bitin anlamı iki standartta zıttır.

Çerçevenin iki adresi de yerinde: kimin gönderdiği ve kimin alacağı yazılı. Ama bu çerçeve şimdi bakırın ya da camın içinde kilometrelerce yol alacak. Yolda tek bir bit ters dönerse bunu kim fark edecek?

22. bölüme devam et: Hata Sezme ve CRC