Bölüm 23: Fiziksel Adresleme
Ağlar'a “Sen”i Katmak kitabının bir bölümü: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine inip karşı taraftan geri dönen uzun bir teknik yolculuk.
Kısım 4: Makineden Yerel Ağa (Bölüm 18-29)
Tüm bölümler
- Giriş
- Adres Çubuğundan İsteğe
- Paket Anahtarlamalı Yol
- İsimden Adrese
- DNS Kayıtları
- Önbellek, Tazelik ve Güven
- Port Numarası ve Soket
- Bağlantısız Taşıma: UDP
- Üç Adımlı El Sıkışma
- Simetrik Şifreleme
- Açık Anahtarlı Kriptografi
- TLS El Sıkışması
- Sertifika Zinciri
- HTTP Mesajının Anatomisi
- Durum, Çerez ve Oturum
- HTTP/2'den HTTP/3'e
- İçerik Dağıtım Ağları
- Diğer Uygulama Protokolleri
- Katmanlı Mimari
- Hizmet ve Protokol
- Encapsulation ve Başlıklar
- Paket Yakalama ve Çözümleme
- Ağ Interface Kartı
- Fiziksel Adresleme
- Hata Sezme ve CRC
- Adres Çözümleme: ARP
- Ortam Erişimi: CSMA/CD
- Switch'ler
- Ağ Topolojileri
- Sanal Yerel Ağlar
- Kablosuz Erişim: 802.11
- Radyo Kanalı ve Kapasite
- Kablosuz Ağ Güvenliği
- Hücresel Ağlar
- Spektrum ve Kuşaklar
- Hareketlilik ve Aktarma
- Adres Kiralama: DHCP
- Adresin Anatomisi
- Adres Tükenmesi ve IPv6
- Router Mimarisi
- Kuyruk Yönetimi
- Cihaz Yapılandırma
- Routing Protokolleri
- Kontrol Düzlemi ve SDN
- Ağ İzleme ve Yönetimi
- Alanlar Arası Routing
- Adres Çevirisi
- Ara Kutular
- Tünelleme ve IPsec
- Firewall'lar
- Ağ Saldırıları
- Operatör ve Metro Ağları
- Bitten Sinyale
- Sembol Hızı ve Kanal Kapasitesi
- Multiplexing Teknikleri
- İletim Ortamları
- Bakır Kablo Sonlandırma
- Fiber Sonlandırma
- Fiber Optik İletim
- Bakır Erişim Ağı: DSL
- DSL'de Hız ve Mesafe
- Pasif Optik Ağlar
- Kablo Erişim Ağları
- Kablo Modem ve CMTS
- Denizaltı Kabloları
- Veri Merkezi Ağları
- Encapsulation Çözme
- Güvenilir Aktarım
- Tıkanıklık Denetimi
- Trafik Çözümleme
- Gecikme Bütçesi
- Soket Programlama
- Eşten Eşe ve Protokol Tasarımı
- Uyarlanır Video Akışı
- Gerçek Zamanlı Ses ve Görüntü
- Kablosuz Sensör Ağlarının Mimarisi
- Sensör Ağlarında Ortam Erişimi
- Sensör Ağlarında Yönlendirme ve IP
- Zaman Eşitleme ve Konum Bulma
- Sensör Ağı Uygulamaları
- Mobil Kablosuz Sensör Ağları
- Son Söz
Frame 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 interface’inin 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 oktet, yani sekizer bitlik 6 grup çıkıyor; adresi kısa çizgilerle ya da iki noktayla 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, frame’in 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 ücretli bir blok satın alı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 (Organizationally Unique Identifier). 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ı:
| blok | ayrılan bit | üreticiye kalan | adres sayısı |
|---|---|---|---|
| MA-L | 24 | 24 bit | 16.777.216 |
| MA-M | 28 | 20 bit | 1.048.576 |
| MA-S | 36 | 12 bit | 4.096 |
Bunun pratik bir sonucu var ve arıza ararken tökezletiyor: ilk üç oktet artık tek başına üreticiyi vermeyebilir. MA-S bloğunda ilk 36 bit, yani dört buçuk oktet IEEE’nin dağıttığı önek; aynı ilk üç okteti 4.096 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; routing tablosunda karşına çıkacak mantığın aynısı, başka bir uzayda.
Yine de çoğu durumda ilk üç oktete bakarak interface 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.

Neden kartın kendi adı var?
Interface sözleşmesi her katmana kendi adlandırma düzenini bırakıyor ve üç katman üç ayrı ad kullanıyor. Application layer’da makinenin adı, network layer’da IP adresi, data link layer’da 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; frame’i bir interface’ten, ona fiziksel olarak bağlı başka bir interface’e ulaştırmaktan ibaret. Kart nereye giderse gitsin adresi değişmiyor. 802.11 interface’i 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; 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 network layer protokollerini desteklemek zorlaşırdı; MAC bilerek tarafsız bırakıldı. Kart network layer 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. Ethernet paylaşılan bir kablo olarak doğdu; ortamdaki veriyi herkes alıyordu. Adres olmasaydı makine yerel ağdaki her frame için kesmeye uğrardı. Adres, işletim sistemini rahatsız etmemek için var.
Kart hangi frame’i açar?
20. bölümde encapsulation merdivenini çıkarken bu iki alanın genişliğini vermiş, içini bilerek boş bırakmıştım. Frame’de 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 interface’i kablodaki her frame’i 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 broadcast adresiyse yükü network layer’a çıkarıyor. Eşleşme yoksa frame’i atıyor ve datagramı yukarı hiç vermiyor.
Bu filtre kapatılabiliyor. Yakalamayı karışık modda yaparken kart eşleşmeyen frame’leri 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 frame 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ı frame’i gönderen cihazın MAC adresini taşıyor. Bu alan her zaman tek bir interface’i gösteren adres olmak zorunda, oraya broadcast adresi yazılamıyor. Ethernet MAC protokolü kaynak adresi hiçbir şekilde yorumlamıyor. Alan üst katman yazılımı, arıza takibi ve switch’ler için duruyor. Switch, kaynak adresleri kendi portlarıyla eşleyen tabloyu bu alandan kuruyor; switch’in her portunun da fabrikada atanmış kendi adresi var.
Adreslerden sonra gelen tür alanı içerideki üst katman protokolünü bildiriyor. Frame’in sonundaki CRC ise bozulmayı sezmek için duruyor.
DerinleşmeAynı iki bayt hem "uzunluk" hem "tür" olabilir mi?
Ethernet’in iki ayrı frame biçimi var ve ikisi bugün aynı kabloda yan yana yaşıyor.
Ethernet II (piyasadaki adıyla DIX; onu tanımlayan Digital, Intel ve Xerox’un baş harfleri) 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ğer | alıcı ne anlıyor |
|---|---|
| 1.500 ve altı | bu bir uzunluk → frame IEEE 802.3 |
| 1.536 ve üstü | bu bir tür → frame 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 erişim noktası (SAP) 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 frame Ethernet II. 802.3 biçimi ölmedi ama daraldı: switch’ler 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:
- Ö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.
- Hedef adres okunuyor. Tele ilk giren adres alanı hedef adres. Kart onu kendi fabrika adresiyle karşılaştırıyor; broadcast adresi de eşleşme sayılıyor.
- Eşleşme yoksa bırakıyor. Frame'in geri kalanı okunmuyor ve işletim sistemi hiç rahatsız edilmiyor. Kartın her frame'i en azından bu alana kadar okumasının sebebi bu.
- Kaynak adres geçiyor. Ethernet MAC protokolü bu alanı yorumlamıyor. Switch port tablosunu buradan kuruyor; arıza takibi de frame'i kimin gönderdiğini buradan okuyor.
- Yük yukarı çıkıyor. Tür alanı içerideki protokolü söylüyor, yük network layer'ı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 interface’in MAC adresi, birse bir gruba gönderim. Fabrikada atanan adresin teknik adı bu yüzden unicast 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? Oktetler soldan sağa gönderiliyor ama bir oktetin 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 oktet : 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: unicast · 1: multicastKural bu yüzden tek bir haneye bakarak okunabiliyor:
| ikinci hane | adres ne anlama geliyor |
|---|---|
| tek sayı: 1, 3, 5, 7, 9, B, D, F | multicast |
| 2, 6, A, E | yerel yönetilen unicast |
| 0, 4, 8, C | fabrikadan gelen küresel unicast |
Yerel yönetilen unicast için 16 haneden yalnızca 4’ü uygun, yani %25.
Şu adres üstünde yürüyelim: 06-4B-7C-D2-05-9A. İlk oktet 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 unicast; 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 broadcast 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. Broadcast adresine gönderilen bir frame’i yerel ağdaki her istasyon alıyor ve işlemek zorunda kalıyor. Bedeli herkese dağılıyor.
Broadcast adresi aslında multicast’in ö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 multicast. Multicast adresi tek bir frame’in bir istasyon grubu tarafından alınmasını sağlıyor. Interface, bir ya da daha fazla grup adresine gelen frame’leri alacak şekilde programlanabiliyor.
Ethernet’te broadcast adresi tek bir sabit değer. IP’deki broadcast 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?
Network layer bir gruba paket yollamak istediğinde elinde bir multicast IP adresi var, ama kart yalnızca MAC adresi tanıyor. Aradaki dönüşüm bir tablo değil, doğrudan bir hesap.
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 oktet 01, yani ilk bit bir: adres tanımı gereği multicast. Hesap hiçbir sunucuya sormadan, hiçbir tablo tutmadan yapılabiliyor.
Bir kusuru var ve bilerek kabul edilmiş. Multicast IP adresinin grup 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 frame’lerini de yukarı veriyor ve ayıklamayı işletim sistemi yapıyor. Donanım filtresinin kaçırdığını yazılım filtresi topluyor. Anlatılana göre sebep bütçeydi: 28 bitin hepsini karşılayacak on altı OUI yerine tek bir blok alınabildi ve onun da yalnızca yarısı IP multicast’e ayrıldı.
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:
- 48 bitlik adresi ortadan ikiye böl.
- Araya
FF:FEoktetlerini sok; 48 bit 64 bite çıkar. - İlk oktetteki 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 -> interface kimliği 21b:44ff:fe11:3ab7Üçüncü adım ilk bakışta keyfî görünüyor. Değil: IPv6, EUI-64’ün değiştirilmiş bir sürümünü kullanıyor ve o sürümde bitin anlamı ters çevrilmiş; 1 “küresel”, 0 “yerel” demek. Sebebi pratik: elle yazılan ::1 gibi kısa kimliklerin bu biti sıfırda kalıyor ve böylece kendiliğinden “yerel” sayılıyorlar. Aynı bit iki standartta zıt anlamlar taşıyor, dönüşüm de bunu düzeltiyor.
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. Kalıcı adres için de çoğu sistem artık MAC’i kullanmıyor; ağdan ağa değişen ama aynı ağda sabit kalan bir sayı üretiyor (RFC 7217). Makinenin kendi IPv6 adresini nasıl bulduğunu 38. bölümde anlatırken buraya geri döneceğiz.
MAC adresi yazılımla değiştirilebiliyor. Bugün kullanılan Ethernet interface’lerinin 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 interface zaten fabrikada tek bir adres alıyordu. Adres rastgeleleştirmesi 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; Android 2019’dan, iOS 2020’den beri her Wi-Fi ağına varsayılan olarak ayrı, rastgele bir adresle bağlanıyor.
Kendi kartının adını görmek istersen Windows’ta:
getmac /v /fo listKomut 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ı. Linux’ta aynı bilgi ip link çıktısındaki link/ether satırında, macOS’ta ifconfig çıktısındaki ether satırında duruyor. O 12 haneye bak ve ikinci haneyi oku: 0, 4, 8 ya da C ise elindeki ad gerçekten fabrikadan geliyor; 2, 6, A ya da E ise kart o ağa rastgele bir adla bağlanmış.
Özet
- 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 frame’i hedef adrese kadar okuyor: eşleşme ya da broadcast 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 multicast; 2, 6, A ve E yerelde verilmiş, 0, 4, 8 ve C ise küresel unicast anlamına geliyor.
- Multicast 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:FEsokup yerel yönetim bitini ters çevirir, çünkü o bitin anlamı iki standartta zıttır.
Frame’in iki adresi de yerinde: kimin gönderdiği ve kimin alacağı yazılı. Ama bu frame şimdi bakırın ya da camın içinde kilometrelerce yol alacak. Yolda tek bir bit ters dönerse bunu kim fark edecek?
24. bölüme devam et: Hata Sezme ve CRC