Добавил:
мой вк: vk.com/truecrimebitch больше работ здесь: https://github.com/alisadex Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на билеты (полные).docx
Скачиваний:
15
Добавлен:
11.07.2024
Размер:
437.23 Кб
Скачать

2. Протоколы tcp, udp. Формат пакета и алгоритм работы.

TCP (Transmittion Control Protocol) – основной протокол транспортного уровня. В начале 80-х был разделен на TCP и IP.

Он получает сегменты любой длины от протоколов верхних уровней (ULP – upper level protocol) и осуществляют полнодуплексную передачу с подтверждением о доставке и установкой соединения, и контролем соединения.

Это поток 32битных слов (мы всегда работаем словом), он состоит из:

  • исходного порта (source port),

  • destination port (порт TCP – номер почтового ящика, по которому хранится адрес процесса, который будет запускаться),

  • sequence number (последовательный номер – поле, которое содержит номер первого байта, с которого начинается сообщение.

  • номер подтверждения (acknowledgement number – последовательный номер следующего байта данных, которых источник предполагает получить. Если принимающий пакет несет 40 байт информации с номером подтверждения 0, то номер подтверждения = 40. Мы намерены получить 40 байт),

  • смещение (offset – количество 32битных слов в заголовке),

  • флаги (flags – контрольная информация для установки соединения и контроля задания приоритетов). Есть urgent флаг – поинтер на то, что это поле срочного пакета (поставь меня в очередь буферу, но с высоким приоритетом), есть флаг push – отправляет на немедленную отсылку (поставь меня первым в буфере), есть флаг reset – необходимо переустановить соединение, есть флаг synch – начинаем соединение, есть флаг fin – не имеем больше информации, нечего передавать

  • контрольная сумма

  • sliding window – число байт, которые принимаем или передаем в текущий момент. Договариваемся о размерах этого самого окна/

  • дополнительные опции, которые говорят, как мы контролируем пересылку сверхважной информации (например, максимальный размер сегмента)

Алгоритм работы TCP:

  • Three-way handshake (трехстороннее рукопожатие)

  1. (SYN) Клиент отправляет серверу пакет с установленным флагом SYN (синхронизация), указывающим на желание передачи.

  2. (SYN-ACK) Сервер получает SYN-пакет, создает свой пакет с флагами SYN и ACK(acknowledgement number - номер подтверждения) и отправляет клиенту для подтверждения получения запроса

  3. (ACK) Клиент получает SYN-ACK пакет от сервера и отправляет ответ с установленным флагом ACK. Соединение установлено.

Рукопожатия могут привести к атакам deny of service. Соединение устанавливается, и сервер ждет отправки пакетов, которых нет.

  • Передача данных

  1. Клиент и сервер обмениваются пакетами. Каждый пакет данных, отправленный через TCP содержит заголовок, информацию о портах, размер пакета, и нумерацию. Если сервер только получает информацию от клиента, то он отправляет некое подтверждение, что пакет был принят.

  2. Нумерация пакетов нужна чтобы гарантировать доставку данных в правильном порядке и обнаруживать потерянные пакеты.

  3. Каждый полученный пакет подтверждается получателем с помощью пакета ACK, если отправитель не получает подтверждения о доставке пакета, то пакет переотправляется.

  • Завершение передачи

После передачи данных, соединение завершается с помощью four-way handshake

  1. (FIN) Одна из сторон отправляет пакет с флагом на завершение FIN

  2. (ACK) Вторая сторона отправляет пакет с ACK

  3. (FIN) Эта же вторая сторона отправляет пакет с FIN

  4. (ACK) Первая сторона отправляет пакет ACK в ответ на FIN и соединение закрывается.

В TCP также есть различные механизмы ограничения скорости передачи, например мы можем менять размеры скользящего окна, например стартует передача с окном в 80 байт, далее уменьшается до 40 байт чтобы не нагружать сеть.

Потеря пакетов – признак неправильно работающей ОС. Количество ошибок TCP/IP должно быть строго равным 0. Это в ethernet коллизии бывают, а в TCP/IP потерь пакетов быть недолжно. Как только передаем некие ACK’и, SEQ’и и т.д. запускается специальные таймеры, которые имеют timeout, превышение timeout вызывает повторную передачу. Это одна из причин, по которой идут дублирующие пакеты. Значение timeout очень сильно влияет на производительность системы. Он должен быть связан с временем «двойного пробега». (сегмент должен придти туда и вернуться обратно. Если timeout большой – длительное ожидание при ошибке. При маленьком – бесконечные повторные передачи. Поэтому в современных ОС используются специальные алгоритмы, для вычисления адаптивного timeout`а. Адаптивный timeout использует специальные методы задержки. Например если у нас сильно загружена система, то мы должны ждать. (см. медленный старт TCP». Адаптивный алгоритм KARN – алгоритм, который используется практически во всех современных ОС.

UDP(User Datagram Protocol), дейтаграммный протокол без установки соединения и подтверждений. Не имеет дополнительных опций и используется для посылки срочных сообщений; В отличие от TCP он не устанавливает соединение. Он расширяет функции IP до номеров портов. Он использует те же номера портов, что и TCP. Быстрее работает, чем TCP. Используется в DNS, SNMP, VoIP)

отправитель не получает обратной связи о доставке или приеме данных. Если данные не достигли получателя, UDP не предпринимает дополнительных попыток их доставить.

Когда мы работаем просто с сокетами, мы не устанавливаем никакие соединения – мне нужно просто запустить какой-то процесс при помощи передачи сокета (при помощи библиотек RPC)

Сокет – адрес узла и порт, по которому запускается процесс на этом узле.

Порты UDP – это порты TCP, но от условий с регуляцией скорости, acknowledgement о доставках мы отказались.

Tracer использует протокол UDP, чтобы определить – можем ли мы получить маршрут к данному узлу. Делается это при помощи посылания специального сегмента, который имеет достаточно высокий счетчик TTL (time to live). Мы проходим с помощью этого счетчика, и тогда рутер нас не выбрасывает. Получаем ответ от рутера и SA-MP time exceeded, потому что мы устанавливаем его достаточно высоким – достаточно долгая передача получается – и запоминаем маршрут, а потом этот счетчик начинаем сокращать – все время убираем те рутеры, которые являются кусками этого маршрута, доходя до первого. Это идея трейсера, но мы его не пишем

Алгоритм работы UDP:

  1. Формируется datagram пользователем, которая содержит в себе заголовок, порты, размер и сами данные.

  2. Дейтаграмма может быть отправлена на любой адрес и порт без каких либо предварительных шагов.

  3. Не передаются ACK и SEQ флаги, из-за чего пакеты могут дублироваться, приходить в разном порядке.

  4. Если не устанавливали соединение, следовательно незачем его и закрывать.

Часто UDP используют для приложений, где важна скорость передачи данных с низкой задержкой, видео и аудиопотоки, онлайн-игры, там где важна скорость передачи данных а не их надежность.