Geçiş kontrol protokolü - Transmission Control Protocol

İletim Denetimi Protokolü ( TCP ) ana biridir protokoller arasında internet protokol grubu . İnternet Protokolünü (IP) tamamladığı ilk ağ uygulamasından kaynaklanmıştır . Bu nedenle, paketin tamamına yaygın olarak TCP/IP denir . TCP, bir IP ağı aracılığıyla iletişim kuran ana bilgisayarlarda çalışan uygulamalar arasında sekizli (bayt) akışının güvenilir , düzenli ve hata denetimli teslimini sağlar . Gibi Başlıca internet uygulamaları World Wide Web , e-posta , uzaktan yönetim vedosya aktarımı , TCP/IP paketinin Aktarım Katmanının bir parçası olan TCP'ye dayanır . SSL/TLS genellikle TCP'nin üzerinde çalışır.

TCP bağlantı yönelimlidir ve veri gönderilmeden önce istemci ile sunucu arasında bir bağlantı kurulur. Sunucu, bir bağlantı kurulmadan önce istemcilerden gelen bağlantı isteklerini dinliyor (pasif açık) olmalıdır. Üç yönlü el sıkışma (aktif açık), yeniden iletim ve hata algılama, güvenilirliği artırır ancak gecikmeyi uzatır . Güvenilir veri akışı hizmeti gerektirmeyen uygulamalar, güvenilirlik yerine zamana öncelik veren bağlantısız bir veri birimi hizmeti sağlayan Kullanıcı Veri Birimi Protokolü'nü (UDP) kullanabilir . TCP ağ tıkanıklığını önlemeyi kullanır . Ancak, hizmet reddi , bağlantı ele geçirme , TCP veto ve saldırı sıfırlama dahil olmak üzere TCP'ye yönelik güvenlik açıkları vardır .

Tarihsel köken

Mayıs 1974'te Vint Cerf ve Bob Kahn , ağ düğümleri arasında paket anahtarlamayı kullanarak kaynakları paylaşmak için bir ağlar arası protokol tanımladılar . Yazarlar , Fransız CYCLADES projesindeki kavramları yeni ağa dahil etmek için Gérard Le Lann ile birlikte çalışıyorlardı . Ortaya çıkan protokolün şartname, RFC 675 ( İnternet İletim Kontrol Programı Şartname ) Vint Cerf tarafından yazılmıştır Yogen Dalal teriminin ilk doğrulan kullanımı içeriyor Aralık 1974'de, Carl Sunshine ve yayınlanan internette a kadar, internetwork'ün kısaltması .  

Bu modelin merkezi bir kontrol bileşeni, ana bilgisayarlar arasında hem bağlantı yönelimli bağlantıları hem de datagram hizmetlerini birleştiren İletim Kontrol Programıydı . Monolitik İletim Kontrol Programı daha sonra İletim Kontrol Protokolü ve İnternet Protokolünden oluşan modüler bir mimariye bölündü . Bu , resmi olarak Savunma Bakanlığı (DOD) modeli ve ARPANET modeli ve nihayetinde İnternet Protokol Paketi olarak adlandırılmasına rağmen, gayri resmi olarak TCP/IP olarak bilinen bir ağ modeliyle sonuçlandı .

2004'te Vint Cerf ve Bob Kahn , TCP/IP konusundaki temel çalışmaları nedeniyle Turing Ödülü'nü aldı .

ağ işlevi

İletim Kontrol Protokolü, bir uygulama programı ile İnternet Protokolü arasında orta düzeyde bir iletişim hizmeti sağlar. Bu konakçı-ana bilgisayara bağlantı sağlar nakil katmanının bir Internet model . Bir uygulama, gerektiği gibi, başka bir ev sahibi bir bağlantı yoluyla verilerin gönderilmesi için özel mekanizmalar bilmesine gerek yoktur IP parçalanma yerleştirmek için en büyük iletim birimi iletim ortamı. Aktarım katmanında, TCP tüm anlaşma ve aktarım ayrıntılarını işler ve tipik olarak bir ağ soketi arabirimi aracılığıyla uygulamaya ağ bağlantısının bir soyutlamasını sunar .

Ağ tıkanıklığı , trafik yükü dengelemesi veya öngörülemeyen ağ davranışı nedeniyle protokol yığınının daha düşük seviyelerinde IP paketleri kaybolabilir , çoğaltılabilir veya düzensiz teslim edilebilir . TCP bu sorunları algılar , kaybolan verilerin yeniden iletilmesini ister , bozuk verileri yeniden düzenler ve hatta diğer sorunların oluşumunu azaltmak için ağ tıkanıklığını en aza indirmeye yardımcı olur. Veriler hala teslim edilmemişse, bu hata kaynağa bildirilir. TCP alıcısı orijinal olarak iletilen sekizli dizisini yeniden bir araya getirdiğinde, bunları alıcı uygulamaya iletir. Böylece, TCP , uygulamanın iletişimini temeldeki ağ ayrıntılarından soyutlar .

TCP, World Wide Web (WWW), e-posta , Dosya Aktarım Protokolü , Güvenli Kabuk , eşler arası dosya paylaşımı ve akış ortamı dahil olmak üzere birçok internet uygulaması tarafından yaygın olarak kullanılmaktadır .

TCP, zamanında teslim yerine doğru teslimat için optimize edilmiştir ve sıra dışı mesajları veya kayıp mesajların yeniden iletimlerini beklerken nispeten uzun gecikmelere (saniyeler düzeyinde) neden olabilir. Bu nedenle, IP üzerinden ses gibi gerçek zamanlı uygulamalar için özellikle uygun değildir . Bu tür uygulamalar için, bunun yerine genellikle Kullanıcı Datagram Protokolü (UDP) üzerinden çalışan Gerçek Zamanlı Aktarım Protokolü (RTP) gibi protokoller önerilir.

TCP, alınan tüm baytların gönderilenlerle aynı ve aynı sırada olmasını garanti eden güvenilir bir akış dağıtım hizmetidir. Birçok ağ tarafından paket aktarımı güvenilir olmadığından, TCP bunu yeniden iletimle pozitif alındı ​​olarak bilinen bir teknik kullanarak başarır . Bu, alıcının verileri alırken bir onay mesajıyla yanıt vermesini gerektirir. Gönderici, gönderdiği her paketin kaydını tutar ve paketin gönderildiği zamandan itibaren bir zamanlayıcı tutar. Gönderici, onay almadan önce zamanlayıcının süresi dolarsa, paketi yeniden iletir. Bir paketin kaybolması veya bozulması durumunda zamanlayıcı gereklidir.

IP, verilerin fiili teslimini gerçekleştirirken, TCP , ağ üzerinden verimli yönlendirme için bir mesajın bölündüğü ayrı veri iletim birimleri olan segmentleri takip eder . Örneğin, bir HTML dosyası bir web sunucusundan gönderildiğinde, o sunucunun TCP yazılım katmanı segmentlerine dosyayı böler ve ileriye onları tek tek için internet tabakasının içinde ağ yığını . İnternet katmanı yazılımı, (diğer verilerin yanı sıra) hedef IP adresini içeren bir başlık ekleyerek her TCP segmentini bir IP paketine yerleştirir . Hedef bilgisayardaki istemci programı bunları aldığında, taşıma katmanındaki TCP yazılımı, segmentleri yeniden birleştirir ve dosya içeriğini alıcı uygulamaya aktarırken doğru sıralanmalarını ve hatasız olmalarını sağlar.

TCP segment yapısı

İletim Kontrol Protokolü, bir veri akışından verileri kabul eder, parçalara böler ve bir TCP segmenti oluşturan bir TCP başlığı ekler. TCP segmenti daha sonra bir İnternet Protokolü (IP) verikatarında kapsüllenir ve eşlerle değiştirilir.

Terimi, TCP paketi daha kesin terminoloji, oysa her iki dışı ve kayıtlı kullanım görünür segmenti TCP belirtir protokol veri ünitesi (PDU), datagram IP PDU'ya ve çerçeve için veri bağlantı katmanı PDU:

İşlemler, TCP'yi çağırarak ve veri arabelleklerini argüman olarak ileterek veri iletir. TCP, bu tamponlardan gelen verileri bölümlere paketler ve her bölümü hedef TCP'ye iletmek için internet modülünü [örn. IP] çağırır.

Bir TCP segmenti, bir segment başlığından ve bir veri bölümünden oluşur. Segment başlığı 10 zorunlu alan ve isteğe bağlı bir uzantı alanı içerir ( Seçenekler , tabloda pembe arka plan). Veri bölümü başlığı takip eder ve uygulama için taşınan yük verileridir. Veri bölümünün uzunluğu, segment başlığında belirtilmemiştir; IP başlığında belirtilen toplam IP datagram uzunluğundan segment başlığının ve IP başlığının birleşik uzunluğunun çıkarılmasıyla hesaplanabilir.

TCP segment başlığı
Ofsetler sekizli 0 1 2 3
sekizli Biraz  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 Kaynak bağlantı noktası hedef bağlantı noktası
4 32 Sıra numarası
8 64 Onay numarası (ACK ayarlanmışsa)
12 96 Veri ofseti Ayrılmış
0 0 0
NS
CWR
EÇE
URG
ACK
PSH
RST
SYN
yüzgeç
Pencere boyutu
16 128 sağlama toplamı Acil işaretçi (URG ayarlanmışsa)
20
160
Seçenekler ( veri ofseti > 5 ise, gerekirse sonunda "0" bayt ile doldurulur.)
60 480
Kaynak bağlantı noktası (16 bit)
Gönderen bağlantı noktasını tanımlar.
Hedef bağlantı noktası (16 bit)
Alıcı bağlantı noktasını tanımlar.
Sıra numarası (32 bit)
İkili rolü vardır:
  • SYN bayrağı (1) ayarlanmışsa, bu ilk sıra numarasıdır. Gerçek ilk veri baytının sıra numarası ve karşılık gelen ACK'deki onaylanan sayı, bu sıra numarası artı 1'dir.
  • SYN bayrağı boş (0) ise, bu, mevcut oturum için bu segmentin ilk veri baytının birikmiş sıra numarasıdır.
Onay numarası (32 bit)
ACK bayrağı ayarlanmışsa, bu alanın değeri, ACK göndericisinin beklediği bir sonraki sıra numarasıdır. Bu, önceki tüm baytların (varsa) alındığını onaylar. Her iki uç tarafından gönderilen ilk ACK, diğer ucun ilk sıra numarasını kabul eder, ancak veri yoktur.
Veri ofseti (4 bit)
32 bit sözcüklerle TCP başlığının boyutunu belirtir . Minimum boyut başlığı 5 kelime ve maksimum 15 kelimedir, bu nedenle minimum boyut 20 bayt ve maksimum 60 bayt vererek başlıkta 40 bayta kadar seçenek sağlar. Bu alan adını, aynı zamanda TCP segmentinin başlangıcından gerçek veriye kadar olan uzaklık olduğu gerçeğinden alır.
Ayrılmış (3 bit)
Gelecekte kullanım için ve sıfıra ayarlanmalıdır.
Bayraklar (9 bit)
Aşağıdaki gibi 9 adet 1 bitlik bayrak (kontrol biti) içerir:
  • NS (1 bit): ECN-nonce - gizleme koruması
  • CWR (1 bit): Tıkanıklık penceresi azaltıldı (CWR) bayrağı, gönderen ana bilgisayar tarafından ECE bayrağı ayarlanmış bir TCP segmenti aldığını ve tıkanıklık kontrol mekanizmasında yanıt verdiğini belirtmek için ayarlanır.
  • ECE (1 bit): ECN-Echo, SYN bayrağının değerine bağlı olarak ikili bir role sahiptir. Gösterir:
  • SYN bayrağı (1) ayarlanırsa, TCP eşinin ECN yeteneğine sahip olduğu belirtilir.
  • SYN bayrağı temizse (0), normal iletim sırasında IP başlığında Tıkanıklık Deneyimli bayrağı ayarlanmış (ECN=11) bir paket alındı. Bu, TCP göndericisine ağ tıkanıklığının (veya yaklaşan tıkanıklığın) bir göstergesi olarak hizmet eder.
  • URG (1 bit): Acil işaretçi alanının önemli olduğunu gösterir
  • ACK (1 bit): Onay alanının önemli olduğunu gösterir. İstemci tarafından gönderilen ilk SYN paketinden sonraki tüm paketler bu bayrak setine sahip olmalıdır.
  • PSH (1 bit): İtme işlevi. Arabelleğe alınan verilerin alıcı uygulamaya gönderilmesini ister.
  • RST (1 bit): Bağlantıyı sıfırlayın
  • SYN (1 bit): Sıra numaralarını senkronize edin. Yalnızca her uçtan gönderilen ilk pakette bu bayrak ayarlanmalıdır. Diğer bazı bayraklar ve alanlar, bu bayrağa göre anlam değiştirir ve bazıları yalnızca ayarlandığında ve diğerleri açık olduğunda geçerlidir.
  • FIN (1 bit): Göndericiden gelen son paket
Pencere boyutu (16 bit)
Büyüklüğü alma penceresinin bu segmentin gönderen anda almak üzere hazır olduğu pencere boyutu birimlerinin sayısını belirtir. (Bkz. § Akış kontrolü ve § Pencere ölçeklendirme .)
Sağlama toplamı (16 bit)
16 bitlik sağlama toplamı alanı, TCP başlığının, yükün ve bir IP sözde başlığının hata kontrolü için kullanılır. Sözde başlık, kaynak IP adresinden , hedef IP adresinden , TCP protokolü için protokol numarasından (6) ve TCP başlıklarının ve yükün uzunluğundan (bayt cinsinden) oluşur.
Acil işaretçi (16 bit)
URG bayrağı ayarlanmışsa, bu 16 bitlik alan, son acil veri baytını gösteren sıra numarasından bir ofsettir.
Seçenekler (Değişken 0–320 bit, 32 bitlik birimlerde)
Bu alanın uzunluğu, veri ofset alanı tarafından belirlenir . Seçenekler en fazla üç alana sahiptir: Option-Tür (1 bayt), Option-Length (1 bayt), Option-Data (değişken). Option-Tür alanı, seçeneğin türünü belirtir ve isteğe bağlı olmayan tek alandır. Option-Tür değerine bağlı olarak sonraki iki alan ayarlanabilir. Option-Length, seçeneğin toplam uzunluğunu belirtir ve Option-Data, varsa, seçenekle ilişkili verileri içerir. Örneğin, 1'lik bir Option-Tür baytı, bunun yalnızca dolgu için kullanılan bir işlem yok seçeneği olduğunu ve ardından bir Option-Length veya Option-Data alanlarının olmadığını gösterir. 0'lık bir Option-Tür baytı, seçeneklerin sonunu işaretler ve ayrıca yalnızca bir bayttır. Maksimum Segment Boyutu seçeneğini belirtmek için 2'lik bir Option-Tür baytı kullanılır ve ardından MSS alanının uzunluğunu belirten bir Option-Length baytı gelir. Option-Length, Option-Tür ve Option-Length alanları dahil olmak üzere verilen seçenekler alanının toplam uzunluğudur. Yani MSS değeri tipik olarak iki bayt olarak ifade edilirken, Option-Length 4 olacaktır. Örnek olarak, 0x05B4 değerine sahip bir MSS seçenek alanı, TCP seçenekleri bölümünde (0x02 0x04 0x05B4) olarak kodlanmıştır.
Bazı seçenekler yalnızca SYN ayarlandığında gönderilebilir; olarak aşağıda belirtilmiştir [SYN]. Option-Cind ve standart uzunluklar (Option-Cind, Option-Length) olarak verilmiştir.
Seçenek-Tür Seçenek-Uzunluk Seçenek-Veri Amaç Notlar
0 Yok Yok Seçenekler listesinin sonu
1 Yok Yok İşlem yok Bu, daha iyi performans için 32 bitlik sınırlardaki seçenek alanlarını hizalamak için kullanılabilir.
2 4 SS Maksimum segment boyutu Bkz. § Maksimum segment boyutu [SYN]
3 3 S Pencere ölçeği Ayrıntılar için bkz. § Pencere ölçeklendirme[SYN]
4 2 Yok Seçici Onay'a izin verilir Ayrıntılar için bkz. § Seçici bildirimler[SYN]
5 N (10, 18, 26 veya 34) BBBB, EEEE, ... Seçici onay (SACK) Bu ilk iki baytı, 32-bit başlangıç/bitiş işaretçileri olarak belirtilen, seçici olarak onaylanan 1-4 bloktan oluşan bir liste takip eder.
8 10 TTTT, EEEE Zaman damgası ve önceki zaman damgasının yankısı Ayrıntılar için § TCP zaman damgalarına bakın
Kalan Option-Tür değerleri tarihsel, eski, deneysel, henüz standartlaştırılmamış veya atanmamış değerlerdir. Seçenek numarası atamaları IANA tarafından sağlanır.
Dolgu malzemesi
TCP başlık dolgusu, 32 bitlik bir sınırda TCP başlığının bitmesini ve verilerin başlamasını sağlamak için kullanılır. Dolgu sıfırlardan oluşur.

Protokol işlemi

Basitleştirilmiş bir TCP Durum Şeması. KURULDU durumu içindeki durumları içeren daha ayrıntılı bir durum şeması için TCP EFSM şemasına bakın .

TCP protokol işlemleri üç aşamaya ayrılabilir. Bağlantı kurma , veri aktarım aşamasına girmeden önce bağlantı kuran çok adımlı bir el sıkışma işlemidir . Veri aktarımı tamamlandıktan sonra, bağlantı sonlandırması bağlantıyı kapatır ve tahsis edilen tüm kaynakları serbest bırakır.

TCP bağlantısı, iletişim için yerel uç noktayı temsil eden bir kaynak olan İnternet soketi aracılığıyla bir işletim sistemi tarafından yönetilir . Bir TCP bağlantısının ömrü boyunca, yerel uç nokta bir dizi durum değişikliğine uğrar :

TCP soket durumları
Durum uç nokta Açıklama
DİNLEMEK sunucu Herhangi bir uzak TCP uç noktasından bağlantı isteği bekleniyor.
SYN-SENT Müşteri Bir bağlantı isteği gönderdikten sonra eşleşen bir bağlantı isteği bekleniyor.
SYN-ALINDI sunucu Hem bir bağlantı isteği alıp hem de gönderdikten sonra onaylayan bir bağlantı isteği onayı bekleniyor.
KURULMUŞ Sunucu ve istemci Açık bir bağlantı, alınan veriler kullanıcıya iletilebilir. Bağlantının veri aktarım aşaması için normal durum.
SON-BEKLE-1 Sunucu ve istemci Uzak TCP'den bir bağlantı sonlandırma talebi veya daha önce gönderilen bağlantı sonlandırma isteğinin bir onayı bekleniyor.
SON-BEKLE-2 Sunucu ve istemci Uzak TCP'den bağlantı sonlandırma isteği bekleniyor.
YAKIN BEKLEYİŞ Sunucu ve istemci Yerel kullanıcıdan bağlantı sonlandırma isteği bekleniyor.
KAPANIŞ Sunucu ve istemci Uzak TCP'den bir bağlantı sonlandırma isteği onayı bekleniyor.
SON-ACK Sunucu ve istemci Uzak TCP'ye daha önce gönderilen bağlantı sonlandırma isteğinin (bağlantı sonlandırma isteğinin bir bildirimini içeren) bir onayını bekliyorum.
ZAMAN-BEKLE Sunucu veya istemci Uzak TCP'nin bağlantı sonlandırma isteğinin onayını aldığından emin olmak için yeterli sürenin geçmesi bekleniyor.
KAPALI Sunucu ve istemci Hiç bağlantı durumu yok.

Bağlantı kurulması

Bir istemci bir sunucuya bağlanmaya çalışmadan önce, sunucunun bağlantılara açılması için önce bir bağlantı noktasına bağlanması ve onu dinlemesi gerekir: buna pasif açık denir. Pasif açık bir kez kurulduğunda, bir müşteri üç yollu (veya 3 adımlı) el sıkışmayı kullanarak aktif bir açık başlatarak bir bağlantı kurabilir:

  1. SYN : Aktif açma, istemcinin sunucuya bir SYN göndermesi ile gerçekleştirilir. İstemci, segmentin sıra numarasını rastgele bir A değerine ayarlar.
  2. SYN-ACK : Yanıt olarak sunucu bir SYN-ACK ile yanıt verir. Onay numarası, alınan sıra numarasından bir fazlaya yani A+1'e ayarlanır ve sunucunun paket için seçtiği sıra numarası başka bir rasgele sayıdır, B.
  3. ACK : Son olarak, istemci sunucuya bir ACK gönderir. Sıra numarası, alınan alındı ​​değerine, yani A+1'e ayarlanır ve alındı ​​numarası, alınan sıra numarasından bir fazlaya, yani B+1'e ayarlanır.

Adım 1 ve 2, bir yön için sıra numarasını belirler ve onaylar. Adım 2 ve 3, diğer yön için sıra numarasını belirler ve onaylar. Bu adımların tamamlanmasının ardından hem istemci hem de sunucu alındı ​​alındı ​​ve tam çift yönlü iletişim kuruldu.

Bağlantı sonlandırma

Bağlantı sonlandırma

Bağlantı sonlandırma aşaması, bağlantının her iki tarafının bağımsız olarak sona erdiği dört yönlü bir el sıkışma kullanır. Bir uç nokta, bağlantının yarısını durdurmak istediğinde, diğer ucun bir ACK ile onayladığı bir FIN paketi iletir. Bu nedenle, tipik bir sökme işlemi, her TCP uç noktasından bir çift FIN ve ACK segmenti gerektirir. İlk FIN'i gönderen taraf son ACK ile yanıt verdikten sonra, bağlantıyı nihayet kapatmadan önce bir zaman aşımı bekler, bu süre zarfında yerel bağlantı noktası yeni bağlantılar için kullanılamaz; bu, önceki bağlantıyla ilişkili gecikmeli paketlerin sonraki bağlantı sırasında teslim edilmesi durumunda oluşabilecek olası karışıklığı önler.

Ana bilgisayar A bir FIN gönderdiğinde ve ana bilgisayar B bir FIN & ACK ile yanıt verdiğinde (iki adımı bir adımda birleştirir) ve ana bilgisayar A bir ACK ile yanıt verdiğinde bağlantıyı 3 yönlü bir el sıkışma ile sonlandırmak da mümkündür.

Linux ve HP-UX gibi bazı işletim sistemleri, yarı çift yönlü bir kapatma dizisi uygular. Ana bilgisayar bir bağlantıyı aktif olarak kapatırsa ve hala okunmamış gelen veriler mevcutsa, ana bilgisayar FIN yerine RST sinyalini (alınan verileri kaybederek) gönderir. Bu, bir TCP uygulamasının bir veri kaybı olduğunun farkında olmasını sağlar.

Bir bağlantı yarı açık durumda olabilir, bu durumda bir taraf bağlantıyı sonlandırdı, ancak diğeri bitirmedi. Sonlandırılan taraf artık bağlantıya herhangi bir veri gönderemez, ancak diğer taraf gönderebilir. Bitiren taraf, diğer taraf da sonlandırana kadar verileri okumaya devam etmelidir.

Kaynak kullanımı

Çoğu uygulama, bir oturumu çalışan bir işletim sistemi işlemine eşleyen bir tabloya bir girdi tahsis eder. TCP paketleri bir oturum tanımlayıcısı içermediğinden, her iki uç nokta da istemcinin adresini ve bağlantı noktasını kullanarak oturumu tanımlar. Bir paket alındığında, TCP uygulaması hedef işlemi bulmak için bu tabloda bir arama yapmalıdır. Tablodaki her giriş, İletim Kontrol Bloğu veya TCB olarak bilinir. Uç noktalar (IP ve bağlantı noktası), bağlantının durumu, değiş tokuş edilen paketler hakkında çalışan veriler ve veri gönderme ve alma arabellekleri hakkında bilgiler içerir.

Sunucu tarafındaki oturum sayısı yalnızca bellekle sınırlıdır ve yeni bağlantılar geldikçe artabilir, ancak istemcinin sunucuya ilk SYN'yi göndermeden önce geçici bir bağlantı noktası ayırması gerekir . Bu bağlantı noktası, tüm konuşma boyunca ayrılmış olarak kalır ve her bir istemcinin IP adresinden giden bağlantıların sayısını etkin bir şekilde sınırlar. Bir uygulama, gerekli olmayan bağlantıları düzgün bir şekilde kapatamazsa, bir istemcinin kaynakları tükenebilir ve diğer uygulamalardan bile yeni TCP bağlantıları kuramaz hale gelebilir.

Her iki uç nokta da onaylanmamış paketler ve alınan (ancak okunmamış) veriler için alan ayırmalıdır.

Veri transferi

İletim Kontrol Protokolü, Kullanıcı Datagram Protokolü ile karşılaştırıldığında birkaç temel özellik bakımından farklılık gösterir :

  • Sıralı veri aktarımı: hedef ana bilgisayar, segmentleri bir sıra numarasına göre yeniden düzenler
  • Kayıp paketlerin yeniden iletimi: onaylanmayan herhangi bir kümülatif akış yeniden iletilir
  • Hatasız veri aktarımı: bozuk paketler kayıp olarak kabul edilir ve yeniden iletilir
  • Akış kontrolü: güvenilir teslimatı garanti etmek için gönderenin veri aktarma hızını sınırlar. Alıcı, göndericiye sürekli olarak ne kadar veri alınabileceği konusunda ipucu verir. Alıcı ana bilgisayarın arabelleği dolduğunda, sonraki alındı ​​bildirimi aktarımı askıya alır ve arabellekteki verilerin işlenmesine izin verir.
  • Tıkanıklık kontrolü: kayıp paketler (yoğunluk nedeniyle olduğu varsayılır) veri iletim hızında bir azalmayı tetikler

Güvenilir şanzıman

TCP, her bir veri baytını tanımlamak için bir sıra numarası kullanır . Sıra numarası , meydana gelebilecek herhangi bir sıra dışı teslimattan bağımsız olarak verilerin sırayla yeniden oluşturulabilmesi için her bilgisayardan gönderilen baytların sırasını tanımlar . İlk baytın sıra numarası, SYN olarak işaretlenen ilk paket için verici tarafından seçilir. Bu sayı keyfi olabilir ve aslında TCP dizi tahmini saldırılarına karşı savunmak için tahmin edilemez olmalıdır .

Onaylar (ACK'ler), göndericiye verilerin belirtilen bayta alındığını bildirmek için veri alıcısı tarafından bir sıra numarası ile gönderilir. ACK'ler, verilerin uygulamaya teslim edildiğini ima etmezler, yalnızca verileri teslim etmenin artık alıcının sorumluluğunda olduğunu belirtirler.

Güvenilirlik, göndericinin kaybolan verileri tespit etmesi ve yeniden iletmesi ile sağlanır. TCP, kaybı belirlemek için iki temel teknik kullanır. Yeniden iletim zaman aşımı (RTO) ve yinelenen toplu alındı ​​bildirimleri (DupAcks).

Dupack tabanlı yeniden iletim

Bir akıştaki tek bir segment (diyelim ki segment 100) kaybolursa, alıcı no'nun üzerindeki paketleri kabul edemez. 100, çünkü kümülatif ACK'ler kullanır. Bu nedenle alıcı, başka bir veri paketinin alınması üzerine paket 99'u tekrar kabul eder. Bu çift onay, paket kaybı için bir sinyal olarak kullanılır. Diğer bir deyişle, gönderici üç tekrarlanan onay alırsa, onaylanmayan son paketi yeniden iletir. Ağ, tekrarlanan onaylara neden olan segmentleri yeniden sıralayabileceğinden, üç eşik kullanılır. Bu eşiğin, yeniden sıralama nedeniyle sahte yeniden iletimleri önlediği gösterilmiştir. Bazen , alınan segmentler hakkında açık geri bildirim sağlamak için seçici onaylar (SACK'ler) kullanılır. Bu, TCP'nin doğru segmentleri yeniden iletme yeteneğini büyük ölçüde geliştirir.

Zaman aşımına dayalı yeniden iletim

Bir gönderici bir segment ilettiğinde, alındının varış zamanının muhafazakar bir tahmini ile bir zamanlayıcı başlatır. Segment, zamanlayıcının süresi dolarsa, önceki değerin iki katı yeni bir zaman aşımı eşiğiyle yeniden iletilir ve üstel geri çekilme davranışına neden olur. Tipik olarak, ilk zaman değeri olup , burada saat boyutudur. Bu, ortadaki adam hizmet reddi saldırganları gibi hatalı veya kötü niyetli aktörler nedeniyle aşırı iletim trafiğine karşı koruma sağlar .

Hata algılama

Sıra numaraları, alıcıların mükerrer paketleri atmasına ve yeniden sıralanmış paketleri uygun şekilde sıralamasına izin verir. Alındı ​​bildirimleri, gönderenlerin kayıp paketleri ne zaman yeniden ileteceklerini belirlemelerine olanak tanır.

Doğruluğu sağlamak için bir sağlama toplamı alanı dahildir; bkz sağlama toplamı hesaplama checksum'la ilgili detaylar için bölüm. TCP sağlama toplamı, modern standartlara göre zayıf bir denetimdir. Yüksek bit hata oranlarına sahip Veri Bağlantısı Katmanları, ek bağlantı hatası düzeltme/algılama yetenekleri gerektirebilir. Zayıf sağlama toplamı, PPP veya Ethernet çerçevesinde kullanıldığı gibi, hem TCP hem de IP'nin altındaki katman 2'de bir CRC veya daha iyi bütünlük denetiminin ortak kullanımıyla kısmen telafi edilir . Ancak bu, 16 bit TCP sağlama toplamının gereksiz olduğu anlamına gelmez: dikkat çekici bir şekilde, CRC korumalı atlamalar arasındaki paketlerde hata girişi yaygındır, ancak uçtan uca 16 bit TCP sağlama toplamı bu basit hataların çoğunu yakalar. Bu, işte uçtan uca ilkedir .

Akış kontrolü

TCP , gönderenin, TCP alıcısının verileri güvenilir bir şekilde alıp işlemesi için çok hızlı veri göndermesini önlemek için uçtan uca bir akış kontrol protokolü kullanır. Farklı ağ hızlarına sahip makinelerin iletişim kurduğu bir ortamda akış kontrolü için bir mekanizmaya sahip olmak çok önemlidir. Örneğin, bir PC, alınan verileri yavaş yavaş işleyen bir akıllı telefona veri gönderirse, akıllı telefonun veri akışını bunaltmayacak şekilde düzenlemesi gerekir.

TCP, kayan bir pencere akış kontrol protokolü kullanır . Her TCP segmentinde, alıcı , bağlantı için arabelleğe almak istediği ek olarak alınan veri miktarını (bayt cinsinden) alma penceresi alanında belirtir . Gönderen ana bilgisayar, alıcı ana bilgisayardan bir onay ve pencere güncellemesi beklemesi gerekmeden önce yalnızca bu miktarda veri gönderebilir.

TCP sıra numaraları ve alma pencereleri bir saat gibi davranır. Alma penceresi, alıcının yeni bir veri segmenti aldığı ve onayladığı her seferinde değişir. Sıra numaraları bittiğinde, sıra numarası tekrar 0'a döner.

Bir alıcı 0 pencere boyutunu tanıttığında, gönderen veri göndermeyi durdurur ve kalıcı zamanlayıcıyı başlatır . Kalıcı zamanlayıcı, alıcıdan gelen sonraki bir pencere boyutu güncellemesinin kaybolması durumunda ortaya çıkabilecek bir kilitlenme durumundan TCP'yi korumak için kullanılır ve gönderici, alıcıdan yeni bir pencere boyutu güncellemesi alana kadar daha fazla veri gönderemez. Kalıcı zamanlayıcının süresi dolduğunda, TCP göndericisi, alıcının yeni pencere boyutunu içeren başka bir onay göndererek yanıt vermesi için küçük bir paket göndererek kurtarmayı dener.

Bir alıcı, gelen verileri küçük artışlarla işliyorsa, tekrar tekrar küçük bir alma penceresinin reklamını yapabilir. Bu, TCP başlığının nispeten büyük ek yükü göz önüne alındığında, bir TCP segmentinde yalnızca birkaç bayt veri göndermek verimsiz olduğundan , aptal pencere sendromu olarak adlandırılır .

tıkanıklık kontrolü

TCP'nin son ana yönü tıkanıklık kontrolüdür . TCP, yüksek performans elde etmek ve ağ performansının birkaç büyüklük mertebesinde düşebileceği tıkanıklık çökmesini önlemek için bir dizi mekanizma kullanır . Bu mekanizmalar, ağa giren veri hızını kontrol ederek veri akışını çökmeyi tetikleyecek bir hızın altında tutar. Ayrıca akışlar arasında yaklaşık olarak maksimum-min adil bir tahsisat sağlarlar.

Gönderilen veriler için alındılar veya alındıların olmaması, gönderenler tarafından TCP gönderici ve alıcı arasındaki ağ koşullarını anlamak için kullanılır. Zamanlayıcılarla birleştiğinde, TCP göndericileri ve alıcıları veri akışının davranışını değiştirebilir. Bu daha genel olarak tıkanıklık kontrolü ve/veya ağ tıkanıklığından kaçınma olarak adlandırılır.

TCP'nin modern uygulamaları, iç içe geçmiş dört algoritma içerir: yavaş başlangıç , tıkanıklıktan kaçınma , hızlı yeniden iletim ve hızlı kurtarma (RFC 5681).

Ek olarak, gönderenler , gönderici ile alıcı arasındaki tahmini gidiş-dönüş süresine (veya RTT'ye) ve bu gidiş dönüş süresindeki varyansa dayalı bir yeniden iletim zaman aşımı (RTO) kullanır . Bu zamanlayıcının davranışı RFC 6298'de belirtilmiştir. RTT tahmininde incelikler vardır. Örneğin, gönderenler, yeniden iletilen paketler için RTT örneklerini hesaplarken dikkatli olmalıdır; tipik olarak Karn Algoritmasını veya TCP zaman damgalarını kullanırlar (bkz. RFC 1323). Bu bireysel RTT örnekleri daha sonra Jacobson'ın algoritması kullanılarak bir Düzgünleştirilmiş Gidiş-Dönüş Süresi (SRTT) oluşturmak için zaman içinde ortalaması alınır . Bu SRTT değeri, son olarak gidiş-dönüş süresi tahmini olarak kullanılan değerdir.

Kayıpları güvenilir bir şekilde ele almak, hataları en aza indirmek, tıkanıklığı yönetmek ve çok yüksek hızlı ortamlarda hızlı gitmek için TCP'yi geliştirmek, devam eden araştırma ve standart geliştirme alanlarıdır. Sonuç olarak, bir dizi TCP tıkanıklığı önleme algoritması varyasyonu vardır.

Maksimum segment boyutu

Maksimum kesim boyutu (MSS), TCP tek bir segment halinde almak için hazır olduğunu, bayt belirtilen veri, en miktarıdır. En iyi performans için, MSS , paket kaybına ve aşırı yeniden iletime yol açabilecek IP parçalanmasını önleyecek kadar küçük ayarlanmalıdır . Bunu başarmaya çalışmak için, tipik olarak MSS, TCP bağlantısı kurulduğunda MSS seçeneği kullanılarak her iki tarafça duyurulur, bu durumda bu, ağların veri bağlantısı katmanının maksimum iletim birimi (MTU) boyutundan türetilir. gönderici ve alıcı doğrudan bağlıdır. Ayrıca, TCP göndericileri , gönderici ve alıcı arasındaki ağ yolu boyunca minimum MTU'yu çıkarmak için yol MTU keşfini kullanabilir ve ağ içinde IP parçalanmasını önlemek için MSS'yi dinamik olarak ayarlamak için bunu kullanabilir.

MSS duyurusu genellikle "MSS anlaşması" olarak da adlandırılır. Kesin olarak konuşursak, MSS, gönderici ve alıcı arasında "uzlaşmaz", çünkü bu, hem göndericinin hem de alıcının, bağlantının her iki yönündeki tüm iletişim için geçerli olan tek, birleşik bir MSS üzerinde anlaşacağı ve anlaşacağı anlamına gelir. Aslında, bir TCP bağlantısında veri akışının iki yönü için iki tamamen bağımsız MSS değerine izin verilir. Bu durum, örneğin, bir bağlantıya katılan cihazlardan birinin, gelen TCP kesimlerini işlemek için son derece sınırlı miktarda (belki de keşfedilen toplam Yol MTU'dan daha küçük) ayrılmış bir belleği varsa ortaya çıkabilir.

Seçici teşekkür

Tamamen orijinal TCP protokolü tarafından kullanılan kümülatif alındı ​​şemasına güvenmek, paketler kaybolduğunda verimsizliklere yol açabilir. Örneğin, sıra numarası 1.000 ila 10.999 olan baytların eşit büyüklükte 10 farklı TCP segmentinde gönderildiğini ve ikinci segmentin (sıra numaraları 2.000 ila 2.999) iletim sırasında kaybolduğunu varsayalım. Salt kümülatif alındı ​​protokolünde, alıcı yalnızca 2.000 kümülatif ACK değeri (alınan verinin son sıra numarasının hemen ardından gelen sıra numarası) gönderebilir ve 3.000 ila 10.999 baytı başarıyla aldığını söyleyemez. Bu nedenle gönderici daha sonra sıra numarası 2.000 ile başlayan tüm verileri yeniden göndermek zorunda kalabilir.

Bu sorunu hafifletmek için TCP , 1996'da RFC 2018'de tanımlanan seçici alındı (SACK) seçeneğini kullanır; bu seçenek, alıcının, paketin son sıra numarasının hemen ardından gelen sıra numarasına ek olarak, doğru şekilde alınan süreksiz paket bloklarını onaylamasını sağlar. temel TCP bildiriminde olduğu gibi, ardışık olarak alınan son bitişik bayt. Onay, her SACK bloğunun Bloğun Sol Kenarı (bloğun ilk sıra numarası) ve Bloğun Sağ Kenarı ( bloğun son sıra numarasının hemen ardından gelen sıra numarası ) tarafından taşındığı bir dizi SACK bloğu belirtebilir . ), bir Blok , alıcının doğru şekilde aldığı bitişik bir aralıktır. Yukarıdaki örnekte, alıcı, 2.000 kümülatif ACK değerine sahip bir ACK segmenti ve 3.000 ve 11.000 sıra numaralarına sahip bir SACK seçenek başlığı gönderecektir. Gönderici buna göre yalnızca 2.000 ila 2.999 sıra numaralarına sahip ikinci segmenti yeniden iletir.

Bir TCP göndericisi, bozuk bir segment teslimatını kayıp bir segment olarak yorumlayabilir. Bunu yaparsa, TCP gönderici, bozuk paketten önceki segmenti yeniden iletir ve bu bağlantı için veri teslim hızını yavaşlatır. Mayıs 2000'de RFC 2883'te tanımlanan SACK seçeneğinin bir uzantısı olan yinelenen SACK seçeneği bu sorunu çözmektedir. TCP alıcısı, hiçbir segmentin kaybolmadığını belirtmek için bir D-ACK gönderir ve TCP gönderici daha sonra daha yüksek iletim hızını eski durumuna getirebilir.

SACK seçeneği zorunlu değildir ve ancak her iki taraf da destekliyorsa devreye girer. Bu, bir bağlantı kurulduğunda görüşülür. SACK, bir TCP başlık seçeneği kullanır ( ayrıntılar için TCP segment yapısına bakın). SACK kullanımı yaygınlaştı; tüm popüler TCP yığınları onu destekliyor. Seçici onay, Akış Denetimi İletim Protokolü'nde (SCTP) de kullanılır .

Pencere ölçekleme

Yüksek bant genişliğine sahip ağların daha verimli kullanımı için daha büyük bir TCP pencere boyutu kullanılabilir. TCP pencere boyutu alanı, veri akışını kontrol eder ve değeri 2 ile 65.535 bayt arasında sınırlıdır.

Boyut alanı genişletilemediği için bir ölçekleme faktörü kullanılır. TCP pencere ölçeği seçeneği RFC 1323 de tanımlandığı gibi, 65.535 bayt 1 gigabayt maksimum pencere boyutunu artırmak için kullanılan bir seçenektir. Daha büyük pencere boyutlarına kadar ölçekleme, TCP ayarı için gerekli olanın bir parçasıdır .

Pencere ölçeği seçeneği yalnızca TCP 3-yollu el sıkışma sırasında kullanılır. Pencere ölçeği değeri, 16 bitlik pencere boyutu alanını sola kaydırmak için bit sayısını temsil eder. Pencere ölçeği değeri, her yön için bağımsız olarak 0 (kaydırma yok) ile 14 arasında ayarlanabilir. Her iki yönde de pencere ölçeklendirmeyi etkinleştirmek için her iki taraf da seçeneği SYN segmentlerinde göndermelidir.

Bazı yönlendiriciler ve paket güvenlik duvarları, iletim sırasında pencere ölçekleme faktörünü yeniden yazar. Bu, gönderen ve alan tarafların farklı TCP pencere boyutları almasına neden olur. Sonuç, çok yavaş olabilen sabit olmayan trafiktir. Sorun, kusurlu bir yönlendiricinin arkasındaki bazı sitelerde görülebilir.

TCP zaman damgaları

1992'de RFC 1323'te tanımlanan TCP zaman damgaları, TCP'nin paketlerin hangi sırayla gönderildiğini belirlemesine yardımcı olabilir. TCP zaman damgaları normalde sistem saatine göre ayarlanmaz ve rastgele bir değerde başlar. Çoğu işletim sistemi, geçen her milisaniye için zaman damgasını artırır; ancak RFC yalnızca kenelerin orantılı olması gerektiğini belirtir.

İki zaman damgası alanı vardır:

4 baytlık gönderen zaman damgası değeri (zaman damgam)
4 baytlık yankı yanıtı zaman damgası değeri (sizden alınan en son zaman damgası).

TCP zaman damgaları, Sarılmış Sıra numaralarına veya PAWS'ye Karşı Koruma olarak bilinen bir algoritmada kullanılır (ayrıntılar için RFC 1323'e bakın). PAWS, alma penceresi sıra numarası sarma sınırını geçtiğinde kullanılır. Bir paketin potansiyel olarak yeniden iletilmesi durumunda şu soruyu yanıtlar: "Bu sıra numarası ilk 4 GB'de mi yoksa ikincide mi?" Ve zaman damgası, bağı bozmak için kullanılır.

Ayrıca, Eifel algılama algoritması (RFC 3522), yeniden iletimlerin paketlerin kaybolması veya yalnızca bozuk olması nedeniyle oluşup oluşmadığını belirlemek için TCP zaman damgalarını kullanır.

Son İstatistikler, Windows Server 2008'den bu yana Windows sunucu desteğinin kesilmesi nedeniyle Zaman Damgası benimseme düzeyinin ~%40'ta durduğunu gösteriyor.

TCP zaman damgaları Linux çekirdeğinde varsayılan olarak etkindir ve Windows Server 2008, 2012 ve 2016'da varsayılan olarak devre dışıdır.

bant dışı veri

Akışın bitmesini beklemek yerine kuyruğa alınan akışı kesmek veya durdurmak mümkündür. Bu, verileri acil olarak belirterek yapılır . Bu, alıcı programa, acil verilerin geri kalanıyla birlikte onu hemen işlemesini söyler. Bittiğinde, TCP uygulamayı bilgilendirir ve akış kuyruğuna geri döner. Bir örnek, bir uzak oturum açma oturumu için TCP kullanıldığında, kullanıcı diğer uçta programı kesintiye uğratan veya durduran bir klavye dizisi gönderebilir. Bu sinyallere en çok, uzak makinedeki bir program doğru şekilde çalışmadığında ihtiyaç duyulur. Sinyaller, programın akım aktarımını bitirmesini beklemeden gönderilmelidir.

TCP bant dışı veriler , modern İnternet için tasarlanmamıştır. Acil işaretçi sadece uzaktan ana bilgisayarda değiştirir işleme ve ağda kendinde bir işlenmesini hızlandırmak etmez. Uzak ana bilgisayara ulaştığında, protokolün biraz farklı iki yorumu vardır, bu da yalnızca tek baytlık OOB verilerinin güvenilir olduğu anlamına gelir. Bu, en az kullanılan protokol öğelerinden biri olduğu ve zayıf bir şekilde uygulanma eğiliminde olduğu için hiç de güvenilir olduğunu varsayıyor .

Veri teslimini zorlama

Normalde TCP, tam bir veri paketinin gönderilmesi için 200 ms bekler ( Nagle Algoritması , küçük mesajları tek bir pakette gruplandırmaya çalışır). Bu bekleme, bir dosya aktarımı sırasında sürekli olarak tekrarlanırsa küçük, ancak potansiyel olarak ciddi gecikmelere neden olur. Örneğin, tipik bir gönderme bloğu 4 KB, tipik bir MSS 1460'tır, bu nedenle her biri ~1.2 ms süren 10 Mbit/s ethernet'te 2 paket çıkar ve ardından 197 ms'lik bir duraklamadan sonra kalan 1176'yı üçüncü paket taşır çünkü TCP tam bir arabellek bekliyor.

Telnet durumunda, her kullanıcı tuş vuruşu, kullanıcı ekranda görmeden önce sunucu tarafından yankılanır. Bu gecikme çok can sıkıcı hale gelecekti.

Soket seçeneğinin ayarlanması, TCP_NODELAYvarsayılan 200 ms'lik gönderme gecikmesini geçersiz kılar. Uygulama programları, bir karakter veya karakter satırı yazıldıktan sonra çıktının gönderilmesini zorlamak için bu soket seçeneğini kullanır.

RFC, PSHpush bitini "alıcı TCP yığınına bu verileri hemen alıcı uygulamaya göndermek için bir mesaj" olarak tanımlar . Berkeley soketlerini kullanarak kullanıcı alanında belirtmenin veya kontrol etmenin bir yolu yoktur ve sadece protokol yığını tarafından kontrol edilir .

Güvenlik açıkları

TCP çeşitli şekillerde saldırıya uğrayabilir. TCP'nin kapsamlı bir güvenlik değerlendirmesinin sonuçları, tanımlanan sorunlar için olası hafifletmelerle birlikte 2009'da yayınlandı ve şu anda IETF içinde takip ediliyor .

hizmet reddi

Sahte bir IP adresi kullanarak ve art arda bilerek bir araya getirilmiş SYN paketleri ve ardından birçok ACK paketi göndererek , saldırganlar sahte bağlantıları takip ederek sunucunun büyük miktarda kaynak tüketmesine neden olabilir. Bu, SYN sel saldırısı olarak bilinir . Bu soruna önerilen çözümler, SYN tanımlama bilgilerini ve kriptografik bulmacaları içerir, ancak SYN tanımlama bilgileri kendi güvenlik açıklarıyla birlikte gelir. Sockstress , sistem kaynak yönetimi ile hafifletilebilecek benzer bir saldırıdır. TCP Kalıcı Zamanlayıcının istismarını içeren gelişmiş bir DoS saldırısı Phrack #66'da analiz edildi . PUSH ve ACK taşmaları diğer değişkenlerdir.

Bağlantı kaçırma

Bir TCP oturumunu gizlice dinleyebilen ve paketleri yeniden yönlendirebilen bir saldırgan, bir TCP bağlantısını ele geçirebilir. Bunu yapmak için, saldırgan devam eden iletişimden sıra numarasını öğrenir ve akıştaki bir sonraki segmente benzeyen sahte bir segment oluşturur. Böyle basit bir kaçırma, bir paketin bir uçta hatalı olarak kabul edilmesiyle sonuçlanabilir. Alıcı ana bilgisayar, bağlantının diğer tarafına fazladan segmenti kabul ettiğinde, senkronizasyon kaybolur. Ele geçirme , ele geçirilen TCP bağlantısının kalıcı kontrolünü elde etmek için, Adres Çözümleme Protokolü ( ARP ) veya paket akışının kontrolünün ele alınmasına izin veren yönlendirme saldırıları ile birleştirilebilir.

İlk sıra numarasının kolayca tahmin edilebildiği RFC 1948'den önce farklı bir IP adresinin kimliğine bürünmek zor değildi . Bu, bir saldırganın, ARP veya yönlendirme saldırıları dağıtmaya gerek kalmadan, alıcının farklı bir IP adresinden geldiğine inandığı bir dizi paketi körü körüne göndermesine izin verdi: Kimliğe bürünülen IP adresinin meşru ana bilgisayarının kapalı olduğundan emin olmak yeterlidir. veya hizmet reddi saldırılarını kullanarak bu duruma getirin . Bu nedenle başlangıçtaki sıra numarası artık rasgele seçilmiştir.

TCP veto

Gönderilecek bir sonraki paketin boyutunu gizlice dinleyebilen ve tahmin edebilen bir saldırgan, alıcının mevcut bağlantıyı kesmeden kötü niyetli bir yükü kabul etmesine neden olabilir. Saldırgan, bir sonraki beklenen paketin sıra numarası ve yük boyutu ile kötü niyetli bir paket enjekte eder. Meşru paket nihai olarak alındığında, halihazırda alınmış bir paketle aynı sıra numarasına ve uzunluğa sahip olduğu bulunur ve normal bir yinelenen paket olarak sessizce bırakılır - meşru paket kötü niyetli paket tarafından "veto edilir". Bağlantı ele geçirmenin aksine, bağlantı asla senkronize edilmez ve kötü niyetli yük kabul edildikten sonra iletişim normal şekilde devam eder. TCP veto, saldırgana iletişim üzerinde daha az kontrol sağlar, ancak saldırıyı özellikle tespit edilmeye karşı dirençli hale getirir. ACK fırtınasından ağ trafiğindeki büyük artış önlenir. Alıcıya bir şeylerin ters gittiğine dair tek kanıt, bir IP ağında normal bir olay olan tek bir yinelenen pakettir. Veto edilen paketin göndericisi hiçbir zaman bir saldırı kanıtı görmez.

Başka bir güvenlik açığı, TCP sıfırlama saldırısıdır .

TCP bağlantı noktaları

TCP ve UDP , genellikle İnternet yuvaları olarak adlandırılan bir ana bilgisayardaki uygulama uç noktalarını gönderme ve alma işlemlerini belirlemek için bağlantı noktası numaralarını kullanır . TCP bağlantısının her iki tarafında, gönderen veya alan uygulama tarafından ayrılmış 16 bitlik işaretsiz bir bağlantı noktası numarası (0-65535) bulunur. Gelen TCP paketlerinin, soketleri tarafından, yani kaynak ana bilgisayar adresi, kaynak bağlantı noktası, hedef ana bilgisayar adresi ve hedef bağlantı noktası kombinasyonu tarafından belirli bir TCP bağlantısına ait olduğu tanımlanır. Bu, bir istemcinin farklı kaynak bağlantı noktalarından bir hedef bağlantı noktasına herhangi bir eşzamanlı bağlantı başlatmaya özen gösterdiği sürece, bir sunucu bilgisayarının birkaç istemciye aynı anda birkaç hizmet sunabileceği anlamına gelir.

Bağlantı noktası numaraları üç temel kategoriye ayrılır: iyi bilinen, kayıtlı ve dinamik/özel. İyi bilinen bağlantı noktaları, İnternet Atanmış Numaralar Yetkilisi (IANA) tarafından atanır ve genellikle sistem düzeyinde veya kök işlemler tarafından kullanılır. Sunucu olarak çalışan ve bağlantıları pasif olarak dinleyen iyi bilinen uygulamalar genellikle bu bağlantı noktalarını kullanır. Bazı örnekler şunlardır: FTP (20 ve 21), SSH (22), TELNET (23), SMTP (25), SSL/TLS üzerinden HTTP (443) ve HTTP (80). En son standart olan HTTP/3 , QUIC'nin TCP yerine aktarım olarak kullanıldığını unutmayın. Kayıtlı bağlantı noktaları genellikle son kullanıcı uygulamaları tarafından sunucularla bağlantı kurulurken geçici kaynak bağlantı noktaları olarak kullanılır , ancak üçüncü bir tarafça kaydedilmiş adlandırılmış hizmetleri de tanımlayabilirler. Dinamik/özel bağlantı noktaları, son kullanıcı uygulamaları tarafından da kullanılabilir, ancak daha az yaygındır. Dinamik/özel bağlantı noktaları, belirli bir TCP bağlantısının dışında herhangi bir anlam içermez.

Ağ Adresi Çevirisi (NAT), genel bir ağ ile özel bir alt ağ arasında geçen trafik akışının belirsizliğini gidermek ve böylece birçok IP adresine (ve bağlantı noktaları), halka açık tek bir adres tarafından hizmet verilecek alt ağda.

Gelişim

TCP karmaşık bir protokoldür. Bununla birlikte, yıllar içinde önemli iyileştirmeler yapılmış ve önerilmiş olsa da, en temel çalışması 1974'teki ilk RFC 675 spesifikasyonundan ve Eylül 1981'de yayınlanan v4 spesifikasyonu RFC 793'ten bu yana önemli ölçüde değişmemiştir. RFC 1122, İnternet için Ana Bilgisayar Gereksinimleri Hosts, bir dizi TCP protokolü uygulama gereksinimini açıkladı. RFC 7414'te gerekli 8 spesifikasyonun ve 20'den fazla teşvik edilen geliştirmenin bir listesi mevcuttur. Bu liste arasında RFC 2581 bulunur, TCP ile ilgili son yıllarda en önemli RFC'lerden biri olan TCP Congestion Control, gereksiz tıkanıklığı önleyen güncellenmiş algoritmaları açıklar. . 2001 yılında , bir tıkanıklık önleme sinyal mekanizması olan Açık Tıkanıklık Bildirimini ( ECN ) tanımlamak için RFC 3168 yazılmıştır .

Orijinal TCP tıkanıklığı önleme algoritması "TCP Tahoe" olarak biliniyordu, ancak o zamandan beri birçok alternatif algoritma önerildi ( TCP Reno , TCP Vegas , FAST TCP , TCP New Reno ve TCP Hybla dahil ).

TCP Etkileşimli (iTCP), uygulamaların TCP olaylarına abone olmasına ve uygulama destekli tıkanıklık denetimi de dahil olmak üzere çeşitli amaçlar için uygulamaları başlatabilen işleyici bileşenlerini kaydetmesine olanak tanıyan TCP uzantılarına yönelik bir araştırma çabasıdır.

Çok Yollu TCP (MPTCP), bir TCP bağlantısının kaynak kullanımını en üst düzeye çıkarmak ve artıklığı artırmak için birden çok yol kullanmasına izin vermeyi amaçlayan IETF içinde devam eden bir çabadır. Multipath TCP'nin kablosuz ağlar bağlamında sunduğu yedeklilik, daha yüksek verim ve daha iyi aktarma yetenekleri getiren farklı ağların aynı anda kullanılmasını sağlar. Çok Yollu TCP, veri merkezi ortamlarında da performans avantajları sağlar. Multipath TCP'nin referans uygulaması Linux çekirdeğinde geliştirilmektedir. Çok Yollu TCP , iPhone'larda, iPad'lerde ve Mac'lerde Siri ses tanıma uygulamasını desteklemek için kullanılır

TCP Cookie Transactions (TCPCT), sunucuları hizmet reddi saldırılarına karşı korumak için Aralık 2009'da önerilen bir uzantıdır. SYN tanımlama bilgilerinin aksine, TCPCT, pencere ölçekleme gibi diğer TCP uzantılarıyla çakışmaz . TCPCT, sunucuların çok sayıda kısa ömürlü TCP bağlantısını işlemek zorunda olduğu DNSSEC gereksinimleri nedeniyle tasarlanmıştır .

tcpcrypt , aktarım düzeyinde şifrelemeyi doğrudan TCP'nin kendisinde sağlamak için Temmuz 2010'da önerilen bir uzantıdır. Şeffaf bir şekilde çalışacak ve herhangi bir konfigürasyon gerektirmeyecek şekilde tasarlanmıştır. Aksine TLS (SSL) kendisi tcpcrypt kimlik sağlamaz, ancak bunu yapmak için uygulamaya aşağı basit temelögeye sağlar. 2010 yılı itibariyle, ilk tcpcrypt IETF taslağı yayınlandı ve birkaç büyük platform için uygulamalar mevcut.

TCP Fast Open , iki uç nokta arasındaki ardışık TCP bağlantılarının açılmasını hızlandıran bir uzantıdır. Şifreli bir "çerez" kullanarak üç yönlü el sıkışmayı atlayarak çalışır. Güvenlik sorunları nedeniyle yaygın olarak kabul edilmeyen T/TCP adlı daha önceki bir teklife benzer . TCP Fast Open, 2014 yılında RFC 7413 olarak yayınlandı.

Mayıs 2013'te önerilen Orantılı Oran Azaltma (PRR), Google mühendisleri tarafından geliştirilen bir TCP uzantısıdır . PRR, kurtarmadan sonra TCP pencere boyutunun Yavaş başlatma eşiğine mümkün olduğunca yakın olmasını sağlar . Algoritma, kurtarma hızını artırmak için tasarlanmıştır ve Linux 3.2+ çekirdeklerinde varsayılan tıkanıklık kontrol algoritmasıdır.

kablosuz ağlar üzerinden TCP

TCP başlangıçta kablolu ağlar için tasarlanmıştır. Paket kaybının ağ tıkanıklığının bir sonucu olduğu düşünülür ve bir önlem olarak tıkanıklık penceresi boyutu önemli ölçüde azaltılır. Bununla birlikte, kablosuz bağlantıların, kesinlikle tıkanıklık olmayan solma, gölgeleme, elden çıkma, parazit ve diğer radyo etkilerinden dolayı sporadik ve genellikle geçici kayıplar yaşadığı bilinmektedir . Tıkanıklık penceresi boyutunun (hatalı) geri alınmasından sonra, kablosuz paket kaybı nedeniyle, pencere boyutunda muhafazakar bir azalma ile bir tıkanıklık önleme aşaması olabilir. Bu, radyo bağlantısının yetersiz kullanılmasına neden olur. Bu zararlı etkilerle mücadele konusunda kapsamlı araştırmalar yapılmıştır. Önerilen çözümler, istemci veya sunucuda değişiklik gerektiren uçtan uca çözümler, hücresel ağlarda Radyo Bağlantı Protokolü ( RLP ) gibi bağlantı katmanı çözümleri veya ağda bazı değişiklikler gerektiren proxy tabanlı çözümler olarak kategorize edilebilir. uç düğümleri değiştirmeden.

Kablosuz sorununun çözülmesine yardımcı olmak için Vegas , Westwood , Veno ve Santa Cruz gibi bir dizi alternatif tıkanıklık kontrol algoritması önerilmiştir.

Donanım uygulamaları

TCP'nin işlem gücü gereksinimlerinin üstesinden gelmenin bir yolu, yaygın olarak TCP boşaltma motorları (TOE) olarak bilinen donanım uygulamalarını oluşturmaktır . TOE'lerin temel sorunu, bilgisayar veya cihazın işletim sisteminde kapsamlı değişiklikler gerektirmeleri nedeniyle bilgisayar sistemlerine entegre edilmelerinin zor olmasıdır. Böyle bir cihazı geliştiren bir şirket Alacritech'ti .

hata ayıklama

Bir ağ bağlantısındaki TCP trafiğini yakalayan bir paket dinleyicisi , kullanıcıya bir bağlantıdan hangi paketlerin geçtiğini göstererek ağlarda, ağ yığınlarında ve TCP kullanan uygulamalarda hata ayıklamada yararlı olabilir. Bazı ağ yığınları, setockopt kullanılarak sokette etkinleştirilebilen SO_DEBUG soket seçeneğini destekler. Bu seçenek, tüm paketleri, TCP durumlarını ve olayları o sokete dökerek hata ayıklamaya yardımcı olur. Netstat , hata ayıklama için kullanılabilecek başka bir yardımcı programdır.

alternatifler

Birçok uygulama için TCP uygun değildir. Bir sorun (en azından normal uygulamalarda), uygulamanın, kayıp paketin yeniden iletilen kopyası alınana kadar kayıp bir paketten sonra gelen paketlere erişememesidir. Bu, gerçek zamanlı medya akışı, gerçek zamanlı çok oyunculu oyunlar ve IP üzerinden ses (VoIP) gibi gerçek zamanlı uygulamalar için sorunlara neden olur ve burada verilerin çoğunu zamanında almak, tüm verileri almaktan genellikle daha faydalıdır. sırayla.

Geçmiş ve performans nedenleriyle, çoğu depolama alanı ağı (SAN ), Fiber Kanal bağlantıları üzerinden Fiber Kanal Protokolü (FCP) kullanır .

Ayrıca, gömülü sistemler , ağ önyüklemesi ve çok sayıda istemciden (örn. DNS sunucuları) gelen basit isteklere hizmet eden sunucular için TCP'nin karmaşıklığı bir sorun olabilir. Son olarak, her ikisi de NAT'ın arkasında olan ( STUN veya benzer sistemler kullanarak) iki ana bilgisayar arasında veri iletmek gibi bazı hileler, TCP gibi nispeten karmaşık bir protokol olmadan çok daha basittir.

Genellikle, TCP'nin uygun olmadığı durumlarda, Kullanıcı Datagram Protokolü (UDP) kullanılır. Bu, TCP'nin yaptığı, ancak akışları veya yeniden iletimi işlemediği uygulama çoğullama ve sağlama toplamlarını sağlar ve uygulama geliştiricisine bunları duruma uygun bir şekilde kodlama veya bunları iletme hatası düzeltme veya enterpolasyon gibi diğer yöntemlerle değiştirme yeteneği verir .

Akış Denetimi İletim Protokolü (SCTP), TCP'ye benzer güvenilir akış odaklı hizmetler sağlayan başka bir protokoldür. TCP'den daha yeni ve çok daha karmaşıktır ve henüz yaygın bir dağıtım görmemiştir. Ancak, özellikle güvenilirliğin ve gerçek zamana yakın hususların önemli olduğu durumlarda kullanılmak üzere tasarlanmıştır.

Venturi Aktarım Protokolü (VTP), kablosuz veri aktarımıyla ilgili algılanan verimsizliklerin üstesinden gelmek için şeffaf bir şekilde TCP'nin yerini almak üzere tasarlanmış patentli bir tescilli protokoldür .

TCP'nin yüksek bant genişliğine sahip ortamlarda da sorunları vardır. TCP tıkanıklık kaçınma algoritması veri gönderen önceden bilinmez ad-hoc ortamlar için çok iyi çalışıyor. Ortam tahmin edilebilirse, Eşzamansız Aktarım Modu (ATM) gibi zamanlamaya dayalı bir protokol , TCP'nin yeniden aktarım yükünü önleyebilir.

UDP tabanlı Veri Aktarım Protokolü (UDT), yüksek bant genişliği gecikmeli ürüne sahip ağlarda TCP'den daha verimli ve adildir .

Çok Amaçlı İşlem Protokolü (MTP/IP), çok çeşitli ağ koşullarında, özellikle TCP'nin verimsiz olarak algılandığı durumlarda, uyarlanabilir bir şekilde yüksek verim ve işlem performansı elde etmek için tasarlanmış patentli tescilli bir yazılımdır.

sağlama toplamı hesaplama

IPv4 için TCP sağlama toplamı

TCP, IPv4 üzerinden çalıştığında , sağlama toplamını hesaplamak için kullanılan yöntem RFC 793'te tanımlanır:

Sağlama toplamı alanı, başlık ve metindeki tüm 16 bitlik sözcüklerin bire tümleyen toplamının 16 bitlik birin tümleyenidir. Bir segment, sağlama toplamı alınacak tek sayıda başlık ve metin sekizlisi içeriyorsa, sağlama toplamı amacıyla 16 bitlik bir sözcük oluşturmak için son sekizli sağda sıfırlarla doldurulur. Ped, segmentin bir parçası olarak iletilmez. Sağlama toplamı hesaplanırken, sağlama toplamı alanının kendisi sıfırlarla değiştirilir.

Başka bir deyişle, uygun doldurmadan sonra, 16 bitlik sözcüklerin tümü, kişinin tümleyen aritmetiği kullanılarak eklenir . Toplam daha sonra bit düzeyinde tamamlanır ve sağlama toplamı alanı olarak eklenir. Sağlama toplamı hesaplamasında kullanılan IPv4 paket başlığını taklit eden bir sözde başlık aşağıdaki tabloda gösterilmektedir.

Sağlama toplamı hesaplaması için TCP sözde başlığı (IPv4)
Bit ofseti 0-3 4–7 8–15 16–31
0 Kaynak adresi
32 Varış noktası
64 sıfırlar Protokol TCP uzunluğu
96 Kaynak bağlantı noktası hedef bağlantı noktası
128 Sıra numarası
160 onay numarası
192 Veri ofseti Rezerve Bayraklar pencere
224 sağlama toplamı Acil işaretçi
256 Seçenekler (isteğe bağlı)
256/288+  
Veri
 

Kaynak ve hedef adresleri, IPv4 başlığının adresleridir. TCP için protokol değeri 6'dır (bkz . IP protokol numaralarının listesi ). TCP uzunluk alanı, TCP başlığının ve verinin uzunluğudur (sekizli olarak ölçülür).

IPv6 için TCP sağlama toplamı

TCP, IPv6 üzerinden çalıştığında , sağlama toplamını hesaplamak için kullanılan yöntem, RFC 2460'a göre değiştirilir:

Sağlama toplamı hesaplamasında IP başlığındaki adresleri içeren herhangi bir aktarım veya diğer üst katman protokolü, 32 bit IPv4 adresleri yerine 128 bit IPv6 adreslerini içerecek şekilde IPv6 üzerinden kullanım için değiştirilmelidir.

Sağlama toplamının hesaplanması için IPv6 başlığını taklit eden bir sözde başlık aşağıda gösterilmiştir.

Sağlama toplamı hesaplaması için TCP sözde başlığı (IPv6)
Bit ofseti 0–7 8–15 16–23 24-31
0 Kaynak adresi
32
64
96
128 Varış noktası
160
192
224
256 TCP uzunluğu
288 sıfırlar Sonraki başlık
= Protokol
320 Kaynak bağlantı noktası hedef bağlantı noktası
352 Sıra numarası
384 onay numarası
416 Veri ofseti Rezerve Bayraklar pencere
448 sağlama toplamı Acil işaretçi
480 Seçenekler (isteğe bağlı)
480/512+  
Veri
 
  • Kaynak adresi: IPv6 başlığındaki adres
  • Varış yeri adresi: son varış yeri; IPv6 paketi bir Yönlendirme başlığı içermiyorsa, TCP IPv6 başlığındaki hedef adresi kullanır, aksi takdirde kaynak düğümde, Yönlendirme başlığının son öğesindeki adresi kullanır ve alıcı düğümde, IPv6 başlığındaki hedef adresi kullanır.
  • TCP uzunluğu: TCP başlığının ve verinin uzunluğu
  • Sonraki Başlık: TCP için protokol değeri

sağlama toplamı boşaltma

Birçok TCP/IP yazılım yığını uygulaması, ağa iletilmeden önce veya doğrulama için ağdan alındığında ağ bağdaştırıcısındaki sağlama toplamını otomatik olarak hesaplamak için donanım yardımını kullanma seçenekleri sunar . Bu, işletim sistemini sağlama toplamını hesaplayan değerli CPU döngülerini kullanmaktan kurtarabilir. Bu nedenle, genel ağ performansı artar.

Bu özellik, paket çözümleyicilerinin henüz ağ bağdaştırıcısına ulaşmamış giden paketlerdeki geçersiz sağlama toplamlarını bildirmek için sağlama toplamı boşaltmasının kullanımından habersiz veya belirsiz olmasına neden olabilir . Bu, yalnızca ağ bağdaştırıcısı tarafından iletilmeden önce yakalanan paketler için gerçekleşir; ağ bağdaştırıcısı tarafından kablo üzerinden iletilen tüm paketlerin geçerli sağlama toplamları olacaktır. Bu sorun, aynı ana bilgisayardaki sanal makineler arasında iletilen paketleri izlerken de ortaya çıkabilir; burada bir sanal aygıt sürücüsü, sağlama toplamının daha sonra VM ana bilgisayar çekirdeği veya fiziksel tarafından hesaplanacağını bilerek sağlama toplamı hesaplamasını (bir optimizasyon olarak) ihmal edebilir. donanım.

RFC belgeleri

  • RFC  675 – İnternet İletim Kontrol Programının Spesifikasyonu, Aralık 1974 Versiyonu
  • RFC  793 – TCP v4
  • STD 7 – İletim Kontrol Protokolü, Protokol belirtimi
  • RFC  1122 – TCP için bazı hata düzeltmeleri içerir
  • RFC  1323 – Yüksek Performans için TCP Uzantıları [RFC 7323 Tarafından Kullanımdan Kaldırılmıştır]
  • RFC  1379 – İşlemler için TCP'yi Genişletme—Kavramlar [RFC 6247 Tarafından Kullanımdan Kaldırılmıştır]
  • RFC  1948 – Sıra Numarası Saldırılarına Karşı Savunma
  • RFC  2018 – TCP Seçici Onay Seçenekleri
  • RFC  5681 – TCP Tıkanıklık Kontrolü
  • RFC  6247 – Dağıtılmamış TCP Uzantılarını RFC 1072, RFC 1106, RFC 1110, RFC 1145, RFC 1146, RFC 1379, RFC 1644 ve RFC 1693'ü Tarihi Duruma Taşıma
  • RFC  6298 – TCP'nin Yeniden İletim Zamanlayıcısının Hesaplanması
  • RFC  6824 – Birden Çok Adresli Çok Yollu İşlem için TCP Uzantıları
  • RFC  7323 – Yüksek Performans için TCP Uzantıları
  • RFC  7414 – TCP Spesifikasyon Belgeleri için Bir Yol Haritası

Ayrıca bakınız

Notlar

Referanslar

daha fazla okuma

Dış bağlantılar