Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзаменационные вопросы по курсу.docx
Скачиваний:
41
Добавлен:
23.06.2024
Размер:
29.87 Mб
Скачать

28. Формат заголовка tcp (Лекция 25)

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

Порядковый номер:

TCP получает от вышестоящего уровня поток байт и делит его на сегменты. TCP нумерует байты в потоке и в этом поле содержится первый номер байта в сегменте (например, байт 1000, байт 2460 и т.д.)

Чтобы поместиться в формат кадра Ethernet, сегменты в TCP обычно по 1460 байт:

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

Отправитель передает сегмент с указанием номера последовательности (первый байт 1000, последний 2459). Получатель отправляет сегмент с подтверждением, в котором говорит, какие данные получены и какой байт ждет следующим.

Длина заголовка – учитывает общую длину заголовка TCP с обязательными полями и необязательными.

Серая область: 3 зарезервированных бита, которые не используются.

Далее 9 полей флагов:

Флаги NS, CWR и ECE используются для управления перегрузкой.

URG – указывает на то, что в сегменте есть срочные данные, которые необходимо быстро передать приложению. Используется совместно с полем УКАЗАТЕЛЬ НА СРОЧНЫЕ ДАННЫЕ (в этом поле содержится адрес этих данных) – сейчас не используется.

ACK – используется, если в поле номер подтверждения записаны осмысленные данные, т.е. для подтверждения принятой ранее информации.

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

RST и FIN – используются для разрыва соединения.

SYN – используется для установки соединения.

Размер окна – в этом поле получатель указывает сколько данных он может принять. Используется для управление потоком.

Контрольная сумма – используется для проверки правильности.

Параметры:

В Ethernet максимальный размер сегмента 1460 байт. Задается при установке соединения.

29. Управление потоком в tcp (Лекция 25)

В TCP для повышения скорости работы в сетях используют скользящее окно, при этом отправитель передает в сеть большое количество сегментов не дожидаясь подтверждения и эти сегменты хорошо занимают пропускную способность широкого канала. Но что произойдет, если данные получает не высокопроизводительный сервер, а медленное устройство. В этом случае получатель примет несколько сегментов, а остальные будет вынужден отбросить. Задача предотвращения отправки быстрым отправителем слишком большого количества сегментов, которые не могут быть получены медленным получателем (затопление) называется управлением потоком.

Может быть и другая причина затопления:

Связана с тем, что на транспортном уровне мы работаем с приложением.

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

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

Что произойдет, если приложение эти данные не читает?

В примере буфер почти полностью занят – осталось место только для двух сегментов, а отправитель передал в сеть больше чем 2 сегмента. В результате 2 сегмента примутся, а остальные отбросятся.

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

Для этих целей используется поле РАЗМЕР ОКНА в заголовке TCP.

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

Рассмотрим на примере:

Допустим, что размер буфера получателя равен 8 сегментам. Отправитель передает 1 сегмент, он записывается в буфер и получатель передает подтверждение получения этого сегмента. В подтверждении кроме номера следующего ожидаемого байта указывается размер окна (в примере 10220), что соответствует 7 сегментам.

Мы используем сеть Ethernet, где размер кадра 1500 байт. Затем отправитель передает сразу 4 сегмента. Они записываются в буфер, получатель отправляет подтверждение, где указывает новый размер окна (равный 3 сегментам). Допустим, что приложение не читает данные из буфера. Отправитель передает еще 3 сегмента, они записываются в буфер и размер окна становится равным 0. Отправитель делает паузу и ничего не передает.

Приожение читает за это время какие-то данные из буфера и получатель заново отправляет подтверждение и указывает новый размер окна (в примере 2 сегмента свободно). Отправитель передает эти 2 сегмента, которые записываются в буфер.

Если отправитель ждет слишком долго, то может передать сегмент Zero Window Probe – просьба подтвердить, что размер окна все еще равен нулю. Это нужно для того, чтобы убедится, что получатель остается на связи и не произошло ошибок (например, сегмент с новым размером окна мог потеряться по сети).