3.7. Veri İletişimi
Bağlantı bir kere kurulduktan sonra veri iletişimi veri bölütlerini değiştokuş ederek gerçekleşir. Hatalar (sağlama özeti sınamalarının başarısız olması), ağda sıkışıklık gibi nedenlerden dolayı veri bölütleri kaybolabildiğinden veri bölütlerinin her birinin teslimatını garantiye almak için TCP yeniden aktarım (bir zaman aşımı sonrası) yapar. Bu işlemden dolayı veya ağın yapısı gereği yinelenmiş veri bölütleri gelebilir. Sıra numaraları ile ilgili bölümde açıklandığı gibi TCP veri bölütlerindeki sıra ve alındı numaraları üzerinde kabul edilebilirliklerini doğrulamak için bazı sınamalar yapar.
Verinin göndericisi kullanacağı sonraki sıra numarasının değerini GÖN.SNR
değişkeninde saklar. Verinin alıcısı ise almayı umduğu sonraki sıra numarasını ALM.SNR
değişkeninde saklar. Verinin göndericisi alındılanmamış en eski sıra numarasını GÖN.OLM
değişkeninde tutar. Eğer gönderilmiş tüm veri alındılandıktan sonra veri akışı bir süre için boşta kalırsa üç değişkenin eşitlendiği görülür.
Gönderici bir veri bölütünü oluşturup gönderdikten sonra GÖN.SNR
'yi arttırır. Alıcı ise veri bölütünü kabul ettikten sonra ALM.SNR
'yi arttırır ve bir alındı yollar. Bu alındı veri göndericisine ulaştığında GÖN.OLM
'yi arttırır. Bu değişkenlerin değerleri arasındaki fark iletişimdeki gecikmenin bir ölçüsüdür. Değişkenlerin arttırım miktarı veri bölütündeki verinin uzunluğu kadardır. KURULU
duruma geçildikten sonra tüm veri bölütlerinin alındı bilgilerine dayanarak taşınması gerektiğine dikkat ediniz.
KAPAT kullanıcı çağrısı, bir gelen veri bölütündeki SON
denetim bayrağının yaptığı gibi bir gitsin işlemi uygular.
3.7.1. Yeniden Aktarım Zaman aşımı
Ağlar arası sistemi oluşturan ağın değişkenliği ve TCP bağlantılarının geniş çapta kullanımı sebebiyle yeniden aktarım zaman aşımının özdevimli saptanması gerekir. Burada göstermelik olarak yeniden aktarım zaman aşımını saptama işlemi örneklenmiştir.
Beli bir sıra numarası ile bir verinin gönderilmesi ile bu sıra numarasını kapsayan bir alındının alınması (gönderilen veri bölütleri ile alınanların eşleşmesi zorunlu değildir) arasında geçen süre ölçülür. Ölçülen bu süreye Gidip Gelme Zamanı (GGZ
) denir. Bundan Yaklaşık Gidip Gelme Zamanı (YGGZ
) hesaplanır:
YGGZ = ( ALFA * YGGZ ) + ((1-ALFA)) * GGZ)
buna bağlı olarak da yeniden aktarım zaman aşımı (YAZ
) hesaplanır:
YAZ = asg[ÜSINIR,azm[ASINIR,(BETA*YGGZ)]]
Burada ÜSINIR
zaman aşımının üst sınırını (örn, 1 dakika), ASINIR
ise zaman aşımının alt sınırını (örn, 1 saniye) ifade etmektedir. ALFA
bir yuvarlatma katsayısı (örn, 0,8 ... 0,9
), BETA
ise gecikme değişim katsayısıdır (örn, 1,3 ... 2,0
).
3.7.2. Acil Bilgi İletişimi
TCP acil durum mekanizmasının amacı gönderen kullanıcının alan kullanıcıyı acil veriyi kabul etmesi için teşvik etmek ve alan kullanıcının bütün acıl veriyi alması durumunda alan TCP'nin bunu belirtmesine izin vermeyi mümkün kılmaktır.
Bu mekanizma veri akımındaki bir noktanın acil bilgi sonu olarak tasarlanmasına izin verir. Alıcı TCP'de alım sıra numarasının (ALM.SNR
) bu noktanın her önüne geçişinde, TCP kullanıcıya "acil kip"e geçmesini, alım sıra numarası aciliyet göstericisini yakaladığında ise "normal kip"e geçmesini söylemelidir. Eğer aciliyet göstericisi kullanıcı "acil kip"te iken güncellenirse, güncelleme kullanıcıya görünür olmayacaktır.
Bu yöntem, aktarılan tüm veri bölütlerinde taşınmak üzere bir aciliyet alanı tahsis eder. ACL
denetim bayrağı aciliyet alanının anlamlı olduğunu belirtir ve aciliyet göstericisini belirtmek üzere veri bölütü sıra numarasına eklenmesi gerekir. Bu bayrağın yokluğu ortada acil bir verinin bulunmadığını gösterir.
Bir aciliyet göstericisi göndermek için kullanıcı ek olarak en azından bir veri sekizlisi göndermek zorundadır. Eğer gönderen kullanıcı ayrıca bir gitsin belirtirse hedef sürece acil bilginin teslim zamanı ileri alınır.
3.7.3. Pencere Yönetimi
Her veri bölütünde gönderilen pencere, pencere göndericisinin (veri alıcısının) o an kabul etmeye hazır olduğu sıra numaraları aralığını gösterir. Bu bağlantıdaki veri tamponunun kullanılabilir alanı ile ilgili bir önkabul vardır.
Geniş bir pencere belirtilmesi aktarımı teşvik eder. Kabul edilebilecekten fazla veri gelmesi durumunda ise fazlası iptal edilir. Bu, haddinden fazla yeniden gönderime, ağa ve TCP'lere gereksiz yük eklenmesine sebep olur. Küçük bir pencere belirtilmesi, veri aktarımını, veri bölütü aktarımları arasındaki gidip gelme gecikmesini başlatan noktada sınırlayabilir.
Sağlanan mekanizmalar bir TCP'ye büyük bir pencerenin ardından daha fazla veri kabul edilmesini zorlamaksızın daha küçük bir pencere ilan etmesini mümkün kılar. Buna "percere kırpma" denir ve kesinlikle mani olunur. Sağlamlık ilkesi gereğince, TCP'ler kendi pencerelerini kırpamazlar, fakat diğer TCP'lerde kısmen böyle bir davranışa karşı hazırlıklı olunmalıdır.
Gönderen TCP kullanıcıdan geleni kabule hazır olmalı ve gönderi penceresi sıfır bile olsa en azından yeni verinin bir sekizlisini göndermelidir. Gönderen TCP pencere sıfır olsa bile alıcı TCP'ye düzenli olarak veriyi yeniden aktarmalıdır. Percerenin sıfır olduğu durum için yeniden aktarım aralığı olarak 2 dakika önerilmektedir. Bu yeniden aktarımda aslolan sıfır pencereli TCP'lerle pencerenin yeniden her açılışının diğerine güvenilir şekilde raporlanacağını garanti etmektir.
Alan TCP'nin bir sıfır penceresi varken bir veri bölütü geldiğinde, mevcut pencereyi (sıfır) ve sonraki beklediği sıra numarasını gösteren bir alındıyı yine de göndermelidir.
Gönderen TCP aktaracağı veriyi o anki pencereye sığacak şekilde veri bölütleri olarak paketler ve yeniden aktarım kuyruğunda bu veri bölütlerini yeniden paketleyebilir. Böyle yeniden paketleme gerekli değildir ama yararlı olabilir.
Veri akışının tek yönlü olduğu bir bağlantıda, pencere bilgisi hepsi aynı sıra numarasına sahip alındı veri bölütlerinde taşınır, bu durumda sırasız bile gelseler onları yeniden sıralamak için hiçbir yol olmayacaktır. Bu ciddi bir sorun değildir, fakat pencere bilgisinin ara sıra geçici olarak veri alıcıdaki eski raporları temel alması mümkün olacaktır. Bu sorundan kaçınmak için en yüksek alındı numarasını taşıyan veri bölütlerindeki (evvelce alınmış en yüksek alındı numarasına eşit veya daha büyük alındı numaralı veri bölütlerindeki) pencere bilgisine göre hareket etmek en iyisidir.
Pencere yönetim yöntemi, iletişim başarımında önemli bir etkiye sahiptir. Aşağıdaki açıklamalar, gerçeklenimcilere önerilerdir.
3.7.3.1. Pencere Yönetim Önerileri
Az sayıda büyük veri bölütü kullanarak daha iyi başarımın elde edildiği durumda çok küçük bir pencere ayrılması verinin çok sayıda küçük veri bölütünde aktarılmasına sebep olur.
Küçük pencerelerden kaçınmak için bir öneri, alıcı için bir pencerenin güncellenmesini, bağlantı için olası en büyük tahsisatın en azından yüzde X'i kadar ek bir tahsis gerçekleşene kadar ertelemektir (burada X, 20 ile 40 arası olabilir).
Diğer bir öneri ise, göndericinin veriyi göndermeden önce pencerenin yeterince büyümesini bekleyerek küçük veri bölütleri göndermekten kaçınmasıdır. Kullanıcıdan bir gitsin işlemi gelirse veri bölütü küçük bile olsa veri gönderilmelidir.
Alındıların geciktirilmemesi gerektiğine yoksa gereksiz yeniden aktarıma yolaçılacağına dikkat ediniz. Bir strateji küçük bir veri bölütü geldiğinde (pencere bilgisini güncellemeksizin) bir alındı gönderdikten sonra pencere büyük olduğunda yeni pencere bilgisi ile başka bir alındı göndermek olurdu.
Sıfır penceresi algılanmak üzere gönderilmiş veri bölütü ek olarak aktarılan verinin giderek daha küçük veri bölütlerine parçalanmasını da başlatabilir. Sıfır penceresi algılanmak üzere gönderilmiş tek bir veri sekizlisi içeren bir veri bölütü kabul edilirse mevcut pencerenin tek sekizlisini tüketir. Gönderen TCP basitçe sıfırdan farklı pencere gönderdikçe aktarılan veri büyüklü küçüklü veri bölütlerine bölünecektir. Zamanla, büyük veri bölütlerinin biri biraz küçük diğeri biraz büyük bir çifte bölünmesi pencere tahsis eden alıcıda arasıra beklemelerle sonuçlanır. Ve bir süre sonra veri aktarımı bilhassa küçük veri bölütlerinde olmaya başlar.
Burada öneri; en basitini yapma eğilimindeki gerçeklenimlerde pencere yönetim mekanizmaları çok sayıda küçük pencereyle sonuçlanmak eğiliminde olduğundan, TCP gerçeklenimlerinin etkin olarak küçük pencere tahsislerini daha büyük pencereler halinde birleştirmeye çalışmaları gerektiğidir.