|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Установление соединенияПоскольку TCP является протоколом, ориентированным на предварительное соединение (connection-oriented), сначала необходимо установить сессию между приложениями конечных устройств. Узел-отправитель инициализирует соединение, которое должно быть подтверждено узлом-получателем. Программное обеспечение протокола TCP обменивается сообщениями через сеть, чтобы проверить, что передача разрешена и что обе стороны готовы к ней. Соединение между двумя устройствами производится в три этапа (см. рис. 1). Во-первых, узел-отправитель инициализирует установление связи, посылая узлу-получателю запроса синхронизации SYN (1).
Во-вторых, узел-получатель подтверждает запрос синхронизации и задает свои параметры синхронизации ACK (2). В-третьих, узлу-получателю посылается подтверждение, что обе стороны готовы к тому, чтобы соединение было установлено (3). Такой механизм получил название трехэтапного установления связи Синхронизация требует, чтобы каждая сторона послала собственный начальный номер последовательности и получила подтверждение от другой стороны. Каждая сторона, получив начальный номер последовательности от другой стороны, отвечает подтверждением ACK. Например, последовательность, соответствующая рис.1, будет следующей: Узел-отправитель (A) инициализирует соединение, посылая сегмент SYN узлу-получателю (B), в котором указывает номер своей последовательности Sequence Number, например SECА = 101. Получив сегмент инициализации соединения, узел B делает запись принятого номера последовательности 101 и формирует ответ в виде ACK В = 101 + 1 = 102. Ответ ACK В = 102 означает, что хост B получил сегмент данных, включая байт с номером 101, и ожидает следующий байт с номером 102. Одновременно хост B формирует начальный номер своей последовательности данных, например SECВ = 51. Узел A, получив сегмент от B со значениями ACK В = 102, SECВ = 51, формирует ответ ACK А = 52, SECА = 102, который завершает процесс соединения. Передача данных Сегменты данных нужно представить пользователю-получателю в том же порядке, в котором они были переданы. Сбой происходит, если какие-то сегменты данных потеряны, повреждены или получены в неверном порядке. Поэтому получатель должен подтвердить получение каждого сегмента. Однако если бы отправитель ждал ответ ACK после посылки каждого сегмента, то производительность сети была бы низкой. Поэтому надежный, ориентированный на предварительное соединение протокол, например TCP, позволяет послать несколько сегментов прежде, чем отправитель получит подтверждение ACK. Размер скользящего окна (Window) заголовка сегмента TCP (рис. 2) определяет, сколько байт данных передается в одной порции неподтвержденных данных. Последовательность сегментов передаваемых данных представляет собой последовательность байт. Поэтому и размер окна в заголовке сегмента задается в количестве передаваемых байт. Узел-получатель передает отправителю подтверждение ACK, когда примет указанное в окне количество байт данных. На рис. 3 приведен пример, когда размер окна составляет 3000 байт, а каждый передаваемый сегмент содержит 1500 байт, что соответствует максимальному размеру кадра Ethernet Уровня 2.
Поэтому узел-отправитель передает два сегмента подряд, на которые узел-получатель посылает подтверждение ACK с номером следующего ожидаемого байта, т. е. ACK = 3001. После получения узлом-отправителем подтверждения процесс передачи данных повторяется. Если какой-то сегмент в процессе передачи был потерян, например, из-за перегрузки сети, то узел-получатель в ответе укажет начальный номер потерянного сегмента (рис. 4), чтобы этот сегмент был передан повторно. При этом размер окна может быть уменьшен до 1500 байт, т. е. до размера одного передаваемого сегмента. Перегрузка буферов данных может произойти по следующим причинам: Высокоскоростной узел-отправитель генерирует трафик быстрее, чем сеть может передать его, а узел-получатель – принять. Несколько узлов одновременно посылают сообщения одному узлу-получателю. Когда данные прибывают на узел-получатель слишком быстро, буферные устройства адресата могут оказаться перегруженными и приходящие пакеты будут отбрасываться. Чтобы не потерять данные, процесс TCP на узле-получателе может послать отправителю индикатор "не готов", и отправитель приостановит передачу данных.
Когда получатель вновь сможет обрабатывать дополнительные данные, он посылает индикатор "готов". Если этот индикатор получен, отправитель может продолжить передачу. При передаче срочных сообщений используется бит URG в поле кода передаваемых сегментов. Такие сегменты передаются в первую очередь, даже за счет впереди стоящих в очереди сегментов. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |