Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Стек TCP/IP
23 февраля 2009

Физический и канальный уровень полностью реализуются сетевой картой (или модемом, или другим устройством, выполняющим ту же функцию) и её драйвером. Здесь действительно достигнута настолько полная абстракция, что программист обычно не задумывается о том, какая используется сеть. Поэтому мы также не будем в данной работе останавливаться на этих двух уровнях.
В реальной жизни не все протоколы соответствуют модели OSI. Особенно это касается старых протоколов. Существует такое понятие, как стек протоколов - набор протоколов разных уровней, которые совместимы друг с другом. Эти уровни не всегда точно соответствуют тем, которые предлагает модель OSI, но определённое разделение задач на уровни в них присутствует. В данной работе мы сосредоточимся на стеке протоколов, который называется TCP/IP (нередко можно услышать словосочетание "протокол TCP/IP" - это не совсем корректно: TCP/IP не протокол, а стек протоколов). Название этот стек получил по названию двух самых известных своих протоколов - TCP и IP.
IP расшифровывается как Internet Protocol. Это название иногда ошибочно переводят как "протокол интернета" или "протокол для интернета". На самом деле когда разрабатывался этот протокол, никакого интернета ещё и в помине не было, поэтому правильный перевод - межсетевой протокол. История появления этого протокола связана с особенностями работы сети Ethernet. Эта сеть строится по принципу шины, когда все компьютеры подключены, грубо говоря, к одному проводу. Если хотя бы два компьютера попытаются одновременно передавать данные по общей шине, возникнет неразбериха, поэтому все шинные сети строятся по принципу "один говорит - все слушают". Очевидно, что требуется какая-то защита от т.н. коллизий - ситуаций, когда два узла одновременно пытаются передавать данные.
Разные сети решают проблему коллизий по-разному. В промышленных сетях, например, обычно используется маркер - специальный индикатор, который показывает, какому узлу разрешено сейчас передавать данные. Узел, называемый мастером, следит за тем, чтобы маркер вовремя передавался от одного узла к другому. Маркер исключает возможность коллизий. Ethernet же является одноранговой сетью, в которой нет мастера, поэтому в ней используется другой подход: коллизии допускаются, но существует механизм их разрешения, заключающийся в том, что, во-первых, узел не начинает передачу данных, если видит, что другой узел уже что-то передаёт, а во-вторых, если два узла одновременно пытаются начать передачу, то оба прекращают попытку и повторяют её через случайный промежуток времени. У кого этот промежуток окажется меньше, тот и захватит сеть (или за этот промежуток времени сеть будет захвачена кем-то ещё).
При большом числе компьютеров, сидящих на одной шине, коллизии становятся слишком частыми, и производительность сети резко падает. Для борьбы с этим используются специальные устройства - роутеры. Роутер является узлом, подключенным одновременно к нескольким сетям. Пока остальные узлы каждой из этих сетей взаимодействуют только между собой, роутер никак себя не проявляет, и эти сети существуют независимо друг от друга. Но если компьютер из одной сети посылает пакет компьютеру другой сети, этот пакет получает роутер и переправляет его в ту сеть, в которой находится адресат, или в которой находится другой роутер, способный передать этот пакет адресату.
На канальном уровне существует адресация узлов, основанная на т.н. MAC-адресе сетевой карты (MAC - это сокращение Media Access Control). Этот адрес является уникальным номером карты, присвоенной ей производителем. Очевидно неудобство такого способа адресации, т.к. по MAC-адресу невозможно определить положение компьютера в сети, т.е. куда направлять пакет. Кроме того, при замене сетевой карты меняется адрес компьютера, что также не всегда удобно. Поэтому на сетевом уровне определяется собственный способ адресации, не связанный с аппаратными особенностями узла. Отсюда следует, что роутер должен понимать протокол сетевого уровня, чтобы принимать решение о передаче пакета из одной сети в другую, а протокол, в свою очередь, должен учитывать наличие роутеров в сети и предоставлять им необходимую информацию. Протокол IP был одним из первых протоколов сетевого уровня, который решал такую задачу, и с его помощью стала возможной передача пакетов между сетями. Поэтому он и получил название межсетевого протокола. Впрочем, название прижилось: в некоторых статьях MSDN'а сетевой уровень (network layer) называется межсетевым уровнем (internet layer). В протоколе IP, в частности, вводится важный параметр для каждого пакета: максимальное число роутеров, которое он может пройти, прежде чем попадёт к адресату. Это позволяет защититься от бесконечного блуждания пакетов по сети.
Здесь следует заметить, что сеть Ethernet ушла далеко вперёд по сравнению с моментом создания протокола IP и теперь организована сложнее, поэтому не следует думать, что в предыдущих абзацах изложены все принципы работы этой сети (их изложение выходит за рамки данной статьи). Тем не менее, протокол IP по-прежнему используется, а компьютеры по-прежнему видят в сети не только свои, но и чужие пакеты. На этом основана работа т.н. снифферов - программ, позволяющих одному компьютеру читать пакеты, пересылаемые между двумя другими компьютерами.
Для адресации компьютера протокол IP использует уникальное четырёхбайтное число, называемое IP-адресом. Впрочем, более распространена форма записи этого числа в виде четырёх однобайтных значений. Система назначения этих адресов довольно сложна и призвана оптимизировать работу роутеров, обеспечить прохождение широковещательных пакетов только внутри определённой части сети и т.п. Мы здесь не будем разбирать эту систему, потому что в правильно настроенной сети программисту не нужно знать эти тонкости: достаточно знать, что каждый узел имеет уникальный IP-адрес, для которого принята запись в виде четырёх цифровых полей, разделённых точками, например, 192.168.200.217. Также следует знать, что адреса из диапазона 127.0.0.1-127.255.255.255 задают т.н. локальный узел: через эти адреса могут связываться программы, работающие на одном компьютере. Таким образом, обеспечивается прозрачность местонахождения адресата. Кроме того, один компьютер может иметь несколько IP-адресов, которые могут использоваться для одного и того же или разных сетевых интерфейсов.
Кроме IP, в стеке TCP/IP существует ещё несколько протоколов, решающих задачи сетевого уровня. Эти протоколы не являются полноценными протоколами и не могут заменить IP. Они используются только для решения некоторых частных задач. Это протоколы ICMP, IGMP и ARP.
Протокол ICMP (Internet Control Message Protocol - протокол межсетевых управляющих сообщений) обеспечивает диагностику связи на сетевом уровне. Многим знакома утилита ping, позволяющая проверить связь с удалённым узлом. В основе её работы лежат специальные запросы и ответы, определяемые в рамках протокола ICMP. Кроме того, этот же протокол определяет сообщения, которые получает узел, отправивший IP-пакет, если этот пакет по каким-то причинам не доставлен.
Протокол называется надёжным (reliable), если он гарантирует, что пакет будет либо доставлен, либо отправивший его узел получит уведомление о том, что доставка невозможна. Кроме того, надёжный протокол должен гарантировать, что пакеты доставляются в том же порядке, в каком они отправлены, и дублирования сообщений не происходит. Протокол IP в чистом виде не является надёжным протоколом, т.к. в нём вообще не предусмотрены средства уведомления узла о проблемах с доставкой пакета. Использование ICMP также не делает IP надёжным, т.к. ICMP-пакет является частным случаем IP-пакета, и также может не дойти до адресата, поэтому возможны ситуации, когда пакет не доставлен, а отправитель об этом не подозревает.
Протокол IGMP (Internet Group Management Protocol - протокол управления межсетевыми группами) предназначен для управления группами узлов, которые имеют один групповой IP-адрес. Отправка пакета по такому адресу можно рассматривать как нечто среднее между адресной и широковещательной рассылкой, т.к. такой пакет будет получен сразу всеми узлами, входящими в группу.
Протокол ARP (Address Resolution Protocol - протокол разрешения адресов) используется для установления соответствия между IP- и MAC-адресами. Каждый узел имеет таблицу соответствия. Исходящий пакет содержит два адреса узла: MAC-адрес для канального уровня и IP-адрес для сетевого. Отправляя пакет, узел находит в своей таблице MAC-адрес, соответствующий IP-адресу получателя, и добавляет его к пакету. Если в таблице такой адрес не найден, отправляется широковещательное сообщение, формат которого определяется протоколом ARP. Получив такое сообщение, узел, чей IP-адрес соответствует искомому, отправляет ответ, в котором указывает свой MAC-адрес. Этот ответ также является широковещательным, поэтому его получают все узлы, а не только отправивший запрос, и все узлы обновляют свои таблицы соответствия.
Строго говоря, правильное функционирование протоколов сетевого уровня - задача администратора системы, а не программиста. В своей работе программист чаще всего использует более высокоуровневыми протоколами и не интересуется деталями реализации сетевого уровня.
Протоколами транспортного уровня в стеке TCP/IP являются протоколы TCP и UDP. Строго говоря, они решают не только задачи транспортного уровня, но и небольшую часть задач уровня сессии. Тем не менее, они традиционно называются транспортными. Эти протоколы рассматриваются в следующих разделах данной статьи.
Уровни сессии, представлений и приложения в стеке TCP/IP не разделены: протоколы HTTP, FTP, SMTP и т.д., входящие в этот стек, решают задачи всех трёх уровней. Мы здесь не будем рассматривать эти протоколы, потому что при использовании сокетов они в общем случае не нужны: программист сам определяет формат пакетов, отправляемых с помощью TCP или UDP.
Новички нередко думают, что фраза "программа поддерживает соединение через TCP/IP" полностью описывает то, как можно связаться с программой и получить данные. На самом деле необходимо знать формат пакетов, которые эта программа может принимать и отправлять, т.е. должны быть согласованы протоколы уровня сессии и представлений. Гибкость сокетов даёт программисту возможность самостоятельно определить этот формат, т.е., по сути дела, придумать и реализовать собственный протокол поверх TCP или UDP. И без описания этого протокола организовать обмен данными с программой невозможно.
Всё, что было написано в этом разделе статьи, а также в предыдущем, можно и не знать, но, тем не менее, успешно использовать сокеты в своих программах. Но для программиста, на мой взгляд, очень важно понимание картины в целом, поэтому я и вставил эти два раздела.


Теги: HTTP, FTP, SMTP, TCP, IP Borland Delphi

Статьи по теме:

Основные компоненты информационной технологии обработки данных
Свойство Zoom
Свойство Designer
Свойство Bands для TQRSubDetail
Свойство LeftOffset
Электронная доска объявлений
Распределенная обработка данных
Свойство Driver
Пространства имен
UnlockTable
Свойство AlignToBottom
Печать графики
Информация о протоколе
Свойство Alignment
Метод PrinterSetup
| Borland Delphi | Alex |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | Borland Delphi | Стек TCP/IP. Регион сайта: Москва и Санкт-Петербург