9. TCP ve UDP
3. bölümde şekil 3-7’de ve burada Şekil 9-1’de gösterildiği gibi, TCP
yedi-katmanlı OSI modelinin aktarım katmanında yer alır (hatırlayalım ki
Internet katmanları oturum ve sunum katmanlarını içermez). Şekilde görüldüğü gibi
TCP kullanıcı veri transferini desteklemek için router’lara yüklenmemiştir.
TCP host bilgisayarda veya kullanıcı verisinin uçtan-uca entegrasyonu ile
görevli bir cihazdadır. Eğer TCP router’da çalıştırılırsa; ağ yönetimi,
router’la terminal oturumu, vs. aktiviteleri desteklemek için çalıştırılır
(birkaç istisna dışında). FTP, SMTP gibi uygulama protokolleri TCP’nin servislerinden yararlanırlar.
Çoğu TCP fonksiyonu (akış kontrolü, güvenilirlik, ve sıralama gibi) bir
uygulama programı ile başarılabilir. Ancak, her bir uygulama programı için bu
fonksiyonları tekrar tekrar kodlamak hoş değildir. Tercih edilen yaklaşım
geniş kullanım alanına sahip fonksiyonları sağlayan genelleştirilmiş
bir
yazılım geliştirmektir. 9.1 TCP’nin Ana Özellikleri TCP üst katmanlara aşağıdaki servisleri sağlar: · bağlantı-yönlendirmeli veri yönetimi 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 9-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 9-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 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. Tablo 9-1
Yaygın Internet Port Numaraları (Ayrıntılı Değildir)
9.2 Portlar ve Soketler 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, 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 9-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. 9.2.1 Port atama ve port sağlama örnekleri Şekil 9-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 9-2 Varış
Portu Kullanarak bir Oturumun Kurulması Şekil 9-3’de, Şekil 9-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 9-4’te de gördüğümüz gibi B host’u kaynak portunu 400 olarak
seçmiştir.
Şekil 9-3 Port
Numaralarının Sağlanması Şekil 9-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. 9.2.1.1 Ç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 9-4’te, üç kullanıcı port 25’i paylaşmaktadırlar (daha
sonra açıklayacağımız UDP de port çoğullamasını destekler). 9.3 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. 9.4 İletim Kontrol Bloğu 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ı 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 9-2’de anlatılmıştır.
Sıradaki bölümde bunların nasıl kullanıldıklarını anlatacağız. Tablo 9-2
Gönderme ve Alma Değişkenleri
9.5 TCP Pencere ve Akış-Kontrol Mekanizmaları Tablo 9-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 9-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 9-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 9-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 9-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 9-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. 9.6 Yeniden-İletim İşlemleri 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 9-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 9-5 ve 9-6’daki pencere
değerleri ve işaretçileri Şekil 9-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 9-7 TCP
Yeniden-İletim Şeması 9.7 TCP ve Kullanıcı Arabirimleri TCP üst-katman kullanıcıları ile arabirim sağlamak için servis
tanım/primitive kavramını kullanır. Arabirim Tablo 9-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 793 bu
arabirimleri genel olarak tanımlar, ancak satıcılar arabirimleri farklı
şekillerde gerçekleştirebilirler. Şekil 9-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 9-3 Tipik TCP
Kullanıcı Arabirimleri
Şekil 9-8 Üst
Katman, TCP, ve IP’nin İlişkileri 9.8 Segmentler İki TCP modülü arasında değiştirilen PDU’lara segment denir. Şekil
9-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 9-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 9-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. 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. 9.9 TCP Bağlantı Yönetim İşlemleri 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 9-10’da
mevcuttur. Bu şekli TCP’nin belirli özelliklerini açıklamak için kullanacağız.
9.9.1 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ı TCB’de tutulur.
Şekil 9-10 TCP
Bağlantı Yönetim Konum Diyagramı 9.9.1.1 TCP open Şekil 9-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 9-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 9-12’yi kullanarak, Şekil 9-11’deki işlemlerin Şekil 9-10’daki
konum diyagramı kuralları ile ilişkisini gösterebiliriz. Şekil 9-10’daki
bilgi yoğunlaştırılıp yeniden çizilerek Şekil 9-12 oluşturulmuştur. Şekil
9-12’de open işlemlerinin segment alışverişleri ve konum geçişleri ile ilişkisi
gösterilmiştir. Şeklin en üstü, Şekil 9-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 9-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 9-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 9-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 9-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 9-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 9-13’te, open’lar A ve
B’den yaklaşık olarak aynı anda yollanmıştır. Bu şekildeki olaylar
şöyle gelişir: Şekil 9-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. 9.9.1.2 TCP veri transfer işlemleri Şekil 9-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 9-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. 9.9.1.3 TCP close işlemleri Şekil 9-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 9-14’deki işlemlerin devamı olduğu düşünülerek 151 sıra numarası
kullanılmıştır. Şekil 9-15 TCP
Close İşlemleri Şekil 9-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 9-16’da konum
diyagramının close işlemleri ile ilgili kısmı gösterilmiştir. Şeklin üst
kısmı Şekil 9-15’in düşük ölçekli bir versiyonudur, ve burada yalnızca
segment iletimleri gösterilmiştir. 9.9.2 TCP bağlantı tablosu The Internet Management Information Base (MIB) TCP bağlantı tablosunu
tanımlar. Bu tablo var olan her bir TCP bağlantısı ile ilgili bilgileri
içerir. Şekil 9-17’de gösterildiği gibi, tablo beş sütun ve her bir bağlantı
için bir satırdan oluşur. Bağlantı konumu sütunu her bir TCP bağlantısının konumunu tanımlar
(closed, listen, finWait 1, closing, vs.). Yerel Adres sütunu her bir TCP bağlantısı için yerel IP adresini içerir. Yerel Port sütunu her bir TCP bağlantısı için yerel port numarasını
içerir. Uzak Adres sütunu her bir TCP bağlantısı için uzak IP adresini içerir. Uzak Port sütunu her bir TCP bağlantısı için uzak port numarasını içerir. Şekil 9-17 TCP
Bağlantı Tablosu 9.10 User Datagram Protokolü Önceki bölümlerde bağlantısız protokolü tartışmıştık. Bağlantısız
protokolün güvenirlilik ve akış-kontrol mekanizmaları sağlamadığını
hatırlayalım. Aynı zamanda hiçbir hata bulma prosedürü yoktur. UDP, işletim
sistemi her bir aktif UDP soketi ile ilgili bilgileri sağlamak zorunda
olmasına rağmen, bağlantısız bir protokol olarak sınıflandırılır. Belki de
UDP’nin daha iyi bir tanımı bağlantı- yönlendirmelidir denerek yapılabilir,
ancak UDP normal olarak bağlantı-yönlendirmeli protokollerde geniş olarak
kullanılan konum yönetim işlemlerini yürütmez. UDP bazen TCP’nin tüm
servislerinin gerekli olmadığı yerlerde kullanılır. Örneğin, TFTP (önemsiz
FTP), basit ağ yönetim protokolü (SNMP) ve RPC (remote procedure call) UDP’yi
kullanır. UDP, IP’ye basit bir uygulama arabirimi olarak hizmet eder. Güvenilirlik,
akış-kontrol, veya hata-bulma ölçümleri olmadığından, prensip olarak, IP’nin
alışverişi ve uygulamaların trafiği için bir port multiplexer/demultiplexer
gibi hizmet eder. Şekil 9-18’de UDP’nin IP’den gelen datagramları nasıl kabul
ettiği gösterilmiştir. UDP, datagramları doğru üst katman uygulamalarına yönlendirmek için port kavramını
kullanır. UDP datagramı, bir varış port numarası ve bir kaynak port numarası
içerir. UDP modülü varış numarasını trafiği doğru alıcıya teslim edebilmek
için kullanır. 9.10.1 UDP mesajının formatı Bu protokolü açıklamak için en iyi yol belki de mesajını ve mesajındaki
alanları incelemektir. Şekil 9-19’da gösterildiği gibi, format oldukça
basittir ve aşağıdaki alanları içerir: Kaynak portu: Bu değer gönderici uygulama prosesinin portunu tanıtır. Bu
alan opsiyoneldir, ve eğer kullanılmazsa, buraya 0 değeri yerleştirilir.
Şekil 9-18 UDP’nin
Çoğullanması
Şekil 9-19 UDP
Datagramının Formatı Sözde-başlık (aynı zamanda TCP’de de kullanılır) UDP veri biriminin doğru
varış adresine varmasını sağlar. Böylece, sözde-başlık IP adresleri içerir ve
checksum hesabına katılır. Son varış sözde-başlığa (ve, tabii ki, UDP veri
biriminin kalanına) tamamlayıcı bir checksum sağlayarak; trafiğin
değişmediğini ve doğru varış adresine vardığını kanıtlar. UDP birçok
geçiş-tabanlı (transaction-based) uygulama sistemlerinde kullanılan
servislerin minimal bir seviyesidir, şöyle ki eğer tüm TCP servislerine
ihtiyaç yoksa UDP oldukça kullanışlı olur. 9.10.2 UDP ile TCP’nin Karşılaştırılması UDP ve TCP aynı katmanda çalışan protokoller olmalarına karşın servis
tarzları farklıdır. Bu iki protokolün aynı anda kullanılması da mümkün
değildir (aynı paket içerisinde yer alamazlar). Birini diğerine göre farklı
kılan konular aşağıda bir tablo halinde gösterilmiştir. Tablo 9-4 UDP ve
TCP Servislerinin Karşılaştırılması
|