- AÇ
-
AÇ (yerel-port, yabancı-soket, etkin/edilgen
[, zamanaşı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 AÇ komutunun parametrelerindeki veri ile kısmen doldurulur.
Etkin bir AÇ komutunda TCP bağlantıyı eşzamanlama işlemini hemen başlatacaktır.
Bir zamanaşımı varsa, çağrıcının TCP'ye teslim edilen tüm veri için bir zamanaşımı belirlemesini sağlar. Eğer veri zamanaşımı süresinde hedefe başarıyla teslim edilmezse TCP bağlantıyı terkedecektir. Şimdiki genel öntanımlı zamanaşı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 isteyebilirler. Ö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ğı [,zamanaşı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 veribö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 veribö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 veribö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Ç çağrısı yapan kullanıcılar yabancı soketin adresini bilmeksizin GÖNDER çağrısı yapabilirler.
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ı kullanabilirler. Bazı gerçeklenimlerde TCP belirsiz bir soket bağlandığında kullanıcıyı uyarabilmektedir.
Bir zamanaşımı belirtilmeşse bağlantıya ait zamanaşımı yerine bu değer kullanılır.
En basit gerçeklenimde, GÖNDER çağrısı aktarımı tamamlamadan veya zamanaşı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 veribölütü uzak TCP tarafından alındılanmamışken bile GÖNDER çağrıları beklemeksizin yerel alındılar döndürebilirler. İ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 zamanaşı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, veribö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 verirler. Bu tamponlar veribö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 zamanaşı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 zamanaşı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 kalabilirler. 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 zamanaşı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 alabilirler.