← Назад к вопросам

Что такое TCP и что такое IP?

1.2 Junior🔥 281 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

TCP и IP протоколы

TCP/IP — это набор протоколов, который позволяет компьютерам взаимодействовать в Интернете. IP отвечает за доставку пакетов между компьютерами, а TCP гарантирует, что данные доходят в правильном порядке и без потерь.

IP (Internet Protocol)

IP — это сетевой протокол, который отвечает за маршрутизацию пакетов данных от отправителя к получателю через сеть.

Основные характеристики:

  • Адресация — каждому компьютеру присвоен IP адрес (например, 192.168.1.1)
  • Маршрутизация — пакеты могут проходить через несколько сетевых узлов
  • Connectionless — не требует установления соединения
  • Ненадежный — не гарантирует доставку (пакеты могут теряться)

Версии IP:

IPv4: 192.168.1.1 (4 октета, 32 бита)
IPv6: 2001:0db8:85a3::8a2e:0370:7334 (128 бит, больше адресов)

Как работает IP:

Отправитель (192.168.1.1)
      |
      v
[IP пакет с адресом назначения 192.168.1.100]
      |
      v
Маршрутизаторы (выбирают следующий узел)
      |
      v
Получатель (192.168.1.100)

TCP (Transmission Control Protocol)

TCP — это протокол транспортного слоя, который обеспечивает надежную доставку данных упорядоченным образом.

Основные характеристики:

  • Надежность — гарантирует доставку всех пакетов
  • Упорядоченность — пакеты приходят в правильном порядке
  • Connection-oriented — сначала устанавливает соединение (3-way handshake)
  • Flow control — контролирует скорость передачи
  • Error checking — проверяет целостность данных

Three-way handshake (установление соединения):

Клиент                          Сервер
   |
   |------ SYN (seq=x) -------->|
   |                             |
   |<----- SYN-ACK (seq=y, ack=x+1) -----|
   |                             |
   |------ ACK (seq=x+1, ack=y+1) -------->|
   |
   |--- Соединение установлено ---|

Разница между TCP и IP

ХарактеристикаIPTCP
СлойСетевой (Layer 3)Транспортный (Layer 4)
ФункцияДоставка пакетовНадежная связь
ConnectionConnectionlessConnection-oriented
НадежностьНенадежныйНадежный
Порядок пакетовНе гарантируетГарантирует
ИспользованиеHTTP, FTP, SSHВсе приложения

TCP/IP модель

Приложение         HTTP, FTP, SSH, SMTP, DNS
    |
Транспортный       TCP, UDP
    |
Сетевой            IP, ICMP
    |
Доступ к сети      Ethernet, WiFi

TCP в Python

Простой TCP сервер:

import socket

# Создаем TCP сокет
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 5000))  # Слушаем на localhost:5000
server_socket.listen(1)  # Максимум 1 клиент в очереди

print('Сервер ждет соединение...')
client_socket, address = server_socket.accept()  # Принимаем соединение
print(f'Подключился клиент: {address}')

data = client_socket.recv(1024)  # Получаем данные (до 1024 байт)
print(f'Получено: {data.decode()}')

client_socket.send('Hello from server'.encode())  # Отправляем данные
client_socket.close()
server_socket.close()

Простой TCP клиент:

import socket

# Создаем TCP сокет
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))  # Подключаемся к серверу

client_socket.send('Hello from client'.encode())  # Отправляем данные
data = client_socket.recv(1024)  # Получаем ответ
print(f'Получено: {data.decode()}')

client_socket.close()

IP адреса

IPv4 классы:

Класс A: 1.0.0.0 - 126.255.255.255      (для больших сетей)
Класс B: 128.0.0.0 - 191.255.255.255    (для средних сетей)
Класс C: 192.0.0.0 - 223.255.255.255    (для малых сетей)
Класс D: 224.0.0.0 - 239.255.255.255    (multicast)
Класс E: 240.0.0.0 - 255.255.255.255    (зарезервирован)

Приватные IP адреса:

10.0.0.0 - 10.255.255.255        (1 класс приватной сети)
172.16.0.0 - 172.31.255.255      (16 классов приватных сетей)
192.168.0.0 - 192.168.255.255    (256 классов приватных сетей)
127.0.0.1 - 127.255.255.255      (localhost)

TCP порты

Стандартные TCP порты:

80    - HTTP (веб)
443   - HTTPS (защищенный веб)
22    - SSH (удаленный доступ)
25    - SMTP (отправка email)
110   - POP3 (получение email)
3306  - MySQL (база данных)
5432  - PostgreSQL (база данных)
6379  - Redis (кеш)
27017 - MongoDB (база данных)

TCP состояния соединения

LISTEN      -> Сервер ждет соединение
SYN_SENT    -> Клиент отправил SYN
SYN_RECV    -> Сервер получил SYN
ESTABLISHED -> Соединение установлено (данные передаются)
FIN_WAIT_1  -> Отправили FIN (закрытие)
FIN_WAIT_2  -> Получили ACK на FIN
CLOSED      -> Соединение закрыто

UDP vs TCP

Есть еще UDP (User Datagram Protocol) — более быстрый, но ненадежный протокол:

# UDP сокет (ненадежный, быстрый)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # DGRAM = datagram
server_socket.bind(('localhost', 5000))

data, address = server_socket.recvfrom(1024)
print(f'Получено от {address}: {data.decode()}')

server_socket.sendto('Response'.encode(), address)

TCP vs UDP:

ХарактеристикаTCPUDP
НадежностьВысокаяНизкая (пакеты могут теряться)
СкоростьМедленнееБыстрее
ИспользованиеHTTP, FTP, SSHDNS, видео, онлайн игры
ConnectionДаНет
Контроль потокаДаНет

Сетевые команды

import socket

# Получить свой IP адрес
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
print(f'Мой IP: {ip_address}')

# Преобразовать доменное имя в IP
ip = socket.gethostbyname('google.com')
print(f'google.com -> {ip}')

# Получить информацию о хосте
info = socket.gethostbyaddr(ip)
print(f'Информация: {info}')

Практический пример: HTTP запрос через TCP

import socket

def http_request(hostname, path='/'):
    # Создаем TCP соединение
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((hostname, 80))  # Подключаемся к HTTP порту
    
    # Отправляем HTTP запрос
    request = f'GET {path} HTTP/1.1\r\nHost: {hostname}\r\nConnection: close\r\n\r\n'
    sock.send(request.encode())
    
    # Получаем ответ
    response = b''
    while True:
        data = sock.recv(1024)
        if not data:
            break
        response += data
    
    sock.close()
    return response.decode()

print(http_request('example.com'))

Итого

  • IP — отвечает за адресацию и маршрутизацию пакетов
  • TCP — гарантирует надежную, упорядоченную доставку данных
  • Вместе (TCP/IP) — основа Интернета
  • Для веб-разработчика важно знать основы TCP соединений, порты и адреса для отладки сетевых проблем
Что такое TCP и что такое IP? | PrepBro