Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
00:35, 09 июля 2010

Введение в веб-программирование и Интернет в целом - 2. Общение без границ

1-я часть

Протокол

Каким образом происходит взаимодействие компьютеров в сети? Совершенно очевидно, что это взаимодействие не хаотично, более того, компьютеры, работая бок о бок, прекрасно справляются с поставленными задачами, каким-то образом согласуя действия между собой. Ведь организация работы группы компьютеров более сложная задача, нежели организация работы единственного компьютера или обособленных компьютеров. Стало быть, компьютеры как-то понимают друг друга. Это возможно благодаря протоколам связи. Где-то в справках Windows я прочитал, что протокол это:

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

Я считаю, что это довольно удачное определение.

Вот пример: http://www.conlex.kz/analogiya-iz-mira-lyudej/

OSI

В далекие-далекие времена сетевые технологии были основаны на различных корпоративных стандартах, т.е. использовали различные несовместимые протоколы и форматы данных. Тогда и была создана OSI (Open Systems Interconnection) – модель взаимодействия открытых систем. Модель состоит из семи уровней или слоев. Семиуровневая модель, также называемая стеком протоколов, была призвана стандартизировать всю вышеупомянутую мешанину, чтобы устройства от самых различных производителей могли взаимодействовать и понимать друг друга.

У каждого уровня есть свои задачи и сервисы, которые он предоставляет верхнему уровню. Благодаря этой эталонной модели, каждый протокол занял свое место на одном из уровней (хотя некоторые протоколы могут реализовать функции нескольких уровней). Рассмотрим вкратце это уровни.

Физический уровень

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

Кто реализует функции: железо! Сетевые карты, концентраторы, усилители сигнала и т.д.

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

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

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

Канальный уровень упаковывает набор битов, с которыми манипулирует физический уровень, в специальные фреймы. Это позволяет контролировать возможные ошибки, проверяя их на целостность и, в случае ошибки, отправлять поврежденные фреймы заново. Канальный уровень принято делить на 2 подуровня:

- MAC (Media access control) – регулирование доступа к физической среде, отсюда и MAC-адрес;

- LLC (Logical link control) – обработка ошибок, работа с сетевым уровнем.

Кто реализует функции: частично железо – коммутаторы, мосты. Частично – драйвер сетевой карты.

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

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

Кто реализует функции: маршрутизатор и ядро операционной системы.

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

Обеспечивает гарантированную, надежную доставку данных. Также гарантирует, что данные будут доставлены в том порядке, в котором они отправлены.

Кто реализует функции: операционная система.

Сеансовый уровень

Отвечает за установление, поддержку и возобновление (в случае разрыва) сеансов связи.

Кто реализует функции: прикладное ПО.

Уровень представления

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

Кто реализует функции: прикладное ПО.

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

Уровень, позволяющий пользовательским программам использовать сетевые службы. По сути этот уровень представляет из себя набор протоколов: HTTP, FTP, SMTP, XMPP, POP3 и множество других.

Кто реализует функции: прикладное ПО.

TCP/IP

Однако, стек протоколов OSI стал излишне сложным в реализации, поэтому Интернет использует упрощенный стек протоколов TCP/IP. Именно с этим стеком нам надо познакомиться поближе. В нем всего 4 уровня:

Стек TCP/IP

Из картинки видно, что некоторые уровни в TCP/IP объединены в один.
Рассмотрим на простом примере, как работает стек TCP/IP. Допустим, отправляются данные по протоколу HTTP в виде текста: Hello world.
Вот как он проходит вниз по стеку:

Инкапсуляция данных в стеке TCP/IP

Заголовки – это служебная информация протокола. Например, для протокола IP в заголовке хранится информация о том, с какого IP-адреса и на какой IP-адрес осуществляется передача. Полезные данные обозначены голубым цветом. Однако следует заметить, что для протокола нижнего уровня, все, что передает ему верхний уровень, является данными. Так, для протокола IP данными являются и TCP-заголовок, и TCP-данные. Спускаясь ниже, к данным прикрепляются заголовки более низкоуровневых протоколов. Этот процесс называется инкапсуляцией (говоря по-русски, сокрытием) пользовательских данных. Спускаясь все ниже и ниже, пользовательские данные обрастают набором необходимых служебных данных, позволяющих ему не затеряться в сети. После этого готовые фреймы отправляются в путешествие. По прибытии данных в пункт назначения происходит обратный процесс – пакеты данных поднимаются вверх, каждый уровень считывает свою служебную информацию, делает какие-либо действия на основе этой информации, убирает свой заголовок и передает данные верхнему уровню. Хотя здесь опять же есть нюанс – маршрутизатор например, может прочитать IP-заголовок, и «спустить» данные обратно вниз по стеку, если эти данные предназначались не ему.

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

Кое-что о прикладных протоколах

Большинство протоколов прикладного уровня работают с TCP. На уровне протокола IP есть понятие IP-адреса. IP-адрес состоит из четырех чисел, называемых октетами, каждый из которых принимает значение от 0 до 255 включительно. Например: 219.23.112.7, 155.52.244.98. Как видите, октеты разделяются точками. Для TCP существует другое понятие – порт. Порт – это номер, принимающий значение от 0 до 65535 включительно. И он не имеет никакого отношения к физическим портам на компьютере, так что не путайте TCP-порты с USB или COM-портами. Так вот, для соединения с какой-то программой на каком-то компьютере необходимо знать IP-адрес и порт, на котором работает эта программа. В TCP-соединении есть два типа программ:

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

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

Надеюсь, с низкоуровневой теорией всё. Это лишь основы, а чтобы понять всю необъятность этой темы, рекомендую ознакомиться со следующими ссылками:

Протоколы

http://www.conlex.kz/setevye-protokoly/
http://www.conlex.kz/analogiya-iz-mira-lyudej/

TCP/IP

http://www.codenet.ru/webmast/tcpip.php
http://www.xakep.ru/magazine/xs/032/024/1.asp

OSI

http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI

Если есть мысли, вопросы – смело комментируем!

0
1277
2