Настройка сетей Microsoft дома и в офисе. Учебный курс
Шрифт:
Чересчур большие сегменты данных тоже вредны, поскольку их использование приводит к падению пропускной способности сети. Это связано с тем, что большие сегменты данных приводят к формированию громоздких 1Р-дейтаграмм. В процессе передачи подобной дейтаграммы в сети с малым значением коэффициента MTU происходит ее фрагментация при помощи протокола IP. В отличие от TCP-сегментов, подтверждение получения каждого фрагмента на уровне протокола не выполняется, а отдельные фрагменты дейтаграммы при необходимости не могут быть повторно переданы независимо от всей дейтаграммы. Таким образом, в случае утери или повреждения одного из фрагментов данных повторно должна быть передана вся дейтаграмма. Поскольку
Теоретически оптимальный размер сегмента определяется максимально возможным размером формируемых IP-дейтаграмм, которые на протяжении маршрута от компьютера-отправителя до конечного получателя не фрагментируются. На практике определение этого значения затруднено в силу нескольких причин. Во-первых, в большинстве реализаций протокола TCP не используется механизм определения оптимального размера сегмента. Во-вторых, поскольку маршрутизаторы могут динамически изменять маршруты дейтаграмм, возможно изменение пути их следования между двумя взаимодействующими компьютерами. Следовательно, величина MTU в любой момент может измениться, после чего неминуемо последует фрагментация дейтаграммы. В-третьих, оптимальный размер сегмента зависит от длины заголовков протоколов более низкого уровня. Кроме того, при использовании параметров протокола IP размер сегмента должен быть еще меньше. Поэтому проблема определения оптимального размера сегментов протокола TCP до сих пор не разрешена.
ПРИМЕЧАНИЕ
Подробное рассмотрение принципов функционирования маршрутизаторов производится в следующей главе.
Поле контрольной суммы применяется для проверки целостности полученных данных и заголовка TCP-сегмента. В процессе вычисления контрольной суммы экземпляр протокола TCP, выполняющийся на компьютере-отправителе, использует соответствующий алгоритм.
Перед вычислением контрольной суммы к началу сегмента добавляется псевдозаголовок, а конец сегмента дополняется требуемым количеством нулевых битов. После выполнения описанных подготовительных действий вычисляется значение 16-разрядной контрольной суммы. Длина псевдозаголовка и битов, добавленных в процессе заполнения, не учитывается в общей длине TCP-сегмента, поскольку они не передаются получателю. Кроме того, при вычислении само значение поля контрольной суммы TCP-заголовка полагается равным нулю.
В процессе вычисления контрольной суммы используется двоичная арифметика, когда отрицательные числа представляются в инверсном виде. Затем полученный результат инвертируется, в результате чего формируется положительное значение контрольной суммы. После получения сегмента данных принимающим компьютером, экземпляр протокола TCP выполняет над ним аналогичные вычисления, а затем сравнивает значения контрольных сумм. Если эти величины совпадают, то процесс передачи сегментов данных выполнен без ошибок.
Благодаря псевдозаголовку компьютер-получатель может удостовериться в том, что сегмент данных доставлен по назначению. Для этого проверяются IP-адреса отправителя и конечного получателя, а также номера порта протокола. В протоколе TCP IP-адреса отправителя и конечного получателя играют очень важную роль, поскольку они используются для идентификации соединения, к которому относится полученный сегмент данных. Поэтому после прибытия дейтаграммы, содержащей TCP-сегмент, экземпляр протокола IP должен передать экземпляру протокола TCP, кроме самого сегмента, еще и IP-адреса отправителя и конечного получателя.
Поскольку в протоколе TCP данные посылаются в виде сегментов
Кроме того, получателю может быть доставлена некая часть потока в виде полученных вне очереди дейтаграмм. Несмотря на это, получатель всегда посылает сигналы подтверждения приема только на самую большую и непрерывную часть потока, которая была корректно получена. В каждом подтверждении приема указывается порядковый номер, который соответствует положению самого старшего байта в непрерывной части доставленного потока. Таким образом, по мере передачи потока данных отправитель постоянно получает сигналы подтверждения, отражающие состояние принятого потока данных.
Принятую в протоколе TCP систему подтверждения приема называют накопительной, поскольку она отражает количество байтов потока данных, накопленных получателем. Следует отметить, что накопительная система подтверждения приема имеет как преимущества, так и недостатки. Одно из преимуществ заключается в том, что сигналы подтверждения приема легко генерируются и являются однозначными. Их просто невозможно истолковать неправильно. Еще одно преимущество заключается в том, что в случае утери сигналов подтверждения приема не требуется повторно передавать ни сами сигналы, ни соответствующие им сегменты данных. Недостатком накопительного метода является то, что отправитель не обладает сведениями о том, что передача данных завершилась успешно. Ему только известно, какая часть потока данных была успешно доставлена получателю.
Описанную технологию может иллюстрировать простой пример. Предположим, имеется окно, расположенное в потоке данных начиная с позиции 201 и включающее 3000 байтов. Предположим также, что отправитель передал все находящиеся в окне данные в виде трех сегментов. Что произойдет в том случае, когда первый сегмент в процессе передачи данных был утерян, а остальные успешно достигли места назначения? Во время получения сегментов, получатель будет отсылать сигналы подтверждения. В каждом из них будет указан порядковый номер байта (201), то есть номер следующего по порядку старшего байта, относящегося к непрерывному потоку данных, который ожидает получить принимающая сторона. При этом получатель лишен возможности сообщить отправителю, что большая часть данных, принадлежащих текущему окну, уже получена.
Как только истечет время ожидания сигнала подтверждения приема, отправитель попытается выйти из сложившейся ситуации, используя один из следующих двух методов. Он может передать либо один сегмент данных, либо все три. Очевидно, что последний метод весьма неэффективен. После того как первый сегмент данных будет успешно доставлен, в распоряжении получателя окажутся данные, образующие окно. Поэтому он подтвердит прием байта с порядковым номером 3001. Таким образом, если отправитель будет действовать согласно принятым стандартам и выполнит повторную передачу первого непринятого сегмента данных, то прежде чем предпринимать дальнейшие шаги, он должен дождаться подтверждения приема этого сегмента. При этом не ощущается преимущество, предоставляемое большим окном.