Ответ
TCP (Transmission Control Protocol) — это основной протокол транспортного уровня стека TCP/IP, обеспечивающий надёжную, упорядоченную и проверенную на ошибки доставку потока данных между приложениями, работающими на разных хостах.
Ключевые характеристики:
- Установка соединения (Connection-oriented): Перед обменом данными происходит «трёхстороннее рукопожатие» (SYN → SYN-ACK → ACK).
- Надёжность и контроль ошибок: Используются подтверждения (ACK), таймауты и повторная передача потерянных пакетов.
- Упорядочивание: Каждому байту данных присваивается порядковый номер. Приёмник собирает пакеты в правильном порядке.
- Контроль потока (Flow Control): Механизм «скользящего окна» предотвращает переполнение буфера приёмника.
- Управление перегрузкой (Congestion Control): Алгоритмы динамически регулируют скорость отправки данных, чтобы не перегрузить сеть.
| Сравнение с UDP: | Характеристика | TCP | UDP |
|---|---|---|---|
| Надёжность | Гарантированная | Не гарантирована | |
| Установка соединения | Требуется (handshake) | Не требуется | |
| Скорость | Ниже (из-за накладных расходов) | Выше | |
| Порядок доставки | Гарантирован | Не гарантирован | |
| Использование | Веб (HTTP), почта (SMTP), файлы (FTP) | Видеостриминг, VoIP, DNS |
Пример сокета на Python:
# Серверная сторона
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # SOCK_STREAM = TCP
server_socket.bind(('127.0.0.1', 65432))
server_socket.listen()
conn, addr = server_socket.accept() # Ожидание подключения
with conn:
data = conn.recv(1024) # Получение данных
conn.sendall(b'Reply') # Отправка ответа