1. Состав компьютерной системы
Скачать 213 Kb.
|
* Шлюзы работают, как правило, медленно; пользователи замечают уменьшение производительности при обращении к другой сети через шлюз. * Шлюз как централизованное средство понижает надежность сети. 50. Сущность маршрутизации. В пересылаемых по сетям пакетах данных содержится большой объем информации; увы, она ничего не говорит о том, каким образом данный пакет должен найти свой путь в хитросплетении маршрутизаторов, коммутаторов и других устройств в корпоративной глобальной сети. Пакету каким-то образом следует указать путь к цели. Протоколы маршрутизации помогают пакетам найти не только верную, но и самую короткую дорогу к станции назначения. Это экономит и время, и деньги. Планируя глобальную сеть, связывающую пользователей, серверы и мэйнфреймы, администратору приходится решать множество серьезных проблем, одной из которых является проблема выбора протокола маршрутизации. В настоящее время существует несколько протоколов, обеспечивающих эффективную передачу данных. Протоколы маршрутизации определяют топологию сети и сохраняют информацию о ней в таблице маршрутизации. Если маршрутизатор не применяет протокол маршрутизации, он хранит статические маршруты или использует отдельный протокол на каждом интерфейсе. Обычно маршрутизаторы работают с одним протоколом маршрутизации. Таблица маршрутизации, иногда называемая базой данных маршрутизации, — это набор маршрутов, используемых маршрутизатором в данный момент. Строки таблицы маршрутизации содержат по крайней мере следующую информацию: * действительный адрес или множество действительных адресов в сети; * информацию, вычисленную протоколом маршрутизации или необходимую ему; * информацию, необходимую для того, чтобы переслать сообщение на один маршрутизатор ближе к получателю. Протоколы маршрутизации выполняют две важнейшие функции. Во-первых, с их помощью определяется оптимальный путь передачи пакета по сети. Таблицы маршрутизации всегда содержат точную информацию о топологии сети. Во-вторых, функцией протоколов маршрутизации является передача пакетов по сети. Получая очередной пакет, маршрутизатор считывает адрес назначения из заголовка пакета и определяет, в каком направлении (через какой узел) следует осуществить дальнейшую передачу пакета. Планируя сеть, следует использовать только один стандартный маршрутизируемый протокол. Некоторые маршрутизаторы могут работать с несколькими протоколами, однако применение разных протоколов в одной и той же сети снижает ее производительность и усложняет работу администраторов сети. Протоколы, используемые при создании таблицы маршрутизации, можно разделить на три категории: * протоколы длины вектора расстояния; * протоколы состояния канала; * протоколы политики маршрутизации. Протоколы длины вектора — простейший и наиболее распространенный тип протоколов маршрутизации. Свое название этот тип протоколов получил от способа обмена информацией. Периодически каждый маршрутизатор копирует адреса получателей и метрику из своей таблицы маршрутизации и помещает эту информацию в рассылаемые соседям сообщения об обновлении. Соседние маршрутизаторы сверяют полученные данные со своими собственными таблицами маршрутизации и вносят необходимые изменения. Этот алгоритм прост и, как кажется на первый взгляд, надежен. К сожалению, он работает наилучшим образом в небольших сетях при (желательно полном) отсутствии избыточности. Протокол маршрутизации RIP Протокол RIP очень популярен среди тех, кто имеет отношение к Internet. Это протокол с использованием алгоритма длины вектора, где маршрут определяется исходя из расстояния (числа транзитных узлов) на пути следования данных до точки назначения. RIP известен довольно давно — впервые он появился в 1982 году как часть набора протоколов TCP/IP в версии UNIX. В настоящее время RIP служит основой для многих других протоколов маршрутизации. В маршрутизаторе, работающем с RIP, вся информация хранится в виде таблицы маршрутизации, содержащей следующие поля: * пункт назначения (в нем перечислены все конечные, в смысле адреса, локальные сети); * следующий транзитный узел (оно определяет, на какой порт должен быть переслан пакет для отправки на следующий маршрутизатор); * расстояние (число транзитных узлов, необходимых для того, чтобы достичь пункта назначения). Таблица маршрутизации RIP содержит информацию о наилучшем пути к месту назначения. После получения новых данных от другого узла старая информация стирается, и на ее место записывается новая. В протоколе RIP предусмотрен ряд мер, призванных повысить стабильность работы протокола. Среди них: лимит числа промежуточных узлов (hop-count limit), временный отказ от приема информации (hold-down) и расщепление горизонта (split horizon). Лимит на число промежуточных узлов позволяет предотвратить зацикливание пакета при пересылке. 51. Программирование сокетов Для обеспечения сетевых коммуникаций используются сокеты. Сокет это конечная точка сетевых коммуникаций. Каждый использующийся сокет имеет тип и ассоциированный с ним процесс. Сокеты существуют внутри коммуникационных доменов. В Internet домене сокет - это комбинация IP адреса и номера порта, которая однозначно определяет отдельный сетевой процесс во всей глобальной сети Internet. Два сокета, один для хоста-получателя, другой для хоста-отправителя, определяют соединение для протоколов, ориентированных на установление связи, таких, как TCP. Создание сокета Для создания сокета используется системный вызов socket. Функция socket создает конечную точку для коммуникаций и возвращает файловый дескриптор, ссылающийся на сокет, или -1 в случае ошибки. Данный дескриптор используется в дальнейшем для установления связи. Установление связи Со стороны клиента связь устанавливается с помощью стандартной функции connect: error = connect(s, serveraddr, serveraddrlen); Connect возвращает 0, если вызов прошел успешно. Возвращенная величина -1 указывает на то, что в процессе установления связи произошла некая ошибка. В случае успешного вызова функции процесс может работать с дескриптором сокета, используя функции read и write, и закрывать канал используя функцию close. Со стороны сервера процесс установления связи сложнее. Когда сервер желает предложить один из своих сервисов, он связывает сокет с общеизвестным адресом, ассоциирующимся с данным сервисом, и пассивно слушает этот сокет. Для этих целей используется системный вызов listen: error = listen(s, qlength); где s это дескриптор сокета, а qlength это максимальное количество запросов на установление связи, которые могут стоять в очереди, ожидая обработки сервером; это количество может быть ограничено особенностями системы. Когда сервер получает запрос от клиента и принимает решение об установлении связи, он создает новый сокет и связывает его с ассоциацией, эквивалентной 'слушающему сокету'. Для Internet домена это означает тот же самый номер порта. Передача данных Когда связь установлена, с помощью различных функций может начаться процесс передачи данных. При наличии связи, пользователь может посылать и получать сообщения с помощью функций read и write: write(s, buf, sizeof(buf)); read(s, buf, sizeof(buf)); Вызовы send и recv практически идентичны read и write, за исключением того, что добавляется аргумент флагов. send(s, buf, sizeof(buf), flags); recv(s, buf, sizeof(buf), flags); Закрывание сокетов Когда взаимодействующие модули решают прекратить передачу данных и закрыть сеанс связи, они обмениваются трехсторонним рукопожатием с сегментами, содержащими установленный бит "От отправителя больше нет данных" (этот бит еще называется FIN бит). Если сокет больше не используется, процесс может закрыть его с помощью функции close, вызвав ее с соответствующим дескриптором сокета: close(s); 52. Открытая система. Стандартные платформы. До сих пор мы использовали термин "открытые системы", не давая ему точного определения. Одна из основных трудностей для тех, кто связан с миром открытых систем, состоит в том, что данный термин обозначает разное для разных людей и организаций. Фактически же, с практической точки зрения, открытая система должна быть тем, что ждут от нее в каждой организации. В соответствии с этим определением открытая система есть "система, реализующая открытые спецификации на интерфейсы, сервисы и поддерживаемые форматы данных, достаточные для того, чтобы обеспечить должным образом разработанным приложениям возможность переноса с минимальными изменениями на широкий диапазон систем, совместной работы с другими приложениями на локальной и удаленных системах и взаимодействия с пользователями в стиле, облегчающем тем переход от системы к системе". Стандартные платформы Одна из распространенных точек зрения состоит в признании "открытой" системы, основанной на стандартной аппаратуре и/или стандартной операционной системе. Пример такой системы - IBM PC или любая совместимая с ней система. Большинство таких платформ используют одну и ту же операционную систему и выполняют практически одни и те же приложения. Многие полагают, что именно операционная система определяет, является ли система открытой, и что предоставляемые ОС сервисы играют существенную роль в том, как компьютерная система функционирует и как она вписывается в объемлющее окружение. Достижение целей открытых систем требуется стандартизация в значительно более широком диапазоне областей и на уровне более высоком, чем уровень реализации. 53. Интерфейс пользователя ОС UNIX. Метасимволы в именах файла. Метасимволы используются для поиска имен файлов, посредством их упрощается задача указания файлов или групп файлов как аргументов команды. Поиск всех символов (метасимвол *) Метасимвол * осуществляет поиск любой строки символов, включая нулевую (пустую) строку. Вы можете использовать * для обозначения полного или частичного имени файла. Просто символ * ищет все имена файлов и справочников в текущем каталоге, за исключением тех, которые начинаются с точки. Чтобы посмотреть метасимвол * в действии, введите его как аргумент в команде echo: echo *. В ответ система распечатает перечень всех имен файлов в вашем текущем каталоге. Символ * может представлять символы в любой части имени файла. Например, если вы знаете, что несколько файлов имеют одинаковые первые и последние буквы, то вы можете выдать запрос, основываясь на этом факте. Если в вашем каталоге находятся файлы FATE, FE, FADED_LINE, FIG3.4E, FINE_LINE, FAST_LINE, то для отображения всех этих файлов на экране введите команду: ls F*E Вы можете, например, с помощью метасимвола * найти все файлы с именами memo в системном каталоге: ls */memo Поиск по одному символу (метасимвол ?) Метасимвол ? осуществляет поиск любого одного символа в имени файла за исключением лидирующей точки. Предположим, вы имеете книгу, в которой 12 глав и хотите получить список глав до 9-ой главы. Если ваш каталог содержит следующие файлы: Chapter1, Chapter2, Chapter5, Chapter9, Chapter11 то введите команду ls с метасимволом ? для получения всех глав, которые начинаются со строки "Chapter" и заканчиваются одним символом: $ ls Chapter? Chapter1 , Chapter2, Chapter5, Chapter9 $ Хотя метасимвол осуществляет поиск одного символа, вы можете использовать его для поиска более одного символа в имени файла. Например, вы получите перечень всех остальных глав в текущем каталоге, если введете следующую команду: ls Chapter?? И, конечно, чтобы получить список всех глав в текущем каталоге, используйте метасимвол *: ls Chapter* Поиск одного набора (метасимвол []) Если вы хотите, чтобы shell нашел любой символ из перечисленных вами символов, то заключите эти символы в квадратные скобки. Предположим, ваш каталог содержит следующие файлы: cat, fat, mat, rat. Если вы воспользуетесь в качестве части имени файла шаблоном [crf], то shell будет искать имена файлов, в которые входят либо буква ``c'', либо буква ``r'', либо буква ``f'' в указанной позиции. Пример: $ ls [crf]at cat fat rat $ 54. Стандартные потоки I\O и диагностики. Конвееры и фильтры. Возможности Shell. Стандартные потоки ввода-вывода Оболочка оперирует с вводимой и выводимой информацией посредством файлов специального вида - ``потоков (streams)''. Стандартный вывод - это файл, в который оболочка выводит результаты работы команд - по умолчанию, на экран Вашего терминала. Стандартный ввод (обычно это клавиатура) является источником данных для команд. Если команда считывает данные из стандартного ввода, она делает это до тех пор, пока Вы не введете Ctrl-d в новой строке. Если команда завершает выполнение с ошибкой, на экран обычно выводится сообщение об ошибке. Это сообщение принадлежит отдельному стандартному потоку для ошибок. Вы можете перенаправить вывод вместо этих потоков в другие - например, в файл или команду. Ниже приведены операции перенаправления, которые использует оболочка при работе со стандартным вводом или выводом. Создание конвейеров Конвейер - это соединение стандартного вывода одной команды со стандартным вводом другой. Вы можете сделать это, указав команды в нужном порядке и разделив их вертикальной чертой `|' (иногда называемой ``трубой (pipe)''). Например, Вы хотите посмотреть длинный список файлов в каталоге '/usr/bin', используя средство форматирования текста less. Введите: $ ls -la /usr/bin | less [Enter] Shell - интерпретатор командного языка В этом разделе описаны команды и символы, имеющие специальное значение, которые позволяют: * находить с помощью шаблона и манипулировать группами файлов; * запускать команду в фоновом режиме или в определенное время; * выполнять последовательно группу команд; * перенаправлять стандартный ввод и вывод; * завершать работающие программы. |