11
можно определить, через какие узлы и в течение какого времени проходили па-
кеты по |
сети до |
заданной адресной |
точки. Версия BSD утилиты ping в |
|
ОС UNIX позволяет выполнять очень широкий набор функций по протоколи- |
||||
рованию |
и трассировке соединений. В |
других ОС (например, |
в Windows |
|
NT) часть |
функций |
трассировки выделена в другую утилиту |
- traceroute |
|
(в Windows NT - tracert), а утилита ping позволяет только проверить наличие соединения.
Сервисные утилиты ping и traceroute зачастую требуют для своего запуска наличия у пользователя административных прав. Это связано с тем, что при трассировке соединений они посылают в сеть большое число пакетов, не несущих никакой полезной информации. Неквалифицированное или преднамеренно злоумышленное использование этих утилит может привести к значительному росту трафика сети, что в свою очередь может осложнить работу многих прикладных программ.
Указанные сервисные утилиты выполняют в основном отладочные, а не прикладные функции. Они чаще всего используются административным персоналом сетей и узлов для проверки исправности оборудования и правильности настроек программных систем. Они также полезны разработчикам прикладных программ, ориентированных на работу в сети, для проверки отклика этих программ на входящие сообщения. Версии этих утилит во многих ОС (прежде всего - под ОС UNIX) позволяют получить дополнительную отладочную информацию, полезную разработчикам программ при отладке. Например, возможна распечатка содержимого входных и выходных пакетов, распечатка заголовков пакетов (в стандартных утилитах ping и tracert под графической оболочкой типа Windows такие отладочные функции не предоставляются).
Лабораторная работа № 2 Взаимодействие прикладных программ с помощью транспортных прото-
колов сети Интернет
Цель работы: изучение принципов работы транспортных протоколов Интернет, разработка прикладных программ, осуществляющих взаимодействие между собой на основе этих протоколов.
Для выполнения лабораторной работы требуется написать программу, которая выполняется под управлением ОС типа Windows или UNIX и исполь-
зует для взаимодействия с другими программами заданный протокол сети Интернет. Для разработки программы рекомендуется использовать среду Delphi версии 3.0 или старше под управлением ОС типа Windows.
Краткие теоретические сведения Транспортный протокол TCP сети Internet
12
TCP (Transmission Control Protocol) - это один из самых широко распро-
страненных протоколов транспортного уровня. Главная функция TCP заключается в доставке сообщений без потерь, чего не может гарантировать протокол более низкого уровня IP (Internet Protocol). Для доставки сообщений предварительно устанавливается соединение между процессомотправителем и процессом-получателем. Данное соединение осуществляет надежную доставку дейтаграмм. Протокол TCP производит повторную передачу искаженного или утерянного пакета.
Выделение всех функций, необходимых для надежной доставки сообщений, в отдельный уровень освобождает разработчиков прикладных программ и утилит от решения задач управления потоком дейтаграмм. Протокол обеспечи-
вает сквозную передачу данных от отправителя |
к получателю. Посколь- |
ку TCP ориентирован на установление соединения, |
то адресат, получивший |
дейтаграмму, должен уведомить отправителя об этом. Подразумевается, что между отправителем и получателем устанавливается виртуальный канал, где они обмениваются сообщениями, часть из которых есть подтверждения о получении данных либо коды ошибок. Виртуальный канал на самом деле может подразумевать несколько реальных физических каналов передачи данных, поскольку сообщение может проходить через один или несколько шлюзов.
Когда некоторое приложение (процесс) прикладного уровня отправляет сообщение другому приложению с помощью TCP, предполагается, что сообщение является потоком, т.е. представляет собой поток байтов, передаваемых асинхронно. TCP получает поток байтов и собирает его в пакеты (сегменты), добавляя заголовки в начало сегментов. Длина сегмента обычно определяется протоколом или выбирается администратором системы.
Процесс обмена данными начинается с передачи запроса на установление соединения от машины-отправителя к машине-получателю. В запросе содержится специальное целое число, называемое номером сокета (socket). В ответ получатель посылает номер своего сокета. Номера сокетов отправителя и получателя однозначно определяют соединение (конечно, соединение также не возможно без указания IP-адресов отправителя и получателя, но эта задача решается протоколами более низкого уровня - IP).
После установления соединения TCP начинает передавать сегменты сообщения. На более низком IP-уровне отправителя сегменты разбиваются на одну или несколько дейтаграмм. Пройдя через сеть, дейтаграммы поступают к получателю, где IP-уровень снова собирает из них сегменты и передает их TCP. TCP собирает все сегменты в сообщение. От TCPсообщение поступает к про- цессу-получателю, где обрабатывается протоколом прикладного уровня.
TCP на машине-получателе собирает целое сообщение из сегментов, руководствуясь порядковыми номерами сегментов, которые записаны в их заголовке. Если какой-то сегмент сообщения потерян или поврежден (что проверяется по контрольной сумме в заголовке сегмента), то отправителю посылается сообщение, содержащее номер ошибочного сегмента. В этом случае отправитель повторно передает сегмент. Если сегмент успешно принят, то получатель посылает отправителю подтверждение-квитанцию (ACK - acknowledgement).
13
В TCP применяется средство ограничения потока данных, называемое скользящим окном. Оно представляет собой фрагмент сообщения, которые адресат готов принять. При установлении соединения отправителю сообщается размер окна (размер окна кратен размеру сегмента). После того, как отправитель передал количество байтов, соответствующее размеру окна, он должен ждать квитанции. Как только будет получена квитанция на переданные сегменты, окно сдвигается вправо на соответствующее число байтов, и новые сегменты могут быть переданы. Отправитель может передать без получения квитанций в сеть максимально столько сегментов, сколько их укладывается в скользящем окне. В процессе обмена данными получатель может присылать квитанции, в которых будет указан новый размер скользящего окна. Принципы работы скользящего окна на 7 сегментов сообщения отражены на рис. 5.
Важную роль в протоколе TCP играют таймеры. Сегмент считается потерянным, если квитанция на него не поступила в течение заданного времени ожидания. При этом производится повторная передача сегмента. При получении квитанции таймер останавливается. Если получатель обнаруживает несколько правильных копий одного и того же сегмента, то все лишние копии просто отбрасываются и отправителю передается только одна квитанция.
Номера портов и сокеты
Приложение (процесс), использующее TCP однозначно определяется числом - номером порта (сокета). В принципе, номера портов можно назначать процессам произвольно, но для облегчения взаимодействия между различными программами прикладного уровня приняты соглашения о номерах портов, закрепленных за определенными службами Internet. Номера портов наиболее известных служб сети приведены в табл. 4.
Таблица 4 Номера портов наиболее употребительных служб сети Internet
|
|
|
|
|
Номер |
|
Служба |
|
Описание |
порта |
|
сети |
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
Зарезервирован |
|
|
|
|
|
|
|
|
|
|
7 |
|
echo |
|
Эхо-ответ на входящие сообщения |
|
|
|
|
|
|
|
|
|
|
9 |
|
discard |
|
Сброс (поглощение) всех входящих сообщений |
|
|
|
|
|
|
|
|
|
|
11 |
|
users |
|
Активные пользователи |
|
|
|
|
|
|
|
|
|
|
13 |
|
daytime |
|
Отклик, содержащий время дня |
|
|
|
|
|
|
|
|
|
|
19 |
|
chargen |
|
Генератор символов |
|
|
|
|
|
|
|
|
|
|
20 |
|
ftp data |
|
Передача данных по протоколу FTP |
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
|
|
|
|
|
21 |
|
ftp |
|
Передача управляющих команд по протоколу FTP |
|
|
|
|
|
|
|
|
|
|
23 |
|
telnet |
|
Порт подключения по протоколу TELNET |
|
|
|
|
|
|
|
|
|
|
25 |
|
smtp |
|
Протокол передачи почтовых сообщений SMTP |
|
|
|
|
|
|
|
|
|
|
37 |
|
time |
|
Отклик, содержащий время |
|
|
|
|
|
|
|
|
|
|
42 |
|
name |
|
Сервер имен |
|
|
|
|
|
|
|
|
|
|
43 |
|
whois |
|
Кто это |
|
|
|
|
|
|
|
|
|
|
53 |
|
domain |
|
Сервер имен доменов |
|
|
|
|
|
|
|
|
|
|
67 |
|
boots |
|
Протокол удаленной загрузки сервера |
|
|
|
|
|
|
|
|
|
|
68 |
|
bootc |
|
Протокол удаленной загрузки клиента |
|
|
|
|
|
|
|
|
|
|
69 |
|
tftp |
|
Упрощенный протокол передачи файлов TFTP |
|
|
|
|
|
|
|
|
|
|
79 |
|
finger |
|
Протокол получения информации о пользователях FINGER |
|
|
|
|
|
|
|
|
|
|
80 |
|
http |
|
Протокол передачи гипертекста HTTP |
|
|
|
|
|
|
|
|
|
|
109 |
|
pop2 |
|
Протокол почтового ящика POP2 |
|
|
|
|
|
|
|
|
|
|
110 |
|
pop3 |
|
Протокол почтового ящика POP3 |
|
|
|
|
|
|
|
|
|
|
111 |
|
rpc |
|
Протокол удаленного вызова процедур RPC |
|
|
|
|
|
|
|
|
|
|
156 |
|
sqlserv |
|
Служба SQL |
|
|
|
|
|
|
|
|
|
|
161 |
|
snmp |
|
Управляющий протокол SNMP |
|
|
|
|
|
|
|
|
|
|
В формате сообщения протокола TCP под номер порта отводится 16 бит, поэтому максимально возможным номером порта является число 65535. Номера портов от 0 до 255 строго зарезервированы под системные нужды, их не допускается использовать в прикладных программах. В интервале от 256 до 1023 многие порты также используются сетевыми службами, поэтому и их не рекомендуется применять для прикладных нужд. Как правило, большинство прикладных приложений, построенных на основе TCP/IP используют номера портов в диапазоне от 1024 до 5000. Рекомендуется использовать номера от 3000 до 5000, номера выше 5000 используются чаще всего для краткосрочного применения.
Любой канал связи в TCP определяется двумя числами - эта комбинация называется сокетом. Таким образом, сокет определяется IP-адресом ЭВМ и но-
15
мером порта, используемым программным обеспечением TCP. При соединении любая машина однозначно определена IP-адресом, а каждый процесс - портом, поэтому соединение между двумя процессами однозначно определяется сокетом. Схема установления соединения по протоколу TCP между тремя ЭВМ в сети отражена на рис. 6.
Взаимодействующие ЭВМ ведут таблицы всех активных портов отправителей и получателей. Если между двумя машинами происходит обмен данными, то порт, который в одной из них является отправителем, в другой будет получателем и наоборот. Если машина отправитель запрашивает несколько соединений, то у каждого из них свой порт-отправитель, а порт получателя может быть общим. Несколько машин могут одновременно использовать один и тот же порт получатель, это называется мультиплексированием. На рис. 6 мультиплексирование двух соединений выполняется на ЭВМ 3 по порту номер 23.
Когда устанавливается несколько соединений, то может случиться, что несколько машин пошлют запросы на соединение, в которых указаны одинаковые порты источники и получатели, Однако путаницы с соединениями не возникает, потому что IP-адреса у всех машин разные, следовательно, каждое соединение будет однозначно определено своим сокетом.
Протокол передачи сообщений UDP
Протокол UDP (User Datagram Protocol) является более простым транспортным протоколом, чем протокол TCP. Он предоставляет прикладным процессам услуги транспортного уровня, которые мало чем отличаются от услуг более низкого уровня, предоставляемых протоколом IP. Протокол UDP обеспечивает доставку дейтаграмм, но не требует подтверждения их получения. Поэтому он не требует установления соединения между передающим и принимающим процессами.
Протокол UDP используется в тех случаях, когда требуется передать данные без установления соединения. Такая связь в принципе не надежна, так как отправителю не сообщается, правильно ли принято его сообщение и получено ли оно вообще. Для проверки возникновения ошибок может использоваться контрольная сумма пакета, но ошибки никак не обрабатываются - они либо игнорируются, либо их обработка выполняется уже на более высоком, прикладном уровне.
Данные, отправляемые прикладным процессом через UDP, достигают места назначения как единое целое, не дробясь на части. Например, если про- цесс-отправитель передал пять сообщений через порт, то и процесс получатель должен считать из порта пять сообщений. Размер каждого записанного сообщения должен совпадать с размером каждого прочитанного.
Протокол UDP используется тогда, когда требуется простейший механизм передачи данных. Тогда контроль ошибок либо не выполняется (например, в прикладном протоколе TFTP - Trivial File Transfer Protocol - простейший протокол передачи файлов), либо выполняется на прикладном уровне (напри-
мер, в управляющем протоколе SNMP - |
Simple Network Management |
Protocol или в файловой системе NFS |
- Network File System). |