TCP

**Transmission Control Protocol (TCP)** - bu Internet protokollar to‘plamining (*Internet Protocol Suite*) asosiy protokollaridan biridir.TCP dastlabki kompyuter tarmoqlari amaliyotida **Internet Protokoli (IP)** bilan birgalikda ishlab chiqilgan va shu bois butun majmua odatda TCP/IP deb ataladi. TCP ishonchli yetqazib berish, ketma ketlikda uzatish va xatolikni tekshirish va tuzatishlarni ta'minlaydi. Uning Vazifasi - IP Tarmog'i orqali bog'langan xostlarda (komputerlarda) ishlayotgan ilovalar o'rtasida baytlar oqimini (octet/byte stream) xavfsiz uzatish.

Asosiy enternet amaliyotlari -  World Wide Web (WWW), elektron pochta, masofaviy boshqaruv, faylar almashuvlari va oqim (streaming) media - Barcha TCP ga tayanadi. U TCP/IP to'plamining **transport qatlami (OSI modelidagi 4-qatlam)** da ishlaydi. SSL/TLS xavfsizlik protokollari ham odatda TCP ustida(yani TCP)orqali ishlaydi.

TCP — ulanishga asoslangan(connection-oriented) protokol. Bu shuni anglatadiki, yuboruvchi va qabul qiluvchi dastlab kelishilgan parametrlar asosida ulanishni o‘rnatishi lozim.Ulanish “uch bosqichli qo‘l siqish” (three-way handshake) protsedurasi orqali amalga oshiriladi.

## Taʼrif

* Server ulanish o‘rnatilishidan avval mijozlarning so‘rovlarini kutib turuvchi passive open holatda bo‘lishi shart.   

* Mijoz tomonidan ulanish so‘ralganda faol ochilish (active open) sodir bo‘ladi.   

* Uch bosqichli qo‘l siqish, qayta uzatish (`retransmission`) va xatolarni aniqlash (`error detection`) TCP’ning ishonchliligini oshiradi, biroq shu bilan birga kechikishni (latency) ham ko‘paytiradi. Bu TCP’ning asosiy kamchiligi sifatida qaraladi.

Shu sababli, ishonchli oqim xizmatiga muhtoj bo‘lmagan ilovalar odatda UDP (User Datagram Protocol) dan foydalanadi. UDP ulanishga asoslanmagan (connectionless) datagramma xizmatini taqdim etadi va bunda vaqt (tezlik) ishonchlilikdan ustun qo‘yiladi.

TCP shuningdek tarmoq tiqilinchligini (network congestion) oldini olish mexanizmlarini qo‘llaydi.

Biroq, TCP’da ayrim zaifliklar mavjud, jumladan - xizmatni rad etish hujumlari (Denial of Service, DoS), ulanishni qo‘lga olish (connection hijacking), TCP veto va qayta o‘rnatish hujumi (reset attack).

## Tarixiy kelib chiqishi
1974-yil may oyida Vinton (Vint) Serf va Bob Kan (Bob Kahn) paketli kommutatsiya (packet switching) orqali tarmoq tugunlari (network nodes) o‘rtasida resurslarni bo‘lishish uchun internetworking protokolini tasvirlab berdilar.

Mualliflar yangi tarmoq konsepsiyasiga Fransiyadagi CYCLADES loyihasi g‘oyalarini qo‘shish maqsadida Jerar Le Lann (Gérard Le Lann) bilan hamkorlikda ishlashgan.

Natijada ishlab chiqilgan protokolning texnik spetsifikatsiyasi — RFC 675 (Specification of Internet Transmission Control Program) — Vinton Serf, Yogen Dalal va Karl Sanchayn (Carl Sunshine) tomonidan yozilgan va 1974-yil dekabrida e’lon qilingan. Mazkur hujjatda “internet” atamasining dastlabki hujjatlashtirilgan ishlatilishi qayd etilgan bo‘lib, u “internetwork” so‘zining qisqa shakli sifatida qo‘llangan.

**Transmission Control Program** dastlab xostlar (hostlar) o‘rtasida ham ulanishga asoslangan (connection-oriented) bog‘lanishlarni, ham datagramma xizmatlarini o‘z ichiga olgan edi. Keyinchalik, 4-versiyada ushbu monolit (bir butun) dasturiy tuzilma modulli arxitekturaga ajratildi. Natijada ikki alohida protokol shakllandi. Ular Transmission Control Protocol (TCP) va Internet Protocol (IP). Bu yangilanish natijasida tarmoq modeli vujudga keldi va u norasmiy tarzda TCP/IP deb atala boshlandi. Rasmiy manbalarda esa u turlicha nomlangan:
* DoD internet arxitekturasi modeli (qisqa qilib, DoD modeli),
* DARPA modeli.

Oradan vaqt o‘tib, TCP/IP modeli Internet Protocol Suitening bir qismiga aylandi va unga sinonim sifatida qo‘llanadigan bo‘ldi.

**TCP’ning rivojlanish bosqichlari: Internet Experiment Notes (IEN) hujjatlari**

Quyidagi Internet Experiment Note (IEN) hujjatlari TCP’ning zamonaviy ko‘rinishga aylanish jarayonini hujjatlashtiradi:

* IEN #5 — Specification of Internet Transmission Control Program TCP Version 2 (1977-yil mart)  
* IEN #21 — Specification of Internetwork Transmission Control Program TCP Version 3 (1978-yil yanvar)  
* IEN #27 — A Proposal for TCP Version 3.1 Header Format (1978-yil fevral)  
* IEN #40 — Transmission Control Protocol Draft Version 4 (1978-yil iyun)  
* IEN #44 — Latest Header Formats (1978-yil iyun)  
* IEN #55 — Specification of Internetwork Transmission Control Protocol Version 4 (1978-yil sentyabr)  
* IEN #81 — Transmission Control Protocol Version 4 (1979-yil fevral)  
* IEN #112 — Transmission Control Protocol (1979-yil avgust)  
* IEN #124 — DOD STANDARD TRANSMISSION CONTROL PROTOCOL (1979-yil dekabr)  

TCP 1980-yil yanvarida RFC 761 sifatida rasmiy standartga aylantirildi.

Keyinchalik, 2004-yilda Vinton Serf (Vint Cerf) va Bob Kan (Bob Kahn) TCP/IP bo‘yicha asosiy ilmiy ishlari uchun Turing mukofoti bilan taqdirlandilar.

## Network Funksiyalari

**Transmission Control Protocol (TCP)** ilova dasturi (application program) va Internet Protocol (IP) o‘rtasida oraliq darajadagi aloqa xizmatini taqdim etadi.

TCP Internet modelining transport qatlamida xostdan-xostga (host-to-host) bog‘lanishni ta’minlaydi. Shu sababli, ilova dasturi boshqa xostga ma’lumot yuborish uchun zarur bo‘lgan barcha past darajali mexanizmlarni (masalan, IP fragmentatsiyasi orqali uzatish muhitining maksimal paket hajmiga — MTUga moslashish) bilishi shart emas. Transport qatlamida TCP barcha qo‘l siqish jarayonlari (handshaking), uzatish tafsilotlari va ishonchlilikni o‘zi boshqaradi. Natijada u ilova dasturiga tarmoq ulanishining abstraksiyasini taqdim etadi, odatda bu tarmoq soket interfeysi (network socket interface) orqali amalga oshiriladi.

Protokol stekidagi quyi qatlamlarda, tarmoq tiqilinchligi (network congestion), trafikni muvozanatlash (traffic load balancing) yoki tarmoqdagi kutilmagan xatti-harakatlar sababli IP paketlar yo‘qolishi, ikki marta yetib kelishi yoki tartibdan tashqari yetib kelishi mumkin.

TCP ushbu muammolarni aniqlaydi, yo‘qolgan ma’lumotlarni qayta uzatishni talab qiladi, tartibdan tashqari kelgan ma’lumotlarni qayta joylashtiradi va hatto boshqa muammolar sonini kamaytirish uchun tarmoq tiqilinchligini yumshatishda yordam beradi. Agar ma’lumot baribir yetkazilmasa, manba (source) bu muvaffaqiyatsizlik haqida xabardor qilinadi. TCP qabul qiluvchi (receiver) dastlab yuborilgan baytlar ketma-ketligini (sequence of octets) qayta yig‘ib bo‘lgach, ularni qabul qiluvchi ilovaga uzatadi. Shu tariqa, TCP ilovaga tarmoqning ichki mexanizmlarini yashirib, abstraktlashtirilgan aloqa xizmatini taqdim etadi.

TCP tezkor yetkazib berishdan ko‘ra aniq va ishonchli yetkazib berishga optimallashtirilgan. Shu sababli, u tartibdan tashqari kelgan xabarlarni kutishda yoki yo‘qolgan xabarlarni qayta uzatishda nisbatan uzun kechikishlarga (hatto soniyalar darajasida) olib kelishi mumkin. Shuning uchun, TCP real vaqt rejimidagi ilovalar uchun (masalan, IP telefoniya (Voice over IP)) unchalik mos emas. Bunday ilovalar uchun odatda User Datagram Protocol (UDP) ustida ishlaydigan Real-time Transport Protocol (RTP) kabi protokollar tavsiya etiladi.

* TCP → ishonchlilik, ammo kechikish yuqori.  
* UDP+RTP → vaqtni ustun qo‘yadi, real vaqt uchun qulay, ammo ishonchlilik kafolatlanmagan.  

TCP — bu ishonchli bayt oqimi (byte stream) yetkazib berish xizmati bo‘lib, u yuborilgan barcha baytlar qabul qiluvchi tomonidan xuddi o‘z holicha va xuddi shu tartibda olinishi kafolatlanadi. Ko‘plab tarmoqlar orqali paket uzatish ishonchli emasligi sababli, TCP buni “ijobiy tasdiqlash va qayta uzatish” (positive acknowledgment with re-transmission) deb ataluvchi usul orqali ta’minlaydi.

Bu usulga ko‘ra:
# Qabul qiluvchi (receiver) har bir ma’lumotni olganda tasdiqlovchi xabar (ACK) bilan javob beradi.  
# Yuboruvchi (sender) esa har bir yuborgan paketining yozuvini saqlab qoladi va u jo‘natilgan vaqtdan boshlab **taymer (timer)**ni ishga tushiradi.  
# Agar taymer tugasa-yu, tasdiqlash (ACK) kelmasa, yuboruvchi paketni qayta uzatadi.  
# Taymer paketning yo‘qolib ketishi yoki buzilib qolishi holatlarida zarur bo‘ladi.  

IP ma’lumotlarning haqiqiy yetkazib berilishini boshqaradi, TCP esa segmentlar ustidan nazorat yuritadi — ya’ni, tarmoq orqali samarali marshrutlash uchun xabar bo‘laklarga ajratiladi.  

Masalan, biror HTML fayl veb-serverdan yuborilayotgan bo‘lsa:  
* Serverning TCP dasturiy qatlami faylni bir nechta segmentlarga bo‘ladi va ularni alohida-alohida internet qatlamiga uzatadi.  
* Internet qatlami esa har bir TCP segmentini IP paketiga joylaydi (*encapsulation*) va unga sarlavha (*header*) qo‘shadi.  
* Bu sarlavhada, boshqa ma’lumotlar bilan birga, manzil IP manzili (*destination IP address*) ham bo‘ladi.  

Paketlar qabul qiluvchi kompyuterga yetib borgach, transport qatlamidagi TCP dasturi barcha segmentlarni yana yig‘ib chiqadi, ularni to‘g‘ri tartibda joylashtiradi va xatosiz ekanini tekshiradi. Shundan so‘ng fayl oqimi (*file stream*) qabul qiluvchi ilovaga uzatiladi.  

## TCP segment tuzilishi
Transmission Control Protocol (TCP) ma’lumot oqimidan (data stream) ma’lumotni qabul qiladi, uni bo‘laklarga (chunks) ajratadi va **TCP sarlavhasi (TCP header)**ni qo‘shib, TCP segmentini hosil qiladi.Hosil qilingan TCP segmenti keyinchalik Internet Protocol (IP) datagrammasiga joylanadi (encapsulation) va qarshi tomondagi tugunlar (peers) bilan almashiladi.

TCP paketi atamasi ham norasmiy, ham rasmiy qo‘llanmalarda uchraydi. Biroq aniq texnik atamalarda “segment” TCP protokolining ma’lumot birligi (PDU)ni, “datagramma” IP protokolining PDU’sini, “frame” esa ma’lumotlar kanali qatlamining PDU’sini anglatadi.Jarayonda dasturlar TCP’ga murojaat qilib, ma’lumot buferlarini argument sifatida uzatadi. TCP bu buferlardagi ma’lumotlarni segmentlarga joylaydi va internet moduliga (masalan, IP) murojaat qilib, har bir segmentni manzil tomondagi TCP’ga uzatishni ta’minlaydi.

Jarayonda dasturlar TCP’ga murojaat qilib, ma’lumot buferlarini argument sifatida uzatadi. TCP bu buferlardagi ma’lumotlarni segmentlarga joylaydi va internet moduliga (masalan, IP) murojaat qilib, har bir segmentni manzil tomondagi TCP’ga uzatishni ta’minlaydi.TCP segmenti ikkita asosiy qismdan iborat bo‘ladi: segment sarlavhasi va ma’lumot qismi. Segment sarlavhasida 10 ta majburiy maydon va bitta ixtiyoriy kengaytma maydoni (Options) mavjud. Ma’lumot qismi esa sarlavhadan keyin joylashadi va ilova uchun tashilayotgan yuk (payload)ni tashkil etadi.Ma’lumot qismining uzunligi segment sarlavhasida alohida ko‘rsatilmagan bo‘ladi. Uni hisoblash uchun IP sarlavhasida ko‘rsatilgan umumiy IP datagramma uzunligidan segment sarlavhasi va IP sarlavhasi uzunliklarini ayirish kerak bo‘ladi.

## Maydonlar tavsifi

; Manba porti (Source Port): 16 bit  
Paketni yuborayotgan portni aniqlaydi.  

; Tayinlanish porti (Destination Port): 16 bit  
Paketni qabul qilayotgan portni aniqlaydi.  

; Ketma-ketlik raqami (Sequence Number): 32 bit  
Ikki xil vazifaga ega:  
* Agar SYN flag = 1 bo‘lsa, bu boshlang‘ich ketma-ketlik raqami *(Initial Sequence Number)*. Birinchi ma’lumot baytining ketma-ketlik raqami va unga mos ACK’dagi tasdiqlovchi raqam shu qiymatga +1 bo‘ladi.  
* Agar SYN flag = 0 bo‘lsa, bu qiymat joriy sessiyada ushbu segmentdagi birinchi baytning yig‘ilgan ketma-ketlik raqami hisoblanadi.  

; Tasdiqlash raqami (Acknowledgment Number): 32 bit  
Agar ACK flag o‘rnatilgan bo‘lsa, bu maydon qiymati ACK yuboruvchi tomon kutayotgan keyingi ketma-ketlik raqamidir.  
Ya’ni, shu qiymatgacha bo‘lgan barcha baytlar qabul qilinganini bildiradi. Har ikki tomon yuborgan birinchi ACK paketi qarshi tomondan yuborilgan boshlang‘ich ketma-ketlik raqamini tasdiqlaydi, ammo hali ma’lumot yo‘q.  

; Sarlavha ofseti (Data Offset / DOffset): 4 bit  
TCP sarlavhasi hajmini 32-bitli so‘zlar sonida ko‘rsatadi.  
* Minimum: 5 so‘z = 20 bayt.  
* Maksimum: 15 so‘z = 60 bayt.  

Shunday qilib, sarlavhada 40 baytgacha opsiyalar bo‘lishi mumkin. Nomlanish sababi — bu maydon TCP segmenti boshi va haqiqiy ma’lumot boshlanishi orasidagi siljishni bildiradi.  

; Zaxira (Reserved / Rsrvd): 4 bit  
Kelajak uchun ajratilgan. 0 ga teng bo‘lishi kerak.  
Yuboruvchilar uni o‘zgartirmasligi kerak, qabul qiluvchilar esa agar to‘ldirilgan bo‘lsa e’tiborsiz qoldirishi lozim.  

2003–2017 yillarda oxirgi bit (103-bit) NS *(Nonce Sum)* flag sifatida belgilangan edi (RFC 3540, ECN-nonce).  
Biroq u keng qo‘llanmadi va RFC “Historic” maqomiga o‘tkazildi.  

; Flaglar (Flags): 8 bit  
Har biri 1 bitdan iborat 8 ta boshqaruv flagini o‘z ichiga oladi:  

* **CWR (Congestion Window Reduced)**: Jo‘natuvchi host ECE flag o‘rnatilgan segment olganini va tarmoq tirbandligiga javob berganini bildiradi.  
* **ECE (ECN-Echo)**: Ikki xil vazifaga ega:  
** Agar SYN=1 bo‘lsa, TCP juftligi ECN qo‘llab-quvvatlashini bildiradi.  
** Agar SYN=0 bo‘lsa, IP sarlavhasida ECN=11 *(Congestion Experienced)* flagi bilan paket olinganini bildiradi. Bu tarmoq tirbandligini ko‘rsatadi.  
* **URG (Urgent)**: Urgent Pointer maydoni amal qilayotganini bildiradi.  
* **ACK**: Tasdiqlash maydoni amal qilayotganini bildiradi. SYN’dan keyingi barcha paketlarda ACK flag bo‘lishi shart.  
* **PSH (Push)**: Ma’lumotni buferda ushlab turmasdan ilovaga uzatishni so‘raydi.  
* **RST (Reset)**: Ulanishni qayta o‘rnatadi.  
* **SYN (Synchronize)**: Ketma-ketlik raqamlarini sinxronlashtiradi. Har ikki tomondan yuborilgan birinchi paketda bo‘lishi kerak. Ba’zi maydonlar faqat SYN=1 bo‘lganda ma’noli bo‘ladi.  
* **FIN (Finish)**: Yuboruvchining oxirgi paketi. Ulanishni yopishni bildiradi.

## Manbalar