Sıra Numaraları
Önceki İşlevsel Belirtim Sonraki
Sıra Numaraları
Tasarımdaki temel bir fikir bir TCP bağlantısından gönderilen her veri sekizlisinin bir sıra numarısının olmasıdır. Sekizliler sıralı olduklarından onlar için alındı gönderilebilir. Kullanılacak alındı mekanizması kümeleme yapan türdedir, böylece X numaralı alındı ile X numaralı sekizli hariç X'inci sekizliye kadar olan sekizlilerin alındığı belirtilebilir. Bu mekanizma, yeniden aktarım gerektiğinde düz mantıkla yinelenmenin saptanmasına da olanak sağlar. Bir veribölütündeki sekizliler, başlıktan hemen sonra gelen sekizli en düşük numarayı alacak şekilde numaralandırılırlar.
Gerçekte sıra numarası uzayının çok büyük olmasına rağmen sonlu olması gerektiğini unutmamak esastır. Bu uzay 232 - 1 birimliktir. Uzay sonlu olduğundan, sıra numaraları ile ilgili tüm işlemler 232'nin katlarında 232 - 1 birimlik kümeler (ve hatta aynı sınırlama ile küme kümeleri) halinde yapılmalıdır. Bu tür işlemlerde bazı cinlikler olabildiğinden yazılımı geliştirirken böyle değerlerle karşılaşılacağı dikkate alınmalıdır. "=<" sembolü "küçük veya eşittir" anlamına gelir.
TCP'nin uygulayacağı sıra numaraları kıyaslamalarından başlıcaları:
  1. gönderilmiş ama henüz alınmamış bir sıra numarasını gösteren bir alındının saptanması.
  2. Alındı'lanmış bir veribölütü tarafından işgal edilen tüm sıra numaralarının saptanması (örneğin, veribölütünün yeniden aktarım kuyruğundan silinmesi için).
  3. Beklenen sıra numaralarını içeren bir gelen veribölütünün saptanması (örneğin, bu veribölütü alım penceresi ile "örtüşüyordur").
Gönderilen veriye verilen yanıtta TCP, alındıları alır. Alındıların işleme konulmasında aşağıdakilerle ilgili kıyaslamaların yapılması gerekir:
  GÖN.OLM = en eski alındı'lanmamış sıra numarası

  GÖN.SNR = gönderilecek sonraki sıra numarası

  VBL.ALN = Alan TCP'deki alındı numarası
            (alan TCP'nin beklediği sonraki alındı numarası)

  VBL.SIRA = bir veribölütünün ilk sıra numarası

  VBL.UZN = veribölütündeki veri tarafından işgal edilen sekizlilerin sayısı
            (EŞZ ve SON sayarak)

  VBL.SIRA+VBL.UZN-1 = bir veribölütündeki son sıra numarası
Yeni bir alındı numarası aşağıdaki eşitsizlikle ifade edilen değerlerden biridir:
  GÖN.OLM < VBL.ALN =< GÖN.SNR
Yeniden aktarım kuyruğundaki bir veribölütü, eğer sıra numaralarının toplamı ya da uzunluğu gelen veribölütündeki alındı değerinden küçük veya ona eşitse, tamamen alındı'lanmış demektir.
Veri alındığında aşağıdaki kıyaslamaların yapılması gerekir:
ALM.SNR = gelen veribölütünde beklenen sonraki sıra numarası olup
          alım penceresinin alt veya sol kenarıdır

ALM.SNR+ALM.PEN-1 = gelen veribölütünde beklenen son sıra numarası olup
                    alım penceresinin üst veya sağ kenarıdır

VBL.SIRA = gelen veribölütü tarafından işgal edilen ilk sıra numarası

VBL.SIRA+VBL.UZN-1 = gelen veribölütü tarafından işgal edilen son sıra numarası
Bir veribölütünün geçerli sıra numarası uzayının bir kısmını işgal ettiğine karar verilebilmesi için şunlardan biri geçerli olmalıdır:
    ALM.SNR =< VBL.SIRA < ALM.SNR+ALM.PEN
veya
    ALM.SNR =< VBL.SIRA+VBL.UZN-1 < ALM.SNR+ALM.PEN
Veribölütünün başlangıcının pencere içine düşüp düşmediğini anlamak için bu sınamanın ilk parçası, sonunun pencere için düşüp düşmediğini anlamak için ise ikinci parçası kullanılır. Eğer veribölütü her iki sınamayı da aşarsa penceredeki veriyi içeriyor demektir.
Aslında durum bundan biraz daha karışıktır. Sıfır sayıda pencere ve sıfır uzunlukta veribölütü olabileceğini de gözönüne alarak bir gelen veribölütünün kabul edilebilirliği için dört durum söz konusudur:
Veribölütü    Alım     Sınama
 Uzunluğu   Penceresi
----------  ---------  -------------------------------------------

    0           0      VBL.SIRA = ALM.SNR

    0          >0      ALM.SNR =< VBL.SIRA < ALM.SNR+ALM.PEN

   >0           0      kabul edilebilir değil

   >0          >0      ALM.SNR =< VBL.SIRA < ALM.SNR+ALM.PEN
                    veya ALM.SNR =< VBL.SIRA+VBL.UZN-1 < ALM.SNR+ALM.PEN
Alım penceresi sıfır olduğunda ALN veribölütleri dışında hiçbir veribölütünün kabul edilmeyeceği dikkate alınmalıdır. Bu durumda, bir TCP için veriyi aktarırken ve ALN'leri alırken sıfır alım penceresi sağlanması olasıdır. Yine de, alım penceresi sıfır olduğunda bile, bir TCP tüm gelen veribölütlerindeki BŞT ve ACL alanlarını işleme sokmalıdır.
Numaralama şemasının yararlarını belli denetim bilgilerini korumakta da kullanabiliriz. Bunu sıra numaraları uzayına örtük olarak bazı denetim bayraklarını dahil ederek sağlayabiliriz, böylece bunlar yeniden aktarılabilir ve bir karışıklık olmaksızın alındılanabilir (yani bir ve yalnız bir denetim kopyası rol alacak şekilde). Denetim bilgisi veribölütü veri uzayında fiziksel olarak taşınmaz. Bu bakımdan, denetim bilgilerine sıra numaralarını örtük olarak atamak için bazı kurallar uydurmalıyız. EŞZ ve SON bayraklarından başka bu korumaya ihtiyaç duyan denetim yoktur ve bu denetimler sadece bağlantının açılışında ve kapanışında kullanılır. Sıra numaralarının amaçlarına uygun olarak, EŞZ'nin kendisi için oluştuğu veribölütünün ilk asıl veri sekizliğinden önce oluştuğu düşünülürken, SON'un kendisi için oluştuğu veribölütünün son asıl veri sekizliğinden sonra oluştuğu düşünülür. Veribölütü uzunluğu (VBL.UZN) hem veri hem de denetimin işgal ettiği sıra numarası uzayını kapsar, Bir EŞZ olduğunda, VBL.SIRA'nın değeri EŞZ'nin sıra numarasıdır.
İlk Sıra Numarasının Seçimi
Protokol bir bağlantı üzerinde hiçbir sınırlama olmaksızın tekrar tekrar kullanılır. Bir bağlantı bir soket çifti ile tanımlanır. Bir bağlantının yeni örneklerine bağlantının yeniden varolmuşu gibi başvurulur. Bu noktada sorun, TCP'nin bağlantının önceki yeniden varouşlarından kalan yinelenmiş veribölütlerini nasıl tanıyacağıdır. Bu sorun bağlantı çabucak açılıp kapatılırsa veya bağlantı bellek kaybı nedeniyle kopar ve yeniden kurulursa görünür hale gelir.
Karışıklıktan kaçınmak için bir bağlantının yeniden oluşturulmuşundaki veribölütlerinden, ağ üzerinde hala aynı sıra numaralarıyla mevcut olanlarının kullanımını engelleyeceğiz. Bir TCP kopup kullanımdaki sıra numaralarına ait tüm bilgi kaybolsa bile bunu sağlama almak isteriz. Yeni bağlantılar oluşturulduğunda, yeni bir 32 bitlik ilk sıra numarası (İSN) seçen bir İSN üreteci devreye sokulur. Üreteç, en düşük biti kabaca her 4 mikrosaniyede bir artan 32 bitlik (muhtemelen kurgusal) bir saate bağlıdır. Bu durumda, İSN yaklaşık her 4,55 saatte bir başa döner. Veribölütleri ağda Azami Veribölütü Ömrü'nden (AVÖ) daha fazla kalmayacağından ve AVÖ 4,55 saatten küçük olduğundan normal olarak İSN'nin eşsiz olacağını varsayarız.
Her bağlantı için bir gönderi sıra numarası bir de alım sıra numarası vardır. İlk gönderi sıra numarası (İGS) veriyi gönderen TCP tarafından seçilirken ilk alım sıra numarası (İAS) ise bağlantının kuruluş işlemleri sırasında öğrenilir.
Bir bağlantının kurulması ve ilklendirilmesi için iki TCP'nin birbirlerinin ilk sıra numaraları üzerinden eşzamanlanmaları gerekir. Bu, "EŞZ" denetim bitini ve ilk sıra numarasını taşıyan veribölütlerini oluşturan bağlantı değiştokuşunda yapılır. Bir kısaltma olarak EŞZ biti taşıyan veribölütlerine "EŞZler" de denilmektedir. Dolayısıyla, çözüm, ilk sıra numarasının seçimi için uygun bir mekanizma ve İSN'leri değiştokuş etmek için biraz karışık bir uzlaşım mekanizması gerektirir.
Eşzamanlama iki tarafın birbirlerine kendi ilk sıra numaralarını göndermelerini ve bunların alındılarılarla onaylanmasını gerektirir.
  1. A --> B   EŞZ sıra numaram X
  2. A <-- B   ALN sıra numaranız X
  3. A <-- B   EŞZ sıra numaram Y
  4. A --> B   ALN sıra numaranız Y
2. ve 3. adım tek bir ileti olarak birleştirilebildiğinden buna üçlü uzlaşım adı verilir.
Üçlü uzlaşımın gerekli olmasının sebebi sıra numaralarının ağdaki genel bir saate göre berabere kalamamaları ve TCP'lerin İSN'leri farklı mekanizmalarla seçebilmeleridir. İlk EŞZ'nin alınmasıyla, bağlantıda kullanılan son sıra numarası hatırlanmadıkça (her zaman mümkün değildir), veribölütünün eskiden kalma olup olmadığını anlamak mümkün değildir ve dolayısıyla göndericiden bu EŞZ'yi doğrulaması istenmelidir. Üçlü uzlaşım ve saatli işlem şemasının yararları [3]'te açıklanmıştır.
Susmayı Bilmek
TCP'nin ağda eskiden kalmış bir veribölütünün yinelenmişinin sıra numarasını taşıyan bir veribölütü oluşturmadığından emin olmak için, bağlantının yenisinin başlatılması veya kullanımdaki sıra numarası belleğinin kaybından dolayı bir bozulmanın kurtarılması amacıyla bir sıra numarası atamadan önce, TCP'nin bir AVÖ boyunca sessiz kalması gerekir. Bu belirtim için AVÖ 2 dakika olarak alınmıştır. Bu bir mühendislik seçimidir ve tecrübeler başka bir değeri gerektiriyorsa değiştirilebilir. Bir nedenle TCP yeniden ilklendirildiğinde sıra numarası belleği hala kullanımdaysa hiç beklenmemesi gerekir; emin olunması gereken tek şey kullanılacak sıra numarasının son kullanılandan büyük olacağıdır.
TCP Sessizlik Süresi Kavramı
Bu belirtim bize gösterecek ki, Genel Ağ sisteminin bir parçası olan konakların etkin (kapalı olmayan) bağlantılar üzerinden aktarılan son sıra numaraları ile ilgili hiç bir bilgi kalmaksızın "çökme" leri durumunda, TCP'nin herhangi bir veribölütünü iletmesi en azından kabul edilen AVÖ değeri kadar gecikecektir. Aşağıdaki paragraflarda, bu belirtim için bir açıklama yapılmıştır. TCP gerçeklenimcileri bu "sessizlik süresi" sınırlamasını zorlayabilirler, fakat tek risk eski verilerin yeni olarak kabul edilmesine veya yeni veriyi Genel Ağ sistemindeki bazı alıcıların eskinin yinelenmişi olarak reddetmelerine sebep olmaktır.
TCP'ler veribölütlerinin biçimlendirilip kaynak konağın ağ çıkış kuyruğuna her atılışında sıra numarası uzayını tüketirler. TCP'deki sıralama algoritması ve yinelenmişin saptanması için güvenilen tek şey veribölütü alıcıya ulaştırılıp onay alınmadan ve veribölütünün Genel Ağ üzerinde bulunan bütün kopyaları yok edilmeden veribölütü verisinin sıra numarasının eşsizliğini sağlayan sıra numaralarının 232 değerinin hepsi tüketilmeden döngünün yeniden başlatılmayacağıdır. Böyle bir önkabul olmaksızın, iki ayrı TCP veribölütüne aynı sıra numaralarının atanmış olması veya üst üste gelmesi gibi bir olasılıklar doğar ve bu da alıcı tarafta hangi verinin yeni hangisinin eski olduğu konusunda karmaşaya yol açar. Hatırlarsanız bir veribölütünün içinde veri sekizlileri olduğu kadar çok sayıda ardışık sıra numarası da bulunuyordu.
Normal şartlar altında, alındılanmış ilk sıra numarasından önce bir sıra numarasının tekrar kullanılmasını önlemek için TCP'ler kullanılacak sonraki sıra numarası ile bekleyen en eski alındının kaydını tutarlar. Bu tek başına sıra numarasının, kullanılmadan önce eski yinelenmiş verinin ağ üzerinden silinmiş oluşunu garantilemez, bu nedenle başıboş bir yinelenmişin, istenmeyen bir varış olasılığını düşürmek için sıra numarası uzayı çok geniş tutulur. Sıra numarası uzayının 232 sekizlisinin kullanımı 2 megabit/saniye hızında 4.5 saat sürer. AVÖ ağ üzerinde birkaç on saniyeyi aşamayacağından veri hızı onlarca megabit/saniye hızlara tırmansa bile, bu, öngörülebilir ağlar için yeterince iyi bir koruma sayılır. 100 megabit/saniye için döngü tamamlanma süresi 5.4 dakika olur ve bu hala makul bir koruma sağlar.
Eğer bir kaynak TCP son kullandığı bağlantıda sıra numaraları belleğine sahip değilse, TCP'deki yineleme saptama ve sıralama algoritması yine de bozulabilir. Örneğin, bir TCP tüm bağlantıları 0 sıra numarası ile başlatıyorsa, bir çökme veya yeniden başlatma sebebiyle, bu TCP önceki bağlantıyı (muhtemelen yarı açık bağlantı çözünürlüğü sonrası) yeniden şekillendirebilir ve aynı bağlantının önceki bir varoluşunda kullanılmış paketlerden ağda halen varlığını sürdürenlerle çakışan veya onlarla aynı sıra numaralarına sahip paketler gönderebilir. Belli bir bağlantıda kullanılmış sıra numaraları ile ilgili bilginin yokluğunda, TCP belirtimi veribölütlerinin bağlantıya gönderilmeden önce, bağlantının önceki varoluşlarına ait sistemdeki veribölütlerinin kaldırılması için gereken süreyi sağlamak için, AVÖ saniyelik bir kaynak gecikmesi uygulanmasını önerir.
Tam gün zamanı hatırlayan ve ilk sıra numarasının seçiminde bunu kullanan konaklar bile bu sorundan bağışık değillerdir. (Örneğin, her yeni bağlantının yeniden varoluşunda ilk sıra numarasını seçerken.)
Varsayalım ki, örneğin, S sıra numarası ile başlayan bir bağlantı açılmış olsun. Bu bağlantının çok kullanılmadan eninde sonunda ilk sıra numarası işlevinin (İSN(t)) S1 diye, bağlantı üzerinden bu TCP'nin gönderdiği son veribölütünün sıra numarasına eşit bir değer aldığını varsayalım. Tam o anda konağın çöküp kurtarıldığını ve bağlantının yeni bir varoluşunun kurulduğunu varsayalım. Seçilen ilk sıra numarası S1 = İSN(t), bağlantının eski varoluşunda kullanılan son sıra numarası olur. Eğer kurtarma yeterince çabuk gerçekleşirse, ağdan S1'in komşu sıra numaralarını taşıyan eski yinelenmişler gelebilir ve bağlantının yeni varoluşunun alıcısı tarafından bunlar yeni paketlermiş gibi ele alınabilir.
Burada sorun, konağın kurtarılıncaya kadan ne kadar çökük kaldığının ve önceki bağlantı varoluşundan sistemde hala eski yinelenmişlerin kalıp kalmadığının bilinmeyişidir.
Bu sorunu aşmanın tek yolu, bir çökme sonucunda kurtarmanın ardından gönderilecek veribölütlerine kasıtlı olarak bir AVÖ'lük gecikme uygulamaktır (bu bir "sessizlik süresi" belirtimidir). Belli bir hedef için eski ve yeni paketlerin karışma olasılığı riskini almaya istekli olup beklemekten kaçınmayı tercih eden konaklar, "sessizlik süresi" için beklemeyi seçmeyebilirler. Gerçeklenimciler TCP kullanıcılarına, bağlantıdan bağlantıya bir çökme sonrası beklenip beklenmeyeceğini veya tüm bağlantılar için "sessizlik süresi"nin teklifsizce mi gerçekleneceğini seçme imkanı verebilirler. Besbelli, bir kullanıcı "beklemeyi" seçtiğinde bile, en azından AVÖ saniye sonra "ayağa kalkmış" bir konak için bu gerekli değildir.
Özet olarak: yayımlanan her veribölütü, sıra numarası uzayındaki bir veya daha fazla sıra numarasını işgal eder; bir veribölütü tarafından işgal edilen numaralar AVÖ saniyece "kullanımda" ya da "meşgul"dürler; son yayımlanan veribölütünün sekizlileri tarafından işgal edilmiş bir uzay-zaman blokunun çöküşünün ardından, eğer yeni bağlantı hemen başlatılır ve önceki bağlantı varoluşunun son veribölütünün uzay-zaman yayılımındaki sıra numaralarından biri kullanılırsa alıcı tarafta bir karışıklığa sebep olabilecek bir sıra numarası çakışması olasılığı var demektir.
Önceki Üst Ana Başlık Sonraki
Terminoloji Başlangıç Bağlantının Kurulması
Bir Linux Kitaplığı Sayfası