Download - Транспортный уровень стека протоколов TCP/IP
Транспортный уровеньТранспортный уровеньстека протоколов стека протоколов TCP/IPTCP/IP
К передающей среде
Протоколы межсетевых интерфейсов
RARP
Протоколы инкапсуляции в кадры Ethernet, FR, TR, ATM, FDDI, X.25 и т.д.
ARP
TCP UDPПротоколы транспортного уровня
IGMPIPICMP
HTTPПротоколы прикладного уровня
Telnet DHCPDNS
Пользовательский процесс
Пользовательский процесс
Пользовательский процесс
Пользовательский процесс
Протоколы сетевого уровня
Application Programming Inetrface
Дейтаграммный протокол UDP (RFC 768)
Зарезервированные и доступные портыМультиплексирование прикладных протоколовФормат дейтаграммы UDP
Задача протокола транспортного уровня UDP (User Datagram Protocol) - передача данных
между прикладными процессами
без гарантий доставки
Прикладной процесс в сети однозначно определяется IP-адресом компьютера номером порта
Нет гарантий доставки –
• дейтаграммный протокол,
• без установления соединений
• best effort
Порт Порт UDPUDP
• идентификатор приложения
• определяет обменный буфер, создаваемый ОС в оперативной памяти
• если буфер переполняется, то сообщения отбрасываются
Основная функция протокола Основная функция протокола UDPUDP – мультиплексирование и демультиплексирование процессов на основе портов
Выходн. буфер
Входн. буфер
TFTP
Порт 69
Выходн буфер
Входн. буфер
DHCP
Порт 67
Протокол UDP
Выходн. буфер
Входн. буфер
Appl
Порт 1056
Протокол IP
Драйвер Ethernet
Назначение номеров портов прикладным процессам
1. централизованное для популярных сервисов - стандартные, зарезервированные номера в
диапазоне 1-1023 Internet Assigned Numbers Authority (IANA) Например: серверы TFTP - 69, DNS- 53, DHCP – 67, SNMP - 161 Уникальны в пределах Internet
2. локальное для клиентских процессов выделяются операционной системой по запросу произвольные номера, обычно в диапазоне 1024-5000 уникальны в пределах компьютера
Протокол UDP
Поток данных от приложения
Результат отдельной операции вывода
К протоколу IP
Каждая дейтаграмма UDP переносит отдельное пользовательское сообщение
Формат UDP-пакета (user datagram)
Длина заголовка 8 байт
2 байта
UDP source port - номер порта процесса-отправителя
UDP destination port - номер порта процесса-получателя
UDP message length - длина UDP-пакета в байтах
UDP checksum - контрольная сумма UDP-пакета
Поле данных - IP-пакет
.
.
.
Инкапсуляция дейтаграммы UDP
Заголовок Ethernet
Заголовок IP
Заголовок UDP
Данные протоколов более в ысоких уровней
Пример заголовка UDP с заполненными полями:
UDP: Source Port = 0x0035 (DNS) UDP: Destination Port = 0x0411 UDP: Total length = 132 (0x84) bytes UDP: UDP Checksum = 0x5333 UDP: Data: Number of data bytes remaining = 124(0x007C)
Тип протокола - 17
Протокол надежной передачи данных TCP (RFC 793)
Сравнение с UDPПорты, сокеты, соединенияКонцепция скользящего окнаПроцедура установления соединенияПроцедура квитирования в TCPАдаптивный выбор тайм-аутаРеакция на перегрузку
Общая характеристика протокола TCP
(Transmission Control Protocol)
транспортный уровень стека Internet
обеспечивает надежную передачу
основан на соединениях
соединения не компьютеров, а приложений
более медленный, чем UDP
Инкапсуляция сегмента TCP
Заголовок Ethernet
Заголовок IP
Заголовок TCP
Данные протоколов более в ысоких уровней
Протокол TCP, в отличие от протокола UDP, не может быть использован для широковещательной и групповой передачи
Общая характеристика протокола TCP
(Transmission Control Protocol)
транспортный уровень стека Internet
обеспечивает надежную передачу
основан на соединениях
соединения не компьютеров, а приложений
более медленный, чем UDP
Инкапсуляция сегмента TCP
Заголовок Ethernet
Заголовок IP
Заголовок TCP
Данные протоколов более в ысоких уровней
TCP-соединение создает надежный канал связимежду конечными узлами
IP
IP IP
IP
IPСеть 1 Сеть 5
Сеть 3
Сеть 2
Сеть 4
IP
TCP
IP
TCPTCP-соединение
Основные задачи протокола TCP
передавать непрерывные потоки данных между клиентами вобоих направлениях
обеспечивать защиту от разрушения данных, потери,дублирования и нарушения очередности получения -нумерация, квитанции
управлять количеством данных, посылаемых ему отправителем- окном
адресовать приложения - номера портов
инициализировать и поддерживать определенную информациюо состоянии каждого потока данных - соединениях
TCP-соединение между приложениями полнодуплексная передача согласованные параметры процедуры обмена:
? номера портов? последовательные номера байт? размеры окон
Соединение идентифицируется парой сокетов:
Сокет (IP, порт)
Соединение (IP1, порт1) (IP2, порт2)
Сокет может принимать участие во многихсоединениях
T C P -с о е д и н е н и е
T C P
I P
E th e r n e t
T C P
I P
E th e r n e t
п о р т Р 1
С е т ь
к о м п ь ю т е р 1I P 1
к о м п ь ю т е р 2I P 2
T C P - с о е д и н е н и е{ ( I P 1 , P 1 ) , ( I P 2 , P 2 ) } П о р т P 2
Порты TCP
стандартные, зарезервированные номера назнач а-ются Assigned Numbers Authority (до 1024, 21 – FTP, 23 –Telnet…)
произвольно выбранные локальные номера (1024 -5000)
Сегменты TCP
На входе TCP - поток (неструктурированный поток байтот приложениий и протоколов более высокого уровня)
На выходе TCP- сегмент ( непрерывная часть п отока)
Максимальный размер сегмента
ограничен стандартом
должен быть определен при установлении соединения
ограничен принятым в сети максимальным полем данныхкадра (для исключения фрагментации на хосте)
ограничен минимальным значением из множества MTUсоставной сети (для исключения фрагментации на шлюзах)
FTP
Порт 21
telnet
Порт 23
Протокол TCP
Appl
Порт 1056
Протокол IP
Драйвер Ethernet
Внутренние буферы TCP
Сегменты TCP
Заголовок сегмента
Идентификатор сегмента – номер первого байта
32600
14601460 14608701460
35520 3406038440 36980
•Протокол TCP может выжидать заполнения буфера перед отправкой сегмента.
•Приложение должно указать протоколу TCP, если требуется срочная передача – параметр push
•Приложение-отправитель должно указать протоколу TCP, если какие-то данные необходимо переслать приложению-получателю вне очереди – параметр urgent data
Функция проталкивания запрос на отправку сообщения без ожидания заполнения
буфера поле PSH сегмента TCP = 1 проталкивание не привязано к границам сегмента
Срочная передача Признак URG Указатель срочности Urgent Pointer Передача вне потока
К о н ц е п ц и я к в и т и р о в а н и я
В р а м к а х с о е д и н е н и я п р а в и л ь н о с т ь п е р е д а ч и к а ж д о г ос е г м е н т а д о л ж н а п о д т в е р ж д а т ь с я к в и т а н ц и е й п о л у ч а т е -л я ( п о л о ж и т е л ь н о й и л и о т р и ц а т е л ь н о й )
М е т о д п о д т в е р ж д е н и я к о р р е к т н о с т ип е р е д а ч и с п р о с т о я м и и с т о ч н и к а
t
t
ПК
К
П
П
К в и т а н ц и и ( п р и ё м н и к )
П а к е т ы ( и с т о ч н и к )
М е т о д " с к о л ь з я щ е г о о к н а "
П а к е т ы ( и с т о ч н и к )
К 2
W. . .32 1 21
К 1К в и т а н ц и и( п р и ё м н и к )
К 2К 1
П р и н я т и ек в и т а н ц и и( и с т о ч н и к )
W - р а з м е р о к н а - к о л и ч е с т в о к а д р о в , к о т о р ы е р а з р е ш а е т с яп е р е д а в а т ь б е з п о л у ч е н и я к в и т а н ц и и
К в и т а н ц и я н а к а ж д ы й б а й т
W -р а з м е р о к н а
о т п р а в л е н ы ,к в и т а н ц и ип о л у ч е н ы
о т п р а в л е н ы ,к в и т а н ц и й
п о к а н е т
м о г у т б ы т ьо т п р а в л е н ы
н е л ь з яо т п р а в л я т ь
W
п о л у ч е н ак в и т а н ц и я
К в и ти н ц и я н а к а ж д ы й с е гм е н т , о к н о - в б а й та х
W -р азм ер о к н а
о тп р авл ен ы ,к ви тан ц и ип о л уч ен ы
о тп р авл ен ы ,к ви тан ц и й
п о к а н ет
м о гутб ы ть
о тп р авл ен ы
н ел ь зяо тп р авл ять
сегм ен ты
Параметры управления потоком
В каждом отправляемом сегменте каждая сторона обменасообщает другой стороне размер своего окна
ОКНО (win) - количество байтов (начиная с номераподтверждения), которое программа TCP готова в настоящиймомент принять
При получении сегмента соответствующая сторона отсылаетквитанцию - сегмент с подтверждением
ПОДТВЕРЖДЕНИЕ (ack)- число, на единицу превышающеемаксимальный номер байта в полученном сегменте
В каждом сегменте отправитель помещает номер первого байтаиз отправляемых данный
НОМЕР ОЧЕРЕДИ (seq) - номер байта, который определяетсмещение сегмента относительно потока отправляемых данных
Фрагмент TCP-сеанса
len: 0, seq: 726000-727399, ack:2340403658, win: 8760, src: 1044 dst: 20 len: 1460, seq:2340403658-2340405117, ack: 727400, win:17520, src: 20 dst: 1044 TCP: .A...., len: 0, seq: 727400-728799, ack:2340405118, win: 8760, src: 1044 dst: 20
Механизм подтверждения
копия отправленного сегмента ставится в очередьповторной передачи и запускает таймер
когда приходит подтверждение - сегмент удаляет-ся из очереди
если подтверждение не приходит до истечениясрока, то сегмент посылается повторно
механизм подтверждения является накопительным- подтверждение номера X означает, что все байтыс номерами N<X уже получены
возможно появление дубликатов в условиях по-вторной передачи
Проблема совпадений номеров очереди
при многократном повторном использовании од-ного и того же соединения
количество номеров для очереди ограничено от 0до 232-1 генератор первоначальных 32 битных номеров очере-
ди меняет значения каждые 4 микросекунды полный цикл генератора составляет примерно 4.55 ча-
са при скорости 100 Мбит/с один цикл использования
всех номеров очереди составляет 5.4 минуты
Необходимость периода "молчания" после сбоя Первоначальный номер в очереди выясняется во
время установления соединения
Формат заголовка сегмента TCP
Порт источника 2 байта, идентифицирует процесс-отправитель
Порт назначения 2 байта, идентиф ицирует процесс-получатель
Последовательный номер 4 байта, определяет смещение сегмента относительно потока отправля емых данных
Подтвержденный номер 4 байта, максимальный номер байта в получе н-ном сегменте, увеличенный на единицу
Длина заголовка 4 бита, измеренная в 32-битовых словах
Резерв 6 битов, поле зарезервировано
Кодовые биты 6 битов
Окно 2 байта, размер окна в байтах
Контрольная сумма 2 байта
Указатель срочности 2 байта, используется совместно с кодовым битомURG
Опции
Заполнитель (PADDING) фиктивное поле, используемое для доведениязаголовка до целого числа 32-битовых слов
Кодовые биты (CODE BITS)
1. URG - срочное сообщение
2. ACK - квитанция на принятый сегмент
3. PSH - запрос на отправку без ожиданиязаполнения
4. RST - запрос на восстановление соединения
5. SYN - сообщение используемое для синхронизациисчетчиков переданных данных при установлениисоединения
6. FIN - признак достижения передающей сторонойпоследнего байта в потоке передаваемых данных
Пример заголовка TCP-сегмента
TCP: Source Port = 0x0412
TCP: Destination Port = FTP [control]
TCP: Sequence Number = 695034 (0xA9AFA)
TCP: Acknowledgement Number = 0 (0x0)
TCP: Data Offset = 24 (0x18)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x02 : ....S.
TCP: ..0..... = No urgent data
TCP: ...0.... = Acknowledgement field not significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......1. = Synchronize sequence numbers
TCP: .......0 = No Fin
TCP: Window = 8192 (0x2000)
TCP: Checksum = 0x45C2
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
TCP: Option Kind (Maximum Segment Size) = 2 (0x2)
TCP: Option Length = 4 (0x4)
TCP: Option Value = 1460 (0x5B4)
Процедура установления соединения
порт - ресурс: необходимо получить номер порта открытие соединения - команда OPEN (аргумент
чужой сокет) ответ - имя локального (короткого) соединения запрос на пассивное открытие соединения - ко-
манда OPEN (аргумент неопределенный сокет) -процесс ждет получения запросов на соединение
Отмена соединения - обмен сегментами с флагомFIN
Процедура трехкратного подтверждения
Каждая сторона посылает: начальное значение номера очереди отправления seq подтверждение начального номера очереди напарника ack первоначальный размер окна win
максимальный размер сегмента seg
Сегмент ACK
Сегмент SYN Seq2, win2, seg2
Сегмент Ack
Сегмент SYN Seq1, win1, seg1
Алгоритм определения тайм-аутадля повторной посылки сегментов (RFC793)
1. Измерение времени обращения RTT (Round Trip Time)
2. Вычисление усредненного времени обращения SRTT (SmoothedRound Trip Time):
SRTT = a * SRTT + (1-a) * RTT
3. Определение контрольного времени повторной посылки RTO(Retransmission Timeout):
RTO = min[ ubound, max{lbound, (b * SRTT) }]
где
ubound - верхний предел контрольного времени(например, 1 мин),
lbound - нижний предел (например, 1 сек).a - фактор сглаживания (например, от 0.8 до 0.9),b - фактор изменения задержки (например, от 1.3 до 2.0).
Управление окном. Реакция на перегрузку
99% потерь пакетов в Internet вызвано перегрузками и 1% -искажениями данных
Приемы оптимизации:
при установлении соединения заявляется большое окно,но впоследствии его размер существенно уменьшается
окно нужно уменьшать, когда свободный объем в буфереснижается 20-40% от максимально возможного объема
отправителю не стоит спешить с посылкой данных, покаокно не станет достаточно большим
при переполнение буферов в маршрутизаторах -централизованное изменение окна дифференцированно длявсех конечных узлов
при переполнении буфера конечного узла задается нулевоеокно. В этом случае никакие сегменты приниматься небудут за исключением сегментов с флагами ACK , RST ,URG
Алгоритмы управления потоком данных впротоколе TCP
4 основных алгоритма для управления потоком данных приперегрузках в Internet (RFC 2581 – Proposed Standard):
1) Slow Start —"м едленный старт"
2) Congestion Avoidance — "предупреждение перегрузок"
3) Fast Retransmit — "быстрый повтор"
4) Fast Recovery — "быстрое восстановление"
Во многих ситуациях эти алгоритмы используются совместно
Congestion Window, CWND — "окно перегрузок", устанавливаемоепередатчиком
Receiver Window, RWND – окно, объявляемое приемником
Устанавливает передатчикУстанавливает приемник
CWND
RWND
ACK
Выбирается MIN (RWND, CWND)
Slow Start —"м едленный старт"
Congestion Avoidance — "предупреждение перегрузок"
Медленный старт
Применяется:
в начале сессии TCP, когда условия загруженности сети ещене известны
после потери пакета — по истечению таймера повторнойпередачи
после длительного периода "молчания" сессии
Медленный старт
Передающий узел использует окно CWND = 1 SegMaxSize и отправляет один сегмент в SegMaxSize байт
При приходе очередной квитанции ACK окно CWNDнаращивается на SegMaxSize и отправляется столько сегментов,сколько разрешает CWND (но не больше RWND)
Наращивание размера окна CWND происходит до порога SSThrash(Slow Start Thrashold) 65535 — дальше действие алгоритма SlowStart прекращается
В результате размер окна и скорость передачи данных растут вгеометрической прогрессии: 1 – 2 – 4 – 8 – 16 …
Предупреждение перегрузок
Применяется для осторожного повышения скорости передачипри выходе сессии в устойчивый режим
Условия применения — размер окна CWND превышает порогSSTrash
Передающий узел наращивает окно на 1 SegMaxSize каждыеRRT секунд
"Быстрый повтор" / "Быстроевосстановление" при получении 3
дубликатов ACK
"Медленныйстарт"/"Предупреждение
перегрузок" по истечение таймераповторной передачи
"Медленный старт" при истечении таймера
1. Порог перехода на "Предупреждение перегрузок"уменьшается в 2 раза:
SSThresh = CWND/2
2. Окно CWND устанавливается в 1 SegMaxSize (как при стартесессии)
Алгоримтмы "Быстрый повтор"/"Быстрое восстановление"
Реакция передатчика на получение дубликатов квитанций ACK —потеря пакета только подозревается
1. При получении 4-x идентичных ACK подряд передатчик не ждет истечения таймера и посылает повторно сегмент, который ждетпередатчик (возможно утерянный)
2. Порог SSThresh уменьшается до CWND/2
3. Окно CWND уменьшается только до SSThresh + 3*SegMaxSize ->окно учитывает, что 3 пакета уже получены приемником
4. Передается столько пакетов, сколько разрешает окно CWND
5. При получении первого "нового" ACK окно уменьшается доSSThrash