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) — это стек протоколов, разработанный в 1970-х годах для 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, подтверждая получение. Клиент завершает handshake пакетом 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)Не устанавливает
НадёжностьГарантирует доставкуНе гарантирует
Порядок пакетовУпорядочиваетНе упорядочивает
СкоростьНижеВыше
ПрименениеВеб, email, файлыСтриминг, игры, 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 секунд и пытается подключиться. При ошибке соединения — например, недоступности сервера или блокировке firewall — выбрасывается исключение с описанием проблемы. В мобильных приложениях тайм-аут соединения критичен: слишком короткий приводит к ложным ошибкам на медленных сетях, слишком длинный — к зависанию интерфейса. Рекомендуемое значение для мобильных сетей — 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также