Особенности работы протокола IP



Используется в большинстве веб-ориентированных приложений, особенно в тех, где важно гарантировать доставку данных.

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

 

Алгоритм «скользящего окна»

Окно TCP– это общий объем данных, которые могут быть отправлены и не подтверждены. Размер окна изменяется динамически прямо во время работыи зависит от условий сети.

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

Отправитель
Получатель

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

Принцип «скользящего окна»: окно по мере работы TCP смещается в правую сторону: как только приходит квитанция, левая граница смещается вправо.

Задача:чтобы обеспечить надежность при передаче данных блоками, необходимы подтверждения. Пусть на каждый блок посылается подтверждение, что увеличивает трафик в 2 раза. Как решить данную проблему?

Решение: подтверждается не каждый блок данных. Вместо этого используется отправление одного подтверждения на несколько сегментов – подтверждается логически последний сегмент. Это интерпретируется как подтверждение всех остальных сегментов.

Соотношение между размером окна и характеристиками сети: если в сети большой трафик и низкая пропускная способность, то время доставки пакетов становится большим. В этом случае, для того чтобы оптимизировать работу сети, размер окна надо уменьшить. Это делается для того чтобы уменьшить количество информации, которая скапливается в буфере, на случай, если информация будет пропадать из-за ошибок сети, тогда чем меньше размер окна - тем лучше(в случае ошибок нужно меньше пересылать заново). В обратном случае нужно увеличить размер окна, чтобы не нагружать сеть пакетами подтверждения.

 

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

 

Частый вопрос на экзамене

Бывают случаи, когда отправитель передает данные, а получатель не успевает их принимать(для получения данных получатель должен прочитать их из буфера драйвера). Что происходит в этом случае?

В этом случае TCP-драйвер получателя отправляет пакет, который подтверждает последний принятый байт(флаг ACK), и устанавливая размер окна в 0. Размер окна 0 – это указание отправителю приостановить передачу данных. Получив такой пакет, отправитель приостанавливает передачу, а получатель продолжает посылать эти пакеты. Это называется "зондирование нулевым окном"(получатель зондирует отправителя), смысл зондирования – показать, что получатель "жив", соединение не разорвано, но пакеты в данный момент не могут быть приняты.

 

Структура пакета

Бит/Смещение 0 - 3 4 - 9 10 - 15 16 - 31
0

Порт источника

Порт назначения
32

Номер последовательности (порядковый номер)

64

Номер подтверждения

96 Длина заголовка Зарезервировано Флаги Размер окна
128

Контрольная сумма

Указатель срочных данных
160

Опции

160/192+

Данные

 

Область пакета Описание
  Порт источника   Идентифицирует приложение клиента, с которого отправлены пакеты. По возвращении данные передаются клиенту на основании номера порта источника.
Порт назначения   Идентифицирует порт, на который отправлен пакет.
Порядковый номер   Номер сегмента в общем потоке данных, номер данных и идентификатор TCP-сегмента. Порядковый номерможет нести в себе следующий смысл: – если установлен флаг SYN, то это начальное значение порядкового номера — ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь порядковый номер, равный ISN + 1; – в противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот порядковый номер. По нему определяется, куда вложить фрагмент в буфере при получении. Поскольку поток TCP в общем случае может быть длиннее, чем число различных состояний этого поля, то все операции с номером последовательности должны выполняться по модулю 2^32. Это накладывает практическое ограничение на использование TCP.
Номер подтверждения   Смещение в общем потоке данных, которое показывает границу данных, подтверждаемых получателем. Поле заполняется в случае, если пакет представляет собой квитанцию – подтверждение о доставке. Если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.
Длина заголовка (смещение данных) Это поле определяет размер заголовка пакета TCP в 4-байтных (32-разрядных) словах. Минимальный размер составляет 5 слов, максимальный — 15, что составляет 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP.
Зарезервировано Зарезервировано (6 бит) для будущего использования и должно устанавливаться в ноль.
Флаги (управляющие биты) Это поле содержит 6 битовых флагов.  
SYN Синхронизация номеров последовательности, флаг установки соединения.
FIN Признак завершения соединения.
RST Признак сброса соединения.
PSH Флаг проталкивания данных. Инструктирует получателя протолкнуть данные, накопившиеся в приемном буфере, в приложение пользователя.
URG Флаг, указывающий, что передаются срочные данные (urgent). Если этот флаг установлен, то используется поле «Указатель срочных данных».  
ACK Флаг подтверждения (acknowledgement).Поле «Номер подтверждения» задействовано

 

 

Размер окна Число, определяющее в байтах размер данных, которые отправитель пакета готов принять. Позволяет во время передачи установить другой размер окна.
Контрольная сумма Считается по IP и TCP заголовку. Используется для нахождения ошибок, возникших во время передачи данных.
Указатель срочных данных Номер байта внутри данных, с которого начинаются срочные данные (смещение). Поле принимается во внимание только для пакетов, в которых установлен флаг URG.
Опции В некоторых случаях применяются для расширения протокола. Иногда используются для тестирования. После окончания дополнительных данных поле дополняется нулями до 32 битов.

Чем отличается сброс соединения от упорядоченного завершения?

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


Дата добавления: 2018-08-06; просмотров: 258; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!