Hata Kontrolü Çerçevenin başlangıcını ve sonunu belirledikten sonra yapılacak işlem çerçevenin karşı tarafa doğru ulaşıp ulaşmadığını anlamaktır. Alıcının çerçevenin hatalı geldiğini anlaması için kullanılan hata kodlamanın temel iki yöntemi bulunmaktadır; Hata Sezimi Hata Düzeltme (Forward Error Correction, FEC) Hata seziminde sadece çerçevede hata bulunup bulunmadığı araştırılır, hata varsa geriye NACK gönderilip çerçevenin tekrar iletimi istenilir. Bu yöntem, koaksiyel kablo ve fiber gibi hata oranının çok düşük ve iletişim hızının çok yüksek olduğu koşullarda kullanılır. Hata düzeltmede ise çerçeveye eklenen çok sayıdaki eşlik bitlerinin ek-lenmesiyle (redundancy, artıklık) yönteme belirli sayıdaki hataları düzeltme yeteneği de eklenir. Bu şekilde NACK gönderilmeden önce hatalı çerçeveyi tamir etme şansı doğar. Bu yöntem ise, telsiz iletişim hatları gibi hata oranı-nın yüksek, iletişim hızının ise göreceli düşük olduğu ortamlarda kullanılır.
Kodkelimesi ismi verilen bir hata düzeltme kodlanmış çerçevenin en ge-nel yapısında n-bit bulunur, bunun m-biti veri (bunun içinde çervenin başlığı ve veri yükü bulunur), r-biti ise artık bitlerden oluşur (n=m+r). Dolayısıyla toplam 2 n tane kodkelimesi bulunur, ancak bunlardan sadece 2 m tanesi veri bitlerinin gönderimi için kullanılır. (2 n -2 m kodkelimesine karşı-lık gelen veri dizisi bulunmadığı için bunlar iletilmezler.) Hamming uzaklığı iki bit dizisi arasındaki farklı bitlerin toplam sayısı-dır. Örneğin aşağıdaki bit dizileri arasındaki uzaklık 3-bittir. 10001001 10110001 00111000 Gönderilen kodkelimesi 2 m kelimeden birisiyken, kanaldaki oluşabilecek hatalardan ötürü alıcıya bütün 2 n kelimeden birisi ulaşabilir. Alıcıda yapılan işlem, alınan kodkelimesine en yakın 2 m kodkelimesinden birisini seçmek ve bunun gönderilmiş olduğuna karar vermektir. Burada önemli parametre 2 m kodkelimesi arasındaki Hamming uzaklığı-dır. Kanalda oluşabilecek d-bit hatayı sezmek için bütün kodkelimeri arasındaki uzaklık d+1 olmalıdır (r=d+1). d-bit hatayı düzeltmek için ise bu uzaklık 2d+1 olmalıdır (r=2d+1).
Aşağıda r=3 bit artıklık eklenmiş (2d+1=3 -> 1 bit hatası düzeltebilen, d+1=3, 2 bit hata sezebilen) bir Hamming kodu verilmektedir.
Hata Sezimi Sağlama toplamı en basit şekliyle çerçeve içindeki bitleri belirli sayıda gruplayıp her grubun ikili toplamını almakla gerçekleştirilir. Örneğin çerçeveye eşlik (parity) biti eklemek bu yöntemin bir örneğidir. Çift(Tek) Eşlik yönteminde, çerçeveye eklenen eşlik bitinin değeri, bütün çerçevede bulunan 1 bitlerinin toplam sayısının çift(tek) olmasını sağlayacak şekilde ayarlanır. çift eşlik: 0011010100 tek eşlik:0011010101 Daha karmaşık sağlama toplamı yöntemleri bit dizisinin bir polinoma bölünmesiyle gerçekleştirilir. Sonraki yansıda g(x)=x 4 +x+1 polinomu kullanılarak bu işlemin bir örneği verilmiştir. Eğer çerçevenin sonuna eklenen checksum alıcıda hesaplananla aynı değilse çerçevenin hatalı alındığı kararı verilir ve protokol gerektiriyorsa vericiye bir NACK gönderilir. Döngüsel artıklık kodlaması (cyclic redundancy check, CRC) de bir checksum yöntemidir.
Akış Kontrolü - Temel Veri Bağlantı Katmanı Protokolleri A bilgisayarındaki ağ katmanının B bilgisayarındaki ağ katmanına uzun bir mesaj göndermek istediğini varsayalım. Ağ katmanı bu mesajın başına kendi katman protokolü gereği bir de başlık ekler. Veri bağlantı katmanı için gönderilecek mesaj ve ağ katmanı başlığı arasında bir fark yoktur ve her ikisini de göndermesi gereken bilgi olarak algılar. Veri bağlantı katmanı, ağ katmanından gelen mesajı (ağ katmanı başlığı ile birlikte) gerekirse küçük parçalara böler ve bir başlık (çeşitli kontrol bilgilerini içeren) ve artbilgi (checksum içeren) ekleyerek bir ağ katmanı çerçevesi oluşturur, ve bu çerçeveyi iletilmek için fiziksel katmana gönderir. Veri bağlantı katmanının görevini yerine getirebilmesi için gerekli süreçler sonraki yansıda özetlenmiştir. Katman bir işlem yapmadığı zamanlar wait_for_event sürecini çalıştırarak bir olayın (event) gelişmesini bekler. Bu en basit haliyle frame_arrival (çerçeve geldi) olabilir. timeout, cksum_err, vs. gibi diğer durumlar yeri geldiğinde incelenecektir. Oluşan olay doğrultusunda diğer süreçler çalıştırılır.
Sınırlamasız Simplex Protokolu Bir veri bağlantı protokolünün en basit halidir. Kanalda hata oluşmamak-ta, süreçlerin çalışma süresi ihmal edilmekte ve bütün katmanların (özellikle ağ katmanı) her zaman veri iletişimine hazır olduğu varsayılmaktadır. Veri akışı tek yönlü, örneğin A dan B ye yapılmaktadır. Önceki sayfadaki verilen C header dosyasındaki tanımları kullanan iki süreç bulunmaktadır, sender1 ve receiver1. Çerçeveler kanaldan bozulmadan ve sırayla gidebildikleri için çerçeve numarası verilmez. Hata oluşacak bir koşul olmadığı için de meydana gelebilecek tek event, frame_arrival dır. Veri tek yönlü aktığı için (A->B) iletişim kanalı da tek yönlüdür (simplex).
Simplex Dur-ve-Bekle Protokolü Bu protokolde gerçekle en bağdaşmayan koşul olan ağ katmanının işlerini sonsuz hızla yaptığı varsayımı atılmaktadır. Đletişim kanalı hala hatasız varsayılmaktadır. Gönderici çerçeveyi gönderdikten sonra alıcıdaki bütün süreçlerin sonlandığını belirten bir ACK alana kadar bekler. Ancak bu ACK geldikten sonra bir sonraki çerçeve gönderilebilir. Bu şekilde hızlı göndericinin yavaş alıcıyı çerçeveye boğması engellenmiş olur. Đletişim iki yönlü olduğu fakat aynı anda tek yönde iletişim yapıldığ için kanalın half-duplex olması yeterlidir.
Gürültülü bir kanal için Simplex Protokol Bu protokolde kanalın hatasız olma varsayımı da bırakılmaktadır. Çerçevenin hatalı olması örneğin checksum ın tutmamasıyla anlaşılabilir. Burada bir çözüm göndericinin her çerçeve için alıcıdan bir ACK bekle-mesi, eğer belirlenen bir süre içinde (timeout) ACK gelmezse alıcının çerçe-veyi yanlış aldığı veya hiç alamadığına karar verip aynı çerçeveyi tekrar gön-dermesi olabilir. Ancak bu protokol alıcının ACK inin yolda kaybolması du-rumda alıcı ağ katmanına aynı çerçeveyi iki kere ileteceği için çalışmaz. Bu durumda çerçevelere ve ACK lere bir sıra numarası eklemek anlaş-mazlığı çözebilir. Fakat her çerçeveye ayrı sıra numarası atamak çerçeve başlığının gereksiz büyümesine neden olur. Đkinci çerçevenin gönderilmesinin birinciye ait ACK e bağlı olduğu dü-şünülürse, 1-bitlik sıra numarasının yeterli olduğu görülür. Bu mantıkla yazılmış bir protokol sonraki yansıda verilmektedir. Vericinin sıradaki çerçeveyi göndermek için beklediği protokollere PAR (Positive Acknowledgement with Retransmission) veya ARQ (Automatic Repeat request) ismi verilir. Buradaki protokolün önceki bölümdekiyle farkı alıcı ve vericinin bir sıra numarası tutmasıdır, next_frame_to_send ve frame_expected.
Bir çerçeve gönderdikten sonra gönderici bir zamanlayıcı başlatır ve alıcıdan ACK beklemeye başlar. Bu durumda üç olasılık bulunur Sağlam ACK gelir, bozulmuş ACK gelir, timeout olur. Geçerli bir ACK gelmişse gönderici sonraki çerçeveyi gönderir ve sıra numarasını bir ilerletir. Bozuk ACK gelmişse ve timeout olmuşsa, gönderici son gönderdiğini tekrar gönderir. Alıcı gelen çerçevenin sıra numarasına bakar, eğer beklediği sıraysa çerçeveyi kabul eder ve o sıraya karşılık gelen ACK i geri yollar. Aksi takdirde, gelen çerçeveyi siler ve geriye önceki çerçeveyi beklediğini bildirir ACK yollar.
Kayan Pencere Protokolleri Şimdiye kadarki protokollerde veri iletişimi tek yönde yapılmaktaydı. Oysa çoğu durumda aynı anda her iki yönde de iletişim yapılmak istenebilir. Bu durumda tek başına veri ve ACK çerçevelerini göndermek kaynakların verimsiz kullanımına neden olur. Bunun yerine, ACK ler veri çerçevelerine bindirilerek (piggyback) gönderilirse zaten kısa olan ACK bilgisi için (birkaç bit) ayrıca başlık, checksum vs. kullanmak zorunda kalınmaz. Buradaki sorun ACK i bindirmek için bir veri çerçevesinin hazır hale gelmesini beklemektir. Bu sürede gönderici o ACK için timeout olabilir. Bunun çözümü, ACK göndermeden önce belirli bir süre beklenip, eğer veri çerçevesi oluşmadıysa sadece ACK çerçevesi göndermek olabilir. Şimdi anlatılacak olan üç kayan pencere protokolü belirli bir sayıda (n-bit) sıra numarası kullanmaktadır. Đki pencere bulunmaktadır; gönderici penceresi göndericinin tuttuğu sıra numaralarını ve alıcı penceresi ise alıcının beklediği sıra numarası penceresini içermektedir. Đki pencerenin sınırları ve boyutları aynı olmak zorunda değildir. Hatta boyutlarının sabit olması da gerekmez.
Göndericinin penceresi henüz gönderilmiş veya gönderilebilecek fakat ACK alınmamış çerçeve sıra numaralarını tutar. Ağ katmanında gelen pakete sıradaki mümkün en yüksek sayı atanır ve pencerenin üst sınırı bir arttırılır. Bir ACK geldiğinde alt sınır bir arttırılır. Bu şekilde pencere gönderilmiş ama ACK lenmemiş sıra numaralarını tutar. ACK almamış fakat pencerede bulunan bütün çerçeveler tekrar gönderilme ihtimaline karşı hafızada tutulmaya devam eder.
Alıcı penceresi kabul edebileceği, beklediği sıra numaralarını içerir. Bu sınırlar dışında gelen bütün çerçeveler yokedilir. Pencerenin alt sınırına eşit sıra numaralı bir çerçeve geldiğinde ağ katmanına iletilir, o numaraya ait bir ACK üretilir ve pencere bir döndürülür. Göndericinin penceresinin boyutları değişebilirken, alıcının ki hep aynı boyuttadır. Alıcının pencere boyutunun 1 olması, çerçeveleri sıralı beklediği ve kabul edebileceği anlamına gelir.
Bir-Bit Kayan Pencere Protokolü Her iki bilgisayarda da sonraki yansıda verilen benzer protokoller işlemektedir. Yalnızca ilk göndermeyi yapan bilgisayarda döngü dışında bir defaya mahsus bir veri çerçevesi gönderilir. Next_frame_to_send ve frame_expected değişkenleri 0 veya 1 değerini alabilir. Alıcı gelen çerçevenin beklenen olup olmadığını kontrol eder, eğer doğruysa ağ katmanına gönderir ve gerekli ACK i üretir ve pencereyi bir kaydırır. Değilse çerçeveyi yok eder, beklediği sıra numarası aynı kalır. Göndericiye ulaşan ACK de alıcının sağlam aldığı son çerçevenin numarası bulunur. Eğer bu numara göndericinin pencere numarasıyla tutuyorsa pencere alt ve üst sınırını bir arttırır, sonraki çerçeveyi gönderir. Eğer ACK ve pencere tutmuyorsa son gönderdiği çerçeveyi tekrar gönderir. Bu protokolün normal şartlar altında çalışması ve her iki bilgisayarında aynı anda ilk paketi göndermesi durumundaki çalışma iki sonraki yansıda verilmektedir.
* çerçevenin kabul edilip ağ katmanına gönderilmesini göstermektedir. Kullanılan notasyon (sıra, ack, paket sayısı) dır.
N-geri Git Protokolü Önceki protokolde paketin gönderilip, alıcıda işlenip, ACK in geri gelme süresinin çok hızlı olduğu varsayılmaktadır. Eğer kanalda ciddi miktarda gecikme oluyorsa bu protokol ile kanalın kullanım verimliliği çok düşecektir. Örneğin 50kbps hızında 500ms toplam gecikme süresine sahip bir uydu kanalını ele alalım. 1000 bitlik bir çerçeve gönderilecek olsun. Gönderici çerçeveyi t=0 da göndermeye başlar, t=20ms de çerçevenin hepsi göndericiden çıkmış olur, Ancak t=270ms de çerçeve tümüyle alıcıya ulaşır, En iyi durumda t=520ms de ACK göndericiye ulaşabilir. (Alıcı ve vericideki işlem gecikmesi katılmıyor) Dolayısıyla önceki algoritmada 20ms lik bir çerçeve için kanal 520ms meşgul edilmektedir. Burada verimlilik 20/520=%4 tür. Uzun iletişim süresi, kısa çerçeve süresi ve yüksek veri hızı birleşimi önceki protokolde büyük verimlilik problemleri doğurmaktadır. Kanal bantgenişliği (kapasitesi) b bps, çerçeve boyutu l bit, ve gidiş-dönüş iletişim süresi R sn olursa bir çerçeve gönderimi için gerekli süre l/b sn. olacaktır. ACK çerçevenin gönderilmesinden R sn sonra gelecektir. Dur-ve-bekle yönteminde kanal l/b sn meşgul, R sn boş olacaktır, dolayısıyla verim hat kullanım oranı=l/(l+br) olacaktır. Eğer l<br ise verim %50 den düşük olacaktır.
Bu sorunu çözmek için, her çerçeve sonunda ACK beklenme koşulunu kaldıralım. Gönderici çerçeveleri peşpeşe kanal verdikten sonra ancak 20*26=520 ms sonra ilk ACK i alacaktır. Dolayısıyla, çerçeveyi göndermek ile karşılık gelen ACK i almak arasında 25-26 çerçeve süresi fark buluna-caktır. Bu yönteme pipelining (boru-hatlama) ismi verilir. Hata oluşan bir kanalda pipelining bir takım sorunlarla karşılaşır. Eğer bir çerçeve dizisinin ortasında bir hata oluşursa, daha NACK gönderilmeden alıcıya takip eden çok sayıda çerçeve ulaşacaktır. Bu hatayla başetmenin inceleyeceğimiz iki yöntemi vardır 1. N-geri git, ve 2. Seçici tekrar N-geri gitte hatalı çerçeveden sonra gelen çerçeveler doğru olsalar bile yokedilirler ve ACK gönderilmez. Gönderici, bu gelmeyen ACK ler için son aldığı ACK sıra numarasına bakar ve ACK almadığı çerçeveden iletişime sırayla tekrar başlar. Diğer yöntem ise Seçici tekrar dır. Burada alıcı hatalı gelen pakete karşılık sıra numarasını belirtir bir NACK yollar. Gönderici bu NACK i aldıktan sonra gönderdiği çerçeve dizisini böler arada hatalı çerçeveyi tekrar gönderir ve diziye kaldığı yerden devam eder. Đki yöntem de sonraki yansı da örneklerle anlatılmıştır.
Tek-bit, N-geri git ve Seçici tekrar kayan pencere protokollerinden görüldüğü gibi kanal durumuna, uygulamanın karmaşıklığına ve kaynak kullanımına göre protokoller büyük farklılıklar göstermektedir. Dolayısıyla, protokol seçiminde şartlar gözönüne alınmalıdır. Ancak bütün protokollerin amacı, bir çerçeve dizisini karşıdaki bilgisayarın ağ katmanına hatadan arınmış ve sıralı bir şekilde iletmektir. N-geri git ve Seçici tekrar kayan pencere protokollerinin örnek programları sonraki yansılarda verilmektedir.
Örnek Veri Bağlantı Katmanı Protokolleri HDLC- High Level Data Link Control Đlk olarak IBM in yarattığı SDLC (Synchronous Data Link Kontrol) protokolünde türeyen ANSI tarafında değiştirilip ADCCP ve ISO tarafından HDLC, daha sonra da CCITT tarafından değiştirilip LAP (Link Access Procedure) olan bir protokol grubudur. Daha sonra yine CCITT tarafından LAPB türetilmiştir. Bütün bu protokoller bit tabanlıdır ve bit doldurma tekniklerini kullanmaktadırlar. Kullanılan çerçeve yapısı aşağıdaki gibidir Address alanı alıcı terminalini belirler. Control alanı sıra numarası, alındı (ACK), ve diğer kontrol bilgisini içerir, Data alanı herhangi bir uzunlukta veriyi taşıyan kısımdır, yine uzunluğun çok fazla olması çerçeveyi hatalara açık duruma getirir, Checksum kısmı CRC bilgisini içerir.
Çerçevenin başında ve sonunda iki bayrak bit dizisi (01111110) bulunur. Bayraklar hariç bir çerçeve en az 32 bit uzunluğundadır. Üç tür çerçeve bulunmaktadır; Information, supervisory ve unnumbered. Her çerçeve ayrı kontol alanına sahiptir: 3-bit kayan pencere protokolü uygulanır. Dolayısıyla aynı anda ACK lenmemiş yedi çerçeve olabilir. Seq alanı sıra numarasını içerir. Next alanı piggyback alındı alanıdır. Beklenilen sonraki çerçevenin sırasını içerir.
Đnternetteki Veri Bağlantı Katmanı Đnternet bireysel bilgisayarlar ve bunları birbirine bağlayan iletişim iskeletinden oluşur. Tek bir bina içerisinde bilgisayarlar LAN lar ile birbirlerine bağlanır, ancak bir geniş alan iskeleti genellikle leased-line lar ile oluşturulan noktadan-noktaya bağlantılardan oluşur. Burada noktadannoktaya iletişim verilecektir. PPP protokolü hem leased-line ile bağlanmış routerlarda hem de modemler ISP ye bağlanan ev kullanıcılarında kullanılan bir protokoldür. PPP nin üç özelliği bulunur: 1. Hata sezimini de içeren başlangıcı ve bitişi kesin olarak belirleyen bir çerçeve yapısı, 2. Hattı kuran, test eden, elsıkışma parametrelerini ayarlayan ve hattı kapatan bir LCP (Link Control Protocol), 3. Kullanılan ağ katmanı protokolünden bağımsız olarak ağ katmanı parametrelerinin ayarlanması sağlamak. Bu her ağ katmanı için ayrı NCP e (Network Control Protocol) sahip olunarak başarılır.
HDLC nin aksine byte tabanlı bir protokoldür fakat çerçeve yapısı HDLC ye benzer: PPP, Control alanından görülebileceği gibi unnumbered, yani sıra numarası ve ACK kullanmayan bir güvenilmez protokoldür. Address ve Control alanları sabit olduğu için LCP, elsıkışma sırasında iki tarafta da bu alanları kaldırarak 2 bit kazanç sağlar. Protocol alanı Payload alanındaki paketin ne tür olduğunu söyler. Seçenekler, LCP, NCP, IP, IPX, AppleTalk ve diğerleridir. Standart boyutu 2 byte dir ancak LCP elsıkışmada bunu 1 byte a indirebilir. Sonraki yansıda bir PPP bağlantının hem modem hem de routerrouter bağlantıları için kurulum ve kapatma fazları verilmektedir.
Döngü DEAD (hat ölü) fazından başlar. Hatta sinyal varsa fiziksel bağlantı sağlanır (ESTABLISH). Bu noktada LCP elsıkışma parameterlerini ayarlar ve AUTHENTICATE fazına girilir. Bu noktadan sonra iki tarafın ağ katmanları NCP ile anlaşmaya varır ve iletişim OPEN ile başlatılır. Đletişim bittiğinde hat sonlandırılır (TERMINATE).