SCTP — xabar chegaralarini saqlaydigan, ishonchli yetkazish, bir nechta oqim va bir nechta tarmoq manzilini qo‘llab-quvvatlaydigan transport protokoli. Uning to‘liq nomi Stream Control Transmission Protocol hisoblanadi.
SCTP dastlab telekommunikatsiya signalizatsiyasini IP tarmog‘i orqali tashish uchun ishlab chiqilgan. Keyinchalik u WebRTC data channel, maxsus serverlararo aloqa va bir nechta tarmoq interfeysiga ega tizimlarda ham qo‘llanadigan transport protokoliga aylandi.
TCP baytlar oqimini beradi, SCTP esa alohida xabarlar bilan ishlaydi. Ilova bitta xabar yuborsa, qabul qiluvchi ham uni alohida xabar sifatida oladi.
Association
SCTPdagi ulanish association deb ataladi. Association ikki endpoint orasidagi mantiqiy aloqa bo‘lib, har endpoint bir nechta IP manzilga ega bo‘lishi mumkin.
Association quyidagilarni saqlaydi:
- Verification Tag;
- Transmission Sequence Number;
- streamlar;
- acknowledgement holati;
- congestion control;
- peer manzillari;
- heartbeat holati;
- retransmission timerlari;
- receiver window.
TCP ulanishi odatda bitta manba va destination IP juftligiga bog‘langan. SCTP association esa bir nechta manzil bilan davom etishi mumkin.
Xabar chegarasi
TCP ilovaga ketma-ket baytlar oqimini beradi. Sender ikki marta 100 baytdan yuborsa, receiver 50, 150 yoki 200 bayt ko‘rinishida o‘qishi mumkin.
SCTP xabar chegarasini saqlaydi. Sender alohida yuborgan xabar receiverga alohida xabar sifatida yetadi.
Bu signalizatsiya, event, buyruq, kichik protokol xabari va data channel uchun qulay.
Katta xabar SCTP ichida fragmentlarga bo‘linishi mumkin, ammo qabul qiluvchiga yana bitta to‘liq xabar sifatida beriladi.
Multi-streaming
Bitta association ichida bir nechta mustaqil stream mavjud.
Masalan:
Har stream o‘z tartib raqamiga ega. Bir streamdagi xabar yo‘qolsa, boshqa streamdagi tayyor xabarlar uni kutib qolmasligi mumkin. Bu TCPdagi transport darajasidagi head-of-line blocking ta’sirini kamaytiradi.
Tartiblangan va tartibsiz yetkazish
SCTP xabarni stream ichida tartiblangan yoki unordered ko‘rinishda yuborishi mumkin.
Ordered delivery
Xabarlar stream sequence asosida ketma-ket beriladi. Oldingi xabar yo‘qolsa, keyingisi kutadi.
Unordered delivery
Xabar kelishi bilan ilovaga beriladi. Tartib muhim bo‘lmagan telemetriya yoki real vaqt ma’lumoti uchun mos.
Tartibsiz yetkazish ishonchsiz degani emas. Xabar hali ham retransmission orqali yetkazilishi mumkin.
Multihoming
SCTP endpoint bir nechta IP manzilni associationga bog‘lay oladi.
Masalan, serverda 10.10.1.10 va 10.20.1.10 manzilli ikkita tarmoq interfeysi bo‘lishi mumkin.
Asosiy yo‘l ishlamay qolsa, SCTP boshqa peer manzilga o‘tadi. Bu path failover hisoblanadi.
Multihomingning foydasi:
- tarmoq uzilishiga chidamlilik;
- fizik interfeys zaxirasi;
- operator kanal zaxirasi;
- telekommunikatsiya tizimida yuqori mavjudlik.
SCTPning klassik multihoming modeli bir vaqtda barcha yo‘llardan throughput yig‘ish uchun emas, asosan failover uchun yaratilgan.
To‘rt bosqichli handshake
SCTP association to‘rt bosqichda yaratiladi.
- Client
INITyuboradi. - Server
INIT ACKva cookie qaytaradi. - Client
COOKIE ECHOyuboradi. - Server
COOKIE ACKbilan associationni tasdiqlaydi.
Cookie server tomonidan imzolangan holat ma’lumotini o‘z ichiga oladi. Server dastlabki INITdan keyin katta state saqlamasligi mumkin. Bu TCP SYN floodga o‘xshash hujumlarda server resursini himoya qilishga yordam beradi.
Verification Tag
Har association uchun Verification Tag mavjud. Kiruvchi SCTP packet tegishli associationga tegishli ekanini tekshirishda ishlatiladi.
Noto‘g‘ri Verification Tagli packetlar rad etiladi. Bu eski yoki tasodifiy packetning boshqa associationga aralashishini kamaytiradi.
Chunklar
SCTP packet umumiy header va bir nechta chunkdan tuziladi.
| Chunk | Vazifasi |
|---|---|
DATA |
Ilova xabari |
INIT |
Association boshlash |
INIT ACK |
Boshlang‘ich javob |
SACK |
Qabul qilingan ma’lumotni tasdiqlash |
HEARTBEAT |
Yo‘l holatini tekshirish |
HEARTBEAT ACK |
Heartbeat javobi |
ABORT |
Associationni keskin yopish |
SHUTDOWN |
Tartibli yopish |
ERROR |
Protokol xatosi |
COOKIE ECHO |
Cookie qaytarish |
COOKIE ACK |
Cookie qabul qilinganini tasdiqlash |
Bir SCTP packet ichida bir nechta chunk joylashishi mumkin.
TSN va SACK
Har DATA chunk Transmission Sequence Number oladi. TSN butun association bo‘yicha oshadi.
TSN yordamida yo‘qolgan chunk aniqlanadi, duplicate packet topiladi, acknowledgement beriladi va retransmission boshqariladi. Stream Sequence Number esa ma’lum stream ichidagi tartib uchun ishlatiladi.
SCTP qabul qilingan DATA chunklarni Selective Acknowledgement orqali bildiradi. SACK ichida cumulative TSN ACK, gap ACK blocks, duplicate TSN va receiver window bo‘lishi mumkin.
Gap ACK qaysi oraliq chunklar kelganini ko‘rsatadi. Sender faqat yo‘qolgan qismlarni qayta yuboradi.
Heartbeat
SCTP peer manzillarining ishlashini HEARTBEAT orqali tekshiradi.
Agar primary path javob bermasa:
- xato hisoblagichi oshadi;
- yo‘l inactive deb belgilanadi;
- boshqa active manzil tanlanadi;
- heartbeat orqali eski yo‘l tekshirib turiladi.
Yo‘l qayta ishlasa, u yana active holatga o‘tishi mumkin.
Congestion control
SCTP TCPga o‘xshash congestion control tamoyillaridan foydalanadi:
- congestion window;
- slow start;
- congestion avoidance;
- retransmission timeout;
- fast retransmit.
Har destination path uchun alohida congestion holati yuritilishi mumkin. Receiver window qabul qiluvchi xotirasini, congestion window esa tarmoq sig‘imini himoya qiladi.
Partial Reliability
SCTP kengaytmalaridan biri Partial Reliability SCTP hisoblanadi.
Ba’zi xabarlar ma’lum vaqt yoki retransmission sonidan keyin foydasiz bo‘lishi mumkin. Masalan, real vaqt holat yangilanishi kechikib kelgandan ko‘ra tashlab yuborilgani ma’qul.
PR-SCTP senderga ayrim xabarlarni qayta uzatishni to‘xtatish imkonini beradi. Bu xususiyat WebRTC data channellarda ishlatilishi mumkin.
WebRTC
WebRTC data channel odatda quyidagi qatlamlardan foydalanadi:
Data Channel
SCTP
DTLS
ICE / UDP
IP
SCTP data channelga bir nechta stream, ordered yoki unordered, reliable yoki partial reliable va xabar chegarasi imkoniyatlarini beradi.
Brauzer SCTPni internetda bevosita IP protocol sifatida yubormaydi. U DTLS ichida tashiladi.
Port va IP protokol raqami
SCTP TCP yoki UDP portidan foydalanmaydi, lekin uning o‘z source va destination port maydonlari mavjud.
IP headerdagi protocol number SCTP uchun 132 hisoblanadi.
Firewall va NAT SCTPni alohida protokol sifatida qo‘llashi kerak. Ko‘p tarmoq qurilmalari TCP va UDPga qaraganda SCTPni kamroq qo‘llab-quvvatlaydi.
NAT bilan ishlash
SCTP multihoming va bir nechta IP manzilni xabarlarda uzatishi mumkin. NAT bu manzillarni to‘g‘ri o‘zgartirmasa, association ishlamasligi mumkin.
Carrier va korporativ tarmoqlarda SCTP-aware firewall yoki maxsus tunnellash ishlatiladi.
WebRTCda SCTP DTLS/UDP ichida bo‘lgani sababli oddiy NAT traversal mexanizmlaridan foydalanadi.
Telekommunikatsiya
SCTP SIGTRAN oilasida SS7 signalizatsiyasini IP tarmog‘ida tashish uchun keng ishlatilgan.
Muhim xususiyatlar:
- xabar chegarasi;
- multihoming;
- tez failover;
- multi-streaming;
- ishonchli yetkazish;
- congestion control.
Signalizatsiya trafikida xabar tartibi va uzluksizlik yuqori ahamiyatga ega.
Diagnostika
SCTP association ishlamasa, quyidagilar tekshiriladi:
- IP protocol 132ga firewall ruxsati;
- source va destination port;
- INIT va INIT ACK;
- cookie almashinuvi;
- Verification Tag;
- peer addresslar;
- heartbeat;
- multihoming routing;
- MTU;
- checksum;
- SACK;
- retransmission;
- NAT;
- application log.
Bir manzil ishlasa, ikkinchisi ishlamasa, har peer IP uchun alohida routing va firewall tekshiriladi.
Bog‘liq tushunchalar
Transport layer, Association, Multi-streaming, Multihoming, TSN, SACK, Heartbeat, PR-SCTP, SIGTRAN, WebRTC, TCP, UDP