Стек (сетевые коммутаторы). Мониторинг и настройка сетевого стека Linux: получение данных

Большинство протоколов (все из перечисленных, кроме SNA) одинаковы на физическом и на канальном уровне, но на других уровнях как правило используют разные протоколы.

Литература

  • В. Г. Олифер, Н. А. Олифер, Компьютерные сети. Принципы, технологии, протоколы., СПб.: Питер, 2002. - 672 стр. ISBN 5-8046-0133-4

Wikimedia Foundation . 2010 .

Смотреть что такое "Стек протоколов" в других словарях:

    Собирательное название для сетевых протоколов разных уровней, используемых в сетях. Слово стек (англ. stack, стопка) подразумевает, что протокол TCP работает поверх IP (англ. Transmission Control Protocol/Internet Protocol) Словарь бизнес… … Словарь бизнес-терминов

    - … Википедия

    Стек структура данных с методом доступа к элементам LIFO. Стек (трость) короткая тонкая трость с ременной петлей на конце. Стек (азартные игры) в казино, игорном бизнесе стопка из 20 фишек. Стек (компания) крупная российская телекоммуникационная… … Википедия

    Необходимо проверить качество перевода и привести статью в соответствие со стилистическими правилами Википедии. Вы можете помочь улучшить эту статью, исправив в ней ошибки. Оригинал на англ … Википедия

    Простое представление стека У этого термина существуют и другие значения, см. Стек (значения). Стек (англ. stack стоп … Википедия

    Таблица сетевых протоколов по функциональному назначению содержит список всех существующих (а также существовавших в прошлом) протоколов, имеющих отношение к компьютерным сетям (сетевые протоколы). Сетевой протокол набор правил,… … Википедия

    набор протоколов - пакет протоколов стек протоколов комплект протоколов — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы пакет протоколовстек протоколовкомплект… … Справочник технического переводчика

    Стек протоколов TCP/IP (англ. Transmission Control Protocol/Internet Protocol) собирательное название для сетевых протоколов разных уровней, используемых в сетях. Слово «стек» (англ. stack, стопка) подразумевает, что протокол IP. В модели OSI… … Википедия

    Стек протоколов ОКС7 Уровень Протоколы Пользовательский INAP, MAP, IS 41, ... TCAP, CAP, ISUP, ... Сетевой MTP3 + SCCP Канальный MTP2 Физический MTP1 Система сигнализации N7 (ОКС 7) это набор сигнальных телефонных протоколов, используемых для… … Википедия

Книги

  • Стек протоколов ОКС 7. Подсистема SCCP: справочник , Гольдштейн Б.С., Ехриель И.М., Рерле Р.Д.. 320 стр. Справочник по подсистеме SCCP (Signalling Connection Control Part) стека протоколов общеканальной сигнализации 7. Рассматриваются общие принципы и понятия, процедуры, форматы…
  • Стек протоколов ОКС 7. Подсистема ISUP. Справочник , Б. С. Гольдштейн, И. М. Ехриель, Р. Д. Рерле. Справочник по подсистеме ISUP (ISDN User Part) стека протоколов общеканальной сигнализации 7. Рассматриваются общие принципы и понятия, процедуры, форматы сообщений и параметров, средства и…

Лекция №3

Стек протоколов TCP / IP

План лекции

Стек TCP/IP.

История создания стека TCP/IP.

Модель OSI.

Структура TCP/IP.

Документы RFC.

Обзор основных протоколов.

Утилиты диагностики TCP/IP.

Контрольные вопросы.

Стек TCP/IP

Стек TCP/IP – это набор иерархически упорядоченных сетевых протоколов. Название стек получил по двум важнейшим протоколам – TCP (Transmission Control Protocol) и IP (Internet Protocol). Помимо них в стек входят ещё несколько десятков различных протоколов. В настоящее время протоколы TCP/IP являются основными для Интернета, а также для большинства корпоративных и локальных сетей.

4. Транспортный уровень (transport layer) решает задачу надежной передачи сообщений в составной сети с помощью подтверждения доставки и повторной отправки пакетов. Этот уровень и все следующие реализуются программно.

5. Сеансовый уровень (session layer) позволяет запоминать информацию о текущем состоянии сеанса связи и в случае разрыва соединения возобновлять сеанс с этого состояния.

6. Уровень представления (presentation layer) обеспечивает преобразование передаваемой информации из одной кодировки в другую (например, из ASCII в EBCDIC).

7. Прикладной уровень (application layer) реализует интерфейс между остальными уровнями модели и пользовательскими приложениями.

Структура TCP / IP

В основе структуры TCP/IP лежит не модель OSI, а собственная модель, называемая DARPA (Defense ARPA – новое название Агентства по перспективным исследовательским проектам) или DoD (Department of Defense – Министерство обороны США). В этой модели всего четыре уровня. Соответствие модели OSI модели DARPA, а также основным протоколам стека TCP/IP показано на рис. 2.2.

DIV_ADBLOCK264">

3) черновой стандарт (Draft Standard) – документ становится черновым стандартом, если не менее двух независимых разработчиков реализовали и успешно применили предлагаемые спецификации. На этом этапе ещё допускаются незначительные исправления и усовершенствования;

4) стандарт Интернета (Internet Standard) – наивысший этап утверждения стандарта, спецификации документа получили широкое распространение и хорошо зарекомендовали себя на практике. Список стандартов Интернета приведен в RFC 3700. Из тысяч RFC только несколько десятков являются документами в статусе «стандарт Интернета».

Кроме стандартов документами RFC могут быть также описания новых сетевых концепций и идей, руководства, результаты экспериментальных исследований, представленных для информации и т. д. Таким документам RFC может быть присвоен один из следующих статусов:

экспериментальный (Experimental) – документ, содержащий сведения о научных исследованиях и разработках, которые могут заинтересовать членов ISOC;

информационный (Informational) – документ, опубликованный для предоставления информации и не требующий одобрения сообщества ISOC;

лучший современный опыт (Best Current Practice) – документ, предназначенный для передачи опыта конкретных разработок, например реализаций протоколов.

Статус указывается в заголовке документа RFC после слова Category (Категория). Для документов в статусе стандартов (Proposed Standard, Draft Standard, Internet Standard) указывается название Standards Track , так как уровень готовности может меняться.

Номера RFC присваиваются последовательно и никогда не выдаются повторно. Первоначальный вариант RFC никогда не обновляется. Обновленная версия публикуется под новым номером. Устаревший и замененный документ RFC получает статус исторический (Historic).

Все существующие на сегодня документы RFC можно посмотреть, например, на сайте www. rfc-editor. org . В августе 2007 года их насчитывалось более 5000. Документы RFC, упоминаемые в этом курсе, приведены в Приложении I.

Обзор основных протоколов

Протокол IP (Internet Protocol) – это основной протокол сетевого уровня, отвечающий за адресацию в составных сетях и передачу пакета между сетями. Протокол IP является дейтаграммным протоколом, т. е. не гарантирует доставку пакетов до узла назначения. Обеспечением гарантий занимается протокол транспортного уровня TCP.

Протоколы RIP (Routing Information Protocol – протокол маршрутной информации) и OSPF (Open Shortest Path First – « первыми открываются кратчайшие маршруты») – протоколы маршрутизации в IP-сетях.

Протокол ICMP (Internet Control Message Protocol – протокол управляющих сообщений в составных сетях) предназначен для обмена информацией об ошибках между маршрутизаторами сети и узлом-источником пакета. С помощью специальных пакетов сообщает о невозможности доставки пакета, о продолжительности сборки пакета из фрагментов, об аномальных величинах параметров, об изменении маршрута пересылки и типа обслуживания, о состоянии системы и т. п.

Протокол ARP (Address Resolution Protocol – протокол преобразования адресов) преобразует IP-адреса в аппаратные адреса локальных сетей. Обратное преобразование осуществляется с помощью протокола RAPR (Reverse ARP).

TCP (Transmission Control Protocol – протокол управления передачей) обеспечивает надежную передачу сообщений между удаленными узлами сети за счет образования логических соединений. TCP позволяет без ошибок доставить сформированный на одном из компьютеров поток байт на любой другой компьютер, входящий в составную сеть. TCP делит поток байт на части – сегменты и передает их сетевому уровню. После того как эти сегменты будут доставлены в пункт назначения, протокол TCP снова соберет их в непрерывный поток байт.

UDP (User Datagram Protocol – протокол дейтаграмм пользователя) обеспечивает передачу данных дейтаграммным способом.

HTTP (HyperText Transfer Protocol – протокол передачи гипертекста) – протокол доставки web-документов, основной протокол службы WWW.

FTP (File Transfer Protocol – протокол передачи файлов) – протокол для пересылки информации, хранящейся в файлах.

POP3 (Post Office Protocol version 3 – протокол почтового офиса) и SMTP (Simple Mail Transfer Protocol – простой протокол пересылки почты) – протоколы для доставки входящей электронной почты (POP3) и отправки исходящей (SMTP).

Telnet – протокол эмуляции терминала1, позволяющий пользователю подключаться к другим удалённым станциям и работать с ними со своей машины, как если бы она была их удалённым терминалом.

SNMP (Simple Network Management Protocol – простой протокол управления сетью) предназначен для диагностики работоспособности различных устройств сети.

1 Терминал – это сочетание устройства ввода и устройства вывода, например клавиатура и дисплей.

Утилиты диагностики TCP / IP

В состав операционной системы Windows Server 2003 входит ряд утилит (небольших программ), предназначенных для диагностики функционирования стека TCP/IP. Каждый системный администратор должен знать эти утилиты и уметь применять их на практике.

Информацию о любой утилите можно вывести, набрав в командной строке имя утилиты с ключом «/?», например: IPconfig /?

IPconfig

Утилита предназначена, во-первых, для вывода информации о конфигурации стека TCP/IP, во-вторых, для выполнения некоторых действий по настройке стека.

При вводе названия утилиты в командной строке без параметров на экране отобразится информация об основных настройках TCP/IP (эти настройки рассматриваются в следующих лекциях):

– суффикс DNS (Connection-specific DNS Suffix);

– IP-адрес (IP Address);

– маска подсети (Subnet Mask);

– шлюз по умолчанию (Default Gateway).

Приведем основные ключи утилиты:

/ all – отображение полной информации о настройке стека TCP/IP на данном компьютере. Следует отметить, что при наличии нескольких сетевых адаптеров выводятся данные по каждому адаптеру отдельно. Наиболее важные сведения кроме представленных выше – физический адрес (МАС-адрес) сетевого адаптера (Physical Address) и наличие разрешения DHCP (DHCP Enabled).

/ release – освобождение IP-адреса (имеет смысл, если DHCP разрешен).

/ renew – обновление конфигурации TCP/IP (обычно выполняется, если DHCP разрешен).

/ displaydns – вывод на экран кэша имен DNS.

/ flushdns – очистка кэша имен DNS.

/ registerdns – обновление аренды DHCP и перерегистрация доменного имени в базе данных службы DNS.

Основная цель этой популярной утилиты – выяснение возможности установления соединения с удаленным узлом. Кроме того, утилита может обратиться к удаленному компьютеру по доменному имени, чтобы проверить способность преобразования символьного доменного имени в IP-адрес.

Принцип работы: утилита отправляет на удаленный узел несколько пакетов (число пакетов определяется ключом n , по умолчанию четыре) по протоколу ICMP. Такие пакеты называются эхо-пакетами, т. е. требуют

ответа. Если удаленный узел доступен, он отвечает на каждый эхо-пакет своим пакетом, а утилита измеряет интервал между отправкой эхо-пакета и приходом ответа.

Нужно отметить, что отсутствие ответа может быть связано не с физической недоступностью удаленного компьютера, а с тем, что на нем установлено программное обеспечение, запрещающее отправку ответов на эхо-пакеты (брандмауэр – firewall).

Основные ключи:

t – пакеты отправляются до тех пор, пока пользователь не нажмет комбинацию CTRL+C.

a – определение доменного имени по IP-адресу.

l <размер> – максимальный размер пакета (по умолчанию 32 байта).

w <таймаут> – задание времени ожидания ответа в миллисекундах (по умолчанию 1000 миллисекунд = 1 секунда).

Название утилиты произошло от Trace Route – отслеживание маршрута. Утилита позволяет решить следующие задачи:

– проследить путь прохождения пакета от данного компьютера до удаленного узла (отображаются промежуточные узлы-маршрутизаторы);

– выявить участки задержки пакетов;

– выявить места потери пакетов.

Принцип работы: утилита отправляет эхо-пакеты на заданный удаленный узел. Отличие между эхо-пакетами заключается в параметре, который называется «время жизни» (TTL – Time To Live). Этот параметр обозначает количество маршрутизаторов (процесс перехода пакета через маршрутизатор называется hop – прыжок), которое может пройти пакет, прежде чем попадет на заданный узел. Каждый маршрутизатор уменьшает время жизни на единицу. Если на каком-то маршрутизаторе TTL станет равным нулю, тот отбрасывает пакет и отправляет служебное сообщение на узел-источник.

Первый эхо-пакет посылается с временем жизни, равным единице. Первый маршрутизатор отбрасывает эхо-пакет и отправляет служебное сообщение, в котором содержится информации об имени и адресе маршрутизатора. Следующий эхо-пакет имеет TTL = 2 и отбрасывается уже на втором маршрутизаторе. Таким образом, эхо-пакеты отправляются с увеличением времени жизни на единицу, пока не придет ответ от заданного удаленного узла или время ожидания не будет превышено.

Основные ключи:

/ h < maximum_ hops> – максимальное число хопов (маршрутизаторов) при поиске узла.

/ w <таймаут> – задание времени ожидания ответа в миллисекундах.

Утилита отображает статистическую информацию по протоколам IP, TCP, UDP и ICMP, а также позволяет отслеживать сетевые соединения. Основные ключи:

/ a – список всех подключений и прослушивающихся портов.

/e – статистика для Ethernet.

/ n – список всех подключений и портов в числовом формате.

/ s – статистика для перечисленных четырех протоколов.

< interval> – интервал в секундах, через который утилита выводит требуемую информацию (для прекращения вывода – CTRL+C).

Эта утилита работает с протоколами преобразования IP-адресов в МАС-адреса и обратно ARP и RARP. С её помощью можно выводить на экран таблицу соответствия IP-адресов и МАС-адресов (ARP-кэш), добавлять и удалять записи в ней.

Основные ключи:

/ a – отображение таблицы ARP или, если указан IP-адрес, запись только для этого адреса.

/ s – добавление записи в таблицу.

/ d – удаление записи из таблицы.

Hostname

Это самая простая утилита – она выводит на экран имя компьютера.

Резюме

Стек протоколов TCP/IP – это самый распространенный на сегодняшний день набор иерархически упорядоченных протоколов, применяемый как в локальных, так и в глобальных сетях. Важнейшие протоколы стека – IP, TCP и UDP – появились в начале 80-х годов в рамках проекта ARPANET, который являлся предшественником Интернета. В 90-е годы по мере развития Интернета роль стека TCP/IP сильно возросла.

Стек TCP/IP был разработан на основе модели сетевого взаимодействия DARPA, хотя между уровнями модели DARPA, международной семиуровневой моделью OSI и стеком TCP/IP может быть установлено соответствие. Стандарты протоколов TCP/IP отражены в свободно доступных документах RFC.

Основными протоколами стека являются IP, TCP, UDP, ICMP, ARP, протоколы маршрутизации RIP и OSPF, протоколы прикладного уровня HTTP, FTP, POP3, SMTP, telnet, SNMP.

Для диагностики и управления стеком TCP/IP в операционной системе Microsoft Windows Server 2003 существуют специальные утилиты – IPconfig, ping, tracert, netstat, arp, hostname и др.

Контрольные вопросы

1. Объясните, что означают свойства «платформонезависимость» и «открытость» применительно к стеку протоколов TCP/IP.

2. Что такое ARPANET?

3. Поясните, для чего предназначена модель OSI? Где она применяется?

4. Назовите функции канального, сетевого и транспортного уровней модели OSI.

5. Чем отличается модель DARPA (DoD) от модели OSI? Как вы думаете, почему?

6. Что такое RFC? В файлах какого формата издаются RFC?

7. Для чего используется протокол ICMP? Протокол ARP?

8. Поясните принцип работы утилиты ping.

9. Поясните принцип работы утилиты tracert.

В этой статье будут рассказаны основы модели TCP/IP. Для лучшего понимания описаны основные протоколы и службы. Главное - не торопиться и стараться понимать каждую вещь поэтапно. Все они взаимосвязаны и без понимания одной, трудно будет понять другую. Здесь скомпонована весьма поверхностная информация, так что эту статью смело можно назвать «стеком протоколов TCP/IP для чайников». Однако, многие вещи здесь не так трудны для понимания, как может показаться на первый взгляд.

TCP/IP

Стек TCP/IP - сетевая модель передачи данных в сети, она определяет порядок взаимодействия устройств. Данные поступают на канальный уровень и обрабатываются поочередно каждым уровнем выше. Стек представлен в виде абстракции, которая объясняет принципы обработки и приема данных.

Стек протоколов сети TCP/IP имеет 4 уровня:

  1. Канальный (Link).
  2. Сетевой (Internet).
  3. Транспортный (Transport).
  4. Прикладной (Application).

Прикладной уровень

Прикладной уровень обеспечивает возможность взаимодействия между приложением и другими уровнями стека протоколов, анализирует и преобразовывает поступающую информацию в формат, подходящий для программного обеспечения. Является ближайшим к пользователю и взаимодействует с ним напрямую.

  • HTTP;
  • SMTP;

Каждый протокол определяет собственный порядок и принципы работы с данными.

HTTP (HyperText Transfer Protocol) предназначен для передачи данных. По нему отправляются, например, документы в формате HTML, которые служат основой веб-страницы. Упрощенно схема работы представляется как «клиент - сервер». Клиент отправляет запрос, сервер его принимает, должным образом обрабатывает и возвращает конечный результат.

Служит стандартом передачи файлов в сети. Клиент посылает запрос на некий файл, сервер ищет этот файл в своей базе и при успешном обнаружении отправляет его как ответ.

Используется для передачи электронной почты. SMTP-операция включает в себя три последовательных шага:

  1. Определение адреса отправителя. Это необходимо для возвращения писем.
  2. Определение получателя. Этот шаг может повторяться некоторое количество раз при указании нескольких адресатов.
  3. Определение содержимого сообщения и отправка. В качестве служебной информации передаются данные о типе сообщения. Если сервер подтверждает готовность принять пакет, то совершается сама транзакция.

Заголовок (Header)

В заголовке содержатся служебные данные. Важно понимать, что они предназначаются только для конкретного уровня. Это значит, что как только пакет отправится к получателю, то будет обработан там по такой же модели, но в обратном порядке. Вложенный заголовок будет нести специальную информацию, которая может быть обработана только определенным образом.

Например, заголовок, вложенный на транспортном уровне, на другой стороне может быть обработан только транспортным уровнем. Другие просто его проигнорируют.

Транспортный уровень

На транспортном уровне полученная информация обрабатывается как единый блок, вне зависимости от содержимого. Полученные сообщения делятся на сегменты, к ним добавляется заголовок, и все это отправляется ниже.

Протоколы передачи данных:

Самый распространенный протокол. Он отвечает за гарантированную передачу данных. При отправке пакетов контролируется их контрольная сумма, процесс транзакции. Это значит, что информация дойдет «в целости и сохранности» независимо от условий.

UDP (User Datagram Protocol) - второй по популярности протокол. Он также отвечает за передачу данных. Отличительное свойство кроется в его простоте. Пакеты просто отправляются, не создавая особенной связи.

TCP или UDP?

У каждого из этих протоколов есть своя область применения. Она логически обусловлена особенностями работы.

Основное преимущество UDP заключается в скорости передачи. TCP является сложным протоколом с множеством проверок, в то время как UDP представляется более упрощенным, а значит, и более быстрым.

Недостаток кроется в простоте. Ввиду отсутствия проверок не гарантируется целостность данных. Таким образом, информация просто отправляется, а все проверки и подобные манипуляции остаются за приложением.

UDP используется, например, для просмотра видео. Для видеофайла не критична потеря небольшого количества сегментов, в то время как скорость загрузки - важнейший фактор.

Однако если необходимо отправить пароли или реквизиты банковской карты, то необходимость использования TCP очевидна. Потеря даже самой мизерной части данных может повлечь за собой катастрофические последствия. Скорость в этом случае не так важна, как безопасность.

Сетевой уровень

Сетевой уровень из полученной информации образует пакеты и добавляет заголовок. Наиболее важной частью данных являются IP и MAC-адреса отправителей и получателей.

IP-адрес (Internet Protocol address) - логический адрес устройства. Содержит информацию о местоположении устройства в сети. Пример записи: .

MAC-адрес (Media Access Control address) - физический адрес устройства. Используется для идентификации. Присваивается сетевому оборудованию на этапе изготовления. Представлен как шестибайтный номер. Например: .

Сетевой уровень отвечает за:

  • Определение маршрутов доставки.
  • Передачу пакетов между сетями.
  • Присвоение уникальных адресов.

Маршрутизаторы - устройства сетевого уровня. Они прокладывают путь между компьютером и сервером на основе полученных данных.

Самый популярный протокол этого уровня - IP.

IP (Internet Protocol) - интернет-протокол, предназначенный для адресации в сети. Используется для построения маршрутов, по которым происходит обмен пакетами. Не обладает никакими средствами проверки и подтверждения целостности. Для обеспечения гарантий доставки используется TCP, который использует IP в качестве транспортного протокола. Понимание принципов этой транзакции во многом объясняет основу того, как работает стек протоколов TCP/IP.

Виды IP-адресов

В сетях используются два вида IP-адресов:

  1. Публичные.
  2. Приватные.

Публичные (Public) используются в Интернете. Главное правило - абсолютная уникальность. Пример их использования - маршрутизаторы, каждый из которых имеет свой IP-адрес для взаимодействия с сетью Интернет. Такой адрес называется публичным.

Приватные (Private) не используются в Интернете. В глобальной сети такие адреса не являются уникальными. Пример - локальная сеть. Каждому устройству присваивается уникальный в пределах данной сети IP-адрес.

Взаимодействие с сетью Интернет ведется через маршрутизатор, который, как уже было сказано выше, имеет свой публичный IP-адрес. Таким образом, все компьютеры, подключенные к маршрутизатору, представляются в сети Интернет от имени одного публичного IP-адреса.

IPv4

Самая распространенная версия интернет-протокола. Предшествует IPv6. Формат записи - четыре восьмибитных числа, разделенные точками. Через знак дроби указывается маска подсети. Длина адреса - 32 бита. В подавляющем большинстве случаев, когда речь идет об IP-адресе, имеется в виду именно IPv4.

Формат записи: .

IPv6

Эта версия предназначается для решения проблем предыдущей версией. Длина адреса - 128 бит.

Основная проблема, которую решает IPv6 - это исчерпание адресов IPv4. Предпосылки начали проявляться уже в начале 80-х годов. Несмотря на то, что эта проблема вступила в острую стадию уже в 2007-2009 годах, внедрение IPv6 очень медленно «набирает обороты».

Главное преимущество IPv6 - более быстрое интернет-соединение. Это происходит из-за того, что для этой версии протокола не требуется трансляции адресов. Выполняется простая маршрутизация. Это является менее затратным и, следовательно, доступ к интернет-ресурсам предоставляется быстрее, чем в IPv4.

Пример записи: .

Существует три типа IPv6-адресов:

  1. Unicast.
  2. Anycast.
  3. Multicast.

Unicast - тип одноадресных IPv6. При отправке пакет достигает только интерфейса, расположенного на соответствующем адресе.

Anycast относится к групповым IPv6-адресам. Отправленный пакет попадет в ближайший сетевой интерфейс. Используется только маршрутизаторами.

Multicast являются многоадресными. Это значит, что отправленный пакет достигнет всех интерфейсов, находящихся группе мультивещания. В отличие от broadcast, который является «вещанием для всех», multicast вещает лишь определенной группе.

Маска подсети

Маска подсети выявляет из IP-адреса подсеть и номер хоста.

Например, IP-адрес имеет маску . В таком случае формат записи будет выглядеть так . Число «24» - это количество бит в маске. Восемь бит равняется одному октету, который также может называться байтом.

Если подробнее, то маску подсети можно представить в двоичной системе счисления таким образом: . В ней имеется четыре октета, и запись состоит из «1» и «0». Если сложить количество единиц, то получим в сумме «24». К счастью, считать по единице не обязательно, ведь в одном октете - 8 значений. Видим, что три из них заполнены единицами, складываем и получаем «24».

Если говорить именно о маске подсети, то в двоичном представлении она имеет в одном октете либо единицы, либо нули. При этом последовательность такова, что сначала идут байты с единицами, а только потом с нулями.

Рассмотрим небольшой пример. Есть IP-адрес и маска подсети . Считаем и записываем: . Теперь сопоставляем маску с IP-адресом. Те октеты маски, в которых все значения равны единице (255) оставляют соответствующие им октеты в IP-адресе без изменения. Если же в значении нули (0), то октеты в IP-адресе также становятся нулями. Таким образом, в значении адреса подсети получаем .

Подсеть и хост

Подсеть отвечает за логическое разделение. По сути, это устройства, использующие одну локальную сеть. Определяется диапазоном IP-адресов.

Хост - это адрес сетевого интерфейса (сетевой карты). Определяется из IP-адреса с помощью маски. Например: . Так как первые три октета - подсеть, то остается . Это и есть номер хоста.

Диапазон адресов хоста - от 0 до 255. Хост под номером «0» является, собственно, адресом самой подсети. А хост под номером «255» является широковещательным.

Адресация

Для адресации в стеке протоколов TCP/IP используются три типа адресов:

  1. Локальные.
  2. Сетевые.
  3. Доменные имена.

Локальными называются MAC-адреса. Они используются для адресации в таких технологиях локальной сети как, например, Ethernet. В контексте TCP/IP слово «локальные» означает, что они действуют лишь в пределах подсети.

Сетевым адресом в стеке протоколов TCP/IP является IP-адрес. При отправке файла из его заголовка считывается адрес получателя. С его помощью маршрутизатор узнает номер хоста и подсеть и, основываясь на этой информации, прокладывает маршрут к конечному узлу.

Доменные имена - это удобочитаемые адреса веб-сайтов в Интернете. Веб-сервера в сети Интернет доступны по публичному IP-адресу. Он успешно обрабатывается компьютерами, однако для людей представляется слишком неудобным. Для того чтобы избежать подобных сложностей, используются доменные имена, которые состоят из областей, называемых «доменами». Они располагаются в порядке строгой иерархии, от верхнего уровня к нижнему.

Домен первого уровня представляет конкретную информацию. Общие (.org, .net) не ограничены какими-либо строгими границами. Обратная ситуация - с локальными (.us, .ru). Они, как правило, привязаны территориально.

Домены низших уровней - это все остальное. Он может быть любого размера и содержать любое количество значений.

Например, "www.test.quiz.sg" - корректное доменное имя, где «sg» - локальный домен первого (верхнего) уровня, «quiz.sg» - домен второго уровня, «test.quiz.sg» - домен третьего уровня. Доменные имена также могут называться DNS-именами.

DNS (Domain Name System) устанавливает соответствие между доменными именами и публичным IP-адресом. При наборе доменного имени в строке браузера DNS обнаружит соответствующий IP-адрес и сообщит устройству. Устройство обработает этот и вернет его в виде веб-страницы.

Канальный уровень

На канальном уровне определяется взаимосвязь между устройством и физической средой передачи, добавляется заголовок. Отвечает за кодировку данных и подготовку фреймов для передачи по физической среде. На этом уровне работают сетевые коммутаторы.

Самые распространенные протоколы:

  1. Ethernet.
  2. WLAN.

Ethernet - наиболее распространенная технология проводных локальных сетей.

WLAN - локальная сеть на основе беспроводных технологий. Взаимодействие устройств происходит без физических кабельных соединений. Пример самого распространенного метода - Wi-Fi.

Настройка TCP/IP для использования статического IPv4-адреса

Статический IPv4-адрес назначается напрямую в настройках устройства или автоматически при подключении к сети и является постоянным.

Для настройки стека протоколов TCP/IP на использование постоянного IPv4-адреса необходимо ввести в консоль команду ipconfig/all и найти следующие данные.

Настройка TCP/IP для использования динамического IPv4-адреса

Динамический IPv4-адрес используется какое-то время, сдается в аренду, после чего меняется. Присваивается устройству автоматически при подключении к сети.

Чтобы настроить стек протоколов TCP/IP на использование непостоянного IP-адреса необходимо зайти в свойства нужного соединения, открыть свойства IPv4 и поставить отметки так, как указано.

Способы передачи данных

Данные передаются через физическую среду тремя способами:

  • Simplex.
  • Half-duplex.
  • Full Duplex.

Simplex - это односторонняя связь. Передача ведется только одним устройством, в то время как другое только принимает сигнал. Можно сказать, что информация транслируется только в одном направлении.

Примеры симплексной связи:

  • Телевещание.
  • Сигнал от спутников GPS.

Half-duplex - это двусторонняя связь. Однако только один узел может передавать сигнал в определенный момент времени. При такой связи два устройства не могут одновременно использовать один канал. Полноценная двусторонняя связь может быть невозможна физически или приводить к коллизиям. Говорится, что они конфликтуют за среду передачи. Этот режим применяется при использовании коаксиального кабеля.

Пример полудуплексной связи - общение по рации на одной частоте.

Full Duplex - полноценная двусторонняя связь. Устройства могут одновременно транслировать сигнал и производить прием. Они не конфликтуют за среду передачи. Этот режим применяется при использовании технологии Fast Ethernet и соединении с помощью витой пары.

Пример - общение по телефону через мобильную сеть.

TCP/IP vs OSI

Модель OSI определяет принципы передачи данных. Уровни стека протоколов TCP/IP прямо соответствуют этой модели. В отличие от четырехуровневого TCP/IP имеет 7 уровней:

  1. Физический (Physical).
  2. Канальный (Data Link).
  3. Сетевой (Network).
  4. Транспортный (Transport).
  5. Сеансовый (Session).
  6. Представительский (Presentation).
  7. Прикладной (Application).

В данный момент не стоит сильно углубляться в эту модель, но необходимо хотя бы поверхностное понимание.

Прикладной уровень в модели TCP/IP соответствует трем верхним уровням OSI. Все они работают с приложениями, поэтому можно отчетливо проследить логику такого объединения. Такая обобщенная структура стека протоколов TCP/IP способствует облегченному пониманию абстракции.

Транспортный уровень остается без изменений. Выполняет одинаковые функции.

Сетевой уровень также не изменен. Выполняет ровно те же задачи.

Канальный уровень в TCP/IP соответствует двум последним уровням OSI. Канальный уровень устанавливает протоколы передачи данных через физическую среду.

Физический представляет собой собственно физическую связь - электрические сигналы, коннекторы и т.п. В стеке протоколов TCP/IP было решено объединить эти два уровня в один, так как они оба работают с физической средой.

Стеки протоколов

Стек протоколов - это иерархически организованный набор сетевых протоколов различных уровней, достаточный для организации и обеспечения взаимодействия узлов в сети. В настоящее время в сетях используется большое количество стеков коммуникационных протоколов. Наиболее популярными являются стеки: TCP/IP, IPX/SPX, NetBIOS/SMB, Novell NetWare, DECnet, XNS, SNA и OSI. Все эти стеки, кроме SNA, на нижних уровнях - физическом и канальном - используют одни и те же хорошо стандартизованные протоколы Ethemet, Token Ring, FDDI и некоторые другие, которые позволяют использовать во всех сетях одну и ту же аппаратуру. Зато на верхних уровнях все стеки работают по своим собственным протоколам. Эти протоколы часто не соответствуют рекомендуемому моделью OSI разбиению на уровни. В частности, функции сеансового и представительного уровня, как правило, объединены с прикладным уровнем. Такое несоответствие связано с тем, что модель OSI появилась как результат обобщения уже существующих и реально используемых стеков, а не наоборот.

Все протоколы, входящие в стек, разработаны одним производителем, то есть они способны работать максимально быстро и эффективно.

Важным моментом в функционировании сетевого оборудования, в частности сетевого адаптера, является привязка протоколов. Она позволяет использовать разные стеки протоколов при обслуживании одного сетевого адаптера. Например, можно одновременно использовать стеки TCP/IP и IPX/SPX. Если вдруг при попытке установления связи с адресатом с помощью первого стека произошла ошибка, то автоматически произойдёт переключение на использование протокола из следующего стека. Важным моментом в данном случае является очередность привязки, поскольку она однозначно влияет на использование того или иного протокола из разных стеков.

Вне зависимости от того, какое количество сетевых адаптеров установлено в компьютере, привязка может осуществляться как «один к нескольким», так и «несколько к одному», то есть один стек протоколов можно привязать сразу к нескольким адаптерам или несколько стеков к одному адаптеру.

NetWare - сетевая операционная система и набор сетевых протоколов, которые используются в этой системе для взаимодействия с компьютерами-клиентами, подключёнными к сети. В основе сетевых протоколов системы лежит стек протоколов XNS. В настоящее время NetWare поддерживает протоколы TCP/IP и IPX/SPX. Novell NetWare была популярна в 80-е и 90-е года по причине большей эффективности в сравнении с операционными системами общего назначения. Ныне это устаревшая технология.

Стек протоколов XNS (Xerox Network Services Internet Transport Protocol) разработан компанией Xerox для передачи данных по сетям Ethernet. Содержит 5 уровней.

Уровень 1 - среда передачи - реализует функции физического и канального уровня в OSI-модели:

* управляет обменом данными между устройством и сетью;

* маршрутизирует данные между устройствами одной сети.

Уровень 2 - межсетевой - соответствует сетевому уровню в OSI- модели:

* управляет обменом данными между устройствами, находящимися в разных сетях (обеспечивает дейтаграммный сервис в терминах IEEE- модели) ;

* описывает способ прохождения данных через сеть.

Уровень 3 - транспортный - соответствует транспортному уровню в OSI-модели:

* обеспечивает связь "end-to-end" между источником и приемником данных.

Уровень 4 - контрольный - соответствует сессионному и представительному уровню в OSI-модели:

* управляет представлением данных;

* управляет контролем над ресурсами устройств.

Уровень 5 - прикладной - соответствует высшим уровням в OSI- модели:

* обеспечивает функции обработки данных для прикладных задач.

Стек протоколов TCP/IP (Transmission Control Protocol/Internet Protocol) на сегодня является наиболее распространенным и функциональным. Он работает в локальных сетях любых масштабов. Данный стек является основным стеком в глобальной сети Интернет. Поддержка стека была реализована в компьютерах c операционной системой UNIX. В результате популярность протокола TCP/IP возросла. В стек протоколов TCP/IP входит достаточно много протоколов, работающих на различных уровнях, но свое название он получил благодаря двум протоколам - TCP и IP.

TCP (Transmission Control Protocol) - транспортный протокол, предназначенный для управлением передачей данных в сетях, использующих стек протоколов TCP/ IP. IP (Internet Protocol) - протокол сетевого уровня, предназначенный для доставки данных в составной сети с использованием одного из транспортных протоколов, например TCP или UDP.

Нижний уровень стека TCP/IP использует стандартные протоколы передачи данных, что делает возможным его применение в сетях с использованием любых сетевых технологий и на компьютерах с любой операционной системой.

Изначально протокол TCP/IP разрабатывался для применения в глобальных сетях, именно поэтому он является максимально гибким. В частности, благодаря способности фрагментации пакетов данные, несмотря на качество канала связи, в любом случае доходят до адресата. Кроме того, благодаря наличию IP-протокола становится возможной передача данных между разнородными сегментами сети.

Недостатком TCP/IP-протокола является сложность администрирования сети. Так, для нормального функционирования сети требуется наличие дополнительных серверов, например DNS, DHCP и т. д., поддержание работы которых и занимает большую часть времени системного администратора. Лимончелли Т., Хоган К., Чейлап С. - Сестемное и сетевое администрирование. 2-е изд. 2009год. 944с

Стек протоколов IPX/SPX (Internetwork Packet Exchange/Sequenced Packet Exchange) является разработкой и собственностью компании Novell. Он был разработан для нужд операционной системы Novell NetWare, которая еще до недавнего времени занимала одну из лидирующих позиций среди серверных операционных систем.

Протоколы IPX и SPX работают на сетевом и транспортном уровнях модели ISO/ OSI соответственно, поэтому отлично дополняют друг друга.

Протокол IPX может передавать данные с помощью датаграмм, используя для этого информацию о маршрутизации в сети. Однако для того, чтобы передать данные по найденному маршруту, необходимо сначала установить соединение между отправителем и получателем. Этим и занимается протокол SPX или любой другой транспортный протокол, работающий в паре с IPX.

К сожалению, стек протоколов IPX/SPX изначально ориентирован на обслуживание сетей небольшого размера, поэтому в больших сетях его использование малоэффективно: излишнее использование широковещательного вещания на низкоскоростных линиях связи недопустимо.

На физическом и канальном уровнях стек OSI поддерживает протоколы Ethernet, Token Ring, FDDI, а также протоколы LLC, X.25 и ISDN, то есть использует все разработанные вне стека популярные протоколы нижних уровней, как и большинство других стеков. Сетевой уровень включает сравнительно редко используемые протоколы Connectionoriented Network Protocol (CONP) и Connectionless Network Protocol (CLNP). Протоколы маршрутизации стека OSI это ES-IS (End System -- Intermediate System) между конечной и промежуточной системами и IS-IS (Intermediate System -- Intermediate System) между промежуточными системами. Транспортный уровень стека OSI скрывает различия между сетевыми сервисами с установлением соединения и без установления соединения, так что пользователи получают требуемое качество обслуживания независимо от нижележащего сетевого уровня. Чтобы обеспечить это, транспортный уровень требует, чтобы пользователь задал нужное качество обслуживания. Службы прикладного уровня обеспечивают передачу файлов, эмуляцию терминала, службу каталогов и почту. Из них наиболее популярными являются служба каталогов (стандарт Х.500), электронная почта (Х.400), протокол виртуального терминала (VTP), протокол передачи, доступа и управления файлами (FTAM), протокол пересылки и управления работами (JTM).

Достаточно популярный стек протоколов, разработкой которого занимались компании IBM и Microsoft, соответственно, ориентированный на использование в продуктах этих компаний. Как и у TCP/IP, на физическом и канальном уровне стека NetBIOS/SMB работают стандартные протоколы, такие как Ethernet, Token Ring и другие, что делает возможным его использование в паре с любым активным сетевым оборудованием. На верхних же уровнях работают протоколы NetBIOS (Network Basic Input/Output System) и SMB (Server Message Block).

Протокол NetBIOS был разработан в середине 80-х годов прошлого века, но вскоре был заменен на более функциональный протокол NetBEUI (NetBIOS Extended User Interface), позволяющий организовать очень эффективный обмен информацией в сетях, состоящих не более чем из 200 компьютеров.

Для обмена данными между компьютерами используются логические имена, присваиваемые компьютерам динамически при их подключении к сети. При этом таблица имен распространяется на каждый компьютер сети. Поддерживается также работа с групповыми именами, что позволяет передавать данные сразу нескольким адресатам.

Главные плюсы протокола NetBEUI - скорость работы и очень малые требования к ресурсам. Если требуется организовать быстрый обмен данными в небольшой сети, состоящей из одного сегмента, лучшего протокола для этого не найти. Кроме того, для доставки сообщений установленное соединение не является обязательным требованием: в случае отсутствия соединения протокол использует датаграммный метод, когда сообщение снабжается адресом получателя и отправителя и «пускается в путь», переходя от одного компьютера к другому.

Однако NetBEUI обладает и существенным недостатком: он полностью лишен понятия о маршрутизации пакетов, поэтому его использование в сложных составных сетях не имеет смысла. Пятибратов А.П.,Гудыно Л.П.,Кириченко А.А.Вычислительные машины, сети и телекоммуникационные системы Москва 2009год. 292с

Что касается протокола SMB (Server Message Block), то с его помощью организуется работа сети на трех самых высоких уровнях - сеансовом, уровне представления и прикладном уровне. Именно при его использовании становится возможным доступ к файлам, принтерам и другим ресурсам сети. Данный протокол несколько раз был усовершенствован (вышло три его версии), что позволило применять его даже в таких современных операционных системах, как Microsoft Vista и Windows 7. Протокол SMB универсален и может работать в паре практически с любым транспортным протоколом, например TCP/IP и SPX.

Стек протоколов DECnet (Digital Equipment Corporation net) содержит 7 уровней. Несмотря на разницу в терминологии, уровни DECnet очень похожи на уровни OSI-модели. DECnet реализует концепцию сетевой архитектуры DNA (Digital Network Architecture), разработанную фирмой DEC, согласно которой разнородные вычислительные системы (ЭВМ разных классов), функционирующие под управлением различных операционных систем, могут быть объединены в территориально-распределенные информационно-вычислительные сети.

Протокол SNA (System Network Architecture) компании IBM предназначен для удаленной связи с большими компьютерами и содержит 7 уровней. SNA основана на концепции главной (хост) -машины и обеспечивает доступ удаленных терминалов к мейнфреймам IBM. Основной отличительной чертой SNA является наличие возможности доступа каждого терминала к любой прикладной программе главной ЭВМ. Системная сетевая архитектура реализована на базе виртуального телекоммуникационного метода доступа (Virtual Telecommunication Access Method - VTAM) в главной ЭВМ. VTAM управляет всеми линиями связи и терминалами, причем каждый терминал имеет доступ ко всем прикладным программам.

Сетевой стек протоколов, формирующий конвейеризацию и передачу данных между хостами, разработан для наилучшего взаимодействия между различными сетевыми уровнями. В этой статье мы попытаемся описать перемещение данных через расположенные в стеке уровни и попробуем внедрить модуль ядра Linux, помогающий нам захватывать и отображать данные, проходящие через уровень TCP. Ниже представлена программа, показывающая как установить новый элемент в файловой системе proc. И что наиболее важно, эта программа взламывает TCP протокол, отслеживает все данные, проходящие через tcp уровень, и отображает их в /proc/TCPdata.

Шямитх, перевод Алексей Антипов

Сетевой стек протоколов, формирующий конвейеризацию и передачу данных между хостами, разработан для наилучшего взаимодействия между различными сетевыми уровнями. В этой статье мы попытаемся описать перемещение данных через расположенные в стеке уровни и попробуем внедрить модуль ядра Linux, помогающий нам захватывать и отображать данные, проходящие через уровень TCP. Так как обсуждение всех видов сетевых соединений выходит за рамки данной статьи, то мы остановимся на TCP/IP соединениях.

Сетевой стек протоколов

Сетевые устройства формируют базовый уровень стека протоколов. Для связи с другими устройствами и приема-передачи трафика они используют протокол канала передачи данных (обычно Ethernet). Интерфейс, организуемый драйверами сетевых устройств, копирует пакеты с физической среды, выполняя некоторые проверки ошибок, после чего помещает пакеты в сетевой уровень. Интерфейсы вывода принимают пакеты из сетевого уровня, выполняют некоторые проверки ошибок и пересылают их в физическую среду. Мы будем обсуждать IP (протокол Интернет) являющийся стандартным протоколом сетевого уровня. Главными функциями IP являются маршрутизация, проверка входящих пакетов, определяющая направлены ли эти пакеты на данный хост или они нуждаются в дальнейшей пересылке. При этом, в случае необходимости, пакеты дефрагментируются и доставляются на транспортные протоколы. Такие протоколы имеют динамическую базу данных маршрутов для исходящих пакетов, адресуют и фрагментируют их перед посылкой на уровень связи.

TCP и UDP являются наиболее часто используемыми протоколами транспортного уровня. UDP создает структуру для адресации пакетов в пределах хоста, в то время как TCP поддерживает более комплексные операции подключения типа восстановления потерянных пакетов и управления трафиком.

Продвигаясь по транспортному уровню, мы можем найти INET уровень, формирующий промежуточный уровень между транспортным уровнем и сокетами приложений. С помощью INET уровня поддерживаются принадлежащие приложениям сокеты. В этом уровне осуществлены все специфические операции сокетов.

BSD - абстрактная структура данных, содержащая INET сокеты. Запрос приложения на подключение, чтение или запись через сокет, преобразовывается в INET операции с помощью BSD.

Общая структура пакетов. Данные заключаются в общую структуру данных, называемую sk_buff. Все уровни используют эту структуру данных. Сразу после копирования данных из пространства пользователя в пространство ядра, они помещаются в sk_buff и перемещаются на различные уровни. В свою очередь уровень добавляют к этой структуре свои заголовки. Sk_buff содержит ссылки на всю информацию о пакете, его сокете, устройстве, маршруте, расположении данных и т.д.

Сетевые функции Linux

Для нормального сетевого программиста, интерфейсная часть сетевых служб доступна с помощью следующих подпрограмм библиотеки С.

socket(), bind(), listen(), connect(), accept(), send(), sendto(), recv(), recvfrom(), getsockopt(), and setsockopt().

Функция socket() используется для создания нового сокета. Все операции с различными протоколами происходят с помощью сокетов. Поскольку функция socket() возвращает значение дескриптора файла, то к нему могут обращаться стандартные операции работы с файлами типа read(), write().

Фунция bind() используется для связи созданного сокета с портом. Порт, наряду с IP адресом сетевого интерфейса, используется для уникальной идентификации сокета.

Функция listen() используется для программирования сервера. После создания сокета и связи его с портом функция listen() устанавливает сокет в состояние прослушивания. Это означает, что сокет ожидает подключения со стороны других хостов.

При вызове на сервере функции accept() происходит непрерывный опрос сокета происходящий до получения запроса на подключение от другого хоста. После установления соединения серверная программа пробуждается и дает процессу возможность обрабатывать запрос от чужого хоста. Со стороны клиента используется функция connect(), показывающая серверу, что клиент желает открыть подключение на сокете и послать запрос.

Необходимые структуры данных

Эта структура является основой для выполнения интерфейса BSD сокетов. Установка и инициализация этой структуры происходит при помощи системного вызова socket().

sk_buff:

Эта структура управляет индивидуальными пакетами соединений приходящими и отсылаемыми с хоста. При этом происходит буферизация ввода-вывода.

Эта структура управляет различными частями сокетов, зависящими от конкретной сети. Она необходима для TCP, UDP и RAW сокетов.

Эта структура содержит ряд операций, одинаковых для всех протоколов.

Sockaddr (sockaddr_in):

Такая структура необходима для поддержки различных форматов адресов.

Модули ядра Linux

Ядра Linux ядра состоят из модулей. Некоторые части ядра находятся в памяти постоянно (типа планировщика), а некоторые загружаются при необходимости. Например, файловая система VFAT для чтения дисков, загружается только при необходимости. Такая особенность linux ядра позволяет пространству ядра занимать немного места.

Таким образом, существенным является проектирование вашего протокола, драйверов и любых видов программного обеспечения ядра как модулей ядра и вставлять их в ядро из пространства пользователя. После вставки, модуль становиться неперемещаемым до его удаления из пространства ядра. Единственно вы должны быть привилегированным пользователем, чтобы вставлять или удалять модули. Это является общим форматом записи модуля ядра.

#define MODULE #include /* ... other required header files ... */ /* * ... module declarations and functions ... */ int init_module() { /* code kernel will call when installing module */ } void cleanup_module() { /* code kernel will call when removing module */}

Проект хакерского модуля для TCP протокола.

Наш модуль ядра является очень простым, он виртуально размещен между интерфейсом операций сокетов для пересылки TCP пакетов и TCP уровнем. Теперь все пакеты данных, проходящие через сокет, зарегистрированный с TCP протоколом, будут перехвачены нашим модулем ядра. Эти данные будут переданы в /proc/TCPdata.

Используемые структуры данных

tcp_prot -> Содержит указатели на все осуществленные TCP операции

struct msghdr -> Содержит данные, посылаемые приложением, а также другими полями для идентификации адреса сокета

Struct msg_iov -> находится в msghdr, в нем содержатся указатели на данные

Перед началом кодирования давайте поймем значение файловой системы /proc. Файловая система proc называется так, из-за того что она находиться в каталоге /proc на большинстве Linux машин. Система является мощным инструментом, часто используемым приложениями. Это часть механизма при помощи которого ядро связывается с пространством пользователя и наоборот. Хотя она разработана как файловая система со структурой каталогов и inodes, в тоже время это фактически компонент зарегистрированных функций, обеспечивающих информацией важные переменные.

При создании файла в /proc, он сразу регистрируется с набором функций, сообщающих ядру, что необходимо делать при открытии этого файла или записи в него. Большинство файлов поддерживают только чтение, и лишь некоторые поддерживают запись.

Теперь мы начнем кодирование

/* tcpdata.c. Ниже представлена программа, показывающая как установить новый элемент в файловой системе proc. И что наиболее важно, эта программа взламывает TCP протокол, отслеживает все данные, проходящие через tcp уровень, и отображает их в /proc/TCPdata. */ #define MODULE #define __KERNEL__ /*we are doing kernel work*/ #include #include #include /*for registering proc entry*/ #include #include #include #include #include #include #include static struct proc_dir_entry *test_entry; struct msghdr *msg_moniter; struct iovec *iovec_moniter; static char *tcp="Tcp monitered data"; int (*orginalSend)(struct sock *, struct msghdr *,int); /* show_tcp_stats This function is what the /proc FS will call when anything tries to read /proc/TCPstat you could see last 200 bytes move out of the sockets through tcp connections */ static int show_tcp_stats(char *buf,char **start,off_t offset,int len,int unused) { len += sprintf(buf+len,"%s\n",tcp); return len; } /* Это функция обработчика, захватывающая tcp sendmsg запросы */ int moniter_tcp(struct sock *sk, struct msghdr *msg,int len) { int size; char *temp; printk("I am dangerously monitoring your tcp data \n"); msg_moniter=(struct msghdr *)kmalloc(sizeof(struct msghdr),GFP_KERNEL); memcpy(msg_moniter,msg,sizeof(struct msghdr)); orginalSend(sk,msg,len); iovec_moniter=msg_moniter->msg_iov; size=sizeof(tcp); printk("sizeof of TCPdat is %d \n",size); (sizeiov_base):strcpy(tcp,"Tcp monitered data"); kfree(msg_moniter); return len; } /* init_module Данная функция устанавливает модуль; она просто регистрирует новый каталог в /proc и создает указатель. */ int init_module() { test_entry=create_proc_entry("TCPdata",S_IRUGO,NULL); test_entry->read_proc=show_tcp_stats; orginalSend=tcp_prot.sendmsg; /* printk("the address of send send mes is %x \n",tcp_prot.sendmsg); printk("the address of hack mes is %x \n",orginalSend); */ tcp_prot.sendmsg=moniter_tcp; /* printk("the address of send send mes after hacking %x \n",tcp_prot.sendmsg); printk("the address of send send mes after hacking %x \n",moniter_tcp); */ return 0; } /* init_module */ /* cleanup_module Данная функция удаляет модуль; Она удаляет регистрацию записи директории из /proc FS */ void cleanup_module() { /* put the pointer back to tcp"s orginal message sender */ tcp_prot.sendmsg=orginalSend; /* unregister the function from the proc FS */ remove_proc_entry("TCPdata",NULL); } /* cleanup_module */ MODULE_AUTHOR("shyamjithe.c.s "); /*macros*/ MODULE_DESCRIPTION("moniter tcp data"); MODULE_LICENSE("GPL");

Данная программа была протестирована на ядре 2.4, так что вы можете откомпилировать её используя:

Gcc -O6 -Wall -c tcpdata.c -I /usr/src/linux-2.4.20-8/include/ this will produce tcpdata.o now insmod tcpdata.o open some tcp applications cat /proc/TCPdata to remove the module use rmmod tcpdata Теперь для того, чтобы понять этот код, я дам некоторые пояснения. Вся программа - это только хитрый путь для использования функциональных указателей. Но необходимо быть внимательным при использовании ваших собственных обработчиков, потому что неправильное размещение функционального указателя может привести к зависанию системы. Как было сказано, это является минимальным путем для взлома TCP. Вы можете сформировать новый уровень над уровнем TCP подобно этому, который будет вмешиваться во все типы заданий, сделанных TCP. Тоже может быть проделано и с UDP.

Заключение

Наиболее важным выводом, получаемым их описанной выше программы, является то, что не всегда необходимо изменять исходный код ядра, когда мы проделываем любую связанную с протоколом модификацию. Это объектно-ориентированная реализация Linux ядра, позволяющая нам манипулировать объектами данных внутри ядра.