TCP/IP
(Transmission Control Protocol/Internet Protocol)
(İletişim Kontrol Protokolü / İnternet Protokolü)

Bu noktada bilgisayarlar arası iletişimi sağlayan temel protokol katmanlarına gelmiş bulunuyoruz. İsmini içindeki iki popüler protokolden almıştır. TCP/IP hemen hemen OSI modeli ile aynı fonksiyonu görür. Fakat bu kez 7 yerine 4 katmana ayrılmıştır. Günümüz de kullanılan en yaygın ağ olduğundan ağların ağı denilmektedir. Dolayısıyla OSI modelini gölgede bırakmıştır. Yani internetin temel protokol paketidir.

Bu protokol kendi katmanları içinde birbirinden farklı görevlere sahip protokolleri içeren bir protokol kümesidir.


OSI Modeli TCP/IP Modeli

Uygulama
Sunum
Oturum
Taşıma

Veri Bağı
Fiziksel
Uygulama


Taşıma
Ağ (Yönlendirme)
Fiziksel (Fiziksel-ağ)


ÖZELLİKLERİ
• Adresleme sistemi sayesinde herhangi bir bilgisayara verilen adresin bütün dünya üzerinde tek olması sağlanmıştır.
• Kullanıcı hizmetleri için geliştirilmiş yüksek seviyeli protokolleri barındırır.
• Özel bir Network bağlantısı gerektirmez. Neredeyse her tür ağ ortamında kullanılabilir. (Ethernet, Token Ring ağlarda veya Dial-up, x.25 bağlantılar yanı sıra bir çok ağ ortamını destekler. Fark ettiyseniz bu saydıklarım sadece Fiziksel Katman da olan şeylerdir. Bunlar dışında Yönlendirme, Taşıma, Uygulama katmanlarının da bağlantılarını eklememiz lazım)
• İnternet bağlantısı olmasa bile farklı donanım ve yazılım bağlantısında kullanılabilir.
• Açık bir standarttır. Yani herhangi bir işletim sisteminden ve donanımdan bağımsız olarak geliştirilebilir, ücretsizdir. Bu da TCP/IP’nin çok fazla desteklenmesini sağlar.
• Farklı işletim sistemleri arasında veri alışverişi için kullanılır.
• UNIX sistemleriyle tam uyumludur.
• Yönlendirilebilir (routable) bir protokoldür.





Her katman değişik görevlere sahip olup altındaki ve üstündeki katmanlar ile gerekli bilgi alışverişini sağlamakla yükümlüdür.

TCP/IP’de katmanlar en alt seviyeden başlamak üzere Fiziksel-Ağ erişim katmanı, Yönlendirme katmanı, Taşıma katmanı ve Uygulama katmanıdır. Veriler ağ üzerinde iletilmeden önce en üstteki katmandan en alltaki katmana aklatrılırlar. Bu veriler ağ üzerinden iletilip karşı noktaya ulaştıklarında bu sefer en alt seviyedeki katmandan en üst noktadaki katmana kadar giden bir yol izlerler. Bu esnada her katman kendi başlığını verilerden ayırır ve uygulama katmanında sadece veri kalır.

TCP-IP protokolünde veriler (paketler) her katmanda farklı bir isim alır. Bu isimlendirme yapılırken taşıma katmanı’nda kullanılan protokol dikkate alınır. TCP/IP kullanılırsa farklı, UDP kullanılırsa farklı isimler verilir.

Aşağıdaki şekilde hem verilerin katmanlar arasında izlediği yol, hem de verinin kullanılan protokole göre katmanlarda aldığı isimler yer alıyor.

Bu isimlendirmede en önemli olan, yönlendirme katmanındaki (IP Katmanındaki) datagramlarıdır. Paket anahtarlamalı bir ağ yapısında IP, bağlantısız iletim yöntemi kullanmaktadır. Burada veriler datagramlar dizisi halinde bir noktada diğerine iletilir. Yani büyük bir veri önce datagramlara bölünür ve bu datagramlar ağ üzerinde iletilir (bağlantısız yöntem kullanıldığı için farklı yolları izleyerek ve karışık sırada varış noktasına ulaşırlar) ve karşı noktada tekrar sıraya dizilerek birleştirilir. Fakat kaybolan datagramların tekrar gönderilmesi ve sıraya dizme işlemi üst seviyedeki protokollerce yapılır.

Burada datagram ve paket kavramına açıklık getirmek yararlı olabilir. TCP/IP ile ilgili kavramlarda datagram daha doğru bir terminolojidir. Çünkü datagram TCP/IP’de iletişim için kullanılan birim bilgi miktarıdır. Paket ise ağ alt yapısına göre değişen bir büyüklüktür. Fiziksel ortamda paketlerin büyüklükleri nasıl taşınacağı ile IP katmanı ilgilenmez.



Taşıma (Ulaşım) KatmanıBu katman bilginin karşı tarafa ulaştırılmasından sorumludur. Bilgi kayıplarını ve hatalı mesajlarını önlemek için gerekli kontrolleri yapar.
Hazırlanan veriyi alıp, (ihtiyaç duyulduğunda küçük bileşenlere ayırıp) ağ katmanına geçirerek, diğer uca bu parçaların doğru bir şekilde ulaştığına emin olmaktır. Uygulama katmanı tarafından ihtiyaç duyulan her taşıma bağlantısı için bir sanal ağ bağlantısı oluşturur.
Eğer taşıma bağlantısı yüksek bir kapasite isterse, birçok ağ bağlantısı oluşturup, kapasiteyi artırmak için veriyi bu bağlantılara paylaştırır. Öte yandan, farklı ağ bağlantılarının oluşturulması maliyeti artırdığı durumlarda çeşitli taşıma bağlantılarını bir ağ bağlantısı üzerinde maliyeti azaltmak için birleştirebilir. Tüm durumlarda taşıma katmanı birleştirme işinin uygulama katmanına yansımaması için gereklidir.
Birçok bilgisayar üstünde birden fazla programı çalıştırır, yani sisteme giren ve çıkan birçok bağlantı vardır. Bu yüzden hangi mesajın hangi bağlantıya ait olduğunun belirlenmesi için bir metoda ihtiyaç duyulur. Taşıma başlığı bu bilginin koyulabileceği bir yerdir.
Değişik mesajları bir kanal içinde birleştirmenin yanında, ağ boyunca bağlantıların kurulması ve kaldırılmasını da takip etmelidir. Bu, bir bilgisayar üzerinde kiminle konuştuğunu tarif edecek bir tür isimlendirme mekanizması gerekliliğini doğurur. Ayrıca hızlı bir bilgisayarın yavaş bir bilgisayarı aşmaması için bilgi akışını düzenleyecek bir mekanizmanın olması gereklidir.
Ulaşım katmanı, gerçek bir kaynaktan hedefe veya uçtan uca katmandır. Başka bir değişle, Kaynak sistemde çalışan bir program mesaj başlıkları ve denetim mesajlarını kullanarak, hedef sistemdeki benzeri bir programla konuşur.
Ayrıca uygulama katmanına sonuç olarak ağ kullanıcılarına ne tip servisler sunulacağına karar verir. Ulaşım bağlantısının en popüler tipi gönderildiği sıra ile hatasız uçtan-uca ulaştıran kanaldır. Ancak, diğer tip taşıma, servis ve taşıma bilgisi ayrılmış mesajları değişik lokasyonlara ileten ve hedefine ulaştırma konusunda herhangi bir garanti vermeyenidir. Servis tipi bağlantı sağlandığında belirlenir.
TCP ulaşım katmanı, isteği yapan "port(kapı)" ile servisi sağlayan port arasında bir "socket" bağlantısı gerçekleştirir. Bu katman ayrıca şu işlevlerden sorumludur:
• Veri bütünlüğünün kontrolü
• Paketlerin sıralanması
• Akış denetimi
• Paketlerin "tekrar iletim" isteklerinin yerine getirilmesi
• Üst uygulama katmanından gelen dışarıya doğru gönderilen verilerin uygun uzunlukta paketlere ayrılması
• Paketlerin IP katmanına aktarılması
• Dışardan içeriye gelen paketlerin ayrıştırılması(unpacking)
• Ayrıştırılmış paketlerin sunum katmanına aktarılması

Bu katmanda iki önemli protokol yer alır. TCP ve UDP.

TCP (Transmission Control Protocol - İletişim Kontrol Protokolü)
Verilerin tam ve güvenli bir şekilde iletilmesi, gönderilmesi isteniyorsa TCP protokolü, tam güvenlik istenmiyorsa UDP protokolü kullanılabilir. TCP ve UDP bir üst katmandan gelen verileri direkt olarak veya segmentlere ayırarak bir alt katmanlara gönderirler. Genellikle bu katmanda TCP kullanılır. UDP daha çok sorgulama işlemleri için kullanılır.
Temel işlevi, üst katmandan (uygulama katmanı) gelen bilginin segmentler haline dönüştürülmesi, iletişim ortamında kaybolan bilginin tekrar yollanması ve ayrı sıralar halinde gelebilen bilginin doğru sırada sıralanmasıdır. TCP katmanının hemen hemen tüm işi üstlendiği görülmekle beraber (küçük ağlar için bu doğrudur) büyük ve karmaşık ağlarda IP katmanı en önemli görevi üstlenmektedir. Bu gibi durumlarda değişik fiziksel katmanlardan geçmek, doğru yolu bulmak çok karmaşık bir iş halini almaktadır.
TCP, güvenilir veri iletimine ihtiyaç duyan uygulamalar tarafından kullanılır. Yaptığı kontrollerden ve veri iletiminden önce bağlantı kurması gerektiğinden TCP segmentlerinin formatı UDP paketlerine göre daha çok karışıktır.
TCP’de veriler segmentler halinde iletilir ve her segmentin başında sıra numarası vardır. Segmentdeki kontrol toplamı veriler hasar olup olmadığını anlamak içindir. Eğer hasar yoksa varış noktasındaki makine kaynak makineye onay gönderir. Belli bir süre içinde onay gelmezse segment tekrar gönderilir.
TCP veri transferinden önce bağlantı ihtiyacı duyduğu için, ilk gönderilen segmentler bağlantı kurma amaçlıdır. Ancak el sıkışma (handshake) adı verilen bir yöntemle bağlantı kurulduktan sonra veri iletimi başlar. TCP segment başlığındaki sıra numarası sayesinde veriler akıp giden bir byte ırmağı gibi algılar yoksa birbirinden bağımsız paketler gibi görmez. Pencere denilen bir yöntem sayesinde TCP’de kontroller daha kolay yapılır ve tek tek her segment için onay gönderilmez.
TCP’de UDP’ de olduğu gibi bir üst seviyedeki katmanda hangi uygulamaya segmentleri geçireceğine başlıktaki portlara bakarak karar verir.
Şu ana kadar sadece İnternet adresleri ile bir noktadan diğer noktaya ulaşılması konusundan bahsettik. Ancak birden fazla kişinin aynı sisteme ulaşmak istemesi durumunda neler olacağı konusuna henüz bir açıklık getirmedik. Doğal olarak bir segment’i doğru varış noktasına ulaştırmak tek başına yeterli değildir. TCP bu segment’in kime ait olduğunu da bilmek zorundadır. “Demultiplexing” bu soruna çare bulan yöntemdir. TCP/IP ‘de değişik seviyelerde “demultiplexing” yapılır. Bu işlem için gerekli bilgi bir seri “başlık” (header) içinde bulunmaktadır. Başlık, datagrama eklenen basit bir kaç octet’den oluşan bir bilgiden ibarettir. Yollanmak istenen mesajı bir mektuba benzetecek olursak başlık o mektubun zarfı ve zarf üzerindeki adres bilgisidir. Her katman kendi zarfını ve adres bilgisini yazıp bir alt katmana iletmekte ve o alt katmanda onu daha büyük bir zarfın içine koyup üzerine adres yazıp diğer katmana iletmektedir. Benzer işlem varış noktasında bu sefer ters sırada takip edilmektedir.
TCP katmanı bir dosyayı taşınabilecek büyüklükteki parçalara ayırır:
Her segment’in başına TCP bir başlık koyar. Bu başlık bilgisinin en önemlileri ‘port numarası’ ve ‘sıra numarası’ dır. Port numarası, örneğin birden fazla kişinin aynı anda dosya yollaması veya karşıdaki bilgisayara bağlanması durumunda TCP’ nin herkese verdiği farklı bir numaradır.
Üç kişi aynı anda dosya transferine başlamışsa TCP, 1000, 1001 ve 1002 “kaynak” port numaralarını bu üç kişiye verir böylece herkesin paketi birbirinden ayrılmış olur. Aynı zamanda varış noktasındaki TCP de ayrıca bir “varış” port numarası verir. Kaynak noktasındaki TCP’nin varış port numarasını bilmesi gereklidir ve bunu iletişim kurulduğu anda TCP karşı taraftan öğrenir.
Bu bilgiler başlıktaki “kaynak” ve “varış” port numaraları olarak belirlenmiş olur. Ayrıca her segment bir “sıra” numarasına sahiptir. Bu numara ile karşı taraf doğru sayıdaki segmenti eksiksiz alıp almadığını anlayabilir. Aslında TCP segmentleri değil oktetleri numaralar. Diyelim ki her datagram içinde 500 octet bilgi varsa ilk datagram numarası 0, ikinci datagram numarası 500, üçüncüsü 1000 şeklinde verilir. Başlık içinde bulunan üçüncü önemli bilgi ise “kontrol toplamı” (Checksum) sayısıdır. Bu sayı segment içindeki tüm oktetler toplanarak hesaplanır ve sonuç başlığın içine konur. Karşı noktadaki TCP kontrol toplamı hesabını tekrar yapar. Eğer bilgi yolda bozulmamışsa kaynak noktasındaki hesaplanan sayı ile varış noktasındaki hesaplanan sayı aynı çıkar. Aksi takdirde segment yolda bozulmuştur bu durumda bu datagram kaynak noktasından tekrar istenir. Aşağıdaki şekilde TCP protokolü tarafından hazırlanan segmentin formatı görülmektedir.

TCP protokolünün yaptığı işleri üç madde halinde özetlemek gerekirse

1. Bir üst katmandan gelen verinin uygun uzunlukta parçalara (segmentlere) bölünmesi,

2. Herbir parçaya, alıcı kısımda aynı biçimde sıraya koyulabilmesi amacıyla sıra numarası verilmesi

3. Kaybolan veya bozuk gelen parçaların tekrarlanması olarak verilebilir.

Başlık içinde kullanılan alanların amaçları aşağıda açıklanmıştır.

Gönderici Port No: Bir üst katmanda TCP hizmetini isteyen uygulama protokol prosesinin 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.

Alıcı Port No: Gönderilen veri paketinin alıcı tarafta hangi uygulama prosesine ait olduğunu belirtir.

Sıra Numarası: 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.

Onay Numarası: Gönderilen verinin en son hangi sekizlisinin alındığını göndericiye iletmek için kullanılır. Örneğin 4 sayısı gönderilmişse 4’e kadar olanlar alınmış 4. Paketin istendiğini bildirir.

Başlık Uzunluğu: TCP başlığında var olan 32 bit uzunluğundaki sözcüklerin sayısını gösterir.

Saklı Alan: İlerde olabilecek genişlemem için gizli tutulmuştur.

Kod Bitleri: Kontrol bilgilerini taşımak için kullanılır.

Pencere: Alıcının tamponunda (buffer) kullanılan alanın oktet olarak ifade edilmesi.

Hata Sınama Bitleri: Verinin ve başlığın hatasız olarak aktarılıp aktarılmadığını kontrol etmek için kullanılır.

Acil İşaretçisi: Acil veri alıcının uygulama katmanında öncelikle değerlendirilmesi gereken veridir.

Veri: Değerlendirilmesi istenen verinin bölüm içindeki yerini işaret eder.



UDP (User Datagram Protocol)
TCP gördüğümüz gibi mesajı segment’lere bölen ve bunları birleştiren bir katmandı. Fakat bazı uygulamalarda yollanan mesajlar tek bir datagram’ın içine girebilecek büyüklüktedirler. Bu cins mesajlara en güzel örnek adres kontrolüdür (name lookup). Internet üzerindeki bir bilgisayara ulaşmak için kullanıcılar Internet adresi yerine o bilgisayarın adını kullanırlar. Bilgisayar sistemi bağlantı kurmak için çalışmaya başlamadan önce bu ismi Internet adresine çevirmek durumundadır. Internet adreslerinin isimlerle karşılık tabloları belirli bilgisayarlar üzerinde tutulduğu için kullanıcının sistemi bu bilgisayardan bu adresi sorgulayıp öğrenmek durumundadır. Bu sorgulama çok kısa bir işlemdir ve tek bir segment içine sığar. Dolayısıyla bu iş için TCP katmanının kullanılması gereksizdir. Cevap paketinin yolda kaybolması durumunda en kötü ihtimalle bu sorgulama tekrar yapılır. Bu tür kullanımlar için TCP’ nin alternatifi protokoller vardır. Böyle amaçlar için en çok kullanılan protokol ise UDP’dir.
UDP hem bağlantısız hem de güvensiz bir protokoldür. Örneğin; bir veri iletimi gerçekleştirdiğimizde verimizi hazırlıyoruz, yollayan kısmına kendi adresimizi, alıcı kısmına hedef bilgisayarı yazıyoruz, yolluyoruz. Bu veri yerine gitti mi, gitmedi mi, yolda başına birşey mi geldi bilemiyoruz.
Peki hem bağlantısız hem de güvensiz olan bu protokolü niçin kullanıyoruz…?
UDP bağlantı kurmuyor, güvenli bir iletim de sağlamıyor ama bu eksiklikleri ona başka birşey kazandırıyor. Hız.
UDP protokolü basit bir protokol olduğu için hızlı iletişim kurmamız gereken yerlerde kullanmamız yararımıza olacaktır. Buradaki basitlikten kasıt TCP protokolü gibi verinin gönderilmesi gibi kontrolleri içermediği içindir. UDP protokolünü kullanan programlara örnek olarak 161 nolu portu kullanan SNMP servisini verebiliriz.

UDP, Uygulama programcılarının direk olarak Datagram servisine ulaşmalarını sağlar. Bu sayede uygulamalar protokolden kaynaklanan gecikmeleri minimuma indirerek mesaj alıp gönderebilirler.
UDP; gönderilen paketin yerine ulaşıp ulaşmadığını kontrol etmediğinden güvenilir olmayan, bağlantısız bir protokoldür. Fakat protokolün daha hızlı olmasını sağlayan da bu özelliktir.
UDP’ yi kullanmanın bazı sebepleri vardır. İletilecek veri miktarı azsa bu veriyi tekrar iletmek çoğu zaman bağlantı kurup güvenilir bir iletim yapmaktan daha kolay olmaktadır. Ayrıca soru cevap şeklindeki uygulamalar içinde UDP iyi bir adaydır. Soruya gelen cevap sorunun karşı tarafa ulaştığına delildir. Cevap belli bir süre içinde alınmazsa soru tekrar gönderilir.
UDP mesaj başlığındaki port numaralarına göre bir üst katmanda hangi uygulamaya mesajı ileteceğine karar verir.
IP katmanı kendi başlık bilgisini ve protokol numarasını yerleştirir (bu sefer protokol numarası alanına UDP’ye ait değer yazılır). Fakat UDP TCP’nin yaptıklarının hepsini yapmaz. Bilgi burada datagramlara bölünmez ve yollanan paketlerin kaydı tutulmaz. UDP’nin tek aldığı port numarasıdır. Böylece pek çok program UDP’yi kullanabilir. Daha az bilgi içerdiği için doğal olarak UDP başlığı TCP başlığına göre daha kısadır. Başlık, kaynak ve varış port numaraları ile kontrol toplamını içeren tüm bilgidir.

0 Comments:

Post a Comment