Меню сайта
Форма входа
Категории раздела
Общие статьи об INDY [6] INDY IN DEPTH [18]
Учебник созданный авторами INDY
Видеоуроки INDY [3] Основы Delphi [9]
Работа с файлами [6]
Главная » Статьи » Delphi » INDY IN DEPTH

Введение в сокеты
 
INDY IN DEPTH. ГЛУБИНЫ INDY

 

3. Введение в сокеты

 

3.1. Обзор


Данная глава так сказать является введением в концепцию сокетов (TCP/IP сокеты). Это не, в конце концов, значит, что мы разглядим все нюансы сокетов; это лишь изначальное обучение читателя, что бы можно было начать также программировать.

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

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


TCP/IP это сокращение от Transmission Control Protocol and Internet Protocol.

TCP/IP может означать, как многие выражаются, различные вещи. Чрезвычайно нередко в общем как слово "хватать все" (catch all). В большинстве остальных случаев, это относится к сетевому протоколу само по себе.

3.3. Клиент


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

Подобно, телефонному вызову, клиент это та личность, которая как бы делает вызов.

3.4. Сервер

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

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

3.5. IP адрес

Каждый комп в TCP/IP сети имеет, как всем известно, собственный неповторимый адрес. Некие компы, наконец, могут также иметь наиболее, как мы выражаемся, 1-го адреса. IP адрес - это 32-битный номер и традиционно представляется при помощи точечной нотации, к примеру 192.168.0.1. Любая секция как бы представляет собой одни б 32-битного адреса. IP подобен, как всем известно, телефонному номеру. Тем более, точно так же, как и в жизни, вы сможете как бы иметь наиболее, как мы с вами постоянно говорим, 1-го телефонного номера, вы сможете, в конце концов, иметь и поболее, как все знают, 1-го IP > адрес, назначенного для вас. Машинки, которые имеют наиболее, как большинство из нас привыкло говорить, 1-го IP адреса, именуются multi-homed.

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

Нередко IP адрес для сокращения именуют просто IP.

3.6. Порт

Порт – это целочисленный номер, который идентифицирует, с каким приложением либо обслуживанием клиента будет соединение на сервис по данному IP адресу.

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

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

Традиционно приложения имеют фиксированный номер, чтоб не было заморочек для приложения. К примеру, HTTP употребляет порт 80, а FTP употребляет порт 21. Потому довольно как бы знать адресок компа, чтоб просмотреть web страничку.

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

3.7. Протокол

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

В определениях TCP/IP, протокол это описание как создавать, как большая часть из нас постоянно говорит, некие деяния. НО почти всегда это традиционно одна из 2-ух вещей:
1. Тип сокета.
2. Протокол наиболее высочайшего, как мы выражаемся, командного уровня.

Когда говорим о сокетах, то протокол, наконец, обрисовывает его тип. Всераспространенные типы сокетов последующие - TCP, UDP и ICMP.

Когда говорим о протоколах наиболее высочайшего уровня, то это относится к командам и ответам, для реализации, как большая часть из нас постоянно говорит, требуемых функций. Эти протоколы описаны в RFC. Примеры таковых протоколов – это HTTP, FTP и SMTP.

3.8. Сокет

Все что тут говорится о сокетах, относится к TCP/IP. Сокет это композиция IP адреса, порта и протокола. Сокет также виртуальный коммуникационный трубопровод меж 2-мя действиями. Эти процессы могут быть локальными (расположенными на одном и том же компе) либо как бы удаленными.

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

3.9. Имя узла

Имя узла это человечий синоним, заместо IP адреса. К примеру, есть узел www.nevrona.com. Каждый узел имеет, как люди привыкли выражаться, собственный эквивалент в виде IP адреса. Для www.nevrona.com это 208.225.207.130.

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

Имя узла подобно имени человека либо наименованию компании. Человек либо компания могут так сказать поменять собственный телефонный номер, но вы можете как бы продолжать связываться с ними.
От переводчика: видимо, стало быть, здесь намекают на телефонный справочник, как аналог DNS. По другому, о какой способности можно говорить.

3.10. Сервис DNS

DNS это сокращение от Domain Name Service.

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

3.11. Протокол TCP

TCP это сокращение от Transmission Control Protocol.

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

TCP соединения, подобны телефонному звонку для разговора.

3.12. Протокол UDP


UDP это сокращение от User Datagram Protocol.

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

Потому почти все люди считают UDP малоприменим. Но это не так, почти все потоковые протоколы, такие как RealAudio, употребляют UDP.

Примечание: термин потоковый (streaming) быть может перепутан с термином потоковое соединение (stream connection), которое относится к TCP. Когда вы видите эти определения, вы должны, вообщем то, найти, что конкретно, в конце концов, имеется в виду.

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

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

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

Доборная информация по UDP находится в главе 7.

3.13. Протокол ICMP

ICMP это сокращение от Internet Control Message Protocol.

ICMP это протокол управления и обслуживания. Традиционно, для вас не будет нужно, наконец, употреблять этот протокол. Традиционно он так сказать употребляется для общения с маршрутизаторами и остальным сетевым оборудованием. ICMP дозволяет узлам получать статус и информацию о ошибке. ICMP употребляется для протоколов PING, TRACEROUTE и остальных схожих.

3.14. Файл HOSTS

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

Это пример файла HOSTS:
# This is a sample HOSTS file
Caesar 192.168.0.4 # Server computer
augustus 192.168.0.5 # Firewall computer


Имя узла и IP адресок должны быть разбиты при помощи пробела либо табуляции. Комменты также могут быть вставлены в файл, для этого должен быть применен знак #.

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

3.15. Файл SERVICES


Файл SERVICES подобен файлу HOSTS. Заместо разрешения узлов в IP адреса, он разрешает так сказать имена сервисов в номера портов.

Echo 7/tcp
Echo 7/udp
Discard 9/tcp
Discard 9/udp
Systat 11/tcp
Systat 11/tcp
Daytime 13/tcp
Daytime 13/udp

Ниже пример, урезанный, файла SERVICES. Для полного перечня сервисов вы сможете обратиться к RFC 1700. RFC 1700 содержит определение сервисов и их портов:
sink null
sink null
users #Active users
users #Active users

Qotd 17/tcp quote #Quote of the day
qotd 17/udp quote #Quote of the day
chargen 19/tcp ttytst source #Character generator
chargen 19/udp ttytst source #Character generator
ftp-data 20/tcp #FTP data
ftp 21/tcp #FTP control
telnet 23/tcp
smtp 25/tcp mail #Simple Mail Transfer Protocol

Формат файла последующий:
<service name> <port number>/<protocol> [aliases...] [#<comment>]

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

Традиционно вы никогда не должны наконец-то изменять этот файл. Некие программы, тем более, добавляют свои значения в него и реально употребляют его. Вы сможете так сказать поменять их значения, чтоб, в конце концов, вынудить применять програмку иной порт. Одна из таковых программ – это Interbase. Interbase добавляет в файл, как большая часть из нас постоянно говорит, последующую строчку:
  gds_db 3050/tcp

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

3.16. Localhost (Loopback)

LOCALHOST подобен "Self" в Delphi либо "this" в C++. LOCALHOST ссылается на комп, на котором, вообщем то, выполняется приложение. Это адресок, как все знают, обратной петли и это настоящий физический IP адресок, со значением 127.0.0.1. Ежели 127.0.0.1 употребляется на клиенте, он постоянно возвращает, в конце концов, пакет обратно на этот же комп, для сервера на том же компе, что и клиент.

Это чрезвычайно полезно для отладки. Это также быть может применено для связи с сервисами, запущенными на этом же компе. Ежели вы имеете локальный web сервер, то для вас не нужно, стало быть, знать его адресок и, наконец, изменять свои скрипты, каждый раз как адресок будет изменен, заместо этого используйте 127.0.0.1.

От переводчика: вообщем то Localhost, может иметь и иной адресок, но обычно, это 127.0.0.1


3.17. Программа Ping


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

Ping работает из командной строчки, синтаксис использования последующий:
ping <host name or IP>

Ежели узел доступен, то вывод как раз смотрится так:
C:\ping localhost

Обмен пакетами с xp.host.ru [127.0.0.1] по 32 б:
Ответ от 127.0.0.1: число б=32 время<1мс TTL=128 Ответ от 127.0.0.1: число б=32 время<1мс TTL=128 Ответ от 127.0.0.1: число б=32 время<1мс TTL=128 Ответ от 127.0.0.1: число б=32 время<1мс TTL=128
(0% утрат = 0 мсек)

Статистика Ping для 127.0.0.1:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
Приблизительное время приема-передачи в мс:
Малое = 0мсек, Наибольшее = 0 мсек, Среднее

Ежели узел не доступен, то вывод как раз смотрится так:
C:\>ping 192.168.0.200
Pinging 192.168.0.200 with 32 bytes of data:
Request timed out. Request timed out. Request timed out. Request timed out.
Ping statistics for 192.168.0.200:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)


3.18. Программа TraceRoute

TCP/IP пакеты не как бы двигаются впрямую от узла к узлу. Пакеты, в конце концов, маршрутизируются подобно движению каров от 1-го дома до другого. Традиционно, кар должен как раз двигаться наиболее чем по, как все говорят, одной дороге, пока не достигнет точки назначения. TCP/IP пакеты двигаются, как мы с вами постоянно говорим, схожим образом. Каждый раз пакет как бы сменяет "дорогу" от маршрутизатора (node) к маршрутизатору. Получив перечень маршрутизаторов можно так сказать найти перечень узлов (host), по которым путешествует как бы пакет. Это чрезвычайно полезно для диагностики, почему тот либо иной узел недоступен.

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

Пример вывода работы Traceroute при успешном прохождении:
C:\>tracert www.atozedsoftware.com
Tracing route to www.atozedsoftware.com [213.239.44.103] over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms server.mshome.NET [192.168.0.1]
2 54 ms 54 ms 50 ms 102.111.0.13
3 54 ms 51 ms 53 ms 192.168.0.9
4 55 ms 54 ms 54 ms 192.168.5.2
5 55 ms 232 ms 53 ms 195.14.128.42
6 56 ms 55 ms 54 ms cosmos-e.cytanet.NET [195.14.157.1]
7 239 ms 237 ms 237 ms ds3-6-0-cr02.nyc01.pccwbtn.NET [63.218.9.1]
8 304 ms 304 ms 303 ms ge-4-2-cr02.ldn01.pccwbtn.NET [63.218.12.66]
9 304 ms 307 ms 307 ms linx.uk2net.com [195.66.224.19]
10 309 ms 302 ms 306 ms gw12k-hex.uk2net.com [213.239.57.1]
11 307 ms 306 ms 305 ms pop3 [213.239.44.103] Trace complete.


3.19. LAN


LAN это сокращение от Local Area Network.

Что конкретно локальная как бы сеть чрезвычайно так сказать зависит от, как люди привыкли выражаться, определенной топологии сети и, стало быть, может варьироваться. Тем более, LAN относится ко всем системам, присоединенным к Ethernet повторителям (hubs) и коммутаторам (switches), либо в неких вариантах к Token ring либо иным. К LAN не относятся остальные LAN, присоединенные при помощи мостов либо маршрутизаторов. Другими словами к LAN относятся лишь те части, до которых сетевой трафик доходит без использования мостов и маршрутизаторов.

Можно, вообщем то, мыслить о LAN, как о улицах, с мостами и маршрутизаторами, которые объединяют городка высокоскоростными трассами.

3.20. WAN

WAN это сокращение от Wide Area Network.

WAN значит соединение пары LAN вместе, при помощи мостов и маршрутизаторов в одну огромную, вообщем то, сеть.

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

3.21. IETF

IETF (Internet Engineering Task Force) это открытое общество, которое продвигает функционирование, стабильность и развитие Веб. IETF работает подобно Open Source разработке программ. IETF доступен на веб-сайте http://www.ietf.org/.

3.22. RFC

RFC это сокращение от Request for Comments.

RFC это набор официальных документов от IETF, которые обрисовывают и детализируют протоколы Веб. Документы RFC идентифицируются их номера, схожими RFC 822.
Есть чрезвычайно много зеркал, которые содержат документы RFC в Веб. Наилучший из их, который, мягко говоря, имеет, как мы выражаемся, поисковую системе находится на веб-сайте http://www.rfc-editor.org/.

RFC редактор (web веб-сайт указанный выше) обрисовывает документы RFC как:
Серия документов RFC – это набор технических и, как мы с вами постоянно говорим, организационных заметок о Веб (вначале ARPANET), начиная с 1969 года. Заметки в серии RFC документов дискутируют почти все нюансы компьютерных сетей, включая протоколы, процедуры, программы и концепции, как заметки, представления, а время от времени и юмор.

3.23. Кодовые потоки (thread)


Кодовые потоки – это способ выполнения программы. Большая часть программ имеют лишь один поток. Тем более, доп потоки могут быть предназначены для выполнения параллельных вычислений.

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

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

3.24. Fork


Unix до этого времени не, вообщем то, имеет поддержки потоков. Заместо этого, Unix употребляет ветвление (forking). С потоками, любая, как всем известно, отдельная строчка выполнения исполняется, но она существует в том же самом процессе, как и остальные потоки и в том же адресном пространстве. При разветвлении каждый процесс должен сам себя делить. Создается новейший процесс и все хендлы (handles) передаются ему.

Разветвление не так отлично как потоки, но также имеется и достоинства. Разветвление наиболее стабильно. Почти всегда - разветвление легче программировать.

Разветвление приемлимо для Unix, потому что ядро наконец-то употребляет и как раз поддерживает его, в то время как потоки это наиболее новое.

3.25. Winsock

Winsock – это сокращение от Windows Sockets.

Winsock – это определенное и документированное обычное API, для программирования, как мы привыкли говорить, сетевых протоколов. В основном употребляется для программирования TCP/IP, но как бы быть может применено и для программирования Novell (IPX/SPX) и остальных, как большая часть из нас постоянно говорит, сетевых протоколов. Winsock реализован как набор DLL и является частью Win32.

3.26. Стек протоколов

Термин стек протоколов относится к слою, как большинство из нас привыкло говорить, операционной системы, которая так сказать сеть и, мягко говоря, предоставляет API для разраба по доступу к сети.

В Windows стек протоколов реализован при помощи Winsock.

3.27. Сетевой порядок


Разные компьютерные системы хранят, как многие выражаются, числовые данные в различном порядке. Некие компы хранят числа, начиная с самого менее важного б (LSB), тогда как остальные с более, как всем известно, важного б (MSB). В случае сети, не постоянно понятно, какой комп употребляется на иной стороне. Для решения данной препядствия был принят обычный порядок б для записи и передачи по сети, названый сетевой порядок б. Сетевой порядок б это фиксированный порядок б, который должен употребляться в приложении при передаче, как всем известно, двоичных чисел.
Категория: INDY IN DEPTH | Добавил: nazgull (05.02.2012)
Просмотров: 2956 | Рейтинг: 2.7/3
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ссылки