Описание уровней стека ISO/OSI

Информационные сети

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

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

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

Международная Организация по Стандартам (International Standards Organization, ISO) разработала модель, которая четко определяет различные уровни взаимодействия систем, дает им стандартные имена и указывает, какую работу должен делать каждый уровень. Эта модель называется моделью взаимодействия открытых систем (Open System Interconnection, OSI), или моделью ISO/OSI.

В модели OSI взаимодействие делится на семь уровней, или слоев, как показано на рисунке 1. Каждый уровень имеет дело с одним определенным аспектом взаимодействия. Таким образом, проблема взаимодействия разделена на 7 частных проблем, каждая из которых может быть решена независимо от других. Каждый уровень поддерживает интерфейсы с выше- и нижележащими уровнями.

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

Описание уровней стека ISO/OSI - student2.ru

Рисунок 1. Модель взаимодействия открытых систем ISO/OSI

Стек TCP/IP

В основе работы глобальной сети Интернет лежит набор (стек) протоколов TCP/IP. Cтек протоколов TCP/IP — это набор правил обмена информацией. TCP/IP - это аббревиатура термина Transmission Control Protocol/Internet Protocol (протокол управления передачей/протокол Internet). Фактически TCP/IP –это не один протокол, а несколько, поэтому его называют стеком протоколов, среди которых TCP и IP - два основных (рисунок 2).

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

ISO/OSI TCP/IP

_____________________________ __________________________

| Уровень прикладных программ | | |

|_____________________________| | _________ _________ |

_____________________________ | |Сетевая | |Сетевая | | Уровень

| Уровень представления | | |программа| |программа| | прикладных

|_____________________________| | |_________| |_________| | программ

_____________________________ | |

| Уровень сеанса | | |

|_____________________________| |__________________________|

| |

_____________________________ _____|_____________|______

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

|_____________________________| |_____|_____________|______| уровень

| |

_____________________________ _____|_____________|______

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

|_____________________________| | ----> IP <--- | уровень

|__________________________|

_________

_____________________________ _______| Сетевая |________

| Канальный уровень | | ARP<->| плата |<->RARP | Уровень

|_____________________________| |_______|_________|________| звена

| данных

_____________________________ |

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

|_____________________________| Кабельные соединения сети уровень

Рисунок 2 – Стек ISO/OSI (слева) и стек TCP/IP (справа)

TCP/IP позволяет самостоятельным сетям подключаться к Internet или объединяться для создания частных интрасетей. Вычислительные сети, составляющие интрасеть, физически подключаются через устройства, называемые маршрутизаторами, или IP-маршрутизаторами. Маршрутизатор - это компьютер, который передает пакеты данных из одной сети в другую. В интрасети, работающей на основе TCP/IP, информация передается в виде дискретных блоков, называемых IP-пакетами (IP packets) или IP-дейтаграммами (IP datagrams). Программное обеспечение TCP/IP скрывает маршрутизаторы и базовую архитектуру сетей и делает так, что она кажется всем участникам обмена одной большой сетью. Подключения идентифицируются 32-разрядными IP-адресами, которые записываются в форме десятичных чисел, разделенных точками (например, 128.10.2.3). Взяв IP-адрес удаленного компьютера, компьютер в интрасети или в Internet может отправить данные на него, как будто они составляют часть одной и той же физической сети.

IP - самый фундаментальный протокол из комплекта TCP/IP - передает IP-дейтаграммы по интрасети и выполняет важную функцию, называемую маршрутизацией, т.е. выбора маршрута, по которому дейтаграмма будет следовать из пункта А в пункт B, и использование маршрутизаторов для "прыжков" между сетями.

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

Другой важный член комплекта TCP/IP - User Datagram Protocol (UDP, протокол пользовательских дейтаграмм), который похож на TCP, но более примитивен. TCP - "надежный" протокол, потому что он обеспечивает проверку на наличие ошибок и обмен подтверждающими сообщениями, чтобы данные достигали своего места назначения заведомо без искажений. UDP - "ненадежный" протокол, ибо не гарантирует, что дейтаграммы будут приходить в том порядке, в котором были посланы, и даже того, что они придут вообще. Тем не менее, используется во многих программах, например, в протоколе SNMP (Simple Network Management Protocol, или простой протокол управления сетями), используемом во многих реализациях TCP/IP - это один из примеров программ UDP. Соответствие других протоколов TCP/IP уровням ISO/OSI показано на рисунке 3.

Краткое описание протоколов семейства TCP/IP с расшифровкой аббревиатур (подробнее см. в http://www.codenet.ru/webmast/tcpip)

ARP(Address Resolution Protocol, протокол определения адресов): конвертирует 32-разрядные IP-адреса в физические адреса вычислительной сети, например, в 48-разрядные адреса Ethernet.

FTP(File Transfer Protocol, протокол передачи файлов): позволяет передавать файлы с одного компьютера на другой с использованием TCP-соединений. В родственном ему, но менее распространенном протоколе передачи файлов - Trivial File Transfer Protocol (TFTP) - для пересылки файлов применяется UDP, а не TCP.

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

IGMP (Internet Group Management Protocol, протокол управления группами Internet): позволяет IP-дейтаграммам распространяться в циркулярном режиме (multicast) среди компьютеров, которые принадлежат к соответствующим группам.

IP (Internet Protocol, протокол Internet): низкоуровневый протокол, который направляет пакеты данных по отдельным сетям, связанным вместе с помощью маршрутизаторов для формирования Internet или интрасети. Данные "путешествуют" в форме пакетов, называемых IP-дейтаграммами.

RARP (Reverse Address Resolution Protocol, протокол обратного преобразования адресов): преобразует физические сетевые адреса в IP-адреса.

SMTP (Simple Mail Transfer Protocol, простой протокол обмена электронной почтой): определяет формат сообщений, которые SMTP-клиент, работающий на одном компьютере, может использовать для пересылки электронной почты на SMTP-сервер, запущенный на другом компьютере.

TCP (Transmission Control Protocol, протокол управления передачей): протокол ориентирован на работу с подключениями и передает данные в виде потоков байтов. Данные пересылаются пакетами - TCP-сегментами, - которые состоят из заголовков TCP и данных. TCP - "надежный" протокол, потому что в нем используются контрольные суммы для проверки целостности данных и отправка подтверждений, чтобы гарантировать, что переданные данные приняты без искажений.

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

Прикладной напр. HTTP, SMTP, SNMP, FTP, Telnet, SCP, SMB,NFS, RTSP, BGP
Представительский напр. XDR, ASN.1, AFP
Сеансовый напр. TLS, SSL, SSH, ISO 8327 / CCITT X.225, RPC, NetBIOS, ASP
Транспортный напр. TCP, UDP, RTP, SCTP, SPX, ATP, DCCP, GRE
Сетевой напр. IP, ICMP, IGMP, CLNP, OSPF, RIP, IPX, DDP
Канальный напр. Ethernet, Token ring, PPP, HDLC, X.25, Frame relay, ISDN, ATM, MPLS, Wi-Fi, ARP, RARP
Физический напр. электрические провода, радиоканал, волоконно-оптические линии связи

Рисунок 3 – Распределение протоколов TCP/IP в соответствии с моделью ISO/OSI

Например, Web-браузер для формирования виртуального подключения к серверу использует абстракцию программного обеспечения высокого уровня, называемую гнездом (socket). Программное обеспечение гнезда, в свою очередь, применяет TCP для пересылки битов и байтов. TCP сегментирует данные и передает отдельные сегменты модулю IP, который пересылает сегменты в дейтаграммах на Web-сервер.

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

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

Поскольку на прикладном уровне многие программы, в т.ч. пользовательские, могут использовать стек TCP/IP (например, через обращение к сокету), необходимо идентифицировать их. IP-адрес идентифицирует весь стек, а для идентификации программ выделены порты. Можно сказать, что IP — это адрес компьютера (узла, хоста) в сети, а порт — номер конкретного приложения, работающего на этом компьютере (IP-адрес – аналог номера дома, порт – номера квартиры).

Как правило, взаимодействие осуществляется по схеме «клиент-сервер»: "клиент" запрашивает какую-либо информацию (например, страницу сайта), сервер принимает запрос, обрабатывает его и посылает результат. Номера портов серверных приложений общеизвестны, например: почтовый SMTP сервер «слушает» 25-й порт, POP3 сервер, обеспечивающий чтение почты из почтовых ящиков, «слушает» 110-порт, веб-сервер - 80-й порт и пр.

Соединение «клиент-сервер»

«Клиент» запрашивает разрешение на установление соединение, например, при помощи функции (метода) connect библиотеки (класса) Winsocket. «Сервер», в свою очередь, разрешает установление соединения при помощи функции (метода) accept (рисунок 4). Сервер может устанавливать соединения со многими клиентами (рисунок 5). Подробнее об использовании функций библиотеки Winsocket (или методов класса Winsocket) см. в Приложении. Там же содержатся примеры программ на Delphi.

Описание уровней стека ISO/OSI - student2.ru

Рисунок 4. Соединение точка-точка

Описание уровней стека ISO/OSI - student2.ru

Рисунок 5.Соединение точка-много точек

Создание socket'а

Создание socket'а осуществляется следующим системным вызовом #include
<sys/socket.h> int socket (domain, type, protocol) int domain; int type;
int protocol;

Аргумент domain задает используемый для взаимодействия набор протоколов (вид
коммуникационной области), для стека протоколов TCP/IP он должен иметь
символьное значение AF_INET (определено в sys/socket.h).

Аргумент type задает режим взаимодействия:

  • SOCK_STREAM - с установлением соединения;
  • SOCK_DGRAM - без установления соединения.

Аргумент protocolзадает конкретный протокол транспортного уровня (из
нескольких возможных в стеке протоколов). Если этот аргумент задан равным 0, то
будет использован протокол "по умолчанию" (TCP для SOCK_STREAM и UDP для
SOCK_DGRAM при использовании комплекта протоколов TCP/IP).

При удачном завершении своей работы данная функция возвращает дескриптор
socket'а - целое неотрицательное число, однозначно его идентифицирующее.
Дескриптор socket'а аналогичен дескриптору файла ОС UNIX.

При обнаружении ошибки в ходе своей работы функция возвращает число "-1".

Связывание socket'а

Для подключения socket'а к коммуникационной среде, образованной
вычислительной сетью, необходимо выполнить системный вызов bind, определяющий в
принятом для сети формате локальный адрес канала связи со средой. В сетях TCP/IP
socket связывается с локальным портом. Системный вызов bind имеет следующий
синтаксис:

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

int bind (s, addr, addrlen)

int s;

struct sockaddr *addr;

int addrlen;

Аргумент s задает дескриптор связываемого socket'а.

Аргумент addr в общем случае должен указывать на структуру данных, содержащую
локальный адрес, приписываемый socket'у. Для сетей TCP/IP такой структурой
является sockaddr_in.

Аргумент addrlen задает размер (в байтах) структуры данных, указываемой
аргументом addr.

Структура sockaddr_in используется несколькими системными вызовами и
функциями socket-интерфейса и определена в include-файле in.h следующим образом:

struct sockaddr_in {

short sin_family;

u_short sin_port;

struct in_addr sin_addr;

char sin_zero[8];

};

Поле sin_family определяет используемый формат адреса (набор протоколов), в
нашем случае (для TCP/IP) оно должно иметь значение AF_INET.

Поле sin_addr содержит адрес (номер) узла сети.

Поле sin_port содержит номер порта на узле сети.

Поле sin_zero не используется.

Определение структуры in_addr (из того же include-файла) таково:

struct in_addr {

union {

u_long S_addr; /*

другие (не интересующие нас)

члены объединения */

} S_un;

#define s_addr S_un.S_addr

};

Структура sockaddr_in должна быть полностью заполнена перед выдачей
системного вызова bind. При этом, если поле sin_addr.s_addr имеет значение
INADDR_ANY, то системный вызов будет привязывать к socket'у номер (адрес)
локального узла сети.

В случае успеха bind возвращает 0, в противном случае - "-1".

Функции установления связи

Для установления связи "клиент-сервер" используются системные вызовы listen и
accept (на стороне сервера), а также connect (на стороне клиента). Для
заполнения полей структуры socaddr_in, используемой в вызове connect, обычно
используется библиотечная функция gethostbyname, транслирующая символическое имя
узла сети в его номер (адрес).

Ожидание установления связи

Системный вызов listen выражает желание выдавшей его программы-сервера
ожидать запросы к ней от программ-клиентов и имеет следующий вид:

#include <sys/socket.h>

int listen (s, n)

int s;

int n;

Аргумент s задает дескриптор socket'а, через который программа будет ожидать
запросы к ней от клиентов. Socket должен быть предварительно создан системным
вызовом socketи обеспечен адресом с помощью системного вызова bind.

Аргумент n определяет максимальную длину очереди входящих запросов на
установление связи. Если какой-либо клиент выдаст запрос на установление связи
при полной очереди, то этот запрос будет отвергнут.

Признаком удачного завершения системного вызова listen служит нулевой код
возврата.

Функции обмена данными

В режиме с установлением логического соединения после удачного выполнения
пары взаимосвязанных системных вызовов connect (в клиенте) и accept (в сервере)
становится возможным обмен данными.

Этот обмен может быть реализован обычными системными вызовами read и write,
используемыми для работы с файлами (при этом вместо дескрипторов файлов в них
задаются дескрипторы socket'ов).

Кроме того могут быть дополнительно использованы системные вызовы send и
recv, ориентированные специально на работу с socket'ами.

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

Посылка данных

Для посылки данных партнеру по сетевому взаимодействию используется системный
вызов send, имеющий следующий вид

#include <sys/types.h>

#include <sys/socket.h>

int send (s, buf, len, flags)

int s;

char *buf;

int len;

int flags;

Аргумент s задает дескриптор socket'а, через который посылаются данные.

Аргумент buf указывает на область памяти, содержащую передаваемые данные.

Аргумент len задает длину (в байтах) передаваемых данных.

Аргумент flags модифицирует исполнение системного вызова send. При нулевом
значении этого аргумента вызов send полностью аналогичен системному вызову
write.

При успешном завершении send возвращает количество переданных из области,
указанной аргументом buf, байт данных. Если канал данных, определяемый
дескриптором s, оказывается "переполненным", то send переводит программу в
состояние ожидания до момента его освобождения.

Получение данных

Для получения данных от партнера по сетевому взаимодействию используется
системный вызов recv, имеющий следующий вид

#include <sys/types.h>

#include <sys/socket.h>

int recv (s, buf, len, flags)

int s;

char *buf;

int len;

int flags;

Аргумент s задает дескриптор socket'а, через который принимаются данные.

Аргумент buf указывает на область памяти, предназначенную для размещения
принимаемых данных.

Аргумент len задает длину (в байтах) этой области.

Аргумент flags модифицирует исполнение системного вызова recv. При нулевом
значении этого аргумента вызов recv полностью аналогичен системному вызову read.

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

Функции закрытия связи

Для закрытия связи с партнером по сетевому взаимодействию используются
системные вызовы close и shutdown.

Системный вызов close

Для закрытия ранее созданного socket'а используется обычный системный вызов
close, применяемый в ОС UNIX для закрытия ранее открытых файлов и имеющий
следующий вид

int close (s)

int s;

Аргумент s задает дескриптор ранее созданного socket'а.

Однако в режиме с установлением логического соединения (обеспечивающем, как
правило, надежную доставку данных) внутрисистемные механизмы обмена будут
пытаться передать/принять данные, оставшиеся в канале передачи на момент
закрытия socket'а. На это может потребоваться значительный интервал времени,
неприемлемый для некоторых приложений. В такой ситуации необходимо использовать
описываемый далее системный вызов shutdown.

Сброс буферизованных данных

Для "экстренного" закрытия связи с партнером (путем "сброса" еще не
переданных данных) используется системный вызов shutdown, выполняемый перед
close и имеющий следующий вид

int shutdown (s, how)

int s;

int how;

Аргумент s задает дескриптор ранее созданного socket'а.

Аргумент how задает действия, выполняемые при очистке системных буферов
socket'а:

0 - сбросить и далее не принимать данные для чтения из socket'а;

1 - сбросить и далее не отправлять данные для посылки через socket;

2 - сбросить все данные, передаваемые через socket в любом направлении.

5. Пример использования socket-интерфейса

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

Содержательная часть программ примитивна:

сервер, приняв запрос на соединение, передает клиенту вопрос "Who are you?";

клиент, получив вопрос, выводит его в стандартный вывод и направляет серверу
ответ "I am your client" и завершает на этом свою работу;

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

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

Программа-сервер

Текст программы-сервера на Delphi выглядит следующим
образом

program Server;

{$APPTYPE CONSOLE}

{ Для использования winsock необходимо описать этот модуль в uses. }

uses

sysutils,

winsock;

{ дефолтовый порт Socks прокси. Сюда можно вписать любой порт,

превратив наш сканнер, к примеру, в httpd (80 порт) сканнер. }

const

port = 27015;

{ Здесь объявляем переменные }

var

D:WSAData;

S, testSocket:TSocket;

mySocket: TSockAddr;

newSocketAddr: tSockAddrIn;

Address_Size: Integer;

x: char;

begin

writeln('- Client started:' );

writeln;

{ Если WSAStartup() возвращает не нулевое значение, выводим сообщение об ошибке

и выходим из программы}

if WSAStartup($101,D)<>0 then

begin

writeln('error..');

exit;

end;

{ Создаем сокет }

S:=socket(AF_INET,SOCK_STREAM,0);

writeln (S);

{ Если возвращено значение INVALID_SOCKET, выводим сообщение об ошибке }

if S=INVALID_SOCKET then

writeln('socket error');

{ связывание сокета }

mySocket.sin_family:=AF_INET;

mySocket.sin_addr.S_addr:=INADDR_ANY;

mySocket.sin_port := htons(port);

if bind (S, mySocket, sizeof( mySocket ) ) = 0 then

writeln(' socket bound') else

writeln(' socket not bound');

readln;

if listen(S,10) = 0 then

writeln(' listening to the NET') else

writeln(' failed to listen');

Address_Size := sizeof ( newSocketAddr );

writeln (Address_Size);

testSocket := -1;

while testSocket <= 0 do

begin

writeln('_____');

testSocket:=accept(S, @newSocketAddr, @Address_Size);

end;

writeln(' client accepted');

writeln ( recv(testSocket, x, sizeof(x), 0));

writeln (x);

writeln ( send(testSocket, x, sizeof(x), 0));

{ Завершаем работу с сокетами }

WSACleanup;

writeln('- Socket closed -');

readln;

{end; }

end.

Программа-клиент

Текст программы-клиента на языке программирования Delphi выглядит следующим
образом

program Client;

{$APPTYPE CONSOLE}

{ Для использования winsock необходимо описать этот модуль в uses. }

uses

sysutils,

winsock;

{ дефолтовый порт Socks прокси. Сюда можно вписать любой порт,

превратив наш сканнер, к примеру, в httpd (80 порт) сканнер. }

const

port = 27015;

{ Здесь объявляем переменные }

var

D:WSAData;

S:TSocket;

A, mySocket:TSockAddr;

begin

writeln('- Client started:' );

writeln;

{ Если WSAStartup() возвращает не нулевое значение, выводим сообщение об ошибке

и выходим из программы}

if WSAStartup($101,D)<>0 then

begin

writeln('error..');

exit;

end;

{ Создаем сокет }

S:=socket(AF_INET,SOCK_STREAM,0);

{ Если возвращено значение INVALID_SOCKET, выводим сообщение об ошибке }

if S=INVALID_SOCKET then

writeln('socket error');

{ связывание сокета }

mySocket.sin_family:=AF_INET;

mySocket.sin_addr.S_addr:=INADDR_ANY;

if bind (S, mySocket, sizeof( mySocket ) ) = 0 then

writeln(' socket bound') else

writeln(' socket not bound');

readln;

{ Определяем сокет для установления соединения }

A.sin_family:=AF_INET;

A.sin_addr.S_addr:=inet_addr(pchar('192.168.0.7'));

{ Определяем порт (задается константой) }

A.sin_port:=htons(port);

{ Пытаемся подконнектиться, если удачно - выводим сообщение, что порт открыт,

в другом случае - сообщение о том, что порт закрыт (или недоступен) }

if connect(S,A,sizeof(A))=0 then

writeln(' port opened') else

writeln(' port closed');

readln;

{end;}

{ Завершаем работу с сокетами }

WSACleanup;

writeln;

writeln('- Socket closed -');

{end; }

end.

По материаллам сайта: www.realcoding.net

Информационные сети

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

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

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

Международная Организация по Стандартам (International Standards Organization, ISO) разработала модель, которая четко определяет различные уровни взаимодействия систем, дает им стандартные имена и указывает, какую работу должен делать каждый уровень. Эта модель называется моделью взаимодействия открытых систем (Open System Interconnection, OSI), или моделью ISO/OSI.

В модели OSI взаимодействие делится на семь уровней, или слоев, как показано на рисунке 1. Каждый уровень имеет дело с одним определенным аспектом взаимодействия. Таким образом, проблема взаимодействия разделена на 7 частных проблем, каждая из которых может быть решена независимо от других. Каждый уровень поддерживает интерфейсы с выше- и нижележащими уровнями.

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

Описание уровней стека ISO/OSI - student2.ru

Рисунок 1. Модель взаимодействия открытых систем ISO/OSI

Описание уровней стека ISO/OSI

1. Физический – передача битов по физическому каналу, определяют уровни сигналов, способов канального кодирования, типы сигналов, скорость передачи. Эти задачи (в случае сети) выполняет контроллер порта, в общем случае – сетевой адаптер. Здесь не берутся в расчет уровни сигнала.

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

3. Сетевой – доставка данных между сетями, формирование пакетов.

4. Транспортный– обеспечение связи между оконечными пунктами, сборка, разборка пакетов, реализация надежности передач.

5. Сеансовый - управление диалогом, синхронизация, возврат при контроле передачи, тип связи, управление режимом обмена запросами и ответами.

6. Уровень представления- кодирование, форматирование в соответствии с принятым стандартом, ограничение доступа информации (кодер, декодер источника).

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

Стек TCP/IP

В основе работы глобальной сети Интернет лежит набор (стек) протоколов TCP/IP. Cтек протоколов TCP/IP — это набор правил обмена информацией. TCP/IP - это аббревиатура термина Transmission Control Protocol/Internet Protocol (протокол управления передачей/протокол Internet). Фактически TCP/IP –это не один протокол, а несколько, поэтому его называют стеком протоколов, среди которых TCP и IP - два основных (рисунок 2).

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

ISO/OSI TCP/IP

_____________________________ __________________________

| Уровень прикладных программ | | |

|_____________________________| | _________ _________ |

_____________________________ | |Сетевая | |Сетевая | | Уровень

| Уровень представления | | |программа| |программа| | прикладных

|_____________________________| | |_________| |_________| | программ

_____________________________ | |

| Уровень сеанса | | |

|_____________________________| |__________________________|

| |

_____________________________ _____|_____________|______

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

|_____________________________| |_____|_____________|______| уровень

| |

_____________________________ _____|_____________|______

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

|_____________________________| | ----> IP <--- | уровень

|__________________________|

_________

_____________________________ _______| Сетевая |________

| Канальный уровень | | ARP<->| плата |<->RARP | Уровень

|_____________________________| |_______|_________|________| звена

| данных

_____________________________ |

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

|_____________________________| Кабельные соединения сети уровень

Рисунок 2 – Стек ISO/OSI (слева) и стек TCP/IP (справа)

TCP/IP позволяет самостоятельным сетям подключаться к Internet или объединяться для создания частных интрасетей. Вычислительные сети, составляющие интрасеть, физически подключаются через устройства, называемые маршрутизаторами, или IP-маршрутизаторами. Маршрутизатор - это компьютер, который передает пакеты данных из одной сети в другую. В интрасети, работающей на основе TCP/IP, информация передается в виде дискретных блоков, называемых IP-пакетами (IP packets) или IP-дейтаграммами (IP datagrams). Программное обеспечение TCP/IP скрывает маршрутизаторы и базовую архитектуру сетей и делает так, что она кажется всем участникам обмена одной большой сетью. Подключения идентифицируются 32-разрядными IP-адресами, которые записываются в форме десятичных чисел, разделенных точками (например, 128.10.2.3). Взяв IP-адрес удаленного компьютера, компьютер в интрасети или в Internet может отправить данные на него, как будто они составляют часть одной и той же физической сети.

IP - самый фундаментальный протокол из комплекта TCP/IP - передает IP-дейтаграммы по интрасети и выполняет важную функцию, называемую маршрутизацией, т.е. выбора маршрута, по которому дейтаграмма будет следовать из пункта А в пункт B, и использование маршрутизаторов для "прыжков" между сетями.

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

Другой важный член комплекта TCP/IP - User Datagram Protocol (UDP, протокол пользовательских дейтаграмм), который похож на TCP, но более примитивен. TCP - "надежный" протокол, потому что он обеспечивает проверку на нал

Наши рекомендации