Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Транспортный уровень. Задачи. Алгоритмы установления и разрыва
1. Транспортный уровень. Логическая взаимосвязь сетевого, транспортного и прикладного уровней Транспортный код запускается на пользовательских машинах, а сетевой код на маршрутизаторах. Если транспортный объект узнаёт о неполадках соединения, но не получает сведений о передаваемых данных, он устанавливает новое соединение, после чего узнает всю информацию о данных, после чего продолжит их передачу. Наличие транспортного уровня подстраховывает сетевой (могут быть восполнены потерянные или испорченные данные) Вложенность структуры данных Транспортная служба подобна сетевой, но имеет и некоторые существенные отличия. Главное отличие состоит в том, что сетевая служба предназначена для моделирования сервисов, предоставляемых реальными сетями, со всеми их особенностями. Реальные сети теряют пакеты, поэтому в общем случае сетевая служба ненадежна. Ориентированная на соединение транспортная служба, напротив, является надежной. Конечно, реальные сети содержат ошибки, но именно транспортный уровень как раз и должен обеспечивать надежность сервисов ненадежных сетей. Второе различие между сетевой и транспортной службами состоит в том, для кого они предназначены. Сетевая служба используется только транспортными объектами. Мало кто пишет свои собственные транспортные объекты, и поэтому пользователи и программы почти не встречаются с голой сетевой службой. Транспортные примитивы, напротив, используются многими программами, а следовательно, и программистами. Поэтому транспортная служба должна быть удобной и простой в употреблении Чтобы пользователи могли получить доступ к транспортной службе, транспортный уровень должен совершать некоторые действия по отношению к прикладным программам, то есть предоставлять интерфейс транспортной службы. У всех транспортных служб есть свои интерфейсы. Примитивы простейшего взаимодействия · Listen – блокировать процесс до тех пор пока другой процесс не потребуется установления соединения. · Connect – активно пытается установить соединение. · Send – пересылка данных. · Receive – считывание. · Disconnect – запрос на разрыв соединения.
Сокеты Беркли. другой набор транспортных примитивов (для unix) — примитивы сокетов · Socket – создать новый сокет · Bind – связать локальный адрес с сокетом · Listen – объявить о желании принять соединение · Accept – блокировать звонящего до получения попытки соединения · Connect – активно пытаться установить соединение · Send – посылать данные по соединению · Receive – получать данные у соединения · Close – разрывать соединение Адресация. Когда один прикладной процесс желает установить соединение с другим прикладным процессом, он должен указать, с кем именно он хочет связаться. (У не требующей соединений транспортной службы проблемы такие же: кому следует посылать каждое сообщение?) Применяемый обычно метод состоит в определении транспортных адресов, к которым процессы могут посылать запросы на установку соединения. В Интернете такие конечные точки называются портами. Для определения адресов получателя и отправителя используются порты. Проблема – как узнать порт назначения. Решения. Всем известным серверам назначать известные всем порты. Для обращения к ним, клиенты используют эти заведомо известные порты. Протокол начального соединения. Определяется обрабатывающий сервер, который прослушивает диапазон портов. При попытке соединения данный сервер создает подпроцесс, который наследует данное соединение и выполняет необходимые с ним действия. После этого обрабатывающий сервер продолжает прослушивать порты. Использование сервера имен. Клиент изначально соединяется с сервером имен и посылает запрос на выдачу порта требуемой им службы. Сервер имен получает описание службы, ищет в своих таблицах данную службу и возвращает порт при успешном результате поиска. Клиент, получив необходимый порт, разрывает соединение с сервером имен и соединяется с необходимой службой. Для реализации необходима регистрация всех служб на сервере имен.
2. Задачи. Его задача состоит в предоставлении надежной и экономичной передачи данных от машины-источника машине-адресату вне зависимости от физических характеристик использующейся сети или сетей. Без транспортного уровня вся концепция многоуровневых протоколов потеряет смысл. 3. Алгоритмы установления и разрыва Установление соединения. Чтобы обойти проблему потери машиной памяти предыдущих состояний (при выходе ее из строя), Томлинсон предложил снабдить каждый хост часами. Часы разных хостов нужно было синхронизировать. Последнее и самое важное предположение состоит в том, что часы продолжают идти, даже если хост зависает. Основная идея заключается в том, что два одинаково пронумерованных TPDU-модуля никогда не отправляются одновременно. При установке соединения младшие k битов часов используются в качестве начального порядкового номера (также k битов). Таким образом, каждое соединение начинает нумерацию своих TPDU-модулей с разных чисел. Диапазон этих номеров должен быть достаточно большим, чтобы к тому моменту, когда порядковые номера сделают полный круг, старые TPDU-модули с такими же номерами уже давно исчезли. Необходимо запретить использование порядковых номеров на период времени Т. Использующий показания часов метод решает проблему опаздывающих дубликатов для информационных TPDU-модулей, но чтобы воспользоваться этим методом, соединение необходимо вначале установить. Тройное рукопожатие. Нормальная процедура установки соединения показана на рис. 6.8, а. Хост 1 инициирует установку, выбирая порядковый номер х, и посылает TPDU-модуль CONNECTION REQUEST, содержащий этот начальный порядковый номер, хосту 2. Хост 2 отвечает TPDU-модулем АСК, подтверждая х и объявляя свой начальный порядковый номер у. Наконец, хост 1 подтверждает выбранный хостом 2 начальный порядковый номер в первом посылаемом им информационном TPD U-модуле. На рис. 6.8, б первый TPDU-модуль представляет собой задержавшийся дубликат модуля CONNECTION REQUEST от старого соединения. Этот TPDU-модуль прибывает на хост 2 тайком от хоста 1. Хост 2 реагирует на этот TPDU-модуль отправкой хосту 1 TPDU-модуля АСК, таким образом прося хост 1 подтвердить, что тот действительно пытался установить новое соединение. Когда хост 1 отказывается это сделать, хост 2 понимает, что он был обманут задержавшимся дубликатом, и прерывает соединение. Таким образом, задержавшийся дубликат не причиняет вреда. При наихудшем сценарии оба TPDU-модуля - CONNECTION REQUEST и АСК - блуждают по подсети. Этот случай показан на рис. 6.8, в. Как и в предыдущем примере, хост 2 получает задержавшийся модуль CONNECTION REQUEST и отвечает на него. В этом месте следует обратить внимание на то, что хост 2 предложил использовать у в качестве начального порядкового номера для трафика от хоста 2 к хосту 1, хорошо зная, что TPDU-модулей, содержащих порядковый номер у, или их подтверждений в данный момент в сети нет. Когда хост 2 получает второй задеръжавшийся TPDU-модуль, он понимает, что это дубликат, так как в этом модуле подтверждается не у, a z.
Разрыв соединения. Ассиметричный разрыв – соединение разрывается сразу после того, как одна из сторон высылает запрос на разрыв соединения. Не доставленные данные при этом теряются. Симметричный разрыв – соединение разрывается по обоюдному согласию. Каждая сторона имеет определенное количество данных. Каждая сторона знает, когда эти данные заканчиваются. 1. Если TPDU теряется, то ситуацию спасает таймер. 2. Если не приходит подтверждение, через некоторое время пакет отправляется снова и так до завершения. 3. Подтверждение не пришло, повторный пакет потерян, хосты в режиме ожидания.
Программирование
2. Функции и методы классов в языках С++ и C#. Передача параметров по значению и ссылке. Порядок передачи параметров в языке С и Pascal. 1. Функции и методы классов в языках С++ и C#. ФункцииC++ Классический С — язык сугубо процедурный и основной логической единицей программы является функция. Формат описания функции следующий:
Аргументы – это те данные, которые необходимы для выполнения функции. Если аргументов несколько, они отделяются запятой. Аргументы могут отсутствовать. Список параметров:
Все функции используемые программой должны быть предварительно описаны. Если это пользовательские функции, то их описание можно поместить перед головным модулем main(), или же поместить перед ним прототип функции, а само описание вынести в конец файла. Напомним, что компилятор С++ построен по однопроходовой схеме и, встретив обращение к функции, компилятор должен иметь о ней информацию. Функция может возвращать или не возвращать значение. Если функция, например, возвращает целое число, то нужно указать тип int. Если функция не возвращает никакого значения, то для этого используется ключевое слово void. Функции С# Описание функции в языке C# практически не отличается от С++, требуется лишь указывать модификатор доступа ((области видимости) может быть public-открытый (доступ разрешен как внутри, так и вне класса), private-закрытый (вне класса доступа нет), protected-защищенный (доступен только наследникам класса), internal-внутренний (открытый доступ только в текущей сборке).) для каждого метода. По умолчанию методы создаются с доступом internal. По-умолчанию модификатор доступа подразумевается internal.
Между модификатором и типом может стоять ключевое слово static, что означает, что функция будет статичной, например:
Как правило, статический класс создается в качестве контейнера для констант и методов общего назначения, которые должны объявляться с ключевым словом static. Переменные и методы класса также могут объявляться с модификатором static, в этом случае они принадлежат классу в целом. Для доступа к ним не требуется создания экземпляра класса, доступ осуществляется по имени класса. Статические переменные инициализируются по умолчанию нулевым значением (null для переменных ссылочного типа), если инициализация не осуществляется явно. Чтобы воспользоваться статическим методом, экземпляр класса создавать не требуется. Метод может не иметь возвращаемого значения (тип void), тогда для выхода из метода используется форма оператора return без параметра (если оператор return отсутствует, метод завершается, исчерпав исполняемый код). Если метод возвращает значение, аргументом оператора return должно быть выражение, имеющее тип return_Type, либо приводящееся к этому типу. Методы классов Метод – это небольшая подпрограмма в коде класса, которая выполняет, в идеале, только одну функцию. Методы позволяют сократить объем кода. В C# любой метод является методом какого-либо класса. Статический метод – это метод, который не имеет доступа к полям объекта, и для вызова такого метода не нужно создавать экземпляр (объект) класса, в котором он объявлен. Статическим методом называется метод с модификатором static. Простой метод – это метод, который имеет доступ к данным объекта, и его вызов выполняется через объект.
2. Передача параметров В C# есть два способа передачи параметров методу по значению, и по ссылке. В первом случае внутрь метода попадает не оригинальная переменная, а её копия, которая разрушается при выходе из метода не оказывая влияния на оригинальную переменную. При передаче методу значений обычных типов, таких как int, double и т.д. используется передача по значению. Следовательно, при изменении параметра, никакого влияния на оригинальную переменную не происходит. Теперь рассмотрим второй способ передачи параметров - по ссылке. В этом случае передается не копия переданного параметра, а ссылка на оригинальный объект, что позволяет модифицировать оригинал. По ссылке всегда автоматически передаются объекты классов. Если перед параметром метода стоит модификатор ref, то методу передается ссылка на переменную (неявно передается указатель). В этом случае метод получает доступ к фактическому параметру и может изменить его значение. Модификатор out используется для возврата более одного значения из метода. Модификатор out отличается лишь тем, что не требуется начальной инициализации переменной, предполагается, что ее значение будет присвоено в методе. В C++ для передачи элемента по ссылке используется знак &. В языке C#, как и в С++, реализована возможность создания методов с произвольным числом параметров, однако сделано это иначе. Параметр метода объявляется с ключевым словом params (этот параметр должен быть последним в списке), он будет зарегистрирован как массив, который принимает ноль и более аргументов одного типа:
3. Порядок передачи параметров Pascal. Аргументы передаются через стек, слева направо. Указатель стека на исходную позицию возвращает подпрограмма. Причём, изменяемые параметры передаются только по ссылке, а у функций неявно создаётся дополнительный первый изменяемый параметр Result, через который и возвращается значение. C. Аргументы передаются через стек, справа налево. Очистку стека производит вызывающая программа.
БД и Грегер Date: 2016-06-06; view: 727; Нарушение авторских прав |