Что такое TCP и что такое IP?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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
| Характеристика | IP | TCP |
|---|---|---|
| Слой | Сетевой (Layer 3) | Транспортный (Layer 4) |
| Функция | Доставка пакетов | Надежная связь |
| Connection | Connectionless | Connection-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:
| Характеристика | TCP | UDP |
|---|---|---|
| Надежность | Высокая | Низкая (пакеты могут теряться) |
| Скорость | Медленнее | Быстрее |
| Использование | HTTP, FTP, SSH | DNS, видео, онлайн игры |
| 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 соединений, порты и адреса для отладки сетевых проблем