Брандмауэры и специальное программное обеспечение 8 Часть 4
Вид материала | Реферат |
- Муниципальное общеобразовательное учреждение средняя общеобразовательная школа №12, 174.77kb.
- Управление экономикой и создание экономических информационных систем Изучив данную, 148.93kb.
- Программное обеспечение ЭВМ, 209.59kb.
- Программное обеспечение вычислительной системы, 824.71kb.
- Учебная программа (Syllabus) Дисциплина: Интерфейсы компьютерных систем (iks 3304), 321.31kb.
- Реферат по Информационной безопасности Тема: «Антивирусы», 711.1kb.
- Пк программный комплекс; по программное обеспечение; ппо прикладное программное обеспечение, 208.41kb.
- Лекция 4 Обеспечивающие подсистемы асу. Математическое, программное, лингвистическое,, 59.3kb.
- Математическое и программное обеспечение систем оперативной оценки характеристик сложных, 247.51kb.
- Учебная программа (Syllabus) Дисциплина «Инструментальные средства разработки программ», 374.12kb.
Основополагающие понятия
Для того чтобы понять, как работает сеть, необходимо начать с простого, а затем постепенно переходить к более сложному. Абсолютно любые данные внутри компьютера представляются в виде комбинаций нулей и единиц. Два состояния — «ноль» и «единица», «включено» и «выключено», «установлено» и «сброшено» — описывают абсолютно все, о чем «знает» компьютер. Однако используя только одно подобное значение (либо 0, либо 1), невозможно описать все, что нужно.
ПРИМЕЧАНИЕ
Единственное цифроместо, которое может принимать только одно из двух значений (1 или 0), называется битом. Можно сказать, что бит — это переменная, которой можно присвоить одно из двух возможных значений. Это определение является фундаментальным для всей остальной последующей дискуссии.
Бит представляет собой лишь одно двоичное знакоместо. Любая более сложная информация кодируется комбинацией из нескольких битов. Группа из восьми битов называется байтом или октетом. Не следует путать биты и байты. К сожалению, это часто происходит, так как два этих термина обозначаются очень похоже и используются в очень похожих ситуациях. Например, когда говорят о скорости работы модемов, как правило, имеют в виду количество битов, передаваемых модемом в секунду. В частности, зачастую приходится слышать о том, что модем поддерживает скорость передачи данных 56 Кбит/с. Следует иметь в виду, что эта цифра обозначает количество бит, но не байт.
В большинстве других ситуаций, как правило, приходится иметь дело с байтами. Один октет (8 бит) может содержать в себе десятичное число от 0 до 255. Это следует из того, что октет состоит из восьми знакомест, каждое из которых может быть либо нулем, либо единицей. Какое количество различных комбинаций нулей и единиц может быть представлено одним октетом? Два в степени восемь, то есть 256 комбинаций. Таким образом, при помощи одного октета можно закодировать 256 различных чисел. Если использовать шестнадцатеричную систему счисления, получим, что одним октетом можно закодировать числа от 00 до FF. На всякий случай напомню, что такое шестнадцатеричная система счисления. В двоичной системе счисления каждый разряд может принимать одно из двух значений: либо 0, либо 1; в десятичной системе каждый разряд числа может принимать одно из десяти значений: от 0 до 9; наконец, в шестнадцатеричной системе каждый разряд может принимать одно из шестнадцати значений: от 0 до 9 и дальше А, В, С, D, Е, F. То есть в шестнадцатеричной системе буквой F обозначается десятичное число 15, а шестнадцатеричное число 10 равно десятичному числу 16. В табл. 9.1 показаны первые семнадцать шестнадцатеричных чисел и их десятичные эквиваленты.
Таблица 9.1. Соответствие десятичных и шестнадцатеричных чисел
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0 1 2 3 4 5 6 7 8 9 A B C D E F 10
ПРИМЕЧАНИЕ
Для обозначения шестнадцатеричных чисел в начале такого числа, как правило, ставится префикс Ох, например, число OxF равно десятичному 15. В данной книге это соглашение будет применяться там, где это необходимо для ясности, однако читатель и без префикса может понять, что число FF — это шестнадцатеричное число, равное десятичному 255.
Таким образом, следует отметить, что для удобства людей все числа представляются в десятичной системе счисления, в то время как внутри компьютера они преобразуются в двоичную систему. Шестнадцатеричная система используется для упрощенного представления многоразрядных двоичных чисел. Большинство программ предполагают ввод чисел либо в десятичной, либо в шестнадцатеричной системе счисления. Выбор зависит от общепринятых стандартов, а также от автора-разработчика этой программы. В данной книге я стараюсь сделать так, чтобы читатель всегда знал, какая именно система используется для представления того или иного числа.
Базовые сведения об IP
Протокол IP (Internet Protocol), являющийся основным протоколом для передачи данных через Интернет, описывается в RFC 791. IP — это базовый протокол, который используется для передачи через сеть других протоколов, таких как TCP и UDP. Иными словами, каждый пакет IP является как бы конвертом, внутрь которого вкладывается пакет TCP, UDP или другого протокола. Заголовок пакета IP включает в себя всю информацию, необходимую для того, чтобы передать содержащиеся внутри пакета данные из одного места сети в другое место сети. IP является наиболее часто используемым в Интернете протоколом, однако этот протокол далеко не единственный. Наряду с IP через сетевые каналы могут передаваться пакеты протоколов RIP (Routing Information Protocol), BGP (Border Gateway Protocol), ICMP (Internet Control Message Protocol), GGP (Gateway-to-Gatewaye Protocol) и ARP (Address Resolution Protocol). За исключением ICMP и ARP, остальные протоколы являются протоколами маршрутизации. Данная книга не обсуждает подробно вопросы, связанные с маршрутизацией, поэтому связанные с этим протоколы обсуждаться не будут. Однако помимо IP чуть позже мы будем обсуждать служебные протоколы ICMP и ARP.
Каким же образом работает сеть? Когда некоторое приложение желает вступить в контакт с сервером, работающим на удаленном компьютере, происходит цепочка событий. Прежде всего приложение должно обладать IP-адресом удаленного компьютера. Этот IP-адрес либо известен приложению изначально, либо получается в результате обращения к службе доменных имен DNS (Domain Name System). Служба DNS используется для преобразования доменного имени удаленного компьютера в соответствующий IP-адрес. Помимо IP-адреса удаленной системы приложение, обращающееся к серверу, должно указать, какой протокол будет использоваться для связи (TCP или UDP), а также какой порт удаленной системы следует использовать для подключения к удаленной системе.
ССЫЛКА
Более подробно о портах и о том, как они работают, рассказывается в главе 10, посвященной общеизвестным службам.
Информация, которую следует передать серверу, упаковывается в пакет TCP или UDP. Этот пакет вкладывается внутрь пакета IP. Исходя из сведений, хранящихся во внутренней таблице маршрутизации, ядро передает полученный IP-пакет соответствующему сетевому интерфейсу (это может быть сетевая карта Ethernet, модем, карта Token Ring и т. п.). Для дальнейшей передачи данных через сетевой канал сетевому интерфейсу, возможно, потребуется еще раз упаковать IP-пакет. Например, если речь идет об Ethernet, сетевая карта должна определить местоположение получателя пакета в локальной сети. Получателем может быть либо обычный сетевой узел, либо шлюз, соединяющий локальную сеть с другой сетью, которую называют удаленной сетью. Сетевой узел, являющийся получателем пакета, идентифицируется при помощи специального адреса MAC. Адрес MAC — это уникальное число, однозначно идентифицирующее любую сетевую карту. Каждой сетевой карте Ethernet соответствует свой собственный уникальный адрес MAC. Этот адрес жестко записывается внутрь каждой сетевой карты ее производителем. Чтобы один сетевой узел смог узнать МАС-адрес другого сетевого узла, используется специальный сетевой протокол ARP (Address Resolution Protocol). Как только МАС-адрес получателя определен и установлена возможность связи с соответствующим удаленным сетевым узлом, пакет передается по каналу связи получателю.
При использовании Ethernet подразумевается, что любая передача данных осуществляется в рамках локальной сети и что любые две карты, входящие в эту сеть, могут быть напрямую соединены каналом передачи данных. Иными словами, любая карта Ethernet, являющаяся передатчиком, «видит» другую карту Ethernet, являющуюся приемником. Как уже было отмечено, для идентификации карт Ethernet используются МАС-адреса. Соответствие между известными системе IP-адресами и соответствующими им МАС-адресами хранится в специальной таблице. Содержимое этой таблицы формируется при помощи протокола ARP. Любым IP-адресам, которые не входят в состав локальной сети, ставится в соответствие МАС-адрес специального сетевого узла, который называется шлюзом. Иными словами, если сетевой интерфейс не знает, по какому МАС-адресу следует передать пакет с известным IP-адресом назначения, он передает его шлюзовому сетевому узлу, а шлюз в дальнейшем решает, что делать с этим пакетом. Таким образом, на самом нижнем уровне сетевых карт Ethernet передача данных осуществляется на основе адресов MAC. Когда пакет принимается по месту назначения, IP-адрес обрабатывается принимающей системой. Если на самом деле пакет адресован другой системе, он передается обратно сетевому интерфейсу для отсылки в сеть Ethernet. Если компьютер, принявший пакет, является шлюзом, пакет принимается через один сетевой интерфейс и отправляется через другой сетевой интерфейс. Система, принявшая пакет и не являющаяся шлюзом, может выполнить дальнейшую пересылку этого пакета в сеть, однако в реальности этого не происходит, так как по умолчанию в Linux дальнейшая пересылка принятых пакетов отключена. То есть не следует разыскивать шлюз, передавая в сеть пакеты случайным образом.
Заголовок пакета IP
Из всего ранее сказанного можно сделать вывод, что каждый пакет IP состоит из двух частей: заголовка и данных. Заголовок IP-пакета обладает жестко заданным форматом, который проверяется каждый раз в процессе обработки пакета. Процедура обработки пакета также предусматривает модификацию заголовка IP. Каждая система, через которую передается IP-пакет, проверяет заголовок этого пакета на целостность. Для этой цели используется контрольная сумма заголовка. Если фактическая контрольная сумма заголовка пакета не совпадает со значением, хранящимся в самом заголовке, система считает, что во время передачи данных через сетевой канал пакет был поврежден (как правило, это происходит из-за коллизий пакетов). В этом случае пакет отбрасывается, то есть игнорируется. Подобное может произойти и по другим причинам, например, в случае, если целевой сетевой узел недоступен, целевая сеть недоступна, пакет слишком большой, в связи с чем его нельзя передать через очередной сетевой сегмент, при этом для пакета установлен флаг DNF (Do Not Fragment — не фрагментировать) и т. п. Если пакет отбрасывается по какой-либо из причин за исключением искажения в процессе передачи, система, которая отбросила пакет, отправляет по адресу отправителя пакета (этот адрес указывается в составе заголовка пакета) сообщение ICMP с указанием причины, по которой пакет не может быть передан дальше.
Диаграмма заголовка IP демонстрируется на рис. 9.1. Обратите внимание, что заголовок разделен на несколько частей. Это сделано по двум причинам: во-первых, заголовок слишком длинный, и его сложно рассматривать как единую непрерывную последовательность битов (а именно в виде такой непрерывной последовательности он передается через линию связи); во-вторых, заголовок удобнее читать и о нем удобнее рассказывать, если он разделен на шесть четырехбайтовых разделов.
ПРИМЕЧАНИЕ
Разделение заголовка на 32-битные сегменты выполнено намеренно. Дело в том, что системы, основанные на процессоре Pentium, за один раз способны передать по основной шине одно 32-битное число. Такое сочетание из 32 битов называется машинным словом. Таким образом, системы, основанные на Pentium, используют слово длиной четыре байта. В отличие от них более старые системы, основанные на процессорах 286, использовали слово длиной в два байта. Двухбайтное слово использовалось также и в системах, основанных на процессорах 386SX, несмотря на то, что внутри самих процессоров 386SX обработка данных осуществлялась с использованием четырехбайтных слов.
Можно заметить, что длина почти всех полей заголовка кратна четырем битам. То есть в заголовок входят поля длиной 4,8, 16 и 32 бита. Это сделано намеренно, так как фактически все системы работают с порциями данных, кратными байту, а байт, как уже было сказано, равен восьми битам. Таким образом, если длина поля кратна четырем битам, его удобнее обрабатывать. Исключениями являются поле флагов и поле смещения фрагмента. Длина этих полей по отдельности не кратна четырем битам, однако вместе они составляют последовательность из 16 бит, то есть из двух байтов. В данной главе в основном мы будем обсуждать поля адреса источника и адреса приемника пакета. Однако в дальнейшем, в особенности в главе 16, нам придется обратить внимание и на другие поля заголовка IP.
ПРИМЕЧАНИЕ
Как видно, заголовок пакета содержит в себе большой объем информации, однако наиболее важными сведениями, хранящимися в заголовке, являются сведения о том, откуда был послан пакет (адрес источника) и кому он адресован (адрес приемника). В конце концов, именно для маршрутизации сообщений и был придуман протокол IP.
Пакет данных IP
Сразу же за заголовком IP в пакете IP размещается раздел данных. Этот раздел часто называют полезной нагрузкой. В качестве полезной нагрузки могут выступать абсолютно любые данные, однако чаще всего пакет IP содержит в себе либо пакет TCP, либо пакет UDP. Реже в качестве полезной нагрузки выступает пакет NetBIOS или другой пакет IP. Если внутри пакета IP содержится другой пакет IP (такую комбинацию часто называют IP-in-IP, то есть IP внутри IP), то говорят, что осуществляется туннельная передача данных. Чтобы создать WAN (Wide Area Network), то есть глобальную сеть, немаршрутизируемые пакеты IP передаются внутри маршрутизируемых пакетов IP.
Как было отмечено, чаще всего в качестве полезной нагрузки используются пакеты протоколов TCP и UDP. Эти два протокола сильно отличаются друг от друга. Первый протокол, TCP (Transport Control Protocol), предусматривает создание между двумя системами соединения. Соединение создается по обоюдному согласию систем, затем через это соединение осуществляется передача данных (произвольное количество пакетов), затем соединение разрывается. Чтобы установить соединение, системы обмениваются несколькими служебными пакетами. TCP используется в случае, если важно обеспечить целостность данных, например, при копировании файлов по протоколу FTP. Напротив, протокол UDP (User Datagram Protocol) не использует соединения. По протоколу UDP можно передать на удаленную систему один или несколько пакетов, однако при этом удаленная система никак не отвечает отправителю пакетов, поэтому система-отправитель не может узнать, достигли ли отосланные пакеты адресата или нет. UDP используется в случае, когда скорость важнее, чем целостность данных. Для передачи голоса через канал IP используется UDP, так как даже если один или два пакета из общего потока данных будут утеряны или отброшены, человек, находящийся на системе-приемнике, все равно сможет понять, о чем идет речь.
Если вы взглянете внутрь файла /etc/services, вы увидите, что для большинства служб перечислены как порт UDP, так и порт TCP. Несмотря на то, что службе соответствует два порта (TCP и UDP), большинство служб используют только один из них. В частности, протокол UDP используется такими службами, как SNMP (Simple Network Management Protocol), TFTP (Trivial File transfer Protocol), RLP (Resource Location Protocol) и некоторыми другими. Протокол TCP используется такими службами, как FTP (File Transfer Protocol), telnet, SMTP (Simple Mail Transport protocol) и многими другими. Служба доменных имен DNS (Domain Name System) использует как TCP, так и UDP. Если запрос DNS небольшой, ответ будет упакован в виде одного пакета UDP. Если же речь идет о крупном запросе, например о передаче содержимого зоны (zone transfer), для этой цели используется TCP.
Как отмечалось ранее, протокол TCP устанавливает соединение между двумя системами. Такое соединение гарантирует целостность передаваемых данных. Соединение формируется при помощи трехэтапной процедуры «рукопожатия» между двумя системами.
- Клиент вступает в контакт с сервером (серверным процессом) и запрашивает соединение (бит SYN установлен).
- Сервер, находящийся в очереди ожидания, отправляет обратно клиенту пакет, в котором установлены биты SYN и АСК. Сервер по-прежнему находится в очереди ожидания, так как он ожидает поступления ответа от клиента. Однако при этом сервер не отвечает на какие-либо другие запросы, за исключением сообщения от изначально вступившего с ним в контакт клиента.
- В ответ на пакет, полученный от сервера, клиент отправляет серверу пакет, в котором установлен бит АСК. Когда сервер получает этот подтверждающий пакет, он покидает очередь ожидания, освобождая место для другого серверного процесса, который продолжает ожидание поступления других соединений. Соединение считается установленным. После этого изначальный сервер обменивается данными только с тем клиентом, с которым он вступил в контакт.
Данная последовательность действий — это достаточно упрощенный взгляд на то, каким образом устанавливается соединение TCP. В данном простом описании опущены такие детали, как использование порядковых номеров пакетов (для каждого последующего пакета порядковый номер становится больше на единицу) для слежения за обменом данных через соединение, а также соглашение между двумя системами о случайно выбранном номере порта, через который будет осуществляться соединение. Сервер передает данные через порт с другим номером, и клиент подключается к этому порту в ожидании ответов.
ССЫЛКА
Более подробно о портах и службах рассказывается в главе 10.
В процессе установки соединения может случиться очень многое. Пакеты могут потеряться или исказиться и в связи с этим они могут быть отброшены; пакеты могут быть отброшены также потому, что они слишком большие; случайно выбранный сервером порт может оказаться занятым и т. п. Сервер будет ждать в течение определенного времени, а затем попробует передать данные снова. Со временем соединение будет продолжено, а после завершения обмена данными — завершено.
ССЫЛКА
Одна из возможных атак называется атака SYN DoS. Эта атака основана на том обстоятельстве, что сервер ожидает в очереди до тех пор, пока не получит ответ от клиента. Более подробно об этой атаке рассказывается в главе 13.