Ответ
TCP/IP — это стековая модель передачи данных, которая является основой современного интернета. Она описывает, как данные должны быть отформатированы, адресованы, переданы и получены. Модель состоит из четырех уровней, но чаще всего обсуждаются два ключевых протокола с разных уровней:
-
IP (Internet Protocol) — протокол сетевого уровня. Его основная задача — адресация и маршрутизация пакетов данных. Он присваивает каждому устройству в сети уникальный IP-адрес (например,
192.168.1.1
) и определяет путь доставки пакетов до цели, но не гарантирует их доставку. -
TCP (Transmission Control Protocol) — протокол транспортного уровня. Он работает поверх IP и обеспечивает надежную, упорядоченную и безошибочную доставку данных. TCP устанавливает соединение, разбивает большие данные на сегменты, нумерует их, отслеживает получение и запрашивает повторную отправку в случае потерь.
Проще говоря, IP — это как почтовая служба, которая знает адрес и доставляет письмо, а TCP — это как заказное письмо с уведомлением, которое гарантирует, что получатель его точно получит в целости и сохранности.
Пример работы с сокетами в Python
Этот код демонстрирует базовое клиент-серверное взаимодействие по TCP/IP.
# server.py - Сервер, который ждет подключения и отправляет сообщение
import socket
# Создаем TCP-сокет
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
# Привязываем сокет к адресу 'localhost' и порту 12345
s.bind(('localhost', 12345))
# Начинаем прослушивать входящие подключения
s.listen()
print("Сервер запущен и ожидает подключения...")
# Принимаем входящее подключение
conn, addr = s.accept()
with conn:
print(f"Подключен клиент: {addr}")
conn.sendall(b'Hello from TCP server!')
# client.py - Клиент, который подключается к серверу и получает сообщение
import socket
# Создаем TCP-сокет
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
# Подключаемся к серверу
s.connect(('localhost', 12345))
# Получаем данные (до 1024 байт)
data = s.recv(1024)
print(f"Получено от сервера: {data.decode('utf-8')}")