Bu belgede, TCP paketinin yapısı, özellikleri ve TCP iletişiminin nitelikleri açıklanmıştır.
TCP
yani Transmission Control Protocol yedi katmanlı
OSI referans modelinin, aktarım katmanında yer alır. TCP iki hostun
birbirleriyle güvenilir ve bağlantılı haberleşmesini sağlar.
Bağlantılı haberlelşme: Bilgisayarlar iletişime geçmeden
önce aralarında bir oturum açarlar. Oturumun açılması
sırasında bilgisayarlar kendi iletişim parametrelerini birbirlerine
iletirler ve bu parametreleri dikkate alarak iletişimde
bulunurlar.
Güvenilirlikli Haberleşme: Bilginin karşı tarafa
gittiğinden emin olma durumudur. Bu güvenilirlik, bilginin alındığına dair karşı
taraftan gelen bir onay mesajı ile sağlanır. Eğer bilgi
gönderildikten belli süre sonra bu mesaj gelmezse paket
yeniden gönderilir.
Telnet, FTP, SMTP gibi protokoller TCP' yi kullanır.
TCP de tanımlı temel görevleri aşağıdaki gibi sıralayabiliriz:
Bir üst katmandan gelen verinin uygun uzunlukta parçalara bölünmesi,
Her bir parçaya alıcı kısımda aynıbiçimde sıraya koyulabilmesi amacıyla sıra numarası verilmesi,
Kaybolan veya bozuk gelen parçaların tekrarlanması,
Uygulamalar arasında yönelndirme yapılması,
Güvenilir paket dağıtımın sağlanması,
Hostlarda veri taşmasının önlenmesi.
TCP kendisine atanmış olan bu görevleri yapabilmek amacıyla aktarım katmanında veri parçalarının önüne başlık bilgisi ekler. Başlık bilgisi ve veri parçası birlikte TCP segmenti olarak anılır. Her segmente sıra numarası verilir. Bu segmentler belli sayılarda gönderilir. Alıcı bilgisayar da frameler yani segmentler kendine ulaştıkça bunları tampon belleğine yerleştirir. İki ardışık çerçeve tampon belleğe yerleşince alici bilgisayar gönderilen en son çerçeve için bir onay mesajını gönderici bilgisayara yollar. TCP segmentinde başlık içindeki alanların kullanımı amaçları aşağıdaki gibidir.
Şekil 1.1 TCP Segment Formatı
Gönderici Port No (Source Port): Gönderen bilgisayarın kulladığı TCP portu. Bir üst katmanda TCP isteyen protokol sürecinin kimliği durumundadır. Karşı mesaj geldiğinde bir üst katmana iletmek için, o protokolün adı değil de port numarası kullanılır. 16 bitlik kaynak port alanı bulunur.
Alıcı Port No (Destination Port): Alıcı bilgisayarın kullandığı TCP portu. Gönderilen veri paketinin alıcı tarafta hangi uygulama sürecine ait olduğunu belirtir. Varış noktasındaki üst katman protokolünün portunu gösterir 16 bitliktir.
Sıra Numarası (Sequence Number): Gönderilen paketin sıra numarasını gösterir. Gönderilmeden önce daha küçük parçalara ayrılan verinin, alıcı kısımda yeniden aynı sırada elde edilmesinde kullanılır. 32 bitliktir.
Onay Numarası (Acknowledgement Number): Gönderilen verinin en son hangi sekizlisinin alındığını göndericiye iletmek için kullanılır.
Başlık Uzunluğu (Header Length): TCP segmentinin uzunluğu. TCP başlığında var olan 32 bit uzunluğundaki sözcüklerin sayısını gösterir.
Saklı Tutulmuş (Reserved): 8 bitliktir.İlerde olabilecek genişleme için saklı tutulmuştur. Gelecekte kullanılmak üzere saklı tutulmuş anlamına gelir.
Kod Bitleri (Bayraklar , Flags): Kontrol bilgilerini taşımak için kullanılırlar. Segmentin içeriğine dair bilgi taşırlar.
Pencere (Window): TCP penceresinde ne kadar alan olduğunu gösterir. Alış denetimi için kullanılır. 16 bitliktir.
Hata Sınama Bitleri (Cheksum):Verinin ve başlığın hatasız aktarılıp aktarılmadığını sınamak için kullanılır. 16 bitliktir.
Acil İşaretçisi (Urgent Pointer): Acil olarak aktarımı sonlandırma, bayraklar kısmında acil olan bir verinin iletilmesi gibi durumlarda kullanılır. Acil veri, alıcının uygulama katmanında öncelikle değrlendirmesi gereken veridir.
Bayraklar: Denetim fonksiyonlarını sağlarlar
URGENT Bayrağı: Urgent pointer alanının geçerli olduğunu gösterir.
ACKNOWLEDGEMENT Bayrağı: Onay alanının geçerli olduğunu gösterir.
PUSH Bayrağı : Gönderen TCPye gönderilecek veriyi hemen gönderilmesi için emir verir
RESET Bayrağı: Bağlantıyı özellikle anormal durumlarda başlangıç durumuna getirir.
SYNCHRONIZE Bayrağı: Gönderen ve alanın sanal bağlantı isteğinde bulundukları anlamını taşır.
FINISH Bayrağı : Gönderenin daha fazla verisinin olmadığını belirler ve bağlantı koparılabilir.
Port : TCP ve UDP (User Datagram Protocol, TCP den farklı olarak hem bağlantısız, hem de güvensiz bağlantı sağlar. Fakat, TCP ye göre daha hızlıdır) üst protokollerle bağlantıda portları kullanır. TCP kendine gelen paket içerisindeki TCP başlığında yer alan hedef port numarasına bakarak ilgili veriyi bu port ile temsil edilen uygulamaya gönderir. Bu port numaraları hedef port numaraları olarak kullanılır. Hizmet alan uygulamaya port numarası hostun IP adresi ve hedef TCP port numarası göz önünde bulundurularak otomatik olarak o anda atanır.
Pencere Yönetimi: Pencere mekanizması karşı hosttan onay alınmadan önce TCP'nin bir çok segmenti en uygun şekilde iletmesini sağlar. Pencere kullanımı ile akış kontrolü de sağlanmış olur.
Akış Kontrolü: Son uçtan son uca akış kontrolü ile değişken boyutlu pencere uygulamaları geliştirilebilmektedir. TCP'nin güvenlik servislerinden biridir.
TCP üst katmanlara aşağıdaki servisleri sağlar:
Bağlantı-yönlendirmeli veri yönetimi
Güvenilir veri transferi
Nehir-yönlendirmeli veri transferi
Push fonksiyonları
Yeniden-sıralama (resequencing)
Akış kontrolü (kayan pencereler)
Çoğullama
Tam-duplex iletim
Öncelik ve güvenlik
Hoş close
TCP bağlantı-yönlendirmeli bir protokoldür. Bundan şunu anlarız ki TCP, modülüne giren veya çıkan her bir ‘kullanıcı verisi nehir-akışı` ile ilgili durum ve konum bilgilerini sağlar. TCP aynı zamanda bir ağ veya çoklu ağlar boyunca yerleşmiş bir alıcı kullanıcı uygulaması ile (veya diğer ULP) uçtan-uca veri transferi yapılmasından sorumludur. Şekil 1-1`de TCP`nin, veriyi üç ağ boyunca iki host arasında iletmesi gösterilmiştir. TCP iletim yaparken sıra numaraları ve pozitif acknowledgment`ler kullanır.
İletilen
her bir bayt için bir sıra numarası atanır. Alıcı TCP modülü
bir toplamsal-hata rutini kullanarak verinin iletim boyunca bir
hasara uğrayıp uğramadığını kontrol eder. Eğer veri kabul edilebilir
ise, TCP gönderici-TCP modülüne bir pozitif
acknowledgment gönderir. Eğer veri hasarlı ise, alıcı-TCP veriyi
yok eder ve bir sıra numarası kullanarak gönderici-TCP`ye
sorun hakkında bilgi gönderir. TCP zamanlayıcıları tedavi
ölçümleri yapmadan önce zaman kaymasının aşırı
olmadığından emin olurlar. Tedavi ölçümleri alıcı
siteye acknowledgment gönderilerek veya veriyi gönderici
siteye yeniden-göndererek yapılır.
Şekil 1-1 Aktarım Katmanının Diğer Katmanlarla İlişkisi
TCP, veriyi bir ULP`den nehir-yönlendirmeli biçimde alır. Nehir-yönlendirmeli protokoller ayrık karakterler (blok, çerçeve veya datagram değil) göndermek üzere tasarlanmamışlardır. Baytlar bir ULP`den nehir temelli, yani bayt-bayt gönderilir. Baytlar TCP katmanına varınca, TCP segmentleri olarak gruplaşırlar. Bu segmentler daha sonra diğer varışa iletilmek üzere IP`ye (veya başka bir alt-katman-protokolüne) geçirilir. Segment uzunluğuna TCP karar verir, ancak bir sistem geliştiricisi TCP`nin bu kararı nasıl vereceğine karar verebilir.
TCP ayrıca ikilenmiş veri kontrolü yapar. Eğer gönderici TCP veriyi tekrar yollarsa, alıcı TCP tüm ikilenmiş gelen veriyi yok eder. örneğin, alıcı TCP acknowledgment trafiğini belli bir zamanda gerçekleştirmezse, gönderici TCP veriyi yeniden gönderir ve veri ikilenmiş olur.
TCP push fonksiyonu kavramını destekler. Bir uygulama; alt katmandaki TCP`ye geçirdiği tüm verinin iletildiğinden emin olmak istediğinde push fonksiyonunu çalıştırılır. Böylece, push fonksiyonu TCP`nin tampon yönetimini ele geçirir. ULP push`u kullanmak için, push parametresi bayrağı 1`e set edilmiş bir send komutunu TCP`ye gönderir. Bu işlem TCP`nin, tüm tamponlanmış trafiği bir veya daha fazla segment içerisinde varışa ilerletmesini gerektirir. TCP kullanıcısı bir close-bağlantı işlemi kullanarak da push fonksiyonunu sağlayabilir.
TCP acknowledgment`ler için sıra numaraları kullanır. TCP bu sıra numaralarını aynı zamanda, segmentlerin son varışa sırası ile varıp varmadıklarını kontrol etmek üzere, segmentleri yeniden-sıralamada kullanır. TCP bağlantısız bir sistemin üzerinde yer aldığı için ki bu sistem internet içerisinde dinamik, çoklu rotalar kullanabilir, internette ikilenmiş datagramların oluşması muhtemeldir. Daha önce değindiğimiz gibi, TCP ikilenmiş datagramlar içerisinde taşınmış, ikilenmiş segmentleri yok eder.
TCP her bir oktete sıra numarası verir. Daha sonra ilettiği bu oktetlere karşılık acknowledgment (ACK) bekler. Eğer belirli aralıklarla beklenen ACK`leri almazsa ACK almadığı kısımları yeniden varış host`a iletir. TCP olumsuz bir geri bildirim mekanizması kullanmaz.
Alıcı
TCP modülü gönderici verisi üzerinde akış
kontrolü yapabilir. Böylece tampon overrun ve alıcı cihazın
doyması (saturation) gibi sorunlar engellenir. TCP`nin
kullandığı kavramın, haberleşme protokollerinde kullanımı alışılmış
değildir. Akış kontrolü göndericiye bir "pencere"
değeri verilmesine dayanır. Gönderici bu pencere ile belirlenmiş
sayıda bayt iletebilir, pencere kapanınca gönderici veri
göndermeyi durdurmalıdır.
TCP`nin bir hüneri de
host cihazı üzerindeki çoklu kullanıcı oturumlarını
çoğullayabilmesidir. çoğullama; TCP ve IP
modüllerindeki portlar ve soketler için basit
isimlendirme anlaşmaları kullanılarak gerçekleştirilir. TCP,
iki TCP varlığı arasında tam-duplex iletim sağlar. Böylece bir
dönüş işareti beklemeksizin (half-duplex`te
gereklidir) eşzamanlı iki-yönlü iletim yapılır.
TCP kullanıcının bağlantı için güvenlik ve öncelik seviyeleri belirleyebilmesine olanak tanır. Bu iki özellik, tüm TCP ürünlerinde bulunmayabilir ancak TCP DOD standardında tanımlanmışlardır. TCP iki kullanıcı arasında hoş close sağlar. Hoş close bağlantı koparılmadan önce tüm trafiğin ACK`larının oluşturulduğundan emin olunmasını sağlar.
Host
cihazındaki bir TCP üst-katman kullanıcısı bir port numarası ile
tanımlanır. Port değeri IP internet adresi ile birleşerek bir soket
oluşturur. Bu değer internet boyunca tek olmalıdır. Bir soket çifti
her bir uç-nokta bağlantısını tek olarak tanımlar. örneğin,
Gönderici Soket = Kaynak IP Adresi + Kaynak Port Numarası
numarası
Alıcı soket = Hedef IP Adresi + Hedef Port Numarası
Portları yüksek-katman işlemleri için haritalamak bir host`un iç sorunu olarak ele alınsa da, Internet sıklıkla kullanılan yüksek-katman işlemlerinin numaralarını yayınlar. Tablo 1-1`de yaygın kullanılan port numaraları; isimleri ve tanımları ile birlikte listelenmiştir.
TCP sıklıkla kullanılan portlar için özel numaralar saptamasına rağmen, 255`in üzerindeki değerler özel olarak kullanılabilir. 255`in üzerindeki değerlerin daha-az anlamlı 8-biti 0`a set edilmiştir ve organizasyonlar bunları istedikleri yönde kullanırlar. 0-255 arası numaralar her zaman rezervedir.
Tablo 1-1 Yaygın Internet Port Numaraları
Port atama ve port sağlama örnekleri
Şekil 1-2`de iki host arasında port numaralarının nasıl atandığı ve yönetildiği görülmektedir. Birinci olayda, A host`u, C host`una bir TCP segmenti gönderir. Bu segment bir yüksek-seviye prosesi ile haberleşmek için bir TCP bağlantısı isteğidir. Burada SMTP`ye atanmış port 25 istenmektedir. Varış port değeri 25 olarak sabitlenmiştir. Ancak, kaynak port tanımlayıcısı bölgesel bir sorundur. Bir host cihazı iç işlemleri için herhangi bir uygun numara seçebilir. İkinci bağlantı ise, (şekilde 2 rakamı ile gösterildi) SMTP`yi kullanmak üzere C host`una yapılmıştır. Neticede, varış portu 25 aynıdır. Kaynak port tanımlayıcısı farklıdır; bu durumda 401`e set edilmiştir. SMTP erişimi için iki farklı numaranın kullanılması A host`u ve C host`undaki iki oturum arasında bir karışıklık olmasını engeller.
Şekil 1-2 Varış Portu Kullanarak bir Oturumun Kurulması
Şekil 1-3`de, Şekil 1-2`deki iki segmentin nasıl bağlantı kurduğu gösterilmektedir. A ve C host`ları tipik olarak TCP bağlantıları ile ilgili bilgileri port tablolarında saklarlar. Dikkat edilirse bu tabloların kaynak ve varış değerleri arasında ters bir ilişki vardır. A host`unun port tablosunda, kaynaklar 400 ve 401, ve iki varış da 25`dir. C host`unda ise iki kaynak da 25, ve varışlar 400 ve 401`dir. Bu suretle, TCP modülleri ileri ve geri haberleşebilmek için kaynak ve varış port numaralarını terslerler.
Murphy kanunları TCP için bile geçerlidir. Başka bir host`un C host`una aynı kaynak ve varış port değerleri ile bir bağlantı isteği göndermesi olasıdır. Varış port değerlerinin aynı olması olağandışı değildir. çünkü iyi-bilinen portlara sıklıkla ulaşım isteği vardır. Bu durumda, varış portu 25 SMTP`yi tanımlayacaktır. Kaynak port tanımlayıcıları bölgesel bir olay olduğundan Şekil 1-4`te de gördüğümüz gibi B host`u kaynak portunu 400 olarak seçmiştir.
Şekil 1-3 Port Numaralarının Sağlanması
Şekil 1-4 Port Tanımlayıcılarının Ayrıştırılması
Ek bir tanımlayıcı olmaksızın, A ve C host`ları arasındaki ve B ve C host`ları arasındaki bağlantılarda çakışma olacaktır çünkü her iki bağlantı da aynı varış ve kaynak port numaralarını kullanmaktadır. Bu gibi durumlarda, C host`u datagramların IP başlıklarındaki IP adreslerini kullanarak ayrımı kolayca başarır. Bu durumda kaynak portları ikilenir ancak internet adresleri oturumları farklılaştırır.
çoğu sistem IP adresleri ve port numaralarına ek olarak bir protokol ailesi değeri kullanarak ayrıca bir soket tanımlar. örneğin, IP bir protokol ailesidir; DECnet de bir başkasıdır. Hangi protokol ailelerinin tanımlanacağı olayı satıcı ve işletim sistemine bağlıdır.
Çoğullamayı desteklemek üzere soketlerin kullanımı
Port numaraları birden fazla uç-nokta bağlantısı için kullanılabildiğinden, kullanıcılar bir port kaynağını eşzamanlı olarak paylaşabilir. Şöyle ki, birçok kullanıcı eşzamanlı olarak bir port üzerinde çoğullanabilir. Şekil 1-4`te, üç kullanıcı port 25`i paylaşmaktadırlar (daha sonra açıklayacağımız UDP de port çoğullamasını destekler).
Pasif ve Aktif Open`lar
TCP portları ile iki şekilde bağlantı kurulmasına izin verilir. Bunlar pasif-open ve aktif-open`dır. Pasif-open modu ULP`ye (örneğin bir sunucu); TCP ve host işletim sistemine, uzak sistemden (örneğin bir istekçi prosesi) bağlantı isteği beklemelerini söyleme izni verir. Bu durumda TCP ve host işletim sistemi bir aktif-open yayınlamak yerine bağlantı isteği bekler. Host işletim sistemi bu isteği alınca, bu uca bir tanımlayıcı atar. Bu özellik bir aktif-open gecikmesi ile karşılaşmaksızın uzak kullanıcıların haberleşmesini sağlamak için kullanılabilir.
Pasif-open isteyen bir uygulama prosesi, her kullanıcıdan (gereksinimlerle eşleşen bir profil veren) bağlantı isteği kabul edebilir. Eğer hiç bir çağrı kabul edilebilir değilse (profil eşleşmesiz), yabancı soket numarasının tümü 0`larla doldurulur. özelleşmemiş yabancı soketlere yalnızca pasif-open`larda izin verilir.
Bağlantı kurulmasının ikinci şekli aktif-open`dır. Aktif-open, ULP bir bağlantı kurulması için özel bir soketi görevlendirdiğinde kullanılır. Tipik olarak, aktif-open bir pasif-open porta bir bağlantı kurulması için yayın yapar.
İki aktif-open birbirlerine aynı zamanda yayın yapsalar dahi, TCP bağlantıyı kurar. Bu özellik; uygulamaların, başka bir uygulamanın aynı zamanda bir open yayınlaması ile ilgilenmeksizin, herhangi bir zamanda open yayınlamalarına olanak sağlar.
TCP aktif- ve pasif-open`ların beraber kullanımına ilişkin anlaşmalar sağlar. Birincisi, bir aktif-open özel bir soket ve, opsiyonel olarak, bu soketin öncelik ve güvenlik seviyelerini tanımlar. TCP bir open`ı, eğer uzak soket eşleşen bir pasif-open`a sahipse veya eğer uzak soket eşleşen bir aktif-open yayınlamışsa, kabul eder. Bazı TCP uygulamaları iki tip pasif-open tanımlamaktadır.
Tam tanımlı pasif-open: Aktif- ve pasif-open`daki varış adresi aynıdır. Böylece, bölgesel pasif-open işlemi yabancı soketi tamamen tanımlamıştır. Aktif-open`ın güvenlik parametresi pasif-open`ın güvenlik parametresi aralığındadır.
Tanımlanmamış pasif-open: Adreslerin eşleşmeye ihtiyacı yoktur, fakat güvenlik parametreleri kabul edilebilir bir aralıkta olmalıdır. Alternatif olarak, hiçbir güvenlik parametresi kontrol edilmeyebilir.
Bir open sırasında az yada hiçbir gerçeklik istemeyen bir TCP prosesi örneği anonymous FTP`dir. Bu servis Internetteki çeşitli organizasyonlar tarafından sunulur. Kullanıcının FTP sunucusuna kendini "quest" gibi bir password`la tanımlamasını gerektirir ki, aslında bu bir password değildir.
TCP`nin her bağlantı için çeşitli parametreleri hatırlaması gerektiğinden, TCP bir iletim kontrol bloğunda (TCB) bilgiler saklar. Aşağıdaki girişler TCB`de saklanır:
Bölgesel ve uzak soket numaraları
Tamponları göndermek ve almak için işaretçiler
Yeniden-iletim sırası işaretçileri
Bağlantının güvenlik ve öncelik değerleri
Şimdiki segment
TCB aynı zamanda gönderme ve alma sıra numaraları (sequence number) ile ilgili belirli değişkenler içerir. Bu değişkenler Tablo 1-2`de anlatılmıştır. Sıradaki bölümde bunların nasıl kullanıldıklarını anlatacağız.
Tablo 1-2 Gönderme ve Alma Değişkenleri
1.5 TCP Pencere ve Akış-Kontrol Mekanizmaları
Tablo 1-2`deki değerleri kullanarak, bu bölümde TCP/IP`nin iki bağlantı uç noktası arasında nasıl akış-kontrol mekanizmaları sağladığını göreceğiz. Bu analize başlamak için, Şekil 1-5`i inceleyelim. A ve B ile etiketli kutular iki TCP modülünü göstermektedir. A modülü, B modülüne iki veri birimi (veya iki bayt) gönderiyor (aslında, yalnızca iki oktet göndermek olağan bir şey değildir ancak bu örnek olayı basitleştirmektedir). Bu segmentler SEQ = 1 ve SEQ = 2 olarak etiketlidir. Bu transferin etkisi şeklin altındaki kutudaki gönderme değişkenleri incelenerek görülebilir. SND UNA değişkeni baytların henüz onaylanmadığını gösterir (bayt 2). Ancak değişken isminin altındaki okların gösterdiği gibi bu aralıktan küçük değerler gönderilmiş ve onaylanmıştır (bayt 0). Daha büyük sayılar (bayt 1 ve 2) gönderilmiş ancak onaylanmamıştır. SND NXT gönderilecek diğer oktetin sıra numarasını tanımlar (bayt 3). Pencere limit işaretçisi pencere kapanmadan önce gönderilebilecek en büyük sayıyı verir. SND WND değeri TCP pencere segment alanından türetilir. Şekil 1-5`in altındaki kutuda, pencere limiti SND UNA + SND WND olarak hesaplanmıştır. Bu değer 5`tir çünkü SND UNA = 2 ve SND WND = 3`dür.
A modülü 1 ve 2 birimini gönderdiği için, kalan gönderme penceresi 3 birimdir. Şöyle ki, A 3, 4, 5. birimlerini iletebilir ancak 6 birimini iletemez. Bu pencere şekilde kutu içine alınmıştır.
Şekil 1-5 TCP Gönderme Penceresi Değişkenleri
TCP pencere kontrolü için yalnızca ACK numarası kullanmaz. Hemen önce dediğimiz gibi, TCP`nin segmentinde taşıdığı ayrık bir numara vardır ve gönderici bilgisayarın gönderme penceresini azaltır veya arttırır. Bu kavram B`nin A`ya bir segment gönderdiği Şekil 1-6`da gösterilmiştir. Segment; 3 ACK alanı ve 6 gönderme penceresi alanı içerir. ACK alanı basitçe önceki trafiği onaylar. Yalnız başına kullanılırsa, A`nın penceresini arttırmaz, azaltmaz, açmaz, veya kapamaz. Pencere yönetimi, gönderme penceresi alanının görevidir. Gönderme penceresinin 6 değerini alması A`nın; 6 değeri artı ACK değeri kadar oktet göndermeye izinli olduğunu belirtir. Yani, pencere limiti = ACK + SND WND olur. Bu şeklin altında gösterildiği gibi, pencere limiti 9 (3+6)`dır. Böylece pencere şekildeki kutu içerisindeki alanda gösterildiği gibi genişletilmiştir.
Şekil 1-6 Bir Pencere Güncellemesinin Sonuçları
Pencere büyüklüğü B bilgisayarı tarafından azaltılabilir. Gönderme penceresi alanı pencerenin genişletilmesine veya daraltılmasına izin verir. Bu yaklaşım ACK alanını hem trafik-ACK`sı için hem de pencere-kontrol işlemleri için kullanmaktan daha esnektir (dikkat edelim ki pencerenin daraltılması trafik akışını feci bir şekilde etkileyebilir).
TCP iletim penceresi kapalı olsa bile acil veri segmenti gönderebilir. Acil veri iletme ihtiyacı varsa segmentin acil biti 1`e set edilmelidir.
TCP`nin her bir bağlantı trafiğini sağlamak için tek bir yöntemi vardır. Diğer birçok protokolün tersine, belirgin bir negatif ACK`ye (NAK) sahip değildir. Ancak, ileten varlığın pozitif-ACK`sını almadığı veriler için bir timeout ve retransmit (yeniden-iletim) verisi yayınlamasına dayanır. Bu kavram Şekil 1-7`de gösterilmiştir ve bu şekildeki sekiz işlem kalın sayılarla etiketlidir (1`den 8`e). Bu işlemlerin her biri sıra ile açıklanacaktır. Basit olması açısından Şekil 1-5 ve 1-6`daki pencere değerleri ve işaretçileri Şekil 1-7`ye dahil edilmemiştir.
Olay 1: TCP cihazı A, TCP cihazı B`ye 300 baytlık bir segment gönderir. Bu örnekte 900 oktet bir pencere ve 300 oktet bir segment büyüklüğü varsayılmıştır. Sıra (SEQ) numarası 3 değerini içerir.
Olay 2: TCP B, trafiği hatalar açısından kontrol eder ve 303 değerinde bir ACK`yi geri gönderir. Hatırlayalım ki, bu değer 302`ye kadar (302 de içinde) tüm trafiği onaylayan dahili bir ACK`dır. Olay 2`de gösterilen oktan anlaşılacağı gibi, trafik segmenti olay 3 olduğunda hala TCP A`ya varamamıştır (okun ucu A`nın yerine daha gelememiştir ).
Olay 3: TCP A`nın penceresi hala açık olduğundan, 303 numarası ile başlayan başka bir veri segmenti gönderir. çeşitli sebeplerden dolayı, bu trafik segmenti TCP B`ye ulaşamamıştır.
Olay 4: Olay 2`de iletilen ACK segmenti TCP A`ya vararak TCP B`nin 303 numarası ile başlayan bir segment beklediğini belirtir. Bu noktada, TCP A, olay 3`te ilettiği trafiğin alındığını veya bir internet içerisindeki değişken gecikmelerle hala varmadığını veya bunların tersini bilemez. Netice olarak, bu olay 5`le devam eder.
Olay 5: TCP A 603 numarası ile başlayan sıradaki segmenti yollar. Bu TCP B`ye hatasız varır.
Olay 6: TCP B olay 5`te iletilen 603 numaralı segmenti başarı ile alır. TCP B sonra ACK 303`lü bir segment geri yollar çünkü hala 303 numaralı segmenti beklemektedir.
Olay 7: Nihayet, TCP A`nın zamanı dolar ve ACK`sını alamadığı segmentleri yeniden gönderir. Bu örnekte, 303 ve 603`le başlayan segmentleri yeniden yollamalıdır.
Olay 7`de gösterilen fikrin avantajları ve dezavantajları vardır. Bu protokolü oldukça basit yapar, çünkü TCP son ACK`lanmamış segmente bakar ve tüm bunu izleyen segmentleri yeniden iletir. Diğer taraftan, hatasız giden segmentleri yeniden iletmesi olasılığı vardır, örneğin 603 numarası ile başlayan segment gibi ki bu hatasız olarak TCP B`ye varmıştı. Bununla beraber, TCP basitlik uğruna bu biçimde çalışarak, azaltılmış akış riskini göze almıştır.
Olay 8: TCP B 303 ve 603 segmentlerini alınca ve hata kontrollerini yapınca tüm trafik açıklanmış (accounted) olur ve TCP B, 903 değerinde bir ACK`yı geri gönderir.
Şekil 1-7 TCP Yeniden-İletim Şeması
TCP üst-katman kullanıcıları ile arabirim sağlamak için servis tanım/primitive kavramını kullanır. Arabirim Tablo 1-3`te özetlenen komut ve mesajlar ile sağlanır. Dikkat etmek gerekir ki primitive`ler soyuttur ve asıl gerçekleştirilişleri host`un işletim sistemine bağlıdır. Ayrıca, RFC(Request For Comment) 793 bu arabirimleri genel olarak tanımlar, ancak satıcılar arabirimleri farklı şekillerde gerçekleştirebilirler. Şekil 1-8`de ULP, TCP, ve IP arasındaki ilişki gösterilmiştir.
TCP ve alt-katmanları arasındaki servis tanımlamaları TCP standartlarınca belirlenmemiştir. TCP işlemlerinde şöyle farz edilir ki TCP ve alt-katman birbirlerine bilgileri eşzamansız olarak iletebilirler. TCP alt-katmanının bu arabirimi tanımlamasını bekler (OSI modeli de aynı pratiği takip etmektedir). Eğer IP TCP`nin altında ise bu alt-katman arabirimini IP özellikleri tanımlar.
Tablo 1-3 Tipik TCP Kullanıcı Arabirimleri
Şekil 1-8 üst Katman, TCP, ve IP`nin İlişkileri
İki TCP modülü arasında değiştirilen PDU`lara segment denir. Şekil 1-9`da bir segmentin formatı verilmiştir. Segmentin alanlarını bu bölümde inceleyeceğiz.
Segment başlık ve veri olmak üzere iki parçaya ayrılır. Şekil 1-9`da gösterildiği gibi, veri başlığın ardından gelir. Segmentin ilk iki alanı kaynak port ve varış porttur. Bu 16-bit alan TCP bağlantısını kullanarak üst-katman uygulama programlarını tanımlamada kullanılır.
Sıra numarası (sequence number (SEQ)) olarak etiketlenmiş alanın değeri ileten modülün bayt-nehrinin yerini belirtir. TCP bilindiği üzere üst katmandan aldığı veriyi segmentlere böler. Bu segmentlerin her biri genellikle tek bir IP paketi içinde taşınır. TCP, her bir segmente bir numara verir. Amaç, ağlar üzerinde dolaşan bu segmentlerin hedefe varış sıralarının karışması durumunda hedef host`ta çalışan TCP protokolünün bunları tekrar uygun şekilde birleştirip üst katmana sunabilmesinin sağlamaktır (segment boyları sabit değildir).
TCP, karşı TCP ile bağlantıyı ilk kurduğunda, ilk gönderdiği segmente bir numara verir. Bu numaraya başlangıç gönderi sırası (initial send sequence (ISS)) denir. Sıra numarası 0 ile 231 değeri arasında olabilmektedir.
Şekil 1-9
TCP Segmenti (PDU)
TCP, verideki baytları gruplayarak segmentleri oluşturur ve her bir segment ayrı bir numara ile numaralandırılır. Bir segment, bir numara aldığında bu segment numarasını içinde barındırdığı ilk oktete verir. İçinde barındırdığı diğer oktetlere ise bu numaraların artanlarını verir. Bu segmentten sonra gelen segmentin alacağı numara, bir önceki segmentin içindeki en son oktetin aldığı numaranın bir fazlası olacaktır. Bu sıra numaraları segment başlığı içinde taşınır.
Acknowledgment numarasına bir değer atanarak önceden alınan verilerin onaylanması sağlanır. Bu alandaki değer, ileticiden gelmesi beklenen, bir sonraki baytın sıra numarası değerini belirtir. Bu numara beklenen oktet için set edildiğinden, dahili bir onay kapasitesi sağlar. Şöyle ki, bu değer bu numaraya kadar olan oktetleri ve bu numaralı okteti de onaylar (dikkat edelim ki, onaylanan oktet sayısı ACK numarası-1 adettir).
Veri offset alanı, TCP başlığını oluşturan, 32-bit sıralı kelimelerin sayısını belirtir. Bu alan, veri alanının nerede başladığının tespitinde kullanılır.
Tahmin ettiğiniz gibi, reserved alanı rezerve edilmiştir. 0`a set edilmesi gereken 6 bitten oluşur. Bu bitler gelecekte kullanılmak için saklanmaktadır. Sıradaki altı alana bayraklar denir. TCP`nin kontrol bitleri olarak kullanılırlar ve oturumlar sırasında kullanılan bazı servis ve işlemleri belirtirler. Bitlerin bazıları başlığın diğer alanlarının nasıl yorumlanacağını belirtir. Bu altı bit aşağıdaki bilgileri ifade eder:
URG:Bu bayrak, urgent işaretçisi (acil işaretçisi) alanının
anlamlı olup olmadığını belirtir.
ACK: Bu bayrak, acknowledgment
alanının anlamlı olup olmadığını belirtir.
PSH: Bu bayrak,
modülün push fonksiyonunu işletip işletmeyeceğini belirtir.
RST: Bu bayrak, bağlantının resetlenmesi gerektiğini bildirir.
SYN: Bu bayrak, sıra numaralarının eşzamanlamasının oluşturulmaya
çalışıldığını bildirir. SYN bayrağı, bağlantı-kurma
segmentlerinde handshaking işlemlerinin oluştuğunu belirtmek için
kullanılır.
FIN: Bu bayrak göndericinin gönderecek
başka verisi kalmadığını belirtir.
Diğer alan window (pencere) olarak etiketlenmiştir. Değeri, alıcının kaç tane oktet almayı beklediğini gösterir. Bu değer atanırken ACK alanındaki değere dayanılır. Window alanındaki değer, ACK alanındaki değere eklenir ve göndericinin iletmek istediği veri miktarı hesap edilir.
Checksum alanı başlık ve metin de dahil olmak üzere segmentteki tüm 16-bit kelimelerin 1`e tümlenmiş bir toplamını içerir. Checksum hesabının yapılmasındaki amaç segmentin vericiden bozulmaksızın geldiğine karar vermektir. UDP`nin kullandığına benzer bir sözde-başlık kullanır ki bu sözde-başlığı UDP bölümünde açıklayacağız.
Sıradaki alan acil işaretçisi (urgent pointer)`dir. Bu alan yalnızca URG bayrağı set edildiğinde kullanılır. Acil işaretçisinin amacı acil verinin yerleştiği veri baytını belirtmektir. Acil veriye band-dışı veri de denir. TCP acil veri için ne yapılacağını dikte etmez; bu uygulamaya-özeldir. TCP yalnızca acil verinin nereye yerleştirildiğini belirtir. Acil veri, en azından, nehirdeki ilk bayttır; işaretçi aynı zamanda acil verinin nerede bittiğini de gösterir. Alıcı, acil verinin geldiğini, derhal TCP`yi kullanan uygulamaya haber vermelidir. Acil veri, interrupt`lar, checkpoint`ler, terminal kontrol karakterleri, vs. gibi kontrol işaretleri olabilirler.
Opsiyon alanı TCP`ye gelecekte yapılacak eklemeler düşünülerek tasarlanmıştır. IP datagramlarındaki opsiyon alanına benzer bir biçimde yapılandırılmıştır. Her bir opsiyon içeriği; tek bir bayttan oluşur ki, bu bayt bir opsiyon numarası, opsiyon uzunluğunu içeren bir alan, ve opsiyon değerinin kendisini içerir. Opsiyon alanının kullanımı oldukça sınırlıdır. Şu anda, TCP standardı için yalnızca üç opsiyon tanımlıdır.
TCP konum-sürümlü bir protokoldür. İşlemleri (nasıl ve ne zaman TCP varlıkları arasında özel segment alışverişi yapılacağı gibi) birçok kurala uymalıdır. Bu kurallar bir konum-geçiş diyagramı üzerinde anlatılmıştır. TCP bağlantı yönetim işlemlerinin genel bir gösterilimi Şekil 1-10`da mevcuttur. Bu şekli TCP`nin belirli özelliklerini açıklamak için kullanacağız.
TCP işlemlerine örnekler
TCP`nin open, veri transferi ve close işlemleri aşağıdaki bölümlerde anlatılacaktır. Bu TCP işlemlerini anlatmaya geçmeden önce bir haberleşme protokolündeki, type (tip) ve instance (örnek) terimlerini tanımamız gerekir.
Bir tip, bir objeyi tanımlar. Bu örnekte, TCP bir objedir. Bir instance, bir objenin görünmesidir. Böylece, TCP her çağrıldığında, kendisini gösterir. Birçok kullanıcı prosesi eşzamanlı olarak TCP`yi kullanabildiğinden, her bir kullanıcı oturumu TCP mantığını çağırır, ve her bir çağırma TCP tipinin bir instance`dir. Daha pragmatik terimlerle, her bir kullanıcı TCP çağrısı, bazı TCP servislerinin bir oturumu desteklemek üzere icra edilmesini gösterir. Her bir TCP instance`i, TCP`nin olay hakkında sürekli bilgilendirilmesini gerektirir. Her bir kullanıcı oturumunun bu bilgi parçaları TCP`de tutulur.
Şekil 1-10 TCP Bağlantı Yönetim Konum Diyagramı
TCP Open İşlemleri
Şekil 1-11`de bağlantı kuran iki TCP varlığı arasındaki ana işlemler gösterilmiştir. TCP A`nın kullanıcısı TCP`ye bir aktif-open primitive`i göndermiştir. Uzak kullanıcı kendi TCP sağlayıcısına bir pasif-open göndermiştir. Bu olaylar, sırası ile 1 ve 2 olayları olarak belirtilmiştir. Bu olaylardan her ikisi de diğerinden daha önce olmuş olabilir.
Şekil 1-11 TCP Open İşlemleri
Bir aktif-open meydana getirmek için TCP A`nın; SYN bayrağı 1`e set edilmiş bir segment hazırlaması gerekir. SYN SEQ 100 olarak kodlanmış segment, TCP B`ye gönderilir (şekilde 3 olarak etiketlenmiştir). Bu örnekte, sıra numarası (SEQ) 100, ISS numarası olarak kullanılmıştır. En yaygın yaklaşım ISS değerini 0 yapmaktır ancak daha önce tartıştığımız kurallara dayanarak ISS değeri herhangi bir sayı seçilebilir ve bu örnekte de ISS = 100 seçilmiştir. SYN kodlaması basitçe SYN bayrağının 1`e set edildiğini gösterir.
TCP B, SYN segmentini alınca 101 sıra numaralı bir acknowledgment`i geri gönderir. Aynı zamanda kendi ISS numarası 177`yi gönderir. Bu olay, 4`le etiketlenmiştir. Bu segmentin alınması ile, TCP A acknowledgment numarası 178`i içeren bir segmentle onay yollar (şekilde olay 5 olarak gösterildi).
Olay 3, 4, ve 5 ile bu handshaking işlemleri oluşunca (ki buna üç-yollu handshake denir), iki TCP modülü, olay 6 ve 7`de olduğu gibi, kendi kullanıcılarına open`lar gönderirler.
Şimdi Şekil 1-12`yi kullanarak, Şekil 1-11`deki işlemlerin Şekil 1-10`daki konum diyagramı kuralları ile ilişkisini gösterebiliriz. Şekil 1-10`daki bilgi yoğunlaştırılıp yeniden çizilerek Şekil 1-12 oluşturulmuştur. Şekil 1-12`de open işlemlerinin segment alışverişleri ve konum geçişleri ile ilişkisi gösterilmiştir. Şeklin en üstü, Şekil 1-11`den türetilmiştir ancak yalnızca iki TCP varlığı arasındaki segment akışını içerir, her bir cihaz içindeki üst ve TCP katmanları arasındaki işlemleri içermez.
Şekil 1-12`nin alt tarafında open`ın konum diyagramının ilgili kısmı gösterilmiştir. Etiketler kalın yazı ile A, B, A-3, A-4, B-3 olarak gösterilmiştir. Bu işaretçiler şeklin üstündeki kalın yazılmış olay numaraları ile eşlenerek; her bir TCP modülünün segmentleri ve konum diyagramlarını nasıl kullandığını göstermek için kullanılabilir.
Şekil 1-12`deki işlemlerin takibine yardımcı olması için, şeklin üst tarafındaki 3 olarak etiketli olaya bakalım. Burada TCP A`nın SYN SEQ 100 yayınladığı görülür. Bu segmentin iletimi öncesi, TCP A bu özel kullanıcı oturumu için CLOSED konumundadır. TCP A, segmenti TCP B`ye gönderdikten sonra konumunu SYN-SENT olarak değiştirir, ve bağlantı için, konum diyagramında gösterildiği gibi, bir TCB girişi oluşturur.
Şekil 1-12 Open İşlemleri, Segment Alışverişi, ve Konum Geçişlerinin İlişkisi
Bundan sonra, diyagramın altına bakalım. A notasyonu TCP A`nın bu kullanıcı oturumu açısından CLOSED konumunda olduğunu gösterir. A-3 ile etiketlenmiş konum geçişi, şeklin üzerinde 3 olarak etiketli TCP A`nın segment yayını ile eşleştirilmiştir. Segment yayınlanınca, TCP A SYN-SENT konumuna girer ve bağlantı için, konum diyagramında gösterildiği gibi, bir TCB girişi oluşturur.
Şimdi TCP B`yi inceleyeceğiz. Şeklin üst kısmında gösterildiği gibi, TCP B LISTEN konumundadır. Konum diyagramında LISTEN konumu B olarak etiketlenmiştir. Diyagramın üst kısmında görüyoruz ki SYN SEQ 100 segmentini alınca, TCP B SYN-RECEIVED konumuna geçer. Bu olaylar konum diyagramında B-3 etiketi ile gösterildi. Şeklin üstünde, olay 4`te ve şeklin altında B-4`te; TCP B`nin SYN ve ACK geri yolladığını görüyoruz.
Şekil 1-12 üzerindeki analiz şeklin üst ve alt parçalarındaki numara ve olaylar eşlenmeye devam edilerek ilerletilebilir.
TCP`ye yeni başlayan biri sıklıkla ‘TCP modülü kapalı bir TCP soketini başlatabilir mi?` sorusunu yöneltir. Yani, bir bağlantı oluşmadan önce orada bir pasif-open olmalı mıdır? TCP aslında kapalı soketlere open yayınlanmasına müsaade eder. Şekil 1-13`de bu aktivite ve eşzamanlı olarak iki TCP modülünden yayın yapıldığında TCP`nin open`ları nasıl kabul ettiği gösterilmiştir. Kapalı bir TCP soketine bir open yayınlamak ile ilgili soruyu yanıtlamak için, ana gereksinimler şunlardır: Open çağrısı bölgesel ve yabancı soket tanımlayıcılarını içermelidir. Open çağrısı aynı zamanda öncelik, güvenlik ve kullanıcı timeout bilgisi içerebilir. Eğer bu bilgiler mevcut ise, TCP modülü SYN segmentini yayınlar. Şekil 1-13`te, open`lar A ve B`den yaklaşık olarak aynı anda yollanmıştır. Bu şekildeki olaylar şöyle gelişir:
Şekil 1-13 Closed Konumlara Eşzamanlı Open Yayınlanması
Olay 1: TCP modülleri bu open`ları alınca, bağlantı bilgisini tutmak üzere yeni iletim kontrol blokları yaratırlar.
Olay 2: TCP A ve B de SYN segmentlerini yaklaşık olarak aynı zamanda göndermişlerdir. Bu şekilde okların pozisyonu trafiğin göreceli zaman sırasını göstermek için kullanılmıştır. Böylece TCP B`nin segmenti TCP A`ya ulaştığında daha TCP A`dan gönderilen SYN segmenti TCP B`ye varmamıştır.
Olay 3: Sonuçta TCP A`dan gönderilen SYN segmenti TCP B`ye varır. Olay 2`deki SYN segmentlerinin sonuçları iki TCP modülünün CLOSED`dan SYN-SENT`e ve SYN-RECEIVED`e geçmesidir.
Olay 4 & 5: İki TCP modülü de, SYN segmentlerini onaylamak üzere, birer ACK segmenti yayınlarlar. Olay 5`teki TCP B`nin segmenti olay 4`teki TCP A`nın segmentinden önce varır. TCP`nin bu eşzamansız yönü bir internet içerisinde değişken gecikmelere sebep olur. Gecikme her iki yönde de değişir.
Olay 6: ACK`nın TCP A tarafından alınması ile (olay 5), TCP A ULP`sine bir bağlantı open işareti yollar.
Olay 7: TCP A`dan gönderilen ACK segmenti sonunda TCP B`ye ulaşır.
Olay 8: Bağlantıyı tamamlamak üzere, TCP B ULP`sine bir bağlantı open gönderir.
TCP Veri Transfer İşlemleri
Şekil 1-14`de bir bağlantıyı başarı ile kurmuş olan iki TCP varlığı gösterilmiştir. Olay 1`de ULP A, TCP A`ya iletim için bir SEND primitive`i ile veri gönderir. Farz edelim ki 50 bayt gönderildi. Olay 2`de görüldüğü gibi, TCP A bu veriyi bir segment haline getirir (paketleme yapar) ve segmenti TCP B`ye sıra numarası 101 ile gönderir. Hatırlayalım ki bu sıra numarası kullanıcı veri nehrinin ilk baytını tanımlar.
Şekil 1-14 TCP Veri Transfer İşlemleri
Uzak TCP`de, olay 3`te veri kullanıcıya (ULP B) teslim edilmiştir. TCP B, olay 4`te gösterildiği gibi, veriyi 151 acknowledgment numaralı bir segmentle onaylar. 151 acknowledgment numarası dahili olarak olay 2`deki segmentle 50 baytın iletildiğini onaylar.
Sonra, TCP B`ye bağlı kullanıcı veri gönderir (olay 5). Bu veri bir segmente olarak paketlenir ve, diyagramdaki olay 6`da olduğu gibi, iletilir. TCP B`den gelen başlangıç sıra numarası 177 idi; böylece, TCP sıralamasına 178 ile başlar. Bu örnekte, TCP 10 oktet iletir. TCP A, acknowledgment numarası 188 olan bir segment geri döndürerek, TCP B`nin 10 segmentini onaylar. Olay 8`de, bu veri TCP A kullanıcısına teslim edilmiştir.
TCP Close İşlemleri
Şekil 1-15`de bir close işlemi gösterilmiştir. Olay 1`de; TCP A kullanıcısı, TCP B`deki eş üst katman protokolü ile işlemlerini bitirmek (close) istemektedir. Burada TCP A, FIN biti 1`e set edilmiş bir segment yollar. Şekil 1-14`deki işlemlerin devamı olduğu düşünülerek 151 sıra numarası kullanılmıştır.
Şekil 1-15 TCP Close İşlemleri
Şekil 1-16 Close İşlemleri, Segment Alışverişi, ve Konum Geçişlerinin İlişkisi
Bu segmentin TCP B`deki etkisi olay 3`ten görülmektedir. TCP B, TCP A`nın FIN SEQ 151`ini onaylar. TCP B`nin segmentinde SEQ = 188 ve ACK = 152`dir. Bundan sonra, TCP B kendi kullanıcısına bir closing primitive`i yayınlar (olay 4).
Uygulama, işlemlerinin konumuna bağlı olarak, close`u kabul edebilir veya etmeyebilir. Bu örnekte, kullanıcı uygulaması, olay 5`te olduğu gibi, close`u onaylar (acknowledges) ve kabul eder. Uygulama bunu takiben TCP B`ye bir "A`yı kapat" primitive`i yollar. Bu primitive TCP B tarafından FIN SEQ 188; ACK 152 olarak haritalanır, ki bu TCP B`nin yayınladığı son segmenttir (olay 6). Dikkat edelim ki, olay 6`da FIN bayrağı 1`e set edilmiştir, SEQ = 188 ve ACK = 152`dir. TCP A bu son segmenti ACK = 189 ile onaylar (olay 7). Tüm bu işlemlerin sonucu olay 8 ve olay 9`da gösterilmiştir. Böylece bağlantı-closed işaretleri kullanıcı uygulamalarına gönderilmiş olur. Bu şekilde bir close oluşturduğundan, TCP hoş close sağlayan bir protokol olarak anılır.
TCP bağlantı yönetiminin bu analizini tamamlamak için, Şekil 1-16`da konum diyagramının close işlemleri ile ilgili kısmı gösterilmiştir. Şeklin üst kısmı Şekil 1-15`in düşük ölçekli bir versiyonudur, ve burada yalnızca segment iletimleri gösterilmiştir.
OSI - Open System Interconnection Referance Model
ULP – Upper Lower Protocol
UDP – User Datagram Protocol
SMTP – Simple Mail Transfer Protocol
FTP – File Transfer Protocol
TCB – Transmission Control Block
PDU – TCP segmenti
DOD – Başlanğıcta ARPANET tarafından Amerika Savunma Bakanlığı için bugünkü karşılığı INTERNET ve MILNET olan kurum.
DECNet – Digital Marka bilgisayarlar ve diğerleri arasında iletişim için gelişirilen ağ protokolü
Rıfat Çölkesen, Bülent örencik - Bilgisayar Haberleşmesi ve Ağ Teknolojileri
Muhammed Ali Tal, Network Ekipmanları ve Router Konfigürasyonu
BAY Networks, TCP-IP Tutorial , www.baynetworks.com
T.Socolofscy, TCP-IP Tutorial.
O' Reilly, TCP/IP Network Administration.
O' Reilly, TCP Management.
Telif Hakları
Bu belgenin, Linux'da CD Yazımı, 0.1 sürümünün telif hakkı © 2003 Vügar SALAHLI'ya aittir. Bu belgeyi, Free Software Foundation tarafından yayınlanmış bulunan GNU Özgür Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün koşullarına bağlı kalarak kopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. Bu Lisansın bir kopyasını http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz.
Feragatname
Bu belgedeki bilgilerin kullanımından doğacak sorumluluklar, ve olası zararlardan belge yazarı sorumlu tutulamaz. Bu belgedeki bilgileri uygulama sorumluluğu uygulayana aittir.
Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen herhangi bir terim bir ticarî isim ya da kuruma itibar kazandırma olarak algılanmamalıdır. Bir ürün ya da markanın kullanılmış olması ona onay verildiği anlamında görülmemelidir.