ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.07.2025
Просмотров: 370
Скачиваний: 0
Протокол UDP.
Обеспечивает обмен датаграммами между процессами, работающими на компьютере. В IP-протоколе не идентифицируются программы, а взаимодействуют именно они.
Придумана концепция портов – числовой номер (16-ти разрядный), который предназначен для того, чтобы отмечать закрепленную за ним программу.
Протокол UDP – протокол без установления соединения, без повторной передачи пакетов, без подтверждения передачи (без квитирования), без разбиения UDP датаграмм на пакеты.
Формат UDP-пакета:
№ порта |
№ порта |
отправителя |
получателя |
Длина |
Контр. сумма |
Этот заголовок помещается перед IP-заголовком. Порт служит для мультиплексирования каналов связи.
IP-адрес отправителя, IP-адрес получателя, порты отправителя и получателя являются уникальным идентификатором логического канала связи в сети.
Прогр. |
Прогр. |
Прогр. |
Прогр. |
Прогр. |
Прогр. |
|||||
А |
B |
C |
А |
B |
C |
|||||
UDP TCP
IP
ARP RARP
Канал связи
UDP TCP
IP
ARP RARP
Канал связи
На уровне IP происходит мультиплексирование протокола (например, TCP,UDP). Чтобы знать, какой протокол используется, для этого есть код протокола в поле IP-пакета. По коду протокола определяется, куда направляется пакет, который идет наверх (в протоколы более высокого уровня) – UDP или TCP. Драйвер протоколов UDP или TCP обеспечивает в свою очередь мультиплексирование канала связи. Для этого используется понятие порт.
Каждую линию уникально идентифицируют 4 цифры:
1)№ порта отправителя
2)IP отправителя
3)№ порта назначения
4)IP-адрес назначения IP-пакет:
IP- |
UDP- |
|
заголовок |
||
загол. |
Данные |
Протокол TCP.
Протокол с установкой соединения. Он гарантирует доставку данных и порядок получения данных. Протокол с квитированием, отправляемые данные всегда подтверждаются. Обеспечивается повторная передача данных в случае ошибки или если данные не дошли. TCP обеспечивает разбиение данных на фрагменты и сборку этих фрагментов прозрачно для пользователя.
UDP используется для передачи мультимедиа данных в реальном масштабе времени (потери не так важны, главное - скорость).
В основе работы TCP лежит принцип «скользящего окна».
Принцип: при передаче данных блоками, чтобы обеспечить надежность, необходимы подтверждения. Пусть на каждый блок будем посылать подтверждение. Трафик увеличится в 2 раза.
Выход: подтверждается не каждый блок данных.
Единицей подтверждения является байт. Пакеты могут быть любых размеров. Размер пакета может динамически меняться во время обмена данными, подстраиваясь к пропускной способность сети.
Прием: |
Размер окна |
сегменты |
сегменты |
сегменты |
сегмент, |
отправл., |
отправлены, |
могут быть |
который |
квитанции |
квитанций |
отправлены |
нельзя |
получены |
пока нет |
отправлять |
направление
движения данных
Это снимок «скользящего окна».
Размер окна определяет, какой объем данных может быть послан в отсутствие подтверждения. Размер окна может динамически меняться во время передачи данных. Чем больше размер окна, тем реже приходят подтверждения. Если в сети возможны потери данных или искажение, то тем больше вероятность, что между подтверждениями возникнет ошибка. Если она возникнет, то придется повторно передавать большой объем данных. Чем меньше размер окна, тем меньше объем данных, который необходимо повторно передавать в случае ошибки, но при этом больше общий трафик сети.
Вывод: размер окна нужно подстраивать динамически под пропускную способность сети. Протокол TCP адаптируется к трафику. Отрицательные квитанции не посылаются. Отсутствие квитанции означает либо прием искаженных данных, либо потерю квитанции. В качестве квитанции получатель сегмента посылает ответное сообщение, в которое помещает число, на 1 превышающее максимальный номер полученного байта.
Передача данных:
Прием:
0 5
Отсылаем квитанцию 52, размер 32 бита.
Заголовок протокола TCP:
0 |
4 |
1 |
3 |
|||||||||
Порт отправителя |
Порт получателя |
|||||||||||
Порядковый номер |
||||||||||||
Номер подтверждения |
||||||||||||
Длина |
||||||||||||
загол. |
Флаги |
Размер окна |
||||||||||
Контрольная сумма |
Указатель срочных данных |
|||||||||||
Дополнительные параметры |
Дополнение |
|||||||||||
Порт отправителя и порт получателя – 16-ти разрядные имена портов. Порядковый номер - № первогоДанныебайта в поле «данные» TCP-фрагмента.
0
порядковый номер
По нему определяется, куда вложить фрагмент в буфере при получении.
Номер подтверждения используется при отсылке TCP-пакетов, которые являются квитанциями. Если TCP-пакет является квитанцией, то поле «номер подтверждения» содержит № следующего байта, который ожидает получить получатель.
Длина заголовка – размер TCP-заголовка в 32-х разрядных словах. 4…10 биты зарезервированы.
Флаги могут иметь следующие значения:
FIN – завершение соединения (этот TCP-пакет – команда завершения)
SYN – для синхронизации порядковых номеров между адресами, означает установку соединения (устанавливается в 0)
RST – сброс соединения
PSH – проталкивание данных из приемного буфера (по возможности через все буферы) ACK – acknowledgment – флаг подтверждения, т.е. если флаг установлен, то пакет является
квитанцией
URG – urgent – передаются срочные данные
Размер окна содержит размер окна, позволяет во время передачи установить другой размер
окна.
Контрольная сумма считается по IP и TCP заголовку.
Указатель срочных данных - № байта внутри данных, с которого начинаются срочные данные (смещение).
Дополнение до 32-х битов.
Алгоритм «скользящего окна».
Особенность работы: единицей передаваемых данных является сегмент. Скользящее окно измеряется в байтах и может изменяться во время работы.
При установке TCP-соединения не ясно, какова пропускная способность канала и какой размер окна необходимо выбрать. Поэтому используют следующий алгоритм:
1.Размер окна устанавливается максимальным, а потом сокращается пор мере работы.
2.Формула определения размера окна: при каждой передаче пакета рассчитывается время оборота пакета, т.е. время путешествия пакета от одного адресата к другому и назад. Эта величина определяется постоянно. При посылке каждого сегмента это время замеряется отдельно.
3.Размер окна определяется как средневзвешенное по последним 10-ти накопленным значениям. Есть 10 значений. Им назначаются коэффициенты от 1 до 10 (самый большой коэффициент у последнего значения). Эти значения суммируются и вычисляется среднее значение, где наибольший вес будут иметь последние значения
размера окна. Определяем, сколько данных можно передать за это время (объем переданных данных : время).
Так как это вычисление происходит постоянно, формула позволяет динамически адаптировать размер окна под пропускную способность.
Например, если пропускная способность резко уменьшается, объем данных, передаваемых без подтверждения, надо уменьшить.
Частные случаи: предположим, отправитель передает данные, а на стороне получателя данные в буфер TCP-драйвера приходят, но прикладная программа за этими данными не обращается. Происходит переполнение буфера.
Драйвер TCP поступает следующим образом: он начинает посылать подтверждения на последний принятый байт и устанавливает размер окна в 0. Это называется «зондирование пустым окном».
Результат: отправитель периодически получает подтверждение на один и тот же байт, т.к. он получает подтверждение (нет тишины в канале), отправитель знает, что пользователь еще «живой». Нулевой размер окна не позволяет ему еще отправлять данные, т.е. отправитель тоже останавливает передачу.
Гнезда (Socket).
Для работы с протоколом TCP и UDP имеется специальный программный интерфейс
Socket API.
Для работы в сети используется концепция гнезд.
Гнездо – целочисленный номер, аналогичный по смыслу дескриптору файла.
Создается гнездо, потом к нему привязывается IP-адрес или номер порта. Т.о., номер гнезда служит заменителем в программе IP-адреса и порта. Этот номер можно использовать в операциях чтения/записи аналогично файловому дескриптору.
Этот программный интерфейс существует во всех ОС.
В Windows этот интерфейс был расширен, чтобы использовать поверх других протоколов. Дополнительно существует 2-ая версия WindSocket. В версии 2 поддерживается создание драйверов для любых новых протоколов.
Протоколы TCP/IP, NetBios также поддержаны в виде драйвера.
Схема при использовании UDP: socket
bind
sendto recvfrom
close
Протокол TCP: |
||||||
клиент |
сервер |
|||||
socket |
socket |
|||||
bind |
bind |
|||||
connect |
listen |
|||||
send |
recv |
accept |
||||
shutdown |
send |
recv |
||||
close
shutdown
close
Функция socket создает гнездо: int socket (int af, int type, int protocol) af: AF_UNIX
AF_INET type: sock_stream
sock_dram
protocol: PROTO_TCP |
||||
PROTO_UDP |
||||
PROTO_XXX |
||||
struct sockaddr_in |
||||
{ |
||||
short sin_family; |
||||
u_short sin_port; |
||||
struct in_addr sin_addr; |
// |
IP |
||
char sin_zero [8]; |
// |
дополнение нулями |
||
} |
||||
struct sockaddr_4 |
||||
{ |
||||
short su_family; |
// семейство адресов |
|||
char su_name [13]; |
// |
имя host’а UNIX’а |
||
} |
||||
union sockaddr |
||||
{ |
||||
sockaddr_in sin; |
// |
для Internet |
||
sockaddr_u su; |
// |
для Unix |
||
}; |
||||
Функция socket возвращает номер гнезда в качестве результата. Этот идентификатор служит идентификатором логической связи между компьютерами.
Параметр af –address family –семейство адресов
AF_UNIX – используется идентификация компьютера с помощью символьного имени AF_INET – используется система адресов Internet’а
type – тип гнезда
для TCP: sock_stream – потоковое гнездо для передачи непрерывного потока данных для UDP: sock_dgram – для посылки датаграмм
protocol – какой протокол будет использоваться. Константы помечают не только TCP и UDP, но и WindSocket (используется префикс WSA).
Структуры данных.
Чтобы назначить гнезду «номер», служит функция bind: int bind (int socket, const struct sockaddr* name, int namelen)