Сетевая модель OSI и ее 7 уровней: обзор с примерами от Бородача

Всем привет, и с вами снова Бородач! У нас очередной курс «Для самых маленьких», и поговорим мы про модель OSI. Многие системные администраторы и юные IT-инженеры что-то слышали про это, но боялись спросить. Сразу скажу, что любой специалист, программист, инженер или администратор, работающий с сетями и интернетом, должен хорошо понимать все то, о чем я расскажу ниже. Но не переживайте, статья подойдет и для специалистов, и для чайников. Я постараюсь объяснить все простым языком, без заумных формулировок, но при этом без грубых упрощений, которые потом только мешают учиться.

Введение

OSI модель, или Open Systems Interconnection Basic Reference Model, – это эталонная модель сетевого взаимодействия. Если переводить дословно, то получится «Эталонная модель взаимодействия открытых систем». Сразу поправлю важный момент, который очень часто путают даже новички, которые уже немного почитали про сети: модель OSI и модель TCP/IP – это не одно и то же. OSI – это именно концептуальная, эталонная 7-уровневая модель, которая помогает понять, как вообще устроено сетевое взаимодействие. А TCP/IP – это уже практический стек протоколов, на котором работает современный интернет и большинство реальных сетей.

Поэтому говорить, что «OSI модель, или модель стека TCP/IP» – неправильно. Корректнее сказать так: OSI – это удобная теоретическая модель для обучения, проектирования и диагностики, а TCP/IP – это практическая основа, с которой мы сталкиваемся каждый день. Именно поэтому сетевые инженеры до сих пор активно используют OSI – не потому, что интернет буквально живет по ней в чистом виде, а потому что она очень удобна для понимания, где именно возникает проблема. Не работает кабель – идем вниз, проблемы с IP-маршрутизацией – смотрим третий уровень, сайт не открывается из-за DNS или HTTPS – уже поднимаемся выше.

ПРИМЕЧАНИЕ! Запомните простую мысль, и дальше читать статью станет легче: OSI – это «карта местности», а TCP/IP – это «реальная дорога», по которой ездят пакеты в интернете. То есть OSI нужна для понимания логики работы сети, а TCP/IP – это реальные протоколы и механизмы, которыми пользуются устройства. На практике эти модели постоянно сравнивают друг с другом, поэтому путаница у новичков возникает очень часто. Но если один раз это разложить в голове, дальше все становится намного понятнее.

Модель OSI описывает, как устройства в компьютерной сети взаимодействуют друг с другом по определенным правилам и протоколам. В модели существует 7 уровней, которые участвуют в передаче информации от одного устройства к другому. Каждый уровень отвечает за свою задачу. Один занимается физической передачей сигнала, другой – адресацией внутри локальной сети, третий – маршрутизацией между сетями, четвертый – доставкой данных между приложениями, а верхние уровни занимаются уже более «человеческими» вещами: сессиями, представлением данных и прикладными протоколами.

Сетевая модель OSI и ее 7 уровней: обзор с примерами от Бородача

Уровни

Представим себе, что у нас есть два компьютера. Один принадлежит Василию, а второй Диме. Они подключены к сети. Василий хочет отправить Диме письмо. И тут встает вопрос: а как вообще это письмо передать по кабелю, по Wi-Fi или через интернет? Ведь компьютер не понимает буквы и слова так, как понимаем их мы. На самом низком уровне он работает с сигналами, битами, нулями и единицами.

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

При отправке письма информация проходит стадии от верхнего к нижнему уровню, чтобы в итоге превратиться в сигнал, пригодный для передачи по среде связи. Далее эти данные уходят по кабелю, оптоволокну или радиоканалу к компьютеру Димы. И уже на принимающем устройстве идет обратный процесс – от сигналов и битов обратно к приложению, которое покажет письмо человеку. Этот прямой путь вниз обычно называют инкапсуляцией, а обратный путь вверх – декапсуляцией. Сам термин может звучать страшно, но по сути это обычная «упаковка» и «распаковка» данных.

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

Давайте взглянем на все уровни OSI 7, и вам станет немного понятнее, о чем я говорю:

  • Уровень 7 – Прикладной – application.
  • Уровень 6 – Представительский – presentation.
  • Уровень 5 – Сеансовый – session.
  • Уровень 4 – Транспортный – transport.
  • Уровень 3 – Сетевой – network.
  • Уровень 2 – Канальный – data link.
  • Уровень 1 – Физический – physical.

Нумерация идет сверху вниз: от седьмого прикладного уровня до первого физического. Но при диагностике некоторые инженеры мыслят и наоборот – снизу вверх. Например, если «интернета нет совсем», то сначала смотрят кабель, линк на порту, MAC-таблицу, IP-адрес, маршрут, DNS и только потом приложение. Это очень практичный подход, и как раз из-за таких задач модель OSI так полюбили в сетевой диагностике.

ПРИМЕЧАНИЕ! Для специалистов и тех, кто хочет расти дальше, я советую выписать и запомнить все уровни в нужном порядке. Также полезно запомнить английские названия, потому что они постоянно встречаются в книгах, документации, на зарубежных порталах и даже в интерфейсах некоторых сетевых устройств. Когда вы без запинки понимаете, что такое «Layer 2» или «Layer 3 issue», учиться и работать становится сильно проще. Это тот редкий случай, где банальная зубрежка реально помогает.

Сетевая модель OSI и ее 7 уровней: обзор с примерами от Бородача

Каждый уровень выполняет определенные задачи для перевода информации из одного вида в другой. Также вы можете видеть, что информация на разных этапах называется по-разному. Почти у каждого уровня есть свой PDU (Protocol Data Unit), или единица данных протокола. На верхних уровнях чаще говорят просто «данные», на транспортном – сегменты или дейтаграммы, на сетевом – пакеты, на канальном – кадры, а на физическом – биты. Это очень полезно понимать, потому что в разговорах сетевиков слова «кадр», «пакет» и «сегмент» – не одно и то же.

Можно посмотреть примерную последовательность перехода информации от одного вида PDU к другому:

  1. С седьмого по пятый уровень – обычно оперируют данными.
  2. На транспортном уровне данные переводятся в сегменты TCP или дейтаграммы UDP.
  3. На сетевом уровне они переводятся в пакеты.
  4. На канальном уровне пакеты упаковываются в кадры.
  5. И в самом конце на физическом уровне все представляется в виде битов и сигналов.

Также исходя из схем, вы можете заметить два условных названия:

  • Media Layers (нижние уровни) – нижняя часть модели, которая ближе к передающей среде, кабелю, радиоканалу, коммутаторам, портам и сигналам.
  • Host Layers (верхние уровни) – верхняя часть модели, которая ближе к приложениям, данным и логике работы на конечных устройствах.

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

ПРИМЕЧАНИЕ! Если у вас в голове пока каша, не страшно. Для начала просто запомните, что уровни 1-2 ближе к «железу» и локальной сети, уровень 3 отвечает за IP и маршруты, уровень 4 – за доставку данных между приложениями, а уровни 5-7 ближе к логике работы сервисов и программ. Этого уже достаточно, чтобы начать разбираться в большинстве бытовых и рабочих сетевых проблем. Дальше понимание будет нарастать по мере чтения и практики.

Принцип работы

Для удобства представления работы 7-ми уровней модели OSI давайте посмотрим на картинку ниже.

Сетевая модель OSI и ее 7 уровней: обзор с примерами от Бородача

У нас есть два компьютера, которые на каждом уровне взаимодействуют по своим правилам и протоколам. Можно сказать, что каждый уровень «говорит» на своем языке. На физическом уровне все сводится к сигналам и битам. На канальном уровне уже есть кадры и MAC-адреса. На сетевом – IP-пакеты и маршруты. На транспортном – сегменты, порты, надежная или ненадежная доставка. А выше уже начинаются сессии, представление данных и прикладные протоколы вроде HTTP, SMTP или DNS.

Но для перевода информации от одного уровня к другому используются специальные механизмы и служебные заголовки. Обратите внимание, что на транспортном уровне данные могут разбиваться на части. Если используется TCP, то сегменты снабжаются служебной информацией, которая помогает отслеживать порядок, целостность, подтверждение получения и повторную отправку при ошибках. Если используется UDP, то подход проще – там нет встроенного механизма подтверждений и строгой гарантии доставки. Поэтому нельзя без оговорок говорить, что «каждый сегмент имеет нумерованную метку и всегда собирается строго по порядку» – это верно прежде всего для надежной доставки в TCP, но не в одинаковом виде для всех транспортных протоколов.

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

Сетевая модель OSI и ее 7 уровней: обзор с примерами от Бородача

  1. Первые 3 верхних уровня – прикладной, представительский и сеансовый – действительно часто рассматривают вместе, потому что на практике в современных сетях их функции нередко переплетаются. Но это не значит, что про них «нет смысла говорить». Наоборот, именно там живут такие важные вещи, как формат данных, кодировка, сессии, шифрование и логика работы протоколов приложений.
  2. Далее на транспортном уровне данные переводятся в сегменты TCP или дейтаграммы UDP. Там же появляются порты, которые помогают понять, какому именно приложению на компьютере отдать полученные данные. Если хотите отдельно разобраться с портами и зачем они вообще нужны, можете почитать эту статью про сетевые порты.
  3. На следующем этапе на сетевом уровне к транспортным данным добавляется заголовок IP-пакета. За счет этого уже можно передавать информацию между разными сетями, а не только внутри одного сегмента.
  4. Далее информация переходит на канальный уровень. Здесь пакет упаковывается в кадр, добавляются MAC-адреса источника и назначения для локального сегмента сети, а также служебные поля для проверки целостности кадра. Важно понимать, что проверка ошибок на канальном уровне не всегда означает «автоматический повтор» именно этим же уровнем. Часто поврежденный кадр просто отбрасывается, а повторную отправку инициирует уже транспортный уровень, если он это умеет, как TCP.
  5. Ну и в самом конце все кадры переводятся в биты и отправляются по физической среде связи.

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

Уровень 1 – Физический

Физический, или первый уровень, является самым низшим уровнем, так как здесь передаваемая информация имеет вид сигналов и битов – нулей и единиц. Этот уровень отвечает не за IP, не за сайты и не за приложения, а за то, чтобы вообще можно было физически передать сигнал между устройствами. Тут важны электрические, оптические и радиочастотные характеристики линии, тип среды, длина кабеля, разьемы, уровень сигнала, модуляция, кодирование на линии и прочие «железные» моменты.

Разделяют несколько режимов передачи данных:

  • Полный дуплекс – устройство может одновременно принимать и отправлять данные. Именно так сегодня обычно работают современные Ethernet-соединения через коммутаторы.
  • Полудуплекс – устройство может и принимать, и отправлять данные, но не одновременно. То есть передача идет в обе стороны, но по очереди.
  • Симплекс – данные передаются только в одну сторону. Этот режим в бытовых LAN-сетях встречается реже, но как понятие полезен для общего понимания.

Это важная правка, потому что полудуплекс – это не «однонаправленная передача», а именно двунаправленная передача по очереди. Для простого примера можно вспомнить рацию: сначала говорит один, потом второй. А вот полный дуплекс – это уже больше похоже на обычный телефонный разговор, где обе стороны могут говорить и слышать друг друга одновременно. В современных Ethernet-сетях с коммутаторами обычно используется полный дуплекс, и именно поэтому старые истории про коллизии и хабы сегодня чаще вспоминают уже как теорию или для понимания основ.

На физическом уровне используются разные среды передачи. При кабельном подключении это может быть витая пара, оптоволокно, реже коаксиальный кабель. В беспроводной среде используются радиоволны – например, Wi-Fi, Bluetooth, сотовая связь. А вот DSL, который часто по привычке вписывают в беспроводные технологии, на самом деле работает по проводной телефонной линии, так что к радиосреде он не относится.

Тут нужно определять не только среду, но и тип подключения, разьемов, портов, длину линии, допустимые потери и дальность, на которую можно передать информацию. Если кабель обжат плохо, линк может то подниматься, то падать. Если оптика загрязнена или повреждена, будут ошибки. Если Wi-Fi-сигнал слабый, связь станет нестабильной. То есть все самые «банальные» сетевые проблемы очень часто живут именно здесь, на физическом уровне.

Советую почитать про среды физического уровня отдельно:

Уровень 2 – Канальный

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

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

Также этот уровень умеет определять ошибки на кадре и, в зависимости от конкретной технологии, помогать с управлением потоком и доступом к среде. Но тут не нужно думать, что канальный уровень всегда магически «чинит» все ошибки сам по себе. Его задача – корректно передать кадр в пределах локального канала. А если нужны гарантии доставки между приложениями на разных узлах, то это уже больше история про транспортный уровень и TCP.

Советую более подробно прочесть про коммутатор в этой статье.

Уровень 3 – Сетевой уровень

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

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

Еще одна важная мысль для новичка: MAC-адрес нужен в основном для доставки внутри локального канала, а IP-адрес – для логического пути через сети. То есть если совсем грубо, MAC помогает найти устройство рядом, а IP – провести данные через целую цепочку сетей до удаленного получателя. Для полного понимания сетей это одно из ключевых различий, и его обязательно нужно уложить в голове.

Обязательно читаем подробную статью про роутер.

Уровень 4 – Транспортный

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

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

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

Уровень 5 – Сеансовый

Сеансовый уровень отвечает не за «окончательный перевод сегментов в понятные компьютеру данные», а за организацию, поддержку и завершение сеанса связи между двумя сторонами. Если говорить очень простыми словами, он следит за логикой диалога: когда связь началась, как она поддерживается, как синхронизируется обмен и когда ее корректно завершить. В классическом объяснении сюда относят установление, поддержку и завершение сессии, а также контрольные точки, с которых можно продолжить передачу, если она оборвалась.

В современной практике функции этого уровня часто не выделены в отдельный красивый «кирпичик» и могут быть размазаны между приложением, транспортом и библиотеками протоколов. Именно поэтому новичкам иногда кажется, что пятый уровень «бесполезный» или «существует только в книжке». На самом деле идея очень полезная: когда вы понимаете, что у любого обмена есть логика сессии, авторизация, повторное подключение, тайм-ауты и возобновление работы, вы начинаете лучше понимать, почему сервис может быть «живой», но вести себя странно.

Уровень 6 – Представительский

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

Один из самых понятных примеров – кодировка текста. Если одна сторона отправляет данные в одном формате, а другой стороне нужно получить их в корректном и читаемом виде, нужен перевод между представлениями. Сюда же логично относить и шифрование, потому что данные могут уйти в сеть в зашифрованном виде, а на принимающей стороне должны быть расшифрованы до нормального состояния. На практике функции этого уровня тоже часто не живут в отдельной «коробке», но как часть логики OSI он очень важен для понимания.

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

Прикладной уровень – это самый верхний уровень модели, который ближе всего к программам и пользователю. Но тут есть одна частая ошибка новичков: браузер, почтовый клиент или чат сами по себе – это не «уровень 7» в чистом виде. Правильнее сказать, что они используют протоколы прикладного уровня. Сюда относят HTTP, HTTPS, SMTP, IMAP, POP3, FTP, DNS и другие протоколы, через которые приложения получают и отправляют данные.

Именно на этом уровне пользователь чаще всего замечает проблему. Например, сайт не открывается, почта не отправляется, DNS не отвечает, API возвращает ошибку, сертификат не проходит проверку, браузер ругается на соединение. Но сама причина может сидеть ниже. Поэтому очень важно не путать «симптом на уровне приложения» с «реальной причиной на другом уровне». Это одна из самых полезных мыслей, которую вообще дает модель OSI.

Если вам трудно запомнить, чем отличаются уровни 5, 6 и 7, держите простую подсказку. Пятый – про логику сеанса, шестой – про представление данных, седьмой – про прикладные протоколы, с которыми уже работают программы. В реальной жизни эти функции нередко сливаются, и именно поэтому начинающим кажется, что верхние уровни похожи друг на друга. Но для учебы и диагностики такое разделение очень помогает.

Частые вопросы

Зачем вообще нужна модель OSI, если современный интернет работает на TCP/IP?

Потому что OSI очень удобна для обучения, проектирования и диагностики. Она не обязана в точности совпадать с тем, как реализованы все протоколы на практике, чтобы быть полезной. Это как анатомический атлас для врача: он нужен не потому, что человек ходит с подписанными органами, а потому что по нему удобно разбираться в устройстве организма. Точно так же OSI помогает разложить сетевую проблему по уровням и не метаться хаотично между кабелем, IP, DNS и приложением.

 

Какие уровни самые важные для обычного системного администратора?

На практике чаще всего особенно хорошо нужно понимать уровни 1-4. Именно там живут кабель, линк, MAC-адреса, VLAN, IP-адресация, маршрутизация, TCP, UDP, порты и основные механизмы доставки. Но это не значит, что уровни 5-7 можно выкинуть из головы. Когда начинаются проблемы с HTTPS, DNS, API, шифрованием, авторизацией или прикладными сервисами, верхние уровни тоже резко становятся очень важными.

 

На каком уровне работает роутер, а на каком коммутатор?

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

 

Как проще запомнить уровни OSI?

Я бы советовал не просто зубрить названия, а связывать каждый уровень с понятным образом. 1 – сигнал и кабель. 2 – кадры и MAC. 3 – IP и маршрут. 4 – TCP/UDP и порты. 5 – сессия. 6 – формат, шифрование, кодировка. 7 – прикладные протоколы и сервисы. Когда в голове есть такая «лесенка», модель перестает быть абстрактной и начинает нормально жить в практике.

Видео

 

Автор статьи
Бородач 2851 статей
Сенсей по решению проблем с WiFiем. Обладатель оленьего свитера, колчана витой пары и харизматичной бороды. Любитель душевных посиделок за танками.
WiFiGid
Комментарии: 5
  1. Аноним

    Спасибо большое, помогли сдать экзамены по сетям)

  2. Михали

    Ну теперь понятно хоть стало.

  3. Аноним

    Вот зачем столько этапов – не пойму, это же увеличивает отклик между отправкой и приемом. Плюс надо все это обработать :roll:

  4. Алмаз

    Спасибо за подробное изложение! Далее включаем мозг и обновляемся! :smile:

  5. Андрей

    Вы приводите для иллюстрации картинку- переход данных с уровня на уровень:
    с уровня 5 на 4 данные разбиваются на сегменты – по какому принципу?
    далее с 4 на 3 уровень сегменты дробятся на пакеты? Судя по картинке сегмент и пакет одного размера, только добавляется ещё один заголовок- какой смысл в этой “этажерке”??? с др. стороны читаю у Вас :”… В итоге пакеты имеют больший размер чем сегменты.” Затем пакеты преобразуются в кадры- в пакете количество кадров больше чем один???? т.е. непонятен сам принцип преобразований при переходе с уровня на уровень.
    хотелось бы более развёрнутое пояснение увидеть.

Добавить комментарий
После отправки комментарий может не отображаться - это нормально. Сразу же после модерации он будет опубликован. Если Вы хотите быстро узнать о получении ответа, рекомендуем оставить свой e-mail (это необязательно). E-mail используется исключительно для Вашего оповещения, мы не занимаемся спамом.

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

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