TCP (Transmission Control Protocol), TCP/IP protokol takımının aktarım katmanı protokollerinden birisidir.
Gelişmiş bilgisayar ağlarında paket anahtarlamalı bilgisayar iletişiminde kayıpsız veri gönderimi sağlayabilmek için TCP protokolü yazılmıştır. HTTP, HTTPS, POP3, SSH, SMTP, Telnet ve FTP gibi internet'in kullanıcı açısından en popüler protokollerinin veri iletimi TCP vasıtasıyla yapılır.
İlk olarak 1974 Mayıs ayında Elektrik ve Elektronik Mühendisleri Enstitüsü (IEEE) tarafından “A Protocol for Packet Network Intercommunication”1 başlıklı bir makale yayınlandı. Makalenin yazarları bu yazıda; Vint Cerf ve Bob Khan bir ağ üzerinde yer alan uçlar (nodes) arasında kaynak paylaşımını sağlamak amacıyla "packet-switching" yöntemini kullanan bir ağ protokolü tanımladılar. Bu protokol modelini paket anahtarlamalı olarak nitelendirdiler ve TCP‘nin temelleri atılmış oldu.
TCP/IP ilk olarak Amerika Savunma Bakanlığı'nın (DoD) veri iletişimi ihtiyacını karşılamak amacıyla tasarlanmıştır. 1960'lı yılların sonunda Amerika Savunma Bakanlığı'na bağlı olarak çalışan Advanced Research Projects Agency (ARPA), ABD'de bulunan üniversitelerle, ağ üzerinden veri alışverişinde bulunmak amacıyla, üretici markasından bağımsız bir protokol bulmak amacıyla çalışmaya başladı. Katılımcılar bu çalışmalar sonucunda ARPANET'i kurdular. ARPANET internet tarihindeki ilk paket-anahtarlamalı (packet-switching) ağ oldu. ARPANET ilk olarak 1969 yılının sonlarında dört adet uçla (node) çalışmaya başladı. Bu çalışmanın başarılı olmasının sonucunda "ARPA Internet (ARPANET)" adındaki ilk geniş alan ağı kurulmuş oldu.234
TCP'nin çalışma esası üç faz altında incelenebilir: 1) Öncelikle hedefle bir bağlantı gerçekleşir. 2) Bağlantı gerçekleştikten sonra veri transferi yapılır. 3) Veri transferi yapıldıktan sonra da bağlantı sona erdirilir.
TCP'de bu üç fazın gerçekleşmesi için bazı ara durumlar (state) tanımlanmıştır. Bu durumlar aşağıdaki gibidir:567
LISTEN
(sunucu) İstemci tarafından bir TCP bağlantı isteğinin beklenildiği durum
SYN-SENT
(istemci) Karşı tarafa TCP bağlantısı isteği gönderildikten sonra karşı taraftan bağlantı isteğine cevap beklenilen durum
SYN-RECEIVED
(sunucu) İstemci tarafından SYN bayrağı ile yapılan bağlantı isteğine sunucunun SYN-ACK bayrağı ile cevap vermesinden sonraki bekleme durum
ESTABLISHED
(sunucu ve istemci) Bağlantı kurulduktan sonraki veri transferinin yapıldığı durum
FIN-WAIT-1
(sunucu ve istemci)
FIN-WAIT-2
(sunucu ve istemci) karşı taraftan TCP bağlantısının bitirilme isteğinin beklendiği durum
CLOSE-WAIT
(sunucu ve istemci)
CLOSING
(sunucu ve istemci) Karşı tarafa bağlantının bitirilmesine dair bir ACK bayrağı gönderildikten sonra bağlantının bitmesini bekleme durumu
LAST-ACK
(sunucu ve istemci)
TIME-WAIT
(sunucu ve istemci)
CLOSED
(sunucu ve istemci) TCP bağlantısının tamamen bittiği durum
A bilgisayarı B bilgisayarına TCP yoluyla bağlanmak istediğinde şu yol izlenir:
Üç zamanlı el sıkışma adı verilen bu yöntem sonucunda TCP bağlantısı açılmış olur.
Bağlantı oluşturulduktan sonra, B bilgisayarı A bilgisayarından paketler almaya başlar. B, her aldığı paketten sonra bir süre bekledikten sonra en son düzgün olarak aldığı paket grubunu A'ya bildirir. Gelen bildirimlere göre A, daha sonra hangi paketleri yollaması gerektiğine karar verir ve yollar. Arada kaybolan paketler (veya paket alındı bilgileri) tekrar tekrar gönderir.
Veri iletişimi bitince bilgisayarlardan herhangi biri diğerine TCP kapatma mesajı yollar. Diğer bilgisayar, kapatmayı teyit etme paketi ve kapatma isteği yollar. Son olarak, diğer bilgisayar da kapatma teyidini yollar ve bağlantı kapatılmış olur.
Bu işlemin adımları tam olarak şöyledir:
Bu işlemlerin sonunda TCP bağlantısı sonlandırılmış olur. Buna 4 zamanlı el sıkışma denir.8
Görüldüğü üzere, bağlantının kurulmasından farklı olarak bağlantı her cihaz için ayrıca kapatılmaktadır. Bunun nedeni, istenildiğinde bağlantının tek yönlü olarak açık tutulabilmesini sağlamaktır. Bunun için tek tarafın bağlantı kapama adımlarını gerçekleştirmesi gerekir.
TCP bağlantı tabanlı (connection-oriented) bir protokoldür.9 TCP bağlantı tabanlı bir protokol olduğu için iki bilgisayar, üçlü el sıkışma (3-way handshaking)1011 yaptıktan sonra veri alışverişi yapmaya başlar.
TCP, taşıma katmanında verileri parçalara bölerek her bir parçanın önüne başlık bilgisi ekler. Başlık bilgisiyle birlikte bu veriye 'TCP Segmenti' denir.
Offsets | Octet | 0 | 1 | 2 | 3 |
---|---|---|---|---|---|
Octet | Bit | 0 | 1 | 2 | 3 |
0 | 0 | Source port | Destination port | ||
4 | 32 | Sequence number | |||
8 | 64 | Acknowledgment number (if ACK set) | |||
12 | 96 | Data offset | Reserved 0`` ``0`` ``0 | N S | |C W R |
16 | 128 | Checksum | Urgent pointer (if URG set) | ||
20 ... | 160 ... | Options (if data offset > 5. Padded at the end with "0" bytes if necessary.) ... |
Kaynak Port (Source Port): Veriyi gönderen bilgisayarın kullandığı TCP portudur.
Hedef Port (Destination Port): Hedef bilgisayarın TCP portudur.
Sıra Numarası (Sequence Number): TCP'nin verinin böldüğü her bir segmentine verdiği numaradır.
Onay Numarası (ACK Number): Alınan bir SYN paketine karşılık olan onay mesajı ACK biti ile gönderilir.
Başlık Uzunluğu (Header Length/Data Offset): TCP başlığının uzunluğunu gösterir.
Rezerve Edilmiş (Reserved): İleride kullanılmak üzere saklı tutulur.
Kod Bitleri ya da Bayraklar (Code Bits or Flags): Segment ile ilgili kontrol bilgilerini taşır.
Pencere (Window): Akış denetimi için kullanılır.
Hata Kontrol Bitleri (Checksum): Segmentin hatalı ulaşıp ulaşmadığını kontrol etmek için kullanılır.
Acil İşaretçisi (Urgent Pointer): Bir verinin acil olarak iletilmek istendiği durumlarda kullanılır.
Seçenek (Option): TCP segmentinin maksimum boyutunun bilgisini taşır.
**Veri (Data):**Verinin bulunduğu kısım.12
Orijinal kaynak: tcp. Creative Commons Atıf-BenzerPaylaşım Lisansı ile paylaşılmıştır.
Ne Demek sitesindeki bilgiler kullanıcılar vasıtasıyla veya otomatik oluşturulmuştur. Buradaki bilgilerin doğru olduğu garanti edilmez. Düzeltilmesi gereken bilgi olduğunu düşünüyorsanız bizimle iletişime geçiniz. Her türlü görüş, destek ve önerileriniz için iletisim@nedemek.page