TCP

| Bilgi | Detay |
| --- | --- |
| İnternet iletişim kuralları dizisi OSI modeli | |
|  | |
| 7. | |
| 6. | |
| 5. | |
| 4. | |
| 3. | |
| 2. | |
| 1. | |

Bir TCP bağlantısının uç nokta durum geçişleri ile beraber kurulum (el sıkışma) ve sona erdirilme şeması. TCP (Transmission Control Protocol) , TCP/IP protokol takımının taşıma katmanı protokollerinden birisidir. İlk ağ implementasyonunda, İnternet Protokolü (IP) ile birlikte çalışarak TCP ortaya çıkmıştır. Bu nedenle, tüm takım genellikle TCP/IP olarak adlandırılır. TCP, IP ağı üzerinden iletişim kuran uygulamalar arasında bir dizi oktetin (baytların) güvenilir, sıralı ve hata kontrolü yapılmış bir şekilde iletimini sağlar. Dünya Çapında Ağ (WWW), e-posta, uzak yönetim, dosya transferi ve akış medyası gibi büyük internet uygulamaları, TCP'yi kullanır; bu protokol, TCP/IP takımının taşıma katmanının bir parçasıdır. SSL/TLS sıklıkla TCP'nin üstünde çalışır. Bugün TCP, çoğu İnternet iletişimi için temel bir protokol olarak kalmakta ve farklı ağlar arasında güvenilir veri aktarımını sağlamaktadır. Son güncellemesi Ağustos 2022 tarihi itibarıyla RFC 9293 [ 1 ] içerisinde tanımlanmıştır. 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 internetin kullanıcı açısından en popüler protokollerinin veri iletimi TCP vasıtasıyla yapılır. TCP, bağlantı odaklıdır, yani gönderici ve alıcı, ilk olarak bağlantıyı kurmak için üzerinde anlaşılmış parametrelere dayanarak bir bağlantı kurmak zorundadır; bunu üç aşamalı el sıkışma (3-way handshake) prosedürüyle yaparlar. Sunucu, bağlantı talepleri için dinlemede olmalı (pasif açılış) ve bir bağlantı kurulmadan önce istemciden gelen talepleri beklemelidir. Üç aşamalı el sıkışma (aktif açılış), veri iletimi yeniden gönderimi ve hata tespiti güvenilirliği artırır, ancak gecikmeyi uzatır. Güvenilir veri akışı servisi gerektirmeyen uygulamalar, zaman öncelikli olup güvenilirlikten ödün veren Bağlantısız Datagram Protokolü (UDP) kullanabilirler. TCP, ağ tıkanıklığını önlemeyi de içerir. Ancak, TCP'nin bazı güvenlik açıkları vardır; bunlar arasında hizmeti engelleme (Denial of Service), bağlantı kaçırma, TCP veto ve sıfırlama saldırıları yer alır.

Tarihçe İlk olarak 1974 Mayıs ayında Elektrik ve Elektronik Mühendisleri Enstitüsü ( IEEE ) tarafından “A Protocol for Packet Network Intercommunication” [ 2 ] başlıklı bir makale yayınlandı. Makalenin yazarları bu yazıda; Vint Cerf ve Bob Kahn 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ı [ en ] 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ı [ en ] 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. [ 3 ] [ 4 ] [ 5 ]

Çalışma Esasları 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: [ 6 ] [ 7 ] [ 8 ] 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 TCP bağlantısı nasıl kurulur? A bilgisayarı B bilgisayarına TCP yoluyla bağlanmak istediğinde şu yol izlenir: A bilgisayarı B bilgisayarına TCP SYN chronize mesajı yollar B bilgisayarı A bilgisayarının isteğini aldığına dair bir TCP SYN + ACK nowledgement mesajı yollar A bilgisayarı B bilgisayarına TCP ACK mesajı yollar B bilgisayarı bir ACK "TCP connection is ESTABLISHED " mesajı alır Üç zamanlı el sıkışma adı verilen bu yöntem sonucunda TCP bağlantısı açılmış olur. [ 9 ] Veri iletimi TCP'de veri iletimi çift yönlüdür. Yani her iki taraf da birbirlerine aynı bağlantı içerisinde veri gönderebilmektedir. [ 10 ] 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. TCP bağlantısının sona erdirilmesi 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: A bilgisayarı B bilgisayarına bağlantıyı sonlandırmak istediğine dair TCP FIN mesajı yollar. B bilgisayarı A bilgisayarına bağlantı sonlandırma isteğini aldığına dair TCP ACK mesajı yollar. B bilgisayarı A bilgisayarına bağlantıyı sonlandırmak istediğine dair TCP FIN mesajı yollar. A bilgisayarı B bilgisayarına bağlantı sonlandırma isteğini aldığına dair TCP ACK mesajı yollar. Bu işlemlerin sonunda TCP bağlantısı sonlandırılmış olur. Buna 4 zamanlı el sıkışma denir. [ 11 ] 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 Segmenti TCP bağlantı tabanlı (connection-oriented) bir protokoldür. [ 12 ] TCP bağlantı tabanlı bir protokol olduğu için iki bilgisayar, üçlü el sıkışma (3-way handshaking) [ 13 ] [ 14 ] yaptıktan sonra veri alışverişi yapmaya başlar. TCP, taşıma katmanında alt katmandan gelen verilere bir başlık bilgisi ekler. Başlık bilgisiyle birlikte bu veriye 'TCP Segmenti' denir. TCP segment header Offsets Octet [ en ] 0 1 2 3 Octet Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 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 0 CWR ECE URG ACK PSH RST SYN FIN Window Size 16 128 Checksum Urgent pointer (if URG set) 20 160 Options (if data offset > 5. Padded at the end with "0" bits if necessary.) ⋮ ⋮ 56 448 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. [ 15 ]

RFC Versiyonları RFC 675 – Specification of Internet Transmission Control Program, December 1974 Version RFC 793 – TCP v4 RFC 1122 – includes some error corrections for TCP RFC 1323 – TCP Extensions for High Performance [Obsoleted by RFC 7323 ] RFC 1379 – Extending TCP for Transactions-Concepts [Obsoleted by RFC 6247 ] RFC 1948 – Defending Against Sequence Number Attacks RFC 2018 – TCP Selective Acknowledgment Options RFC 5681 – TCP Congestion Control RFC 6247 – Moving the Undeployed TCP Extensions RFC 1072 , 1106 , 1110 , 1145 , 1146 , 1379 , 1644 and 1693 to Historic Status RFC 6298 – Computing TCP's Retransmission Timer RFC 6824 – TCP Extensions for Multipath Operation with Multiple Addresses RFC 7323 – TCP Extensions for High Performance RFC 7414 – A Roadmap for TCP Specification Documents RFC 9293 – Transmission Control Protocol (TCP)