Ana içeriğe geç

Bölüm 52: Bitten Sinyale

10 dakikalık okumaGüncelleme:

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 8: Kabloda ve Camda (Bölüm 52-64)

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. DNS Kayıtları
  6. Önbellek, Tazelik ve Güven
  7. Port Numarası ve Soket
  8. Bağlantısız Taşıma: UDP
  9. Üç Adımlı El Sıkışma
  10. Simetrik Şifreleme
  11. Açık Anahtarlı Kriptografi
  12. TLS El Sıkışması
  13. Sertifika Zinciri
  14. HTTP Mesajının Anatomisi
  15. Durum, Çerez ve Oturum
  16. HTTP/2'den HTTP/3'e
  17. İçerik Dağıtım Ağları
  18. Diğer Uygulama Protokolleri
  19. Katmanlı Mimari
  20. Hizmet ve Protokol
  21. Encapsulation ve Başlıklar
  22. Paket Yakalama ve Çözümleme
  23. Ağ Interface Kartı
  24. Fiziksel Adresleme
  25. Hata Sezme ve CRC
  26. Adres Çözümleme: ARP
  27. Ortam Erişimi: CSMA/CD
  28. Switch'ler
  29. Ağ Topolojileri
  30. Sanal Yerel Ağlar
  31. Kablosuz Erişim: 802.11
  32. Radyo Kanalı ve Kapasite
  33. Kablosuz Ağ Güvenliği
  34. Hücresel Ağlar
  35. Spektrum ve Kuşaklar
  36. Hareketlilik ve Aktarma
  37. Adres Kiralama: DHCP
  38. Adresin Anatomisi
  39. Adres Tükenmesi ve IPv6
  40. Router Mimarisi
  41. Kuyruk Yönetimi
  42. Cihaz Yapılandırma
  43. Routing Protokolleri
  44. Kontrol Düzlemi ve SDN
  45. Ağ İzleme ve Yönetimi
  46. Alanlar Arası Routing
  47. Adres Çevirisi
  48. Ara Kutular
  49. Tünelleme ve IPsec
  50. Firewall'lar
  51. Ağ Saldırıları
  52. Operatör ve Metro Ağları
  53. Bitten Sinyale
  54. Sembol Hızı ve Kanal Kapasitesi
  55. Multiplexing Teknikleri
  56. İletim Ortamları
  57. Bakır Kablo Sonlandırma
  58. Fiber Sonlandırma
  59. Fiber Optik İletim
  60. Bakır Erişim Ağı: DSL
  61. DSL'de Hız ve Mesafe
  62. Pasif Optik Ağlar
  63. Kablo Erişim Ağları
  64. Kablo Modem ve CMTS
  65. Denizaltı Kabloları
  66. Veri Merkezi Ağları
  67. Encapsulation Çözme
  68. Güvenilir Aktarım
  69. Tıkanıklık Denetimi
  70. Trafik Çözümleme
  71. Gecikme Bütçesi
  72. Soket Programlama
  73. Eşten Eşe ve Protokol Tasarımı
  74. Uyarlanır Video Akışı
  75. Gerçek Zamanlı Ses ve Görüntü
  76. Kablosuz Sensör Ağlarının Mimarisi
  77. Sensör Ağlarında Ortam Erişimi
  78. Sensör Ağlarında Yönlendirme ve IP
  79. Zaman Eşitleme ve Konum Bulma
  80. Sensör Ağı Uygulamaları
  81. Mobil Kablosuz Sensör Ağları
  82. Son Söz

Şimdiye kadar paketi hep bir nesne gibi anlattım. Kasten basitleştirdim.

Bakırın üstünde paket diye bir şey yok. Orada yalnızca değişen bir gerilim var ya da bir ışık dalgası. Peki bir bit hangi dalga biçimine dönüşüyor?

Telde bit yok, gerilim var

Sinyal, bilgi taşıyan bir fiziksel büyüklük. Karşına üç biçimden biriyle çıkıyor: iletken üzerinde ilerleyen bir elektrik gerilimi, camın içinde yol alan ışık darbeleri, bir de havada yayılan radyo dalgası.

Paket 51. bölümde metro halkasında bir etiketle taşınıyordu; o etiket de sonunda bu üç biçimden birine iner. 31. bölümde ise frame havada bir kanal üzerinden veriliyordu; oradaki taşıyıcı elektromanyetik bir dalgadır. Işık da öyle, yalnızca frekansı çok daha yüksek. Fizik aynı, ortam farklı.

Analog sinyal iki uç arasında sonsuz sayıda ara değer alabiliyor. Sayısal sinyalde böyle bir serbestlik yok; genlik değerleri önceden belirlenmiş ve sayılı.

Physical layer bir anlaşma katmanıdır. İki taraf gerilim seviyesinde ve bit süresinde aynı kuralı paylaşmıyorsa iletim hiç başlamaz. Kablo takılı, cihazlar açık, tek bir bayt geçmiyor. Sahada canını en çok sıkacak arıza tablosu budur, çünkü bakınca her şey yolunda görünüyor. Bir ucuna 1 Gbit/s’lik, öbür ucuna 10 Gbit/s’lik modül takılmış bir fiber tam böyle davranır: ışık karşıya ulaşıyor ama iki uç farklı hat kodu konuştuğu için hiçbir şey okunmuyor. 22. bölümdeki kip uyuşmazlığı ise bu arızanın sinsi akrabası: orada bağlantı kalkıyor, hat ancak yük binince bozuluyor.

En sade anlaşmanın adı NRZ (non-return-to-zero): sinyal bir bitin ortasında sıfıra dönmüyor, bit boyunca aynı seviyede kalıyor. Bakırda dijital 1’i tipik olarak +5 V ya da +3,3 V ile gösteriyorsun, dijital 0’ı ise 0 V ile. Bilgi doğrudan seviyenin kendisinde durduğu için bu biçime NRZ-L (level) deniyor. Optik ortamda aynı kural ışığa çevrilir: 1 parlak ışık, 0 çok daha sönük ışıktır. Lazeri her sıfırda tamamen söndürüp yeniden yakmak zaman aldığı için sıfır tam karanlık değildir. Işık kaynağının kendisi de bir tavan koyar: LED’ler yaklaşık 600 MHz’in üstünde açılıp kapanamıyor ve daha hızlı bağlantılar lazere geçiyor. NRZ-L bugün de asenkron RS-232 haberleşmesinde kullanılıyor.

Bir bitin süresi veri hızının tersidir. 1 Gbit/s’te bir bit 1 nanosaniye sürer; 10 Gbit/s’te aynı bit 100 pikosaniyeye iner. Yüz pikosaniye, ışığın cam içinde iki santimetre kadar yol aldığı süre. Alıcı her kararını o pencerenin içinde vermek zorunda.

Bit tek telden mi gidiyor?

Şu ana kadar tek bir telden söz ettim ve bitleri arka arkaya dizdim. Akla gelen ilk itiraz da bu: sekiz tel çekip sekiz biti aynı anda göndersen sekiz kat hızlı olmaz mıydı?

Uzun süre öyle düşünüldü. Yazıcı kablosu, sabit disk kablosu ve bilgisayarın iç veri yolu paralel çalışıyordu; yan yana duran tellerin her biri bir bit taşıyordu. Bugün o kabloların hiçbiri kalmadı. Ağ tarafında paralel arayüz hep istisna oldu: süper bilgisayarları bağlamak için 1980’lerin sonunda tasarlanan HIPPI, 50 çiftli kalın kablosuyla en fazla 25 metreye gidebiliyordu.

Paralel hattı yıkan şey hızın kendisi oldu. Yan yana çekilen teller birbirinin tıpatıp aynısı değil: biri birkaç santimetre uzun, ötekinin yalıtımı biraz farklı, üçüncüsü kart üstünde daha sıcak bir bölgeden geçiyor. Aynı anda yola çıkan sekiz bit karşıya aynı anda varmıyor. Aradaki farkın adı saat kayması (clock skew). Sinyal bakırda nanosaniyede yaklaşık 20 santimetre yol alıyor; uzunluk farkı, sürücü devrelerinin kendi farklarıyla birleşince kayma yüzlerce pikosaniyeyi, uzun kablolarda nanosaniyeleri buluyor.

Hesabı kendin yapabilirsin. Kayma bit süresinden küçük kaldığı sürece kimse fark etmiyor. 1 Mbit/s’te bir bit bir mikrosaniye sürüyor ve birkaç nanosaniyelik fark görünmüyor bile. 1 Gbit/s’te aynı bit bir nanosaniyeye iniyor; artık kaymanın kendisi bitin boyundan büyük ve alıcı hangi bitin hangi kelimeye ait olduğunu söyleyemiyor. Hız arttıkça bit süresi kısalıyor ama tellerin fiziksel farkı olduğu yerde duruyor.

İkinci fatura komşuluktan geliyor. Yan yana duran teller birbirine sinyal indüklüyor ve bu girişim frekansla birlikte büyüyor; adını bir sonraki bölümde koyacağım.

Çözüm tel sayısını artırmak değil, azaltmak oldu. Tek bir çift üstünde bitleri sıraya dizip sembol hızını yükseltmek, sekiz teli senkron tutmaya çalışmaktan hem ucuza geldi hem daha güvenilir çıktı. Sektörün tamamı aynı yöne yürüdü.

eski, paralelyerini alan, seri
yazıcı portuUSB
PATA disk kablosuSATA
PCI veri yoluPCIe
paralel SCSISAS

Bugün paralel görünen hatlar da aslında seri. PCIe x16 on altı şeridi, 100 Gbit/s Ethernet’in yaygın biçimleri dört şeridi birden kullanıyor, ama her biri kendi başına seri bir hat. Veriyle birlikte giden bir saat teli yok; her şerit örnekleme saatini kendi sinyalinden çıkarıyor. Bunlara tel yerine şerit (lane) deniyor. Şeritler arasında kalan küçük kaymayı alıcı, akışa aralıklarla serpiştirilmiş hizalama işaretlerine bakarak tamponla düzeltiyor. Paralelden farkı şu: kayma tek tek bitleri değil, bağımsız akan şeritleri ilgilendiriyor ve düzeltmesi çok daha kolay.

Alıcı sembol sınırını nereden bilir?

Şu ana kadar alıcının bitleri saydığını söyledim ve nasıl saydığını hiç sormadım. Sorunun ne kadar ciddi olduğunu tek bir hesapla göreceksin.

Alıcının kendi saati var ve o saat göndericininkiyle tıpatıp aynı hızda çalışmıyor; aradaki farka saat sapması (clock drift) deniyor. Ethernet standardı her iki uçtaki kristale milyonda 100’e kadar sapma izni veriyor. İki uç ters yönlere saparsa fark milyonda 200’ü buluyor. Kulağa önemsiz geliyor. Şimdi çarp: milyonda 200, beş bin bitte tam bir bitlik kayma demek. 1.500 baytlık tek bir frame 12.000 bit tutuyor. Alıcı saatini hiç tazelemeseydi frame’in yarısına varmadan bir bit kaymış olurdu ve o noktadan sonra okuduğu her şey yanlış olurdu.

İkinci sorun elektriksel. Yolun üstünde trafo ve kondansatör var; ikisi de sabit gerilimi geçirmiyor, yalnızca değişimi geçiriyor. Hat uzun bir sıfır dizisi boyunca aynı seviyede kalırsa alıcının “yüksekle alçağın ortası neresi” kararı yavaşça sürükleniyor. Adı baseline wander (taban kayması) ve sonucu ağır: bir süre sonra alıcı yüksekle alçağı ayırt edemiyor.

İki sorunun tek bir ortak çaresi var. Sinyalin içinde düzenli geçişler bulunmasını garanti et; geçiş hem saati tazeliyor hem tabanı yerinde tutuyor. Aşağıdaki şemaların hepsi bu tek işi farklı bedellerle yapıyor.

Saati ayrı bir telle de taşıyabilirsin, ama her hat için ikinci bir tel çekmek pahalıya patlar. Alternatifi saati sinyalin kendisine gömmek. Bunun çalışması için gelen sinyalde yeterli seviye geçişi bulunması gerekiyor; alıcı sembol sınırlarını ancak o geçişlerden çıkarabiliyor.

NRZI farksal bir kodlama: bilgiyi mutlak seviyede değil, aralık başındaki geçişin varlığında tutuyor. Kutuplamayı ters bağlasan bile anlam bozulmuyor. Gürültü altında bir geçişi saptamak, bir değeri eşikle karşılaştırmaktan daha güvenilir olabilir. Tek başına geçiş garantisi ise vermiyor: geçiş yalnızca bir değerde geliyor ve öteki değerin uzun bir dizisi hattı yine susturuyor. USB kuralı tersine çevirip geçişi 0’a koyuyor ve art arda altı 1’den sonra araya zorla bir 0 sıkıştırıyor (bit stuffing); böylece hat en geç yedi bitte bir kıpırdıyor.

Bipolar-AMI başka bir yol seçiyor: sıfır için hiçbir şey göndermiyor, bir için sırayla pozitif ve negatif darbe yolluyor. Ardışık birler kutup değiştirdiği için doğru akım bileşeni kendiliğinden sıfırlanıyor. Yan ürünü de işe yarıyor: kutup sırasının bozulması (bipolar violation) tek başına bir hata işareti sayılıyor, yani hat kodu basit bir hata sezme mekanizmasını bedavaya taşıyor.

AMI’nin de bir açığı var: uzun bir sıfır dizisinde hat susuyor ve saat yine kayboluyor. ABD’nin T1 hatları bunu B8ZS ile, Avrupa’nın ve Türkiye’nin E1 hatları HDB3 ile çözüyor. Çözüm kurnaz: sekiz ya da dört sıfırlık bir dizi, kutup kuralını bilerek çiğneyen bir desenle değiştiriliyor. Alıcı bu kasıtlı ihlali tanıyor ve yerine sıfırları koyuyor; hata işareti, saati kurtaran bir koda dönüşüyor.

Manchester kodlaması bu işi daha ileri götürüyor: her bit aralığının tam ortasına zorunlu bir geçiş koyuyor. Sıfırda yüksekten alçağa iniyorsun, birde alçaktan yükseğe çıkıyorsun. Dalga biçimi aslında saat sinyali ile verinin XOR’udur.

Farksal Manchester’da aralık ortasındaki geçiş her zaman durur. Bit değerini belirleyen şey aralık başındaki geçişin varlığıdır. Token Ring bu şemayı 4 ve 16 Mbit/s hızlarında kullandı. İki fazlı kodların ortak özelliği şu: her bit süresinde en az bir geçiş garanti ediliyor. Bu yüzden onlara kendi kendine saatleyen kodlar deniyor.

Bedeli var. Manchester senkronizasyonu kolaylaştırır ama sembol hızını bit hızının iki katına çıkarır ve gereken bant genişliğini aynı oranda büyütür. Klasik 10 Mbit/s Ethernet hattı bu yüzden 20 Mbaud sinyal akıtıyordu. Yani kablodan istediğin her bit için iki sembol ödüyordun ve yük %100’e çıkıyordu.

Beşini yan yana koyunca ödünleşim tek bakışta görünüyor:

kodgeçiş garantisiDC bileşenisembol/bitnerede
NRZyokvar1RS-232, kısa hatlar
NRZIyalnızca bir değerde (USB’de 0’da)var1USB, 4B/5B’nin altında
Bipolar-AMIyalnızca 1’lerdeyok1T1 ve E1 hatları
Manchesterher bitteyok210 Mbit/s Ethernet
Farksal Manchesterher bitteyok2Token Ring

Üçüncü sütun neden önemli, artık biliyorsun: DC bileşeni olan bir kod baseline wander’a açık kalıyor. Dördüncü sütun ise faturayı gösteriyor. Geçiş garantisi bedava değil; her bitte geçiş isteyen kod, aynı veri için iki kat sembol yakıyor.

Aynı bit dizisinin farklı kodlamalarda nasıl göründüğünü karşılaştıralım:

Aynı bit dizisi, üç hat kodlaması
Aynı sekiz bit, üç dalga biçimibit dizisi10110010NRZ-LNRZIManchesterGeçiş sayısı: NRZ-L 5 · NRZI 4 · Manchester 10Manchester her bit süresinde en az bir geçiş garanti eder; bedeli iki kat sembol hızıdır.
Sekiz bitlik dizi. Üç kulvar da aynı diziyi taşıyor: 1 0 1 1 0 0 1 0. Kesikli dikey çizgiler bit sınırları; iki çizgi arası bir bit süresi kadar.
  1. Sekiz bitlik dizi. Üç kulvar da aynı diziyi taşıyor: 1 0 1 1 0 0 1 0. Kesikli dikey çizgiler bit sınırları; iki çizgi arası bir bit süresi kadar.
  2. NRZ-L: seviye bilgidir. Bir yüksek gerilim, sıfır alçak gerilim. Ardışık aynı bitlerde hiç geçiş yok; uzun bir dizide alıcı sembol sınırını kaybedebilir.
  3. NRZI: bilgi geçişte. Seviyenin kendisi anlam taşımıyor. Aralık başında geçiş varsa bir, yoksa sıfır; kutuplama ters bağlansa da okunan dizi değişmiyor. Soldaki kısa çizgi önceki seviye: ilk bitin geçişi onunla görünüyor.
  4. Manchester: orta geçiş şart. Her bit aralığının ortasında zorunlu bir geçiş var: sıfır yüksekten alçağa, bir alçaktan yükseğe. Dalga, saat ile verinin XOR'u.
  5. Faturayı baud ödüyor. Bu dizide NRZ-L beş, NRZI dört, Manchester on geçişle iniyor. Garanti edilen sekiz orta geçişin bedeli iki kat sembol hızı: 10 Mbit/s hat 20 Mbaud akıtır.

Üçüncü cevap: baştan anlaşmak

Saati gömmek tek çıkar yol değil. En eski cevap çok daha sade: iki uç hızda baştan anlaşsın, alıcı da her karakterde yeniden hizalansın.

Hat boştayken sabit bir seviyede duruyor. Gönderici konuşmaya başlayacağı zaman önce o seviyeyi tersine çeviriyor ve tek bitlik bu işarete start biti deniyor. Alıcı o kenarı görünce kendi saatini sıfırlıyor, sonra bit sürelerinin ortasını sayarak veriyi okuyor. Karakterin sonunda hat boş seviyeye geri dönüyor: stop biti. Sekiz veri biti, eşlik biti (parity) yok, bir stop biti: sahada 8N1 diye anılan ayar bu. Router konsoluna bağlanırken girdiğin 9600 8N1 de bu anlaşmanın kendisi; ilk sayı saniyedeki bit.

Anlaşmanın bedeli tolerans. Alıcının saati göndericininkinden yüzde birkaç saparsa karakterin sonuna varıldığında hizalama kaymış oluyor ve stop biti beklenen yerde bulunamıyor; bu duruma çerçeveleme hatası (framing error) deniyor. Her karakterde yeniden hizalandığı için hasar o karakterle sınırlı kalıyor, hattın tamamı bozulmuyor. Gömülü saatin bedeli bant genişliğiydi; burada bedel senkron kalabildiğin süre. Bir bedel daha var: her sekiz veri bitine iki çerçeve biti eklendiği için yük %25.

RS-232 bu şemanın en tanıdık uygulaması ve 1960’tan beri ayakta. İlginç yanı gerilimi: mantıksal 1’i eksi 3 ile eksi 15 volt arasında, 0’ı ise artı 3 ile artı 15 volt arasında gösteriyor. Yani hem çift kutuplu hem ters mantıklı. Mikrodenetleyicilerin 0 V ile 3,3 ya da 5 V arasındaki mantık seviyelerine, eski adıyla TTL seviyelerine (IP’deki TTL ile ilgisi yok) doğrudan bağlanamıyor ve arada bir seviye çevirici istiyor. Geniş gerilim aralığı bir kusur değil, gürültüye karşı bilerek alınmış bir marj.

Peki bu kadar eski bir şey ağda neden hâlâ duruyor? Çünkü hiçbir şeye ihtiyacı yok. Sürücü yüklemiyorsun, adres almıyorsun, karşı tarafla hız pazarlığı yapmıyorsun, bir protokol yığını ayağa kalkmasını beklemiyorsun. Ağ çöktüğünde, cihaz açılışta takıldığında ya da yapılandırma bozulduğunda çalışan tek yol o kalıyor. Router ile switch’lerin konsol portunun hâlâ seri olmasının sebebi budur; 41. bölümde o porttan cihaza bağlanmıştık.

Özet

  • Sinyal fiziksel bir büyüklüktür: bilgi bir gerilimde, bir ışık darbesinde ya da bir radyo dalgasında taşınır ve bit diye bir nesne telde bulunmaz.
  • Seri hat paraleli hızla yendi: yan yana teller aynı anda varmıyor ve saat kayması bit süresinden büyüdüğü anda paralel hat okunamaz oluyor; çare tel sayısını azaltmak oldu.
  • Saat iki ayrı yoldan kaybediliyor: milyonda 200’lük saat sapması beş bin bitte bir bit kaydırıyor, uzun sabit diziler de baseline wander ile yüksekle alçağın sınırını sürüklüyor; hat kodlarının hepsi bu iki soruna karşı geçiş üretiyor.
  • Hat kodlaması bitten dalga biçimine giden eşlemedir: aynı dizi NRZ-L’de başka, Manchester’da başka görünür ve seçim saatle bant genişliği arasında yapılır.
  • İki fazlı kodlar saati sinyalin içine gömer: her bit süresindeki zorunlu geçiş senkronizasyonu bedavaya verir, faturayı iki kat sembol hızıyla keser.
  • Üçüncü yol baştan anlaşmaktır: asenkron seri hızda önceden uzlaşıp her karakteri start ve stop bitiyle çerçeveliyor; RS-232 hiçbir hazırlık istemediği için konsol portunda hâlâ ayakta.

Hat kodları her sembole tek bir bit koydu ve saati kurtarmanın faturasını geçişlerle ödedi. Peki bir sembol aynı anda birden çok bit taşıyabilir mi, taşıyabiliyorsa bunun bir tavanı var mı?

53. bölüme devam et: Sembol Hızı ve Kanal Kapasitesi