İçeriğe atla

TCP

Kontrol Edilmiş
İnternet iletişim kuralları dizisi

OSI modeli

Katmanİletişim kuralları
7.Uygulama katmanı HTTP, DNS, SMTP, FTP, TFTP, UUCP, NNTP, SSL, SSH, IRC, SNMP, SIP, RTP, Telnet, ...
6.Sunum katmanıISO 8822, ISO 8823, ISO 8824, ITU-T T.73, ITU-T X.409, ...
5.Oturum katmanıNFS, SMB, ISO 8326, ISO 8327, ITU-T T.6299, ...
4.Ulaşım katmanıTCP, UDP, SCTP, DCCP, ...
3.Ağ katmanıIP, IPv4, IPv6, ICMP, ARP, İnternet Grup Yönetim Protokolü, IPX,...
2.Veri bağlantısı katmanıEthernet, HDLC, Wi-Fi, Token ring, FDDI, PPP, L2TP...
1.Donanım katmanıISDN, RS-232, EIA-422, RS-449, EIA-485, ...
Bir TCP bağlantısının kurulum (el sıkışma) şeması.

TCP (Transmission Control Protocol), TCP/IP protokol takımının taşıma katmanı protokollerinden birisidir. 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.

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ı 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ı 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 SYNchronize mesajı yollar
  • B bilgisayarı A bilgisayarının isteğini aldığına dair bir TCP SYN+ACKnowledgement 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
OffsetsOctet0 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)

Kaynakça

  1. ^ "Transmission Control Protocol (TCP)". 18 Ağustos 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Eylül 2023. 
  2. ^ Vinton G. Cerf, Robert E. Kahn, (Mayıs 1974). "A Protocol for Packet Network Intercommunication" (PDF). IEEE Transactions on Communications. 22 (5). ss. 637-648. doi:10.1109/tcom.1974.1092259. 4 Mart 2016 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 23 Temmuz 2015. 
  3. ^ "TCP/IP History". 6 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Temmuz 2015. 
  4. ^ Microsoft (21 Ocak 2005). "TCP/IP Background". 2 Şubat 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Temmuz 2015. 
  5. ^ "History of TCP/IP" (PDF). 3 Temmuz 2016 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 23 Temmuz 2015. 
  6. ^ IEEE. "TCP States". 28 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Ocak 2016. 
  7. ^ "TCP Finite State Machine". 17 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Ocak 2016. 
  8. ^ Northwestern University. "TCP/IP State Transition Diagram". 17 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 5 Ocak 2016. 
  9. ^ Internet Engineering Task Force (IETF) (Ağustos 2022). Bölüm 3.5"Transmission Control Protocol (TCP)". 18 Ağustos 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Ocak 2023. 
  10. ^ Internet Engineering Task Force (IETF) (Ağustos 2022). Bölüm 2.2"Transmission Control Protocol (TCP)". 18 Ağustos 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Ocak 2023. 
  11. ^ Internet Engineering Task Force (IETF) (Ağustos 2022). Bölüm 3.6"Transmission Control Protocol (TCP)". 18 Ağustos 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Ocak 2023. 
  12. ^ Nick McKeown (2008). "An Introduction to Computer Networks". 23 Temmuz 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Temmuz 2015. 
  13. ^ Purdue. "3-way handshake" (PDF). 4 Mart 2016 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 23 Temmuz 2015. 
  14. ^ Purdue. "3-way handshake". 4 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Temmuz 2015. 
  15. ^ Internet Engineering Task Force (IETF) (Ağustos 2022). Sayfa 3.1"Transmission Control Protocol (TCP)". 18 Ağustos 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Ocak 2023. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Dosya aktarım iletişim kuralı</span> Bilgisayarcılık terimi

Dosya aktarım iletişim kuralı,, bir veri yığınının - ASCII, EBCDIC ve binary- bir uç aygıttan diğerine iletimi için kullanılmaktadır.

Telnet, Internet ağı üzerindeki çok kullanıcılı bir makineye uzaktaki başka bir makineden bağlanmak için geliştirilen bir TCP/IP protokolü ve bu işi yapan programlara verilen genel isimdir. Telnet iki bileşenden oluşur: (1) iki tarafın nasıl iletişim kuracağını belirleyen protokolün kendisi ve (2) hizmeti sağlayan yazılım uygulaması.Kullanıcı verileri, İletim Kontrol Protokolü (TCP) üzerinden 8 bitlik bayt yönlendirmeli bir veri bağlantısında Telnet kontrol bilgisi ile bant içi serpiştirilir. Telnet, 1969'da RFC 15 ile başlayarak geliştirildi, RFC 855'te genişletildi ve ilk İnternet standartlarından biri olan İnternet Mühendisliği Görev Gücü (IETF) İnternet Standardı STD 8 olarak standartlaştırıldı. encryption sağlayan bazı Telnet eklentileri geliştirilmiştir. Bağlanılan makineye girebilmek (login) için orada bir kullanıcı isminizin (İng:username) ve bağlantının gerçekleşebilmesi için bir telnet erişim programınızın olması gereklidir. Fakat bazı kütüphane ve herkese açık telnet bazlı web servisleri, bağlantı sırasında kullanıcı ismi (numarası) istemeyebilirler; ya da, kullanıcı isim ve parola olarak ne yazmanız gerektiği bağlandığınızda otomatik olarak karşınıza çıkar. Telnet, BBS sistemlere İnternet üzerinden erişimde günümüzde yaygın olarak kullanılmaktadır. Telnet erişim programları, günümüzdeki işletim sistemlerinin çoğunda işletim sistemi ile birlikte gelmektedir. Çok kullanıcılı işletim sistemleri genellikle kullanıcılara metin tabanlı bir arayüz sunar ve bu sistemlerde tüm işlemler klavye vasıtası ile komut isteminden gerçekleştirilir.

Ağ katmanı veya 3. katman, veri paketinin farklı bir ağa gönderilmesi gerektiğinde, veri paketine yönlendiricilerin kullanacağı bilginin eklendiği katmandır. Örneğin IP iletişim kuralı bu katmanda görev yapar.

<span class="mw-page-title-main">İnternet iletişim kuralları dizisi</span>

İnternet protokol takımı, bilgisayarlar ve ağ cihazları arasında iletişimi sağlamak amacıyla standart olarak kabul edilmiş kurallar dizisidir. Bu kurallar dizisi temel olarak verinin ağ üzerinden ne şekilde paketleneceğini ve iletilen veride hata olup olmadığının nasıl denetleneceğini belirlemektedir.

Adres Çözümleme Protokolü ağ katmanı adreslerinin veri bağlantısı katmanı adreslerine çözümlenmesini sağlayan bir telekomünikasyon protokolüdür. 1982 yılında RFC 826 aracılığıyla tanımlanmıştır. STD 37 kodlu bir internet standardıdır.

<span class="mw-page-title-main">DHCP</span>

DHCP, ağda bulunan her bir bilgisayarın IP adresi, alt ağ maskesi, varsayılan ağ geçidi ve DNS sunucuları gibi ağ bağlantısı ayarlarının otomatik olarak atamasını sağlar. Bu sayede ağ yöneticileri, ağdaki her bir bilgisayarın IP adresi ve diğer ağ bağlantısı ayarlarını elle girerek zaman kaybetmek yerine, DHCP sunucusu üzerinden bu bilgileri otomatik olarak atayarak daha verimli ve güvenilir bir ağ yönetimi yapabilirler. Bu sayede sistem yönetim işlemi de kolaylaşmış olur. Ayrıca UDP, TCP'ye dayalı herhangi bir iletişim protokolünün ve DNS, NTP gibi ağ hizmetlerinin kullanımına olanak sağlar.

<span class="mw-page-title-main">Transport Layer Security</span> Internet Şifreleme Protokolü

Taşıma Katmanı Güvenliği (TLS) ve onun öncülü/selefi olan Güvenli Soket Katmanı (SSL), bilgisayar ağı üzerinden güvenli haberleşmeyi sağlamak için tasarlanmış kriptolama protokolleridir. X.509 sertifikalarını kullanırlar ve bundan dolayı karşı tarafla iletişime geçeceklerin kimlik doğrulaması asimetrik şifreleme ile yapılır ve bir simetrik anahtar üzerinde anlaşılır. Bu oturum anahtarı daha sonra taraflar arasındaki veri akışını şifrelemek için kullanılır. Bu, mesaj/veri gizliliğine ve mesaj kimlik doğrulama kodları için mesaj bütünlüğüne izin verir. Protokollerin birçok versiyonu ağ tarama, elektronik mail, İnternet üzerinden faks, anlık mesajlaşma ve İnternet üzerinden sesli iletişim gibi uygulamalarda yaygın olarak kullanılmaktadır. Bu durumda/içerikte/bağlamda en önemli özellik iletme gizliliğidir. Bundan dolayı kısa süreli oturum anahtarı, uzun süreli gizli simetrik anahtardan türetilememelidir.

Trivial File Transfer Protocol (TFTP) 1980 yılında tanımlanmış, FTP' nin temel fonksiyonel şekli olarak ifade edilen basit bir dosya transfer protokolüdür.

Datagram Congestion Control Protocol (DCCP), mesaj tabanlı bir Ulaşım katmanı protokolüdür.

Bilgisayar ağları konusunda geçen Önyükleme Protokolü veya BOOTP, bir yapılandırma sunucusundan bir IP adresi almak için bir ağ istemcisi tarafından kullanılan bir ağ protokolüdür. BOOTP protokolü ilk olarak RFC 951 içerisinde tanımlanmıştı.

Network Control Program (NCP), modern Internet'in atası olan ARPANET'in sunucu bilgisayarındaki iletişim kuralı yığının orta katmanlarını sağladı. Fakat bazen NCP'nin açılımı yanlışlıkla Network Control Protocol olarak söyleniyor. Bu terim contemporaneous belgesinde bulunmuyor.

<span class="mw-page-title-main">SYN saldırısı</span>

SYN saldırısı, DoS saldırısının bir biçimidir. Bu saldırı biçiminde bir saldırgan sistemin yasal trafiğini isteklere cevap veremeyecek duruma getirmek için yeterli sunucu kaynaklarını tüketme girişiminde bulunarak, hedef alınan sisteme ardışık SYN istekleri gönderir.

netstat

netstat ağ bağlantıları, yönlendirme tabloları ve ağ arayüzü istatistiklerini görüntüleyen bir komut satırı aracıdır. netstat komutu UNIX, Linux ve Windows NT tabanlı işletim sistemlerinde kullanılabilir.

SYN çerezleri, SYN saldırılarına karşı korunmak için kullanılan bir tekniğin en önemli unsurudur. İlk olarak Daniel J. Bernstein tarafından bulunmuştur, bu kişi "TCP sunucuları tarafından TCP sıra numaraları başlangıç değerlerinin belirli seçenekleridir" diyerek SYN cookies tanımlaması yapmıştır. Özellikle, SYN cookies kullanımı, SYN kuyruğu üste doldururken bağlantıların düşmesini engellemek için bir sunucu kabul eder. Bu sunucu istemciye uygun SYN+ACK cevabı geri döner fakat SYN kuyruk girişi atılır. Eğer sunucuya istemciden altsıralı ACK cevabı ulaşırsa sunucu TCP sıra numarasındaki şifrelenmiş bilgiyi kullanarak SYN kuyruk girişini tekrar yapılandırabilir.

TCP/IP, yapı olarak iki katmanlı bir haberleşme protokolüdür. Üst Katman TCP verinin iletimden önce paketlere ayrılmasını ve karşı tarafta bu paketlerin yeniden düzgün bir şekilde birleştirilmesini sağlar. Alt Katman IP ise, iletilen paketlerin istenilen ağ adresine yönlendirilmesini kontrol eder.

ACK mesajı, bir protokol aracılığıyla bağlantı kuran işlem, bilgisayar ya da aygıtın; iletişimin tamamlandığına ilişkin aldığı onay mesajıdır. ACK paketleri ile bağlantı kurulurken SYN paketlerinin alındığını kabul etmek için geçiş kontrol protokolü (TCP) kullanılır. Veri paketleri bir bağlantı kullanırken FIN paketleri bağlantıyı sonlandırır.

<span class="mw-page-title-main">WebSocket</span> bilgisayar iletişim protokolü

WebSocket, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalı sağlayan bir bilgisayar iletişim protokolüdür. WebSocket protokolü IETF tarafından 2011 yılında RFC 6455 ile standart hale getirilmiş ve WebIDL içerisindeki WebSocket API W3C tarafından standart hale getirilmektedir.

<span class="mw-page-title-main">Port tarayıcı</span>

Port tarayıcı, açık portlar için bir sunucuyu veya ana bilgisayarı araştırmak için tasarlanmış bir uygulamadır. Bu tür bir uygulama, yöneticiler tarafından bilgisayar ağlarının güvenlik politikalarını doğrulamak ve saldırganlar tarafından bir ana bilgisayar üzerinde çalışan ağ hizmetlerini tanımlamak ve güvenlik açıklarından yararlanmak için kullanılabilir.

Bir ICMP tüneli, ICMP yankı istekleri ve yanıt paketlerini kullanarak iki uzak bilgisayar arasında gizli bir bağlantı kurar. Bu tekniğin bir örneği ping istekleri ve yanıtları üzerinden tüm TCP trafiğini tünellemektir.

Bilgisayar ağlarında bağlantı noktası (port) veya bağlantı noktası numarası, bir bağlantı uç noktasını benzersiz bir şekilde tanımlamak ve verileri belirli bir hizmete yönlendirmek için atanan sanal bir numaradır. Yazılım düzeyinde, bir işletim sistemi içinde, bir bağlantı noktası belirli bir işlem veya bir ağ hizmeti türünü tanımlayan mantıksal bir yapıdır. Yazılım düzeyindeki bir bağlantı noktası, her taşıma katmanı protokolü ve adres kombinasyonu için kendisine atanan bağlantı noktası numarasıyla tanımlanır. Port numaralarını kullanan en yaygın taşıma protokolleri TCP ve UDP 'dir; bu port numaraları 16 bitlik işaretsiz sayılardır.