Обмен технологиями

Сетевое программирование на Python — TCP/IP

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

канальный уровень

Состав кадра (по порядку):

Целевой MAC: 6B

Исходный MAC: 6B

Тип: 2Б

Данные: 46B-1500B

CRC:4B

Среди них MAC-адрес источника — это адрес сетевой карты хоста, тип — это тип данных исходного сетевого уровня, ipv4 — 0800, arp — 0806, pppoe — 8864, 1qtag — 8100, ipv6 — 86dd.

Python может получить собственный MAC-адрес через модуль uuid.

Сетевой уровень

Структура датаграммы

Заголовок: 20–60 Б, из которых первые 20 Б обязательны, а последние 40 Б не являются обязательными.

Данные: 0-65516B

структура заголовка

Версия: 4 цифры, обозначающие ipv4 или ipv6.

ihl: 4 бита, обозначающие длину заголовка, единица измерения — 4 байта, поэтому максимум — 4x15=60 байт, что в точности соответствует максимальной длине заголовка.

ds: дифференцированные услуги, 8 бит, первые три бита обозначают приоритет, следующие четыре бита обозначают минимальную задержку, максимальную пропускную способность, высочайшую надежность и минимальную стоимость, последний бит не используется.

Общая длина: 16 бит, указывающая общую длину заголовка и данных в формате B.Обратите внимание, что длина данных канального уровня составляет 46–1500. Когда датаграмма сетевого уровня меньше 46 байт, данные будут заполнены. Когда она превысит 1500, она будет нарезана.

Идентификация: 16 бит, указывающих уникальный идентификатор фрагментированных данных.

Флаг: 3 бита, старший бит является зарезервированным, второй бит указывает, может ли она быть фрагментирована, 0 означает, что она может быть фрагментирована, 1 означает, что она не может быть фрагментирована, последний бит указывает, фрагментирована ли дейтаграмма, 0 означает, что нет фрагментированный, И это последний фрагмент, 1 означает фрагмент, и после него идут фрагменты

Смещение фрагмента: 13 бит, 8B

Время жизни, 8 бит, максимум 255, указывает максимальное количество прыжков в маршруте.

Протокол: 8 бит, указывающий тип IP-дейтаграммы, например ICMP, IGMP, TCP, UDP и т. д.

Контрольная сумма заголовка: 16 бит.

IP-адрес источника и IP-адрес назначения, по 32 бита каждый.

Python может получать информацию о сети через два модуля psutil и netifaces. Версия netifaces устарела. Вы можете установить netifacce2.

транспортный уровень

удп

Нет никакой гарантии, что данные доступны.

Заголовок 8B: порт источника 2B, порт назначения 2B, длина 2B, контрольная сумма 2B.

Данные 0-65527B

ТКП

Трехстороннее рукопожатие для создания соединения, четырехстороннее рукопожатие для закрытия соединения

Структура датаграммы

Первая часть 20-60Б

Данные 0-65535B

структура заголовка

Исходный порт 16 бит

Порт назначения 16 бит

Серийный номер: 32 бита: каждый байт данных имеет порядковый номер.После достижения pow(2,32) он начинается с 0

Номер подтверждения: 32 бита. Получатель отправляет отправителю порядковый номер первого байта следующего сообщения с данными. Например, если отправитель отправляет 0–999 байтов, номер подтверждения, отправленный получателем, равен 1000.

Смещение данных: 4 бита, единичный бит 4B, аналогично ihl заголовка ipv4.

Зарезервировано: 6 бит, обычно 0.

URG: 1 бит, 1 указывает на срочные данные, указатель срочности действителен.

ACK: 1 бит, 1 означает, что поле номера подтверждения действительно.

PSH: 1 бит, 1 означает, что сообщение создается и отправляется немедленно после получения, вместо того, чтобы помещать его в кеш и ждать, пока кеш заполнится, прежде чем отправить его.

RST: 1 бит. Если он равен 1, это означает, что существует серьезная проблема с текущим соединением. Сюй Ао разорвет соединение и заново создаст соединение. RST со значением 1 также можно использовать для отказа принимать незаконные сообщения или отказываться открывать нелегальные соединения.

SYN: 1 бит, 1 указывает, что сообщение представляет собой запрос на соединение или сообщение о принятии соединения.

FIN: 1 бит, 1 указывает, что данные отправлены и соединение необходимо разорвать.

Окно: 16 бит, отправляемых получателем отправителю, указывающие длину следующего сообщения, которое, как ожидается, будет принято.

Контрольная сумма: 16 бит

Указатель срочных данных: 16 бит. Когда URG равен 1, это указывает на конечную позицию срочных данных.

Python получает информацию о сети

psutil может получить некоторую сетевую статистику. Метод net_io_counters по умолчанию собирает сетевую статистику всей машины. Ввод параметра pernic=True будет собирать статистику каждой сетевой карты отдельно.

Прикладной уровень

http

По умолчанию HTTP является связью без отслеживания состояния, а услуги с сохранением состояния могут выполняться с помощью файлов cookie.

http-порт обычно 80

Структура сообщения

Сообщение запроса: метод, URL-адрес, версия, другие поля заголовка, сущность сообщения (необязательно).

Ответное сообщение: версия, код состояния, фраза, другие поля заголовка, сущность сообщения (необязательно).

Методы: есть 8 типов: получить, опубликовать, заголовок, положить, удалить, выбрать, подключить, отследить.

Версия: номер версии http.

Другие поля заголовка: такие как Cache-Control, Accept-Encoding и т. д.

Сущность сообщения: нет ограничений на длину, может быть 0

Код состояния: 404, три цифры.1xx указывает, что сервер получил запрос, 2xx указывает, что сервер принимает запрос клиента, 3xx указывает, что сервер перенаправляет запрос клиента, 4xx указывает, что запрос клиента неверен, а 5xx указывает на проблему с сервером .

Фраза: комментарий к коду состояния. Например, фраза, соответствующая коду возврата 202, — «Принять», а фраза, соответствующая коду возврата 404 — «Не найден».

https

HTTP не имеет гарантий безопасности и может быть перехвачен. https использует SSL или TLS для шифрования пакетов данных, а затем передает их через TCP. Порт по умолчанию.443

Симметричное шифрование и асимметричное шифрование обычно используются для шифрования сообщений, а асимметричное шифрование обычно используется для шифрования паролей.

Процесс запроса

Когда клиент запрашивает, он отправляет на сервер набор поддерживаемых им правил шифрования.

Сервер объединяет набор алгоритмов шифрования и хеширования на основе правил шифрования клиента и возвращает его клиенту в виде цифрового сертификата вместе со своей собственной идентификационной информацией.

Клиент проверяет действительность сертификата сервера, генерирует пароль из случайных чисел после его передачи и шифрует пароль из случайных чисел с помощью открытого ключа сервера.Клиент вычисляет хэш отправляемого сообщения, шифрует отправляемое сообщение и хэш-значение сообщения с помощью пароля со случайным числом и, наконец, шифрует открытый ключ сервера с помощью пароля со случайным числом, а сообщение и сообщение шифруются. с паролем случайного числа хэшируются и возвращаются на сервер.

После получения данных клиента сервер использует свой собственный закрытый ключ для расшифровки пароля случайного числа, затем использует пароль случайного числа для расшифровки сообщения и хеш-значения сообщения и сравнивает расшифрованное хеш-значение с хэш-значением полученного сообщения. чтобы увидеть, соответствует ли это. Если они согласованы, соединение между клиентом и сервером успешно установлено. После этого обе стороны используют пароли из случайных чисел для шифрования и расшифровки данных.При последующей передаче данных, если произойдет ошибка или хеш окажется несогласованным, соединение будет автоматически разорвано.

фтп

днс

SNMP

snmp простой протокол передачи почты, используемый для передачи почты с адреса источника на адрес назначения, порт обычно 25

Это широко используемый протокол отправки электронной почты. После отправки электронного письма оно будет отправлено на snmp-сервер.

поп3

Получатель используется для приема электронных писем, отправленных ему другими пользователями с его собственного сервера. Обычно это порт 110.

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

imap — это онлайн-протокол получения почты, который компенсирует проблему автономного режима pop3. В настоящее время это наиболее часто используемый протокол получения почты. Обычно порт — 143.

dhcp

Когда клиент с DHCP подключается к сети, он передает сообщение об обнаружении DHCP. Если в соответствии с определенными правилами после ограниченного количества широковещательных рассылок не будет получен ответ, DHCP завершится сбоем.

После получения сообщения сервер выберет IP-адрес из доступного пула адресов, отправит сообщение предложения DHCP в широковещательной форме и вернет IP-адрес клиенту.

После того, как клиент получит IP-адрес, назначенный сервером DHCP, он отправит запрос ARP, чтобы проверить, занят ли IP-адрес. Если он занят, клиент отправит отчет об отказе DHCP на сервер DHCP. Если он не занят, он отправит запрос DHCP на сервер. После его получения сервер отправит клиенту ответ DHCP. На этом этапе процесс службы DHCP завершается.

Порт сервера DHCP обычно равен 67, а порт клиента DHCP обычно равен 68. DHCP использует связь udp.