L10-Сети (tcp v2)
.pdfУлучшения: Алгоритм Нагля
В telnet нажатием клавиши передается 1 байт и посылается 41битный сегмент (без учета издержки Ethernet)
Эффективность работы может быть улучшена с помощью алгоритма
Нагля (Nagle, 1984; RFC-896)
Нагль предложил посылать первый байт, а последующие буферизовать до прихода подтверждения получения посланного. После этого посылаются все буферизованные октеты, а запись в буфер вводимых кодов возобновляется
Если символы вводятся быстро, а сеть работает медленно, этот алгоритм заметно снижает загрузку канала
Алгоритм Нагля желательно отключить при работе в режиме Х- терминала, где сигналы перемещения мышки должны пересылаться немедленно, чтобы не ввести в заблуждение пользователя относительно истинного положения маркера
© Masich G.F. 18.11.2013 |
ТСР |
52 |
Улучшения: Синдром узкого окна (Clark, 1982)
Ситуация: (Кларк, 1982)
1.данные передаются отправителем крупными блоками
2.буфер получателя (RecvBuffer) заполнится и передающая сторона знает об этом
(window=0),
3.интерактивное приложение получателя считывает информацию побайтно
4.получатель пошлет уведомление отправителю, разрешающее ему послать один байт
(window=1)
5.этот байт будет послан и снова заполнит до краев буфер получателя, что вызовет отправку ACK со значением window=0
6.Далее повторяются действия с пункта 3
Проблема
Если получатель рекламирует малые увеличения окна приема[ window(i) = 0, window(i+1) = 1, window(i+2)=0, window(i+3) = 1, ….. и т.д.) ]
– передатчик посылает много маленьких сегментов
– тратиться время на передачу заголовков этих маленьких сегментов
– понижая коэффициент использования канала
Решение (Кларк, 1982)
Получатель не должен рекламировать малые увеличения окна
Минимальный размер рекламируемого окна увеличения равен min(MSS, RecvBuffer/2, где
– MSS (Maximum Segment Size) – максимальный размер сегмента
– RecvBuffer – буфер приема получателя
© Masich G.F. 18.11.2013 |
ТСР |
53 |
Управление потоком
© Masich G.F. 18.11.2013 |
ТСР |
54 |
Управление перегрузкой (1)
Управление перегрузкой осуществляет отправитель с помощью
cwnd (congestion window) - окно перегрузки
rcv_win (receiver advertised window) – объявленное получателем окно
ssthreth (slow start threshold) - порог медленного старта
чуть позже о ssthreth
Отправитель, в исходный момент времени, при установлении соединения
cwnd = MSS (MSS – максимальный размер сегмента)
ssthreth=65535 байтам (2 в степени 16).
Отправитель никогда не пошлет больше байт, чем это задано cwnd и объявленным получателем значением
win = min (rcv_win, cwnd)
© Masich G.F. 18.11.2013 |
ТСР |
55 |
Управление перегрузкой (2)
Когда получение очередного сегмента данных подтверждается, значение cwnd увеличивается
Динамика процесса увеличения окна перегрузки (cwnd) зависит от величины порога медленного старта (ssthreth)
Если cwnd ≤ ssthreth, выполняется медленный старт
Если cwnd > ssthreth выполняется процедура подавление перегрузки
Вслучае подавления перегрузки
cwnd i+1 = cwnd i + MSS/8+(MSS*MSS)/cwnd.
Если возникает состояние перегрузки канала значение cwnd снова делается равным одному MSS
© Masich G.F. 18.11.2013 |
ТСР |
56 |
|
Медленный старт (1) |
|
||
Итак, в качестве модуля |
|
|
|
|
приращения cwnd используется |
|
|
||
MSS или 1 |
|
|
|
|
Каждое подтверждение (ACK) |
|
|
|
|
увеличивает окно перегрузки: |
|
|
|
|
CWND i+1 = CWND i + MSS , |
если |
cwnd = 1 |
|
|
размер окна задан в октетах, |
|
|
||
|
|
|
||
CWND i+1 = CWND i + 1 , |
если |
cwnd = 2 |
|
|
размер окна задан в сегментах |
|
|||
|
|
|||
Это и есть алгоритм медленного |
|
|
||
старта |
|
|
cwnd = 4 |
|
И теперь отправитель может |
|
|
|
|
послать, не дожидаясь ACK, уже |
|
|
||
два сегмента и т.д. |
|
|
|
|
|
|
|
cwnd = 8 |
|
© Masich G.F. |
18.11.2013 |
|
ТСР |
57 |
Медленный старт (2) |
|
|
Итак, в качестве модуля приращения cwnd используется MSS или 1 |
|
|
|
. |
|
|
. |
|
|
. |
|
Sequence No |
Window doubles |
|
|
|
|
|
every round |
|
|
Time |
|
© Masich G.F. 18.11.2013 |
ТСР |
58 |
Предотвращение перегрузки (3)
Замедление медленного старта (“Slow Start”)
If cwnd > ssthresh then
each time a segment is acknowledged increment cwnd by 1/cwnd
i.e. (cwnd += 1/cwnd).
Итак cwnd увеличивается на 1 только если все сегменты были подтверждены, начинается с порога медленного старта ssthresh
|
|
Sequence No |
Окно растет: |
|
|
|
|
|
|
|
1 представлена |
|
|
|
окружностью |
|
|
|
Time |
© Masich G.F. |
18.11.2013 |
ТСР |
59 |
|
|
|
Предотвращение перегрузки (4) |
|
|||
|
Assume that ssthresh = 8 |
cwnd = 1 |
|
||||
|
|
|
|
|
|
cwnd = 2 |
|
|
14 |
|
|
|
|
cwnd = 4 |
|
|
|
|
|
|
|
|
|
|
12 |
|
|
|
|
|
|
) |
10 |
|
|
|
|
cwnd = 8 |
|
|
|
|
|
|
|
||
(in segments |
8 |
|
|
|
|
|
|
6 |
ssthresh |
|
|
|
|
||
4 |
|
|
|
|
|
|
|
Cwnd |
2 |
|
|
|
|
cwnd = 9 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
t=0 |
t=2 |
t=4 |
t=6 |
|
|
|
|
|
|
Roundtrip times |
|
cwnd = 10 |
|
|
|
|
|
|
|
|
|
|
© Masich G.F. |
18.11.2013 |
|
ТСР |
60 |
|
|
Медленный старт |
|
cwnd |
|
|
|
|
Timeout |
|
|
|
|
Congestion |
|
|
|
Avoidance |
|
|
Slow Start |
|
|
|
|
|
Time |
© Masich G.F. |
18.11.2013 |
ТСР |
61 |