В двух предыдущих частях этой серии статей я рассказывал об эталонной модели взаимодействия открытых систем (OSI) и о ее первых двух уровнях. В этой части я расскажу о третьем уровне; сетевом уровне. Сетевой уровень отвечает за получение данных с одного компьютера другим. Он отличается от второго уровня, так как второй уровень отвечает за передачу данных с одного устройства на другое, подключенное напрямую устройство. К примеру, канальный уровень отвечает за передачу данных с компьютера на сетевой концентратор, подключенный к нему, а сетевой уровень отвечает за передачу тех же данных на протяжении всего пути к другому компьютеру, возможно, в противоположенной части света. Сетевой уровень передает данные с одной конечной точки к другой, осуществляя следующие функции:
- Адресация
- Маршрутизация
- Инкапсуляция
- Фрагментация
- Работа с ошибками
- Управление заторами
Адресация
Тем, кто читал мою предыдущую часть этой серии статей возможно любопытно, почему третий уровень осуществляет адресацию, так как я сказал, что второй уровень осуществляет адресацию. Чтобы разрешить этот спорный момент, вспомните, как я писал, что адрес второго уровня (MAC адрес) соответствует определенной точке доступа сети в отличие от адреса для целого устройства, такого как компьютер. Нужно также учитывать, что адрес третьего уровня является чисто логическим адресом, который не зависит от какого-либо конкретного физического устройства; MAC адрес ассоциируется с определенным устройством и производителем устройства. Пример адресации третьего уровня – это Internet Protocol (IP) адресация. Иллюстрация IP адреса показана на рисунке 1.
Рисунок 1: Иллюстрация IP адреса
Маршрутизация
Передача данных от одной точки к пункту назначения – это работа сетевого уровня. Для этого сетевой уровень должен иметь возможность планировать маршрут для передачи данных. Сочетание программных и аппаратных процедур осуществляет эту задачу, которая называется маршрутизацией. Когда маршрутизатор получает пакет от источника, ему сначала необходимо определить адрес назначения. Он делает это путем удаления заголовков, предварительно добавленных на канальном уровне, и считыванием адресов с предопределенного места расположения в пакете, как определено используемым стандартом (к примеру, IP стандарт). Когда адрес назначения определен, маршрутизатор проверяет, не находится ли этот адрес в его собственной сети. Если адрес принадлежит собственной сети, маршрутизатор отправит пакет обратно на канальный уровень, на котором будут добавлены заголовки, как я описывал в предыдущей статье (перейдите ко второй части этой серии статей) и отправит пакет к пункту назначения. Если адрес не принадлежит сети маршрутизатора, то маршрутизатор будет искать адрес в таблице маршрутов. Если адрес найден в этой таблице, то маршрутизатор считает сеть назначения из таблицы, а затем отправит пакет на канальный уровень и на сеть назначения. Если адрес не найден в таблице маршрутизации, пакет будет отправлен для обработки ошибок. Это один из источников ошибок, который можно встретить при передаче данных по сети, и он является отличным примером того, почему требуется проверка и обработка ошибок.
Инкапсуляция
Когда маршрутизатор отправляет пакет на канальный уровень, на котором пакету добавляется заголовок, прежде чем он будет отправлен к следующей точке, это является примером инкапсуляции для канального уровня. Как и канальный уровень, сетевой уровень также отвечает за инкапсуляцию данных, которые он получает с вышестоящего уровня. В этом случае это будут данные, полученные с четвертого, транспортного уровня. На самом деле, каждый уровень отвечает за инкапсуляцию данных, которые он получает с вышестоящего уровня. Даже седьмой, самый последний, прикладной уровень, поскольку приложение инкапсулирует данные, которое оно получает от пользователя.
Фрагментация
Когда сетевой уровень отправляет данные на канальный уровень, он иногда может сталкиваться с проблемами. В зависимости от того, какой тип технологии канального уровня используется, данные могут быть слишком большими. Для этого сетевой уровень должен иметь возможность разбивать данные на более мелкие части, которые по очереди отправляются на канальный уровень. Этот процесс называется фрагментацией.
Обработка ошибок
Обработка ошибок является очень важным аспектом сетевого уровня. Как уже говорилось ранее, одним из источников ошибок может быть ситуация, в которой маршрутизатор не может найти адрес назначения в таблице маршрутизации. В этом случае маршрутизатору необходимо сгенерировать ошибку недоступности адреса назначения. Еще одним возможным источником ошибок является TTL (время существования) значение пакета. Если сетевой уровень определяет, что TTL достигло нулевого значения, генерируется ошибка превышения времени. Обе ошибки соответствуют определенным стандартам, как определено в Internet Control Message Protocol (ICMP).
Фрагментация также может вызывать ошибки. Если процесс фрагментации занимает слишком много времени, устройство может выдать ошибку превышения интервала ICMP.
Управление заторами
Еще одной областью, за которую отвечает сетевой уровень, является управление заторами. Как (я уверен) вы знаете, любое сетевое устройство имеет верхний предел пропускной способности, с которым оно может справиться. Этот верхний предел всегда медленно растет, но все еще бывают случаи, когда есть слишком большой объем данных, с которым устройство не может справиться. Это причина для создания управления заторами. Существует множество теорий на счет того, как это лучше всего осуществить, большинство из которых довольно сложные, и не освещаются в этой статье. Основная идея всех этих способов заключается в том, чтобы заставить отправителей соревноваться за право, чтобы их данные были приняты в пропускную способность. Перегруженное устройство пытается сделать это таким образом, чтобы снизить обще количество получаемых им данных. Этого можно добиться путем ‘наказания’ отправителей, которые передают большую часть данных, что заставляет отправителя ‘снижать’ свою отправительную деятельность во избежание наказания, и тем самым снижать объем данных, принимаемых переполненным устройством (которое в данный момент уже не перегружено). Авторская оговорка: Алгоритмы управления заторами довольно сложны в силу различных причин. Во-первых, присутствующая здесь математичка очень напряженная. Поэтому если вы когда-либо интересовались, зачем люди учат математику в университетах и какую работу они могут получить с таким образованием…. это очень важный аспект, к тому же такое образование довольно хорошо оплачивается в таких сетевых компаниях, как CISCO и Nortel. Во-вторых, после определения подходящей математики для выполнения этой задачи, нужно знать, как ее применить быстро и эффективно. Это основная задача инженеров, которые должны понимать математику, возможные стратегии применения ПО и методы разработки. Многие люди, включая тех, кто работает в технологической сфере, не совсем понимают, что эти и другие профессии могут дать: хотя должны. Это очень важно. В своей следующей статье я расскажу о четвертом уровне эталонной модели OSI; транспортом уровне.
Автор: Рассел Хичкок (Russel Hitchcock)