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 AÇı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:
-
bir bağlantı hakkında genel bilgi (kesmeler, uzaktan kapanma, belirsiz yabancı soketlerin bağlanması gibi).
-
kullanıcı komutlarına özgü başarı veya çeşitli türde başarısızlık belirten dönüşler..
-
AÇ
-
AÇ (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 birDİ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 AÇ komutunun bağımsız değişkenlerindeki veri ile kısmen doldurulur.
Etkin bir AÇ 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Ç ç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Ç çağrısında istenen öncelikten büyük veya eşit olması gerekir.
AÇ ç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Ç ç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ündeGİT
bitinin etkin olması gerekir. Eğergitsin-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Ç ç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İNLE
nen bağlantının etkin duruma geçmesi), tasarlanan tampon örtük yabancı sokete gönderilir. Belirsiz yabancı soketli AÇ ç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 AÇ 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İT
sin 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İT
sin görünmeden önce tamponu dolduracak yeterli veri gelirseGİT
sin bayrağı AL çağrısının yanıtında etkin yapılmaz. EğerGİT
sin bayrağı tampon dolmadan önce görünürse tampon kısmen dolu döndürülür vegitsin-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ğeraciliyet-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 belirtenbayt-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:
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.