3.8. Arayüzler

Şüphesiz işin iki arayüzü vardır: kullanıcı/TCP arayüzü ve TCP/düşük seviye arayüzü. Kullanıcı/TCP arayüzünün tarafsız olarak özenle hazırlanmış bir modeline sahibiz, fakat düşük seviyeli protokolle olan arayüzü, o protokolün belirtimi tarafından belirtileceğinden burada belirtmeden bırakacağız. Daha düşük seviyeli protokolün IP olduğu durumda, TCP'lerin kullanabileceği bazı bağımsız değişken değerlerine dikkat çekeceğiz.

3.8.1. Kullanıcı/TCP Arayüzü

TCP için kullanıcı komutlarının aşağıdaki işlevsel açıklamaları, her işletim sistemi farklı oluşumlara sahip olacağından, olsa olsa kurgusaldır. Bu bakımdan, okuyucuyu farklı TCP gerçeklenimlerinin farklı kullanıcı arayüzleri olacağı konusunda uyarmamız gerekir. Yine de, tüm TCP gerçeklenimlerinin aynı protokol hiyerarşisini destekleyebilmesini garantiye almak için tüm TCP'lerin küçük de olsa aynı ortak hizmet kümesini barındırması gerekir. Bu bölümde tüm TCP gerçeklenimlerinin bulundurması gerektiği işlevsel arayüzler belirtilmiştir.

3.8.1.1. TCP Kullanıcı Komutları

Aşağıdaki bölümler işlevsel olarak bir Kullanıcı/TCP arayüzünü betimler. Kullanılan sözdizimi daha çok yüksek seviyeli dillerdeki işlev veya yöntem çağrılarınınkine benzemekle birlikte, bu kullanım tuzak türü hizmet çağrılarının (SVC'ler, UUO'lar, EMT'ler gibi) hariç tutulduğu anlamına gelmez.

Aşağıda açıklanan kullanıcı komutları TCP'nin süreçler arası iletişimi desteklemek için uygulaması gereken temel işlevleri belirtir. Gerçeklenimlerin her biri bunların kendilerine özgü biçimlerini tanımlamalı ve temel işlevleri birarada veya bir alt küme olarak sağlamalıdır. Kısmen, bazı gerçeklenimler belli bir bağlantıda kullanıcı tarafından yapılan ilk GÖNDER veya AL çağrısıyla bir bağlantının kendiliğinden ılmasını isteyebilir.

Süreçler arası iletişim oluşumlarını sağlamada, TCP sadece komutları kabul etmekle kalmamalı ek olarak hizmet sunduğu sürece bilgi de döndürmelidir. Sonuncusu şunlardan oluşur:

  1. bir bağlantı hakkında genel bilgi (kesmeler, uzaktan kapanma, belirsiz yabancı soketlerin bağlanması gibi).

  2. kullanıcı komutlarına özgü başarı veya çeşitli türde başarısızlık belirten dönüşler..

(yerel-port, yabancı-soket, etkin/edilgen
     [, zaman aşımı] [, öncelik] [, güvenlik/bölüm] [, seçenekler])
  -> yerel-bağlantı-ismi

Burada yerel TCP'nin hizmet verdiği sürecin farkında olduğunu ve belirtilen bağlantıyı kulanacak olan sürecin yetkili olup olmadığını sınayabileceğini farzediyoruz. TCP'nin gerçeklenime bağlı olarak yerel ağ ve kaynak adresi için TCP tanıtları ya TCP ya da düşük seviyeli protokol (IP gibi) tarafından sağlanır. Bu değerlendirmeler güvenlik kaygısının sonucudur, o kadar ki, hiçbir TCP'nin bir diğeri gibi davranması mümkün değildir. Benzer şekilde, hiçbir süreç TCP'nin hoşgörüsü olmaksızın başka bir süreç gibi davranamaz.

etkin/edilgen seçeneği edilgen olarak belirtilirse bu, gelen bir bağlantı için bir DİNLE çağrısıdır. Bir edilgen açık ya belli bir bağlantıyı bekleyen tamamen belirli bir yabancı soketin ya da herhangi bir bağlantıyı bekleyen belirsiz bir yabancı soketin varlığı ile tanınır. Tamamen belirli bir edilgen çağrı ardından bir GÖNDER çalıştırılarak etkin yapılabilir.

Bir aktarım denetim bloğu (ADB) oluşturulur ve komutunun bağımsız değişkenlerindeki veri ile kısmen doldurulur.

Etkin bir komutunda TCP bağlantıyı eşzamanlama işlemini hemen başlatacaktır.

Bir zaman aşımı varsa, çağrıcının TCP'ye teslim edilen tüm veri için bir zaman aşımı belirlemesini sağlar. Eğer veri zaman aşımı süresinde hedefe başarıyla teslim edilmezse TCP bağlantıyı terkedecektir. Şimdiki genel öntanımlı zaman aşımı değeri beş dakikadır.

TCP veya bir işletim sistemi bileşeni, kullanıcıların belirli bir öncelik veya güvenlik/bölüm ile bir bağlantı açma yeterliliğini doğrulayacaktır. çağrısında öncelik veya güvenlik/bölüm belirtiminin yokluğu öntanımlı değerlerin kullanılmasının gerektiğini gösterir.

TCP'nin gelen istekleri kabul etmesi için, güvenlik/bölme bilgilerinin tamamiyle aynı ve önceliğin çağrısında istenen öncelikten büyük veya eşit olması gerekir.

çağrısında istenen ve gelen bir istekten alınan en büyük değerlerden yüksek olanı bağlantının öncelik değeridir ve bağlantının yaşamı boyunca sabittir. Gerçeklenimciler bu öncelik müzakeresinin denetimini kullanıcıya vermeyi isteyebilir. Örneğin, kullanıcıya önceliğin tamamen uyuşması gerektiğini belirtebilmesi veya önceliğin terfisine kullanıcı tarafından onay verilmesi mümkün kılınabilir.

TCP tarafından kullanıcıya bir yerel bağlantı ismi döndürülür. Yerel bağlantı ismi <yerel soket, yabancı soket> çifti tarafından tanımlanın bağlantıya bir kısayol olarak kullanılabilir.

GÖNDER

GÖNDER (yerel-bağlantı-ismi, tampon-adresi, bayt-sayısı,
      gitsin-bayrağı, aciliyet-bayrağı [,zaman aşımı])

Bu çağrı belirtilen kullanıcı tamponundaki verinin gönderilmesini sağlar. Eğer bağlantı daha önceden açılmamışsa, GÖNDER çağrısı bir hata olduğunu kabul eder. Bazı gerçeklenimler kullanıcının yaptığı ilk çağrının GÖNDER çağrısı olmasına izin verir; bu durumda gerçeklenim çağrısının yapılmasını kendisi sağlar. Eğer çağıran süreç bu bağlantıyı kullanmaya yetkili değilse bir hata döner.

Eğer gitsin-bayrağı belirtilmişse verinin alıcıya hemen aktarılması ve tampondan oluşturulan son TCP veri bölütünde GİT bitinin etkin olması gerekir. Eğer gitsin-bayrağı yoksa aktarımın verimliliği adına veri ardışık GÖNDER çağrılarındaki veriler birleştirilerek aktarılabilir.

Eğer aciliyet-bayrağı belirtilmişse hedef TCP'ye gönderilen veri bölütlerinde aciliyet göstericisi bulunur. Alan TCP, eğer acil göstericisinin öncelediği veri alıcı süreç tarafından henüz tüketilmediyse alıcı sürece aciliyet durumunu bildirecektir. Aciliyetin amacı, alıcıyı acil veriyi işleme almaya teşvik etmek ve acil olduğu bilinen tüm veri alındığında bunu alıcıya belirtmektir. Gönderen tarafın TCP'sinin sinyallediği aciliyet sayısının, alan kullanıcının acil verinin varlığını öğrendiği uyarı sayısına eşit olması gerekli değildir.

çağrısında yabancı soket belirtilmemişse fakat bağlantı kurulmuşsa (örn, yerel sokete yabancı bir veri bölütünün gelişinden dolayı DİNLEnen bağlantının etkin duruma geçmesi), tasarlanan tampon örtük yabancı sokete gönderilir. Belirsiz yabancı soketli çağrısı yapan kullanıcılar yabancı soketin adresini bilmeksizin GÖNDER çağrısı yapabilir.

Bununla birlikte, yabancı soket belirli duruma gelmeden bir GÖNDER çağrısı yapılırsa bir hata dönecektir. Kullanıcılar bağlantının durumunu öğrenmek için DURUM çağrısını kullanabilir. Bazı gerçeklenimlerde TCP belirsiz bir soket bağlandığında kullanıcıyı uyarabilmektedir.

Bir zaman aşımı belirtilmeşse bağlantıya ait zaman aşımı yerine bu değer kullanılır.

En basit gerçeklenimde, GÖNDER çağrısı aktarımı tamamlamadan veya zaman aşımına uğramadan denetimi gönderen sürece bırakmayacaktır. Bununla birlikte bu basit yöntemi iki tarafın aynı anda kullanması kısırdöngüye yol açabileceğinden (örn, her iki taraf da bir AL çağrısı yapmaksızın GÖNDER çağrısı deneyebilirler ve ikisi de birbirlerini bekler) bu önerilmez. Biraz daha karmaşık gerçeklenimlerde çağrı beklemeksizin denetimi sürece bırakarak sürecin ağ G/Ç'leri ile eşzamanlı çalışmasını ve dolayısıyla çok sayıda GÖNDER çağrısının yapılabilmesini mümkün kılar. Çok sayıda GÖNDER çağrısı ilk gelen ilk gider (FIFO) ilkesiyle işlenir, yani TCP bunları hemen işleme alamaz, kuyruğa ekler.

Bir GÖNDER çağrısının sonradan bazı SİNYAL çeşitlerine veya sözde kesmelere yol açması nedeniyle örtük olarak eşzamansız bir kullanıcı arayüzü kabulü yaparız. Diğer bir seçenek hemen bir yanıtın dönmesidir. Örneğin, gönderilen veri bölütü uzak TCP tarafından alındılanmamışken bile GÖNDER çağrıları beklemeksizin yerel alındılar döndürebilir. İyi niyetli olarak eninde sonunda bir başarının gerçekleşeceğini varsayabiliriz. Eğer biz yanlışsak, bağlantı her halükarda zaman aşımından dolayı kapanacaktır. Bu çeşit (eşzamanlı) gerçeklenimlerde, hala bazı eşzamansız sinyaller olacaktır fakat bunlar bağlantının kendisi tarafından bertaraf edilecek, veri bölütlerine veya tamponlara etkisi olmayacaktır.

Sürecin farklı GÖNDER çağrılarından dönen başarı ve hata belirteçlerini ayırması için çağrılarla ilgili tampon adreslerine bakılır. TCP tarafından kullanıcıya verilen sinyaller, çağıran sürece dönmesi gereken bilgi belirtilerek, aşağıda açıklanmıştır.

AL

AL (yerel-bağlandı-ismi, tampon-adresi, bayt-sayısı)
  -> bayt-sayısı, aciliyet-bayrağı, gitsin-bayrağı

Bu komut belirtilen bağlantı ile ilişkili bir tampon ayırır. Bu komuttan önce bir komutu yoksa veya çağıran süreç bu bağlantıyı kullanmaya yetkili değilse bir hata döner.

En basik gerçeklenimde, tampon dolmadıkça veya bir hata oluşmadıkça, denetim çağıran sürece dönmez fakat bu şema kısırdöngülere çok açıktır. Daha karmaşık gerçeklenimler bir kerede birden fazla AL çağrısına izin verir. Bu tamponlar veri bölütleri geldikçe doldurulur. Bu strateji bir GİTsin görüldüğünde veya bir tampon dolduğunda çağıran süreci uyaracak daha itinalı bir şema (muhtemelen eşzamansız) fiyatına işlenecek miktarı arttırmayı mümkün kılar.

Bir GİTsin görünmeden önce tamponu dolduracak yeterli veri gelirse GİTsin bayrağı AL çağrısının yanıtında etkin yapılmaz. Eğer GİTsin bayrağı tampon dolmadan önce görünürse tampon kısmen dolu döndürülür ve gitsin-bayrağı etkin kılınır.

Eğer acil veri varsa kullanıcı bir TCP'den kullanıcıya sinyal geliyormuş gibi uyarılacaktır. Alan kullanıcı bu nedenle "acil kip"te olmalıdır. Eğer aciliyet-bayrağı etkinse, ek olarak acil veri kalır. Eğer aciliyet-bayrağı etkin değilse, böyle bir AL çağrısı tüm acil veriyi döndürür, böylece kullanıcı "acil kip"i artık bırakabilir. Aciliyet göstericisinden sonra gelen veri (acil olmayan veri) önceki acil verinin sınırları kullanıcı için açıkça imlenmiş olmadıkça kullanıcıya önceki acil veriyle aynı tamponda teslim edilemez.

Tamponun tamamen dolmadığı durumu dikkate almak ve çözümlenmemiş AL çağrıları arasında ayrım yapabilmek için dönen kodun tampon-göstericisi ile alınan verinin asıl uzunluğunu belirten bayt-sayısı birlikte ele alınır.

Diğer bir AL gerçekleniminde ise tampon alanını TCP'nin ayırmasını gerektirebilir veya TCP bir döner tamponu kullanıcı ile paylaşabilir.

KAPAT

KAPAT (yerel-bağlantı-ismi)

Bu komut bağlantının KAPALI duruma geçirileceğini belirtir. Eğer bağlantı açık değilse veya çağıran süreç bağlantıyı kullanmaya yetkili değilse bir hata döner. Veriler gönderildikten sonra bir kapama komutu gönderilmesi, tamamlanmamış GÖNDERimlerin aktarılmasını (veya tekrardan aktarılmasını) sağlamak için kibarca bir uyarı görevini görür. Bu yüzden bir kaç tane GÖNDER komutunun verilmesinin ardından bir KAPAT komutu vermekle bütün verilerin hedef adrese iletildiği kanısına varmamız kabul edilebilir bir düşünce olur. KAPANIŞ durumundaki bir bağlantı üzerinde kullanıcılar hala veri ALmaya devam ediyor olabilirler, çünkü karşı taraf verisinin son kısmını göndermeyi bu durumda iken bile deniyor olabilir. Buradan da anlıyoruz ki KAPAT demekle "artık veri almıyacağım" değil, "artık gönderecek bir verim yok" demiş oluyoruz. Şöyle bir şey olabilir (kullanıcı seviyesi protokol iyi tasarlanmamışsa): KAPAT komutunu veren taraf bütün verilerinden zaman aşımından önce kurtulamayabilir. Bu olayda, KAPAT, TERKET'e dönüşür ve kapatan TCP işlemi terkeder.

Kullanıcı bağlantıyı herhangi bir anda kendi inisiyatifinde KAPATabileceği gibi TCP'den gelen çeşitli teşviklere (uzaktan kapatma, aktarımda zaman aşımı, hedefin erişilebilir olmayışı gibi) yanıt olarak da KAPATabilir.

Bir bağlantının kapanması yabancı TCP ile iletişimi gerektirdiğinden bağlantılar kısa bir süre için KAPANIŞ durumunda kalabilir. KAPAT komutu TCP tarafından yanıtlanmadan önce bağlantının yeniden açılmaya çalışılması, hata yanıtlarıyla sonuçlanacaktır.

Kapatma işlemi ayrıca gitsin işlemine de yol açar.

DURUM

DURUM (yerel-bağlantı-ismi) -> durum-verisi

Bu gerçeklenim bağımlısı bir kullanıcı komutu olup olmayışının olumsuz bir etkisi olmayacaktır. Dönen bilgi genellikle bağlantı ile ilişkili ADB'den gelir.

Bu komut şu bilgileri içeren bir veri bloku ile döner:

yerel soket,
yabancı soket,
yerel bağlantı ismi,
alım penceresi,
gönderi penceresi,
bağlantı durumu,
alındı bekleyen tampon sayısı,
alınmayı bekleyen tampon sayısı,
aciliyet durumu,
öncelik,
güvenlik/bölüm,
ve aktarım zaman aşımı.

Aktarımın durumuna veya gerçeklenimin kendisine bağlı olarak bu bilgilerin bir kısmı mevcut veya anlamlı olmayabilir. Eğer çağrıyı yapan süreç bağlantıyı kullanmaya yetkili değilse bir hata döner. Bu, yetkisiz bir sürecin bir bağlantı hakkında bilgi edinmeye çalışmasını önler.

TERKET

TERKET (yerel-bağlantı-ismi)

Bu komut, askıdaki tüm GÖNDER ve ALların terkedilmesine, ADB'nin silinmesine ve bağlantının diğer tarafındaki TCP'ye özel bir baştan-başla iletisi gönderilmesine sebep olur. Gerçeklenime bağlı olarak, kullanıcılar yapılan her GÖNDER veya AL ile terketme istekleri alabilecekleri gibi basitçe TERKET'li alındılar da alabilir.

3.8.1.2. TCP'nin Kullanıcıya İletileri

İşletim sisteminin TCP'ye kullanıcı programını eşzamansız olarak sinyalleyebilme ortamını sağladığı kabul edilir. TCP kullanıcı programını sinyallerken kullanıcıya bazı bilgiler aktarılılır. Belirtimde çoğunlukla bilgi bir hata iletisi olacaktır. Diğer durumlarda, bir GÖNDER veya AL ya da başka bir kullanıcı çağrısının işini tamamlamasıyla ilgili bilgiler varolacaktır.

Şu bilgiler sağlanır:

Yerel Bağlantı İsmi                    Daima
Yanıt Dizgesi                          Daima
Tampon Adresi                          Gönderi ve Alım
Bayt Sayısı (alınan)                   Alım
GİTsin Bayrağı                         Alım
ACiL bayrağı                           Alım

3.8.2. TCP/Düşük-Seviye Arayüzü

TCP çağrıları ağ üzerinden bilgileri aslında bir düşük seviyeli protokol üzerinden alır ve gönderir. ARPA ağlararası sistemindeki düşük seviyeli modül için tek seçenek Genel Ağ Protokolüdür (IP) [2].

Düşük seviyeli protokol IP ise bağımsız değişkenler bir hizmet türü için bir yaşam süresince sağlanır. TCP bu bağımsız değişkenler için şu ayarları kullanır:

Hizmet Türü = Öncelik: sıradan, Gecikme: normal, İşlenen miktar: normal, Güvenirlik: normal; veya 00000000.
Yaşam Süresi = bir dakika veya 00111100.

Varsayılan Azami Veri bölütü Ömrü'nün (AVÖ) iki dakika olduğuna dikkat ediniz. Burada biz açıkça bir veri bölütünün Genel Ağ sisteminde bir dakika içinde teslim edilememesi halinde yokedilmesini istemiş oluyoruz.

Eğer düşük seviyeli protokol IP (veya aynı özellikteki başka bir protokol) ise ve kaynak yönlendirmesi kullanılmışsa, arayüz yönlendirme bilgisinin iletişimine izin vermelidir. TCP sağlama özetinde kullanılan kaynak ve hedef adreslerinin başlatan kaynak ve nihai hedef olmasından dolayı bu özellikle önemlidir. Bağlantı isteklerine yanıt olarak dönen rotanın korunması da ayrıca önemlidir.

Bir düşük seviyeli protokol, gerek IP'ye işlevsel olarak eşdeğer hizmeti sağlamak, gerekse TCP sağlama özetinde kullanmak için kaynak adresini, hedef adresini, protokol alanlarını ve "TCP uzunluğu"nun saptamanın bir yolunu sağlamak zorundadır.