TCP/IP: какво е това, стек от протоколи и предаване на данни

Автор: IT Sectr Публикувано: 2026-03-06 Време за четене: 8 мин

TCP/IP е стек от протоколи, който е основата на интернет и повечето компютърни мрежи. Той обединява протокола TCP, отговорен за надеждната доставка на данни, и IP, който осигурява маршрутизиране на пакети между възли. Според данни на IETF RFC 1180 (2024), стекът TCP/IP обработва над 80% от световния мрежов трафик, включително мобилни и уеб приложения. Стекът от протоколи определя как данните се опаковат, адресират и предават между устройства в мрежата.

Основни точки

  • TCP/IP е стек от протоколи, обединяващ TCP (транспорт) и IP (маршрутизиране) за предаване на данни в мрежи
  • Четири слоя на модела: приложен, транспортен, мрежов и канален — всеки решава своя задача
  • TCP гарантира доставка, ред на пакетите и контрол на грешки чрез потвърждения и повторни предавания
  • IP осигурява маршрутизиране — избор на пътя на пакета от подателя до получателя през междинни възли
  • Разбирането на TCP/IP е необходимо за разработка на мрежови приложения, отстраняване на грешки в връзките и оптимизиране на производителността

Какво е TCP/IP?

TCP/IP (Transmission Control Protocol / Internet Protocol) е стек от протоколи, разработен през 70-те години на XX век за ARPANET, който се превърна в де факто стандарт за глобалната интернет мрежа. Той определя как данните се разделят на пакети, адресират, предават и сглобяват от страна на получателя.

Архитектурата на TCP/IP е изградена на многослоен принцип, където всеки слой абстрахира определени функции. Приложният слой работи с данни на приложението, транспортният слой осигурява надеждност, мрежовият слой се занимава с маршрутизиране, а каналният слой — с предаване чрез физическа среда. Модулността позволява замяна на протоколи в рамките на един слой без промяна на съседните слоеве.

В мобилната разработка TCP/IP се използва от всяко приложение, което изпълнява мрежови заявки. Библиотеките URLSession, OkHttp, AFNetworking и Alamofire работят върху този стек, скривайки от разработчика детайлите по опаковане и маршрутизиране на пакети. Въпреки това, разбирането на TCP/IP е необходимо за оптимизиране на производителността: конфигурирането на TCP параметри чрез URLSessionConfiguration позволява управление на тайм-аути, поддържане на HTTP Persistent Connections и настройване на прокси за корпоративни среди.

Разбирането на TCP/IP е необходимо за диагностициране на мрежови проблеми: ако приложението не може да се свърже със сървъра, проблемът може да е на всеки слой от стека — от физическия канал до приложния протокол. Инструменти като tcpdump, Wireshark и Charles Proxy позволяват анализ на трафика на всеки слой и откриване на тесни места. За мобилни разработчици Xcode предоставя Network Debug Dashboard, а Android Studio — Network Inspector за анализ на TCP връзки в реално време.

Слоеве на модела TCP/IP

Моделът TCP/IP включва четири слоя, всеки от които изпълнява строго определени функции при предаване на данни. Разбирането на тази йерархия е необходимо за диагностициране на мрежови проблеми и оптимизиране на приложения.

Приложен слой

На приложния слой работят протоколи, с които приложенията взаимодействат директно: HTTP, HTTPS, FTP, SMTP, DNS, WebSocket. Този слой формира данни във формат, разбираем за приложението, и ги предава на транспортния слой. Разработчиците на мобилни приложения работят именно на този слой чрез мрежови библиотеки.

Транспортен слой

Транспортният слой осигурява предаване на данни между приложения на различни устройства. Основни протоколи: TCP (надеждно предаване с потвърждение) и UDP (бързо предаване без гаранции). TCP добавя към данните порт на подателя и получателя, управлява реда на пакетите и контролира претоварването на мрежата.

Мрежов и канален слой

Мрежовият слой се реализира от протокола IP, който определя адресирането (IPv4, IPv6) и маршрутизирането на пакети. Всеки пакет съдържа IP адрес на подателя и получателя, а маршрутизаторите по пътя на предаване вземат решение за следващия възъл въз основа на таблици за маршрутизиране. IPv4 използва 32-битови адреси (около 4,3 милиарда), а IPv6 използва 128-битови адреси, което решава проблема с изчерпването на адреси.

Каналният слой работи с физическата среда за предаване: Ethernet, Wi-Fi, Bluetooth. Този слой преобразува пакетите в сигнали и обратно, управлява достъпа до средата за предаване чрез MAC адреси и открива грешки на физическия слой с помощта на контролни суми на кадри (FCS).

На каналния слой работят протоколи като ARP (Address Resolution Protocol), който преобразува IP адреси в MAC адреси на устройства в локалната мрежа, и PPP (Point-to-Point Protocol), използван в VPN връзки и мобилни мрежи за предаване на данни.

СлойПротоколиФункция
ПриложенHTTP, HTTPS, DNS, FTP, WebSocketФормиране на данни на приложението
ТранспортенTCP, UDPПредаване между приложения, контрол на грешки
МрежовIP, ICMP, ARPМаршрутизиране и адресиране на пакети
КаналенEthernet, Wi-Fi, PPPПредаване чрез физическа среда

Как работи протоколът TCP

TCP (Transmission Control Protocol) е един от основните протоколи на транспортния слой. Той осигурява надеждна, подредена и проверима доставка на поток от байтове между приложения. Преди предаване на данни, TCP установява връзка чрез тристепенно ръкостискане.

Тристепенното ръкостискане (three-way handshake) започва с изпращане на SYN пакет от клиента. Сървърът отговаря с SYN-ACK пакет, потвърждавайки получаването. Клиентът завършва ръкостискането с ACK пакет, след което започва предаването на данни. Този процес гарантира, че и двете страни са готови за обмен и синхронизирани по отношение на поредните номера.

python
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80))
sock.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')
response = sock.recv(4096)
print(response.decode())
sock.close()

В примера се създава TCP сокет от тип SOCK_STREAM, който автоматично извършва тристепенно ръкостискане при извикване на connect. Методът send изпраща HTTP заявка, recv получава отговор. След приключване, close изпраща FIN пакет за коректно затваряне на връзката.

TCP сървър с обработка на клиенти

Нека разгледаме пример за TCP сървър в Python, който приема множество клиенти чрез нишки. Всяка връзка се обработва в отделна нишка, което позволява едновременно обслужване на много клиенти без блокиране на основния цикъл.

python
import socket
import threading

def handle_client(conn, addr):
    print(f'Клиентът се свърза: {addr}')
    with conn:
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data.upper())
    print(f'Клиентът {addr} се изключи')

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9090))
server.listen(5)
print('TCP сървърът стартира на порт 9090')

while True:
    conn, addr = server.accept()
    thread = threading.Thread(target=handle_client, args=(conn, addr))
    thread.start()

TCP сървърът обработва всяка връзка в отделна нишка, извиквайки accept в безкраен цикъл. Функцията handle_client получава данни, преобразува ги в главни букви и ги изпраща обратно чрез sendall. Когато цикълът recv приключи (когато клиентът затвори връзката), нишката завършва и сокетът се затваря автоматично. В мобилните приложения такава нисконивова работа със сокети не се използва директно — мобилните HTTP библиотеки управляват връзките чрез пулове от нишки и автоматично пренасочват TCP връзки.

Разлики между TCP и UDP

Изборът между TCP и UDP е едно от ключовите решения при проектиране на мрежово взаимодействие. TCP гарантира доставка, ред и цялост на данните с цената на допълнително забавяне. UDP жертва надеждността за минимално забавяне и по-малко натоварване на канала.

ХарактеристикаTCPUDP
ВръзкаУстановява (handshake)Не установява
НадеждностГарантира доставкаНе гарантира
Ред на пакетиПодреждаНе подрежда
СкоростПо-нискаПо-висока
ПриложениеУеб, имейл, файловеСтрийминг, игри, DNS

За мобилни приложения изборът на протокол зависи от сценария: REST-API и изтегляне на данни изискват TCP, докато видеоразговорите и онлайн игрите се възползват от скоростта на UDP. Някои приложения комбинират и двата протокола — TCP за управление и UDP за медиен поток. Съвременният протокол QUIC, работещ над UDP и използван в HTTP/3, съчетава предимствата на двата подхода и вече се поддържа автоматично на iOS и Android чрез URLSession.

Примери за код на TCP/IP

Нека разгледаме пример за TCP клиент в Python с обработка на грешки и тайм-аут. Този подход се използва в мобилни приложения за надеждна връзка със сървъра.

python
import socket
import sys

def tcp_client(host, port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(10)
        sock.connect((host, port))
        print(f'Свързан към {host}:{port}')
        return sock
    except socket.error as err:
        print(f'Грешка при свързване: {err}')
        sys.exit(1)

sock = tcp_client('api.example.com', 443)
sock.close()

Функцията tcp_client приема хост и порт, създава сокет с тайм-аут от 10 секунди и се опитва да се свърже. При грешка при свързване — например недостъпност на сървъра или блокиране от защитна стена — се хвърля изключение с описание на проблема. В мобилните приложения тайм-аутът за свързване е критичен: твърде кратък води до фалшиви грешки в бавни мрежи, твърде дълъг води до замръзване на интерфейса. Препоръчителната стойност за мобилни мрежи е 10–15 секунди за timeoutIntervalForRequest и 30–60 секунди за timeoutIntervalForResource в конфигурацията на URLSession.

Често задавани въпроси

Каква е разликата между TCP и IP?

IP отговаря за маршрутизиране — доставка на пакета от подателя до получателя чрез междинни възли. TCP осигурява надеждно сглобяване на данни: контролира реда, проверява цялостта и изисква повторно предаване на загубени пакети. Заедно образуват стека TCP/IP.

Кой порт използва TCP/IP по подразбиране?

TCP/IP не използва фиксиран порт — портът се задава от приложението. Стандартни портове: 80 (HTTP), 443 (HTTPS), 22 (SSH), 25 (SMTP). Порт 443 е основният за защитен уеб трафик в мобилни приложения.

Какво е TCP връзка?

TCP връзката е логически канал между две приложения, установен чрез тристепенно ръкостискане (SYN, SYN-ACK, ACK). Връзката се идентифицира от двойката (IP адрес, порт) на подателя и получателя. Ръкостискането гарантира, че и двете страни са готови за обмен на данни.

Може ли TCP/IP да се използва в мобилни приложения без интернет?

Да, TCP/IP работи в локални мрежи (LAN) без достъп до интернет. Устройствата се свързват чрез Wi-Fi Direct, Bluetooth PAN или Ethernet и обменят данни чрез локални IP адреси. Локалният TCP/IP се използва в IoT устройства и peer-to-peer приложения.

Защо TCP е по-бавен от UDP?

TCP е по-бавен поради допълнителни механизми: тристепенно ръкостискане преди предаване, потвърждаване на всеки пакет, повторно изпращане на загубени сегменти, контрол на претоварването. UDP изпраща дейтаграми без тези проверки, което намалява забавянето с цената на възможни загуби.

Резюме

  • TCP/IP — основният стек от протоколи, осигуряващ предаване на данни в интернет и локални мрежи
  • Четири слоя (приложен, транспортен, мрежов, канален) абстрахират различни аспекти на предаването
  • TCP гарантира надеждна доставка с контрол на грешки и потвърждения
  • IP отговаря за маршрутизиране на пакети и адресиране на възли в мрежата
  • Избор на TCP или UDP зависи от изискванията: надеждност срещу скорост
  • Всяко мобилно приложение, което изпълнява мрежови заявки, използва стека TCP/IP

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също