Настройка сетей Microsoft дома и в офисе. Учебный курс
Шрифт:
В результате моделирования работы алгоритма RED и исследования его поведения в реальных условиях было выявлено много преимуществ этого метода. При перегрузке сети он позволяет избежать эффекта глобальной синхронизации, который возникает при применении метода усечения хвоста очереди. Кроме того, при кратковременной перегрузке метод RED без крайней необходимости не аннулирует дейтаграммы.
Сеанс связи TCP
Для установки сеанса связи протоколом TCP применяется метод трехстороннего квитирования связи. В простейшем случае процесс квитирования происходит так, как показано на рис. 4.6.
Рис. 4.6. Метод установки сеанса связи TCP
Первый сегмент, посылаемый в процессе квитирования, легко опознать, поскольку его полю SYN присвоена единица. Во втором сегменте данных единица присваивается
Обычно инициатором установки соединения выступает экземпляр протокола, выполняемый на одном из компьютеров, участвующих в сеансе связи. При этом экземпляр, выполняемый на другом компьютере, просто ожидает начала процесса квитирования. Тем не менее, в процессе квитирования предусмотрена ситуация, когда оба компьютера одновременно выступят инициаторами начала соединения. Таким образом, TCP-соединение может быть установлено как по инициативе одной из сторон, так и двух сторон одновременно. После установки соединения данные могут передаваться в обоих направлениях совершенно одинаково. Другими словами, обе стороны TCP-соединения являются равноправными.
Метод трехстороннего квитирования связи является необходимым и достаточным условием выполнения успешной синхронизации между двумя сторонами соединения. В процессе осуществления доставки сегментов данных они могут быть утеряны, задержаны, продублированы или доставлены с нарушением порядка их следования. Для устранения перечисленных проблем в протоколе TCP используется механизм повторной передачи утерянных пакетов, который «включается» после истечения времени ожидания сигналов, подтверждающих прием данных. Серьезная проблема возникает в том случае, если в процессе установки соединения получатель получает два запроса (первоначальный и повторный) либо когда повторный запрос приходит с большой задержкой (после завершения установки соединения, его использования и разрыва). Перечисленные выше проблемы и позволяет решить метод трехстороннего квитирования связи. Кроме того, в протоколе TCP принято правило, согласно которому после установки соединения все дополнительные запросы на его установку попросту игнорируются.
Метод трехстороннего квитирования связи выполняет две важные функции. Во-первых, его применение гарантирует, что обе стороны соединения будут готовы к приему данных, о чем они будут взаимно осведомлены. Во-вторых, с его помощью выполняется процесс согласования начального порядкового номера. В процессе квитирования обе стороны соединения обмениваются начальными порядковыми номерами и ожидают подтверждения их приема. Порядковые номера используются для идентификации потоков данных, посылаемых каждой из сторон открытого соединения. Они выбираются сторонами самостоятельно во время открытия соединения.
Порядковые номера не могут всегда начинаться с одного и того же значения. В частности, экземпляр протокола TCP не может каждый раз при создании нового соединения назначать порядковый номер, равный единице. Естественно, при открытии соединения обе стороны будут согласовывать свои порядковые номера. Это делается для того, чтобы номера байтов, указываемые в сигналах подтверждения приема, соответствовали номерам, используемым в заголовках при передаче сегментов данных.
Чтобы понять, каким образом стороны, обменявшись всего тремя сообщениями, могут согласовать порядковые номера для двух потоков, необходимо вспомнить, что в заголовке любого сегмента содержится как поле порядкового номера, так и поле номера сигнала подтверждения приема. Предположим, что компьютер А является инициатором соединения. Тогда во время трехэтапного процесса квитирования в первом SYN-сегменте он передает второй стороне (то есть компьютеру Б) свой начальный порядковый номер и. Получив SYN-сегмент, компьютер Б сохраняет в памяти начальный порядковый номер компьютера А, после чего посылает ответный сегмент синхронизации. В одноименном поле его заголовка она указывает уже свой начальный порядковый номер у, а полю номера сигнала подтверждения приема присваивается значение и+1. Тем самым компьютер Б уведомляет компьютер А о том, что его начальный
порядковый номер успешно получен, и что компьютер Б ожидает получить от компьютера А поток байтов, начинающийся с номера и+1. В третьем и последнем сегменте процесса квитирования компьютер А подтверждает получение порядкового номера для компьютера Б и сообщает ему, что он ожидает получить от компьютера Б поток байтов, начинающийся с номера и+1. В обоих случаях номера в сигналах подтверждения приема соответствуют принятому в протоколе TCP соглашению о следующем ожидаемом сегменте данных.Ранее уже отмечалось, что в протоколе TCP выполняется процесс трехстороннего квитирования при помощи обмена сегментами, содержащими минимальное количество информации. Протокол TCP спроектирован так, что в нем возможна передача данных вместе с начальным порядковым номером непосредственно в сегментах квитирования. В подобных случаях модуль протокола TCP блокирует данные до завершения процесса квитирования. После того как соединение установлено, экземпляр протокола TCP может разблокировать данные и доставить их ожидающему приложению.
Две взаимодействующие программы могут корректно завершить сеанс соединения, используя процедуру закрытия. Для этого используется модифицированный метод трехстороннего квитирования. Необходимо помнить, что ТСР-соеди-нение является дуплексным. Поэтому его можно использовать для передачи двух независимых потоков данных в противоположных направлениях. Получив от приложения сообщение о том, что все данные переданы, экземпляр протокола TCP закрывает соединение со своей стороны. Прежде чем закрыть половину соединения, экземпляр протокола должен отправить компьютеру-получателю все находящиеся в буфере данные, а также подождать подтверждения их приема. После этого получателю отправляется сегмент данных, в заголовке которого полю FIN присваивается единица. После того как FIN-сегмент будет получен компьютером-получателем, соответствующий экземпляр протокола посылает компьютеру-отправителю сигнал подтверждения приема и уведомляет собственное приложение о том, что отправителем переданы все данные. Для этой цели могут использоваться стандартные предоставляемые операционной системой средства, например может устанавливаться признак конца файла при очередной попытке считать данные из открытого соединения.
Закрыв соединение в требуемом направлении, экземпляр протокола TCP отвергает все попытки приложения передать данные в этом направлении. Тем не менее, в противоположном направлении данные могут передаваться до тех пор, пока отправитель не закроет вторую половину соединения. Естественно, даже после закрытия первой половины соединения по ней все равно будут передаваться отправителю сигналы подтверждения приема. После закрытия соединения в обоих направлениях экземпляры протокола TCP, выполняемые на компьютерах отправителя и получателя, удаляют из своих системных таблиц записи, относящиеся к данному соединению.
На самом деле процесс закрытия соединения выглядит немного сложнее, чем описано ранее. В этом случае протоколом TCP применяется модифицированный метод трехстороннего квитирования связи.
После получения первого FIN-сегмента второй FIN-сегмент посылается компьютеру-отправителю не сразу, в отличие от SYN-сегмента. Отправителю посылается сигнал подтверждения приема первого FIN-сегмента, после чего выполняемое на компьютере получателя приложение уведомляется о получении запроса на закрытие соединения. От момента уведомления приложения до получения отклика может пройти достаточно много времени. Отправка сигнала подтверждения приема первого FIN-сегмента позволяет исключить повторную передачу этого сегмента отправителем по истечении тайм-аута. Получив от приложения, выполняемого на компьютере получателя, команду на закрытие соединения, экземпляр протокола TCP отошлет отправителю второй FIN-сегмент, при этом отправитель должен прислать уведомление о получении этого сегмента (третий АСК-сегмент).
Обычно после завершения передачи данных приложение закрывает соединение с помощью специальной команды. Поэтому данную операцию следует рассматривать как неотъемлемую часть нормального функционирования системы по аналогии с операцией закрытия обычного файла. Однако иногда обстоятельства могут сложиться так, что прикладная программа или сетевое программное обеспечение вынуждены разорвать соединение досрочно. Поэтому в протоколе TCP предусмотрены средства обработки подобных ситуаций, которые реализуют сброс соединения.