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
· 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 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’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.

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,
 
 Gönderici soket = kaynak IP adresi + kaynak port numarası
 Alıcı soket = varış IP adresi + varış 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 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ı
· 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 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.
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.

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.
Varış portu: Bu değer varış host cihazındaki alıcı prosesini tanıtır.
Uzunluk: Bu değer, başlık ve veri de içinde olmak üzere, kullanıcı datagramının uzunluğunu gösterir.
Checksum: Bu opsiyonel değer; sözde-IP başlığı, UDP başlığı, ve verinin 1’lerinin toplamının tümleyeninin, 16-bit 1’e tümlemesini içerir. UDP aynı zamanda herhangi bir doldurma (padding) için de bir checksum sağlar.
 

Ş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ı