Программа ICQ
Программа обмена мгновенными сообщениями через Интернет в реальном времени. История создания ICQ и ее возможности. Спецификация ICQ протокола. Коммуникации между сервером Mirabilis и клиентом, между двумя клиентами. Версии и модификации протокола ICQ.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.11.2014 |
Размер файла | 70,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Негосударственное образовательное учреждение среднего профессионального образования
Череповецкий торгово-экономический колледж
Курсовая работа
по дисциплине: Информатика
Тема: «Программа ICQ»
Выполнила Полякова Екатерина
студентка 1 курса, 1 группы
Череповец, 2013 г.
СОДЕРЖАНИЕ
Введение
1. Определение и возможности
2. История создания ICQ
3. Спецификация ICQ протокола
4. Коммуникации между сервером и клиентом
4.1 Сообщения от клиента к серверу
4.2 Сообщение от сервера клиенту
5. Коммуникации между двумя клиентами
5.1 Последующие версии ICQ
5.2 Последняя модификация протокола ICQ
Заключение
Список литературы
Введение
ICQ - универсальная контактная система. Эпоха требует быстрого, надежного способа найти в Сети нужного тебе человека. И он возник - в виде «мгновенных сообщений» (Instant Messaging). Этот вид сетевого общения позволил пользователям Сети общаться друг с другом в режиме «реального времени», передавать друг другу файлы в интерактивном режиме.
Первоначально Instant Messaging представлял собой некий гибрид e-mail и IRC. От первой новый сервис унаследовал не назойливость (нет нужды двадцать четыре часа в сутки сидеть у экрана, ловя каждую реплику своего собеседника), а от второго - интерактивность (в любой момент можно увидеть, присутствует ли в сети ваш собеседник).
Дебютный продукт никому не известной израильской фирмы Mirabilis (в 1998 году приобретенной America - On-Line), появившийся на свет лет шесть назад, вдруг превратился в сенсацию мирового масштаба. К началу 1999 года эта программа была установлена уже на 30 миллионах компьютеров, а в середине 2003 года число её пользователей достигло 200-миллионной отметки!
Имя сенсации было - ICQ. По-английски - производное от I Seek You, Ищу Тебя. В России закрепилось за программкой ласковое имя - «аська».
При установке программы присваивается уникальный идентификационный номер - что-то вроде номера телефона, которым можно делиться со своими знакомыми. Стоит только войти в Сеть, как ICQ пробуждается и посылает на свой сервер сигнал - «Объект номер такой-то вошел в сеть». И в тот же самый момент сервер пересылает этот сигнал вашим знакомым.
Работая с ICQ, можно отправлять электронное письмо (и даже ярко раскрашенную открытку) любому человеку. Через ICQ можно передать файл или голосовое сообщение.
Задачи работы:
1) Рассмотреть и изучить литературу соответствующую теме работы
2) Раскрыть возможности ICQ
Объект работы: Написание курсовой работы
Предмет работы: ICQ
1. Определение и возможности ICQ
ICQ - коммуникационная программа для передачи сообщений посредством сети интернет. В основе её работы положен метод сохранения всех сообщений, посылаемых пользователями, на сервере до тех пор, пока адресат не подключится к интернет. Название ICQ созвучно английскому "I seek you" - "Я тебя ищу". Эта программа была создана в 1999 году малоизвестной израильской фирмой Mirabilis. И на данный момент число ее пользователей исчисляется несколькими десятками миллионов. Популярность программе принесло удобство использования и бесплатность предоставляемых услуг.
ICQ может:
• передавать сообщения напрямую между двумя программами ICQ
• передавать такие сообщения через сервер компании Mirabilis, если по какой-то причине нельзя передать напрямую.
• поддерживать chat по протоколу TCP
• передавать файлы по протоколу UDP
ICQ часто называют аналогом пейджера в интернете. Для обеспечения мобильности пользователей ICQ присваивает им номера, независимые от их текущего положения в сети (IP-адреса) называемые UIN (Universal Internet Number). Но при передаче данных (сообщений, файлов и т.д.) программе приходится получать текущий IP-адрес пользователя с другой стороны, т.к. без него прямая передача по TCP/IP невозможна. Для преобразования пользовательских номеров в IP-адреса используются специальные серверы в Internet. Эти серверы специально предназначены для обслуживания пользователей ICQ и поддерживаются Mirabilis.
В момент получения доступа к Internet ICQ соединяется с одним из таких серверов и регистрируется на нем, передавая имя и пароль. Сервер запоминает текущий IP-адрес этого пользователя. Пока пользователь на линии, сервер может обрабатывать запросы других ICQ на преобразование номера пользователя в его текущий IP-адрес. Эти запросы и ответы передаются по протоколу UDP (подобно запросам и ответам DNS). Этот же сервер может служить и источником информации "доступен ли данный пользователь online".
Получив IP-адрес другой стороны, ICQ может соединиться с клиентом ICQ на другой стороне и передавать данные напрямую. Короткие сообщения ICQ может передавать по UDP. Это более быстрый и легковесный протокол чем TCP, так как не ориентирован на соединение, а посылает данные отдельными пакетами. Но UDP ненадежный, поэтому используются подтверждения доставки. ICQ делает до 6 попыток отправить сообщение по UDP. И если ни на одну из них подтверждение не пришло, ICQ выводит вам сообщение, что не может передать сообщение напрямую, предлагая передать через сервер Mirabilis (он, в отличие от пользователей, реже бывает недоступен). Когда получатель сообщения очередной раз подключится для регистрации, это сообщение будет ему переправлено.
Если возможно, ICQ пытается установить между переговаривающимися сторонами прямое TCP-соединение. В результате следующие сообщения могут идти по уже установленному TCP-соединению, что более надежно, чем UDP, и достаточно быстро.
Пользователь может создать “список контактов” - список других пользователей ICQ. Когда какой-либо пользователь из этого списка находясь в интернете запускает клиента ICQ и регистрируется на сервере - то уведомление об этом могут получать все в чьих “списках контактов” находится обладатель данного UIN. Каждый пользователь может указать свой “статус” свидетельствующий о желании пользователя принимать какие-либо сообщения. В последних версиях статус может принимать значение “доступен” (Available/Connect), “отлучился” (Away), “только срочные сообщения” (Do not distrub) и другие. Пользователь может свободно менять свой статус, о чем информируется каждый зарегистрированный на сервере клиент, в чьем списке контактов находится сменивший статус пользователь.
2. История создания
В 1996 году, совсем еще молодая и малоизвестная Израильская компания Mirabilis, основанная четырьмя студентами, запускает программу интернет-пейджер - ICQ, совершив тем самым, настоящую революцию в области общения в Интернете. Конечно, в то время уже существовали различные форумы, чаты и IRC, но ICQ кардинально отличался от них своими возможностями. Особенностью ICQ являлось то, что для связи с собеседником не требовалось его присутствие в Интернете. В любом случае, сообщение дойдет до адресата при следующем выходе в Сеть. В то же время, в ICQ можно общаться и в режиме реального времени. Грубо говоря, ICQ совмещает в себе возможности электронной почты и чата. Кроме того, вам не нужно думать о месте встречи и каждый раз искать своего собеседника: вы просто запускаете клиент и уже можете начинать общается (конечно при условии, что у собеседника также стоит клиент).
Поиск людей - это уникальная возможность, которая присутствует только в ICQ, позволяющая найти любого человека, подключенного к сервису. Плюс ко всему, программа поддерживает возможность обмена файлами и различные сетевые игры. Передача данных осуществляется по уникальному, эффективному протоколу.
Интересно знать: в 1998 году компания Mirabillis была выкуплена крупнейшим американским провайдером America On-Line. Изначально ICQ был задуман, как развлекательный сервис, предназначенный только для общения и заведения новых знакомств. Само название ICQ произносится, как "I seek you", что обозначает "Я ищу тебя". Но время шло, ICQ развивался, клиент скачали уже более сорока миллионов человек, и сегодня им используются в деловых целях во многих крупных компаниях и фирмах. Поэтому, если Вы используете Интернет в работе, ICQ пригодится и Вам.
Если Вы недавно зарегистрировались в ICQ и у Вас обычный девятизначный номер, Вам, наверняка, интересно, откуда берутся более короткие номера, которые Вам регулярно встречаются. Попробуем ответить на этот вопрос.
Пятизначные номера (пятизнаки) никогда не регистрировались свободно пользователями ICQ, их могут делать себе только админы.
шестизначные номера (шестизнаки), это самые короткие номера, которые когда либо были в свободной регистрации. Они регистрировались в самом начале существования ICQ, 1996-1997 годах.
семизначные номера (семизнаки) начали регистрироваться в 1997 году, когда закончились шестизнаки.
восьмизначные номера (восьмизнаки) начали регистрироваться 1998 году, когда закончились семизнаки.
девятизначные номера (девятизнаки) начали регистрироваться по окончании восьмизнаков в 2000 году и регистрируются по сей день.
Откуда же берут сегодня номера короче девяти символов люди никак не связанные с администрацией ICQ? Всё очень просто, их покупают у людей умеющих добывать номера зарегистрированные ранее. Зачастую номера, зарегистрированные в первые годы существования ICQ, давно заброшены, и ими никто не пользуется. Люди, владеющие технологиями, подбирают пароли к таким номерам и выставляют их на продажу.
3. Спецификация ICQ протокола
За время существования ICQ, используемый ею протокол претерпел множество изменений и имел различные версии, каждая следующая из которых отличалась от предыдущей.
Самая древняя версия, до сих пор используется Mirabilis-ом. (Например, клиентом Java версии ICQ).
Рассмотрим работу протокола этой версии более подробно. Несмотря на то, что эта версия уже практически не используется, основные принципы работы и используемые структуры остались неизменны.
Соединение с другим клиентом, находящимся в данный момент в Internet (on-line) осуществляется посредством протокола TCP с установкой прямого соединения между переговаривающимися сторонами. Все другие соединения осуществляются с использованием пакетов протокола UDP посылаемых через ICQ сервер. Получение каждого UDP пакета должно быть подтверждено сервером. В случае неполучения клиентом подтверждения от сервера в течение 10 секунд, клиент повторно посылает пакет. После таких 6 неудачных посылок клиент посылает на сервер сообщение B_MESSAGE_ASK, получив которое сервер должен немедленно ответить. Процедура повторяется 2 раза. Если ни на один из посланных пакетов не было получено подтверждение, ICQ клиент предполагает, что пользователь отключился от Internet (off-line).
Перед тем как начать устанавливать какие-либо соединения, клиент должен зарегистрироваться на одном из ICQ- серверов(log-in). Во время процедуры регистрации клиент посылает серверу информацию о себе такую как IP адрес, TCP порт зарезервированный для ICQ, пароль пользователя и список других пользователей ICQ находящихся в “списке контактов” клиента.
Клиент должен периодически посылать на сервер сообщение “KEEP_ALIVE” свидетельствующее о том, что клиент все еще подключен к Сети. По умолчанию клиент посылает UDP пакеты на сервер, используя порт 4000.
Функции “послать сообщение пользователю неподключенному к Internet (off-line)”, “получение информации о пользователе”, ”поиск пользователя”, “изменение информации текущего пользователя” реализуются через пакеты протокола UDP, посылаемых на сервер. В поле “DATA” UDP пакета размещается информация о UIN отправителя, код, идентифицирующий запрошенную функцию и необязательные параметры.
Когда пользователь посылает сообщение другому пользователю, который подключен (зарегистрирован на сервере), ICQ клиент пытается установить TCP соединение с этим пользователем, используя аналогичную (за небольшим исключением) структуру поля DATA TCP пакета. После посылки сообщения соединение не разрывается и может быть использовано для посылки следующих сообщений. Соединение закрывается, когда один из пользователей отсоединяется (log-off) или же теряет соединение с сервером.
4. Коммуникации между сервером и клиентом
Как уже было сказано ранее, для осуществления такого рода коммуникаций ICQ использует протокол UDP. Поле данных пакета UDP при посылке от клиента к серверу заполняется следующим образом:
Таблица 1
Заполнение поля данных пакета UDP при посылке от клиента к серверу
Длина |
Значение |
Название |
Описание |
|
2 байта |
02 00 |
VERSION |
Версия протокола ICQ |
|
2 байта |
хх хх |
COMMAND |
Код запрашиваемой функции |
|
2 байта |
хх хх |
SEQ_NUM |
Порядковый номер |
|
4 байта |
хх хх хх хх |
UIN |
UIN отправителя |
|
Переменная |
0 или больше параметров. Зависит от поля COMMAND |
Здесь и далее “байт “ представляет собой последовательность из 8-и битов, старший бит находится слева, младший байт идет первым.
Поле данных пакета UDP при посылке от сервера клиенту заполняется следующим образом:
Таблица 2
Заполнение поля данных пакета UDP при посылке от сервера клиенту
Длина |
Значение |
Название |
Описание |
|
2 байта |
02 00 |
VERSION |
Версия протокола ICQ |
|
2 байта |
хх хх |
COMMAND |
Код выполненной функции |
|
2 байта |
хх хх |
SEQ_NUM |
Порядковый номер |
|
Переменная |
хх хх |
0 или больше параметров. Зависит от поля COMMAND |
Поле VERSION присутствует во всех пакетах и является идентификатором того что это пакет ICQ.
Поле SEQ_NUM содержит порядковый номер пакета. Все пакеты должны иметь уникальный порядковый номер за исключением случая перепосылки пакета. Это поле используется для отслеживания потери или дублирования пакетов. Обыкновенно с каждым пакетом SEQ_NUM увеличивается на 1. Сервер и клиент ведут непересекающуюся нумерацию пакетов. Т.е. порядковый номер пакета от сервера никак не связан с порядковыми номерами пакетов от клиента. Сервер начинает отсчет с 00 00.
Клиент же начинает отсчет с 01 00. Это поле имеет немного другую интерпретацию в случае команды ACK (см. ниже).
Таблица 3
Значения при посылке сообщения от клиента серверу в поле COMMAND
Значение |
Наименование |
Описание |
|
0A 00 |
ACK |
Подтверждение |
|
0E 01 |
SEND_MESSAGE |
Послать сообщение через сервер (если, например адресат не зарегистрировался на сервере) |
|
E8 03 |
LOGIN |
Зарегистрироваться на сервере. |
|
06 04 |
CONTACT_LIST |
Передать серверу “список контактов” |
|
1A 04 |
SEARCH_UIN |
Искать пользователя по UIN |
|
24 04 |
SEARCH_USER |
Искать пользователя по имени или электронному адресу. |
|
2E 04 |
KEEP_ALIVE |
Посылается для подтверждения того что пользователь не отключился от Сети. |
|
38 04 |
SEND_TEXT_CODE |
Послать специальное сообщение на сервер в виде текста. |
|
60 04 |
INFO_REQ |
Запрос основной информации о пользователе. |
|
6A 04 |
EXT_INFO_REQ |
Запрос расширенной информации о пользователе. |
|
9C 04 |
STATUS_CHANGE |
Пользователь изменил свой статус. |
|
28 05 |
LOGIN_2 |
Посылается во время регистрации на сервере. |
|
0A 05 |
UPDATE_INFO |
Обновить основную информацию о пользователе. |
|
B0 04 |
UPDATE_EXT_INFO |
Обновить расширенную информацию о пользователе. |
|
3C 05 |
ADD_TO_LIST |
Пользователь добавляется в “список контактов” |
|
56 04 |
REQ_ADD_TO_LIST |
Запрос разрешения у пользователя о добавлении его в “список контактов” |
|
BA 04 |
QUERY_SERVERS |
Запросить у сервера адреса других серверов. |
|
C4 04 |
QUERY_ADDONS |
Запросить у сервера информацию о программных расширениях. |
|
EC 04 |
NEW_USER_1 |
Запрос разрешения на добавление пользователя в список контактов (?) |
|
FC 03 |
NEW_USER_REG |
Зарегистрировать нового пользователя. |
|
A6 04 |
NEW_USER_INFO |
Посылается основная информация о новом пользователе. |
|
56 04 |
MSG_TO_NEW_USER |
Послать сообщение пользователю, отсутствующему в списке контактов. Используется для отправки текста сопровождающего запрос на добавление в список контактов. |
Таблица 3
Значения при посылке сообщения от сервера клиенту в поле COMMAND
Значение |
Наименование |
Описание |
|
0A 00 |
ACK |
Подтверждение |
|
5A 00 |
LOGIN_REPLY |
Ответ при регистрации на сервере |
|
6E 00 |
USER_ONLINE |
Пользователь из списка контактов зарегистрировался на сервере или сменил свой статус на “на линии”. |
|
78 00 |
USER_OFFLINE |
Пользователь из списка контактов отключился от сервера или сменил свой статус на “отключен” |
|
8C 00 |
USER_FOUND |
Ответ на запрос о поиске. Найдена запись о пользователе отвечающем заданным параметрам. |
|
DC 00 |
RECEIVE_MESSAGE |
Послано сообщение через сервер. |
|
A0 00 |
END_OF_SEARCH |
Ответ на запрос о поиске. Больше пользователей удовлетворяющих заданным параметрам не найдено. |
|
18 01 |
INFO_REPLY |
Основная информация о пользователе. |
|
22 01 |
EXT_INFO_REPLY |
Расширенная информация о пользователе. |
|
A4 01 |
STATUS_UPDATE |
Пользователь из списка контактов сменил свой статус. |
|
1C 02 |
REPLY_X1 |
Используется во время регистрации на сервере. |
|
E0 01 |
UPDATE_REPLY |
Подтверждение обновления основной информации. |
|
C8 00 |
UPDATE_EXT_REPLY |
Подтверждение обновления расширенной информации. |
|
46 00 |
NEW_USER_UIN |
Подтверждение о регистрации нового пользователя и новый UIN |
|
B4 00 |
NEW_USER _REPLY |
Подтверждение приема пакета с основной информацией о новом пользователе. |
|
82 00 |
QUERY_REPLY |
Ответ на запросы QUERY_SERVERS и QUERY_ADDONS |
Рассмотрим подробнее некоторые команды
4.1 Сообщения от клиента серверу
ACK (0A 00) Подтверждение
Параметры: Нет
В отличие от остальных команд, поле SEQNUM содержит порядковый номер сообщения прием которого подтверждается. Прием этого пакета не должен быть подтвержден.
SEND_MESSAGE (0E 01) Послать сообщение через сервер
Параметры:
Длина |
Значение |
Имя |
Описание |
|
4 байта |
xx xx xx xx |
RECEIVER_UIN |
UIN адресата сообщение |
|
2 байта |
(см. ниже) |
MESSAGE_TYPE |
Тип сообщения |
|
2 байта |
xx xx |
LENGTH |
Длина сообщения включая завершающий строку NULL |
|
Переменная |
MESSAGE |
ASCIIZ строка сообщения |
Сообщение может быть следующих типов:
01 00 - нормальное текстовое сообщение
04 00 - сообщение является Интернет-адресом. В таком случае оно состоит из описания и самого URL разделенных символом 0xFE
LOGIN (E8 03) Зарегистрироваться на сервере
Длина |
Значение |
Имя |
Описание |
|
4 байта |
хх хх хх хх |
PORT |
Порт TCP который следует использовать при установлении соединения. |
|
2 байта |
хх хх |
LENGTH |
Длина поля PASSWORD включая завершающий NULL |
|
Переменная |
PASSWORD |
ASCIIZ строка, содержащая пароль |
||
4 байта |
78 00 00 00 |
X1 |
Зарезервировано |
|
4 байта |
хх хх хх хх |
USER_IP |
IP адрес пользователя |
|
1 байт |
04 |
X2 |
Зарезервировано |
|
4 байта |
хх хх хх хх |
STATUS |
Статус пользователя. Обыкновенно 00 00 00 00 |
|
4 байта |
02 00 00 00 |
X3 |
Зарезервировано |
|
2 байта |
хх хх |
LOGIN_SEQ_NUM |
Порядковый номер попытки зарегистрироваться. |
|
4 байта |
00 00 00 00 |
X4 |
Зарезервировано |
|
4 байта |
08 00 78 00 |
X5 |
Зарезервировано |
В случае успешной регистрации сервер возвращает сообщение LOGIN_REPLY.
CONTACT_LIST (06 04) Информировать сервер о списке контактов пользователя.
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
NUM_CONTACTS |
Количество записей в списке контактов |
|
4 байта NUM_CONTACT раз |
xx xx xx xx |
UIN |
UIN пользователя из списка контактов. |
Сервер будет посылать извещение о изменении статуса каждого пользователя из списка контактов.
SEARCH_UIN (1A 04) Искать пользователя по UIN
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
SEARCH_SEQ_NUM |
Порядковый номер запроса поиска. |
|
4 байта |
хх хх хх хх |
SEARCH_UIN |
UIN для поиска |
SEARCH_SEQ_NUM должно быть уникальным числом для различения различных запросов поиска.
SEARCH_USER (24 04) Искать пользователя по имени или электронному адресу
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
SEARCH_SEQ_NUM |
Порядковый номер запроса поиска. |
|
2 байта |
хх хх |
LENGTH |
Длина “прозвища”. Включая завершающий NULL |
|
Переменная |
NICK_NAME |
Прозвище. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина Имени. Включая завершающий NULL |
|
Переменная |
FIRST_NAME |
Имя. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина фамилии. Включая завершающий NULL |
|
Переменная |
LAST_NAME |
Фамилия. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина электронного адреса. Включая завершающий NULL |
|
Переменная |
E_MAIL |
Электронный адрес. ASCIIZ строка |
Поля NICK_NAME, FIRST_NAME, LAST_NAME, E_MAIL могут содержать пустую строку, однако по крайней мере одно из этих полей должно быть заполнено.
KEEP_ALIVE (2E 04) Подтверждение того, что клиент все еще на линии.
Параметры: Нет
Эта команда должна посылаться клиентом серверу каждые 120 секунд.
INFO_REQ (60 04) Запрос основной информации о пользователе.
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
INFO_SEQ_NUM |
Порядковый номер запроса |
|
4 байта |
хх хх хх хх |
QUERY_UIN |
UIN запрашиваемого пользователя |
На этот запрос сервер отвечает сообщением INFO_REPLY (см. ниже) используя тот же самый INFO_SEQ_NUM
EXT_INFO_REQ (6A 04) Запрос расширенной информации о пользователе.
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
INFO_SEQ_NUM |
Порядковый номер запроса |
|
4 байта |
хх хх хх хх |
QUERY_UIN |
UIN запрашиваемого пользователя |
На этот запрос сервер отвечает сообщением EXT_INFO_REPLY (см. ниже) используя тот же самый INFO_SEQ_NUM
CHANGE_PASSWORD (9C 04) Сменить пароль пользователя.
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
PASSWORD_SEQ_NUM |
Порядковый номер запроса на смену пароля |
|
2 байта |
хх хх |
LENGTH |
Длина нового пароля, включая завершающий NULL |
|
Переменная |
NEW_PASSWORD |
Новый пароль. ASCIIZ строка |
STATUS_CHANGE (D8 04) Пользователь сменил свой статус
Параметры:
Длина |
Значение |
Имя |
Описание |
|
4 байта |
хх хх 00 00 (см. ниже) |
STATUS |
Новый статус пользователя |
Возможные значения поля STATUS:
00 00 00 00 |
На линии (on_line/connected) |
|
01 00 00 00 |
Ушел (Away) |
|
11 00 00 00 |
Не беспокоить (Do Not Disturb -DND) |
|
00 01 00 00 |
Невидим (Invisible) |
4.2 Сообщения от сервера клиенту
ACK (0A 00) Подтверждение
Параметры: Нет
В отличие от остальных команд, поле SEQNUM содержит порядковый номер сообщения, прием которого подтверждается. Прием этого пакета не должен быть подтвержден.
LOGIN_REPLY (5A 00) Ответ при регистрации на ICQ - сервере
Поле LOGIN_SEQ_NUM содержит значение одноименного поля соответствующего пакета с запросом на регистрацию (LOGIN).
Параметры:
Длина |
Значение |
Имя |
Описание |
|
4 байта |
хх хх хх хх |
USER_UIN |
UIN пользователя |
|
4 байта |
хх хх хх хх |
USER_IP |
IP пользователя |
|
2 байта |
хх хх |
LOGIN_SEQ_NUM |
Порядковый номер запроса на регистрацию. |
|
4 байта |
01 00 01 00 |
X1 |
неизвестно |
|
4 байта |
xx 00 16 00 |
X2 |
Неизвестно |
|
4 байта |
8C 00 00 00 |
X3 |
Неизвестно |
|
4 байта |
78 00 05 00 |
X4 |
Неизвестно |
|
6 байт |
0A 00 05 00 01 00 |
X5 |
неизвестно |
USER_FOUND (8C 00) Найден пользователь удовлетворяющий заданным критериям поиска.
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
SEARCH_SEQ_NUM |
Порядковый номер запроса поиска. |
|
4 байта |
хх хх хх хх |
FOUND_UIN |
UIN найденного пользователя |
|
2 байта |
хх хх |
LENGTH |
Длина “прозвища”. Включая завершающий NULL |
|
Переменная |
NICK_NAME |
Прозвище. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина имени. Включая завершающий NULL |
|
Переменная |
FIRST_NAME |
Имя. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина фамилии. Включая завершающий NULL |
|
Переменная |
LAST_NAME |
Фамилия. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина электронного адреса. Включая завершающий NULL |
|
Переменная |
E_MAIL |
Электронный адрес. ASCIIZ строка |
||
1 байт |
хх |
AUTHORIZE |
Необходимость авторизации. |
Для каждого пользователя подходящего заданным критериям поиска будет создан такой пакет. Но не более 40 штук. По окончании создания пакетов содержащих сообщения USER_FOUND сервер посылает сообщение END_OF_SEARCH.
Поле AUTHORIZE содержит байт со значением 00 или 01, что означает необходимость разрешения данного пользователя, для добавление его в чей-либо в список контактов, или отсутствие такой необходимости соответственно.
RECEIVE_MESSAGE (DC 00) Сообщение пользователю, посланное через сервер.
Параметры:
Длина |
Значение |
Имя |
Описание |
|
4 байта |
хх хх хх хх |
REMOTE_UIN |
UIN отправителя |
|
2 байта |
хх хх |
YEAR |
Год посылки сообщения |
|
1 байт |
хх |
MONTH |
Месяц посылки сообщения |
|
1 байт |
хх |
DAY |
День посылки сообщения |
|
1 байт |
хх |
HOUR |
Час посылки сообщения |
|
1 байт |
хх |
MINUTE |
Минута посылки сообщения |
|
2 байта |
хх хх |
TYPE |
Тип сообщения (см. ниже) |
|
2 байта |
хх хх |
LENGTH |
Длина текста сообщения. Включая завершающий NULL |
|
переменная |
MESSAGE |
Текст сообщения. ASCIIZ строка. |
Поле TYPE может принимать следующие значения:
01 00 - нормальное сообщение
04 00 - сообщение является Интернет-адресом.(URL) В таком случае оно состоит из описания и самого URL разделенных символом 0xFE
0C 00 - сообщение о том, что пользователь был добавлен в список контактов. При этом поле MESSAGE имеет следующую структуру:
<nick name> - Прозвище добавившего.
FE - Разделитель - символ с кодом 0хFE
<first name> - Имя добавившего.
FE - Разделитель.
<last name> - Фамилия добавившего.
FE - Разделитель.
<e-mail> - Электронный адрес добавившего.
FE - Разделитель
<authorize>
Символ “1” или “0” в зависимости от необходимости автоизации для добавления пользователя в список контактов. “1” - если такая авторизация не требуется.
END_OF_SEARCH (A0 00) - Окончание создание пакетов с сообщением USER_FOUND
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
SEARCH_SEQ_NUM |
Порядковый номер запроса на поиск |
|
1 байт |
хх |
MORE_FOUND |
Найдено ли большее количество пользователей? |
Если критериям поиска удовлетворяет более 40 пользователей, то будет сгенерированы пакеты USER_FOUND только для первых 40. И поле MORE_FOUND завершающего сообщения END_OF_SEARCH будет содержать значение 01. В противном случае это поле будет содержать 00.
INFO_REPLY (18 01) Основная информация о пользователе
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
INFO_SEQ_NUM |
Порядковый номер запроса. |
|
4 байта |
хх хх хх хх |
REMOTE_UIN |
UIN пользователя |
|
2 байта |
хх хх |
LENGTH |
Длина “прозвища”. Включая завершающий NULL |
|
Переменная |
NICK_NAME |
Прозвище. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина имени. Включая завершающий NULL |
|
Переменная |
FIRST_NAME |
Имя. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина фамилии. Включая завершающий NULL |
|
Переменная |
LAST_NAME |
Фамилия. ASCIIZ строка |
||
2 байта |
хх хх |
LENGTH |
Длина электронного адреса. Включая завершающий NULL |
|
Переменная |
E_MAIL |
Электронный адрес. ASCIIZ строка |
||
1 байт |
хх |
AUTHORIZE |
Необходимость авторизации. |
Значения параметров полностью совпадают с одноименными параметрами сообщения USER_FOUND
EXT_INFO_REPLY (22 01) Расширенная информация о пользователе
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
хх хх |
INFO_SEQ_NUM |
Порядковый номер запроса |
|
4 байта |
хх хх хх хх |
REMOTE_UIN |
UIN пользователя |
|
2 байта |
хх хх |
LENGTH |
Длина названия города. Включая завершающий NULL |
|
Переменная |
CITY |
Название города. ASCIIZ строка |
||
2 байта |
хх хх |
COUNTRY_CODE |
Код страны |
|
1 байт |
хх |
COUNTRY_STATUS |
Был ли введен код страны |
|
2 байта |
хх хх |
LENGTH |
Длина названия штата. Включая завершающий NULL |
|
Переменная |
STATE |
Название штата (актуально только для CША) |
||
2 байта |
хх хх |
AGE |
Возраст |
|
1 байт |
хх |
SEX |
Пол |
|
2 байта |
хх хх |
LENGTH |
Длина телефона. Включая завершающий NULL |
|
Переменная |
PHONE |
Телефон. ASCIIZ строка. |
||
2 байта |
хх хх |
LENGTH |
Длина адреса домашней странички. Включая завершающий NULL |
|
перемення |
HOME_PAGE |
Домашняя страничка. ASCIIZ строка. |
||
2 байта |
хх хх |
LENGTH |
Длина “текста о себе” пользователя. |
|
Переменная |
ABOUT |
“Текст о себе” ASCIIZ строка. |
Параметр COUNTRY_CODE представляет из себя международный телефонный префикс. Для США это значение 01 00 (т.е. 1) для России 07 00. Если пользователь указывал код своей страны, то поле COUNTRY_STATUS содержит значение 0хFE в противном случае поле COUNTRY_CODE содержит значение FF FF и COUNTRY_STATUS содержит байт 0х9С.
Поле SEX может принимать следующие значения:
• пол не указан
• женский
• мужской
В поле ABOUT пользователь может написать любой текст. Обыкновенно, это информация о себе.
STATUS_UPDATE (A4 01) Пользователь из списка контактов сменил свой статус.
Параметры:
Длина |
Значение |
Имя |
Описание |
|
4 байта |
хх хх хх хх |
REMOTE_UIN |
UIN пользователя чей статус изменился |
|
4 байта |
хх хх хх хх |
STATUS |
Новый статус пользователя. |
Поле STATUS может принимать такие же значения, как и в команде STATUS_CHANGE (D8 04).
сообщение интернет сервер протокол
5. Коммуникации между двумя клиентами
Когда пользователь пытается послать сообщение другому пользователю, клиентская программа сначала проверяет, установлено ли TCP соединение с удаленным пользователем. В случае наличия такого соединения, оно будет использовано для передачи сообщения. В противном случае с сервера запрашивается IP адрес и порт второго пользователя и предпринимается попытка установить TCP соединение. Обыкновенно порт берется в диапазоне 1200-1300 (десятичное). После установления соединения посылается сообщение CHANNEL_INIT. После этого каждый раз для посылки текстового сообщения создается пакет с сообщением CHANNEL_MESSAGE. Получение каждого пакета должно быть подтверждено сообщением CHANNEL_ACK.
Взаимодействие с использованием протокола TCP также как и с использованием протокола UDP базируется на посылке независимых пакетов.
CHANNEL_INIT Инициировать TCP соединение между двумя Пользователями
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
1А 00 |
LENGTH |
Суммарная длина следующих полей |
|
1 байт |
FF |
INIT_IDENT |
Идентификатор того, что это пакет CHANNEL_INIT |
|
2 байта |
02 00 |
VERSION |
Идентификатор версии протокола |
|
6 байт |
00 00 00 00 |
X1 |
Зарезервировано |
|
4 байта |
хх хх хх хх |
MY_UIN |
UIN отправителя пакета. |
|
4 байта |
хх хх хх хх |
MY_IP |
IP отправителя пакета |
|
4 байта |
хх хх хх хх |
MY_IP_REAL |
Актуальный IP отправителя пакета |
|
1 байт |
04 |
X2 |
Зарезервировано |
|
4 байта |
хх хх хх хх |
MY_PORT |
TCP порт для ответных сообщений. |
MY_REAL_IP отличается от MY_IP тем что первое является “локальным” IP адресом, а второй “реальным” Эти два значения будут различаться только в том случае если клиент находится за файрволом.
CHANNEL_MESSAGE послать текстовое сообщение непосредственно пользователю
Параметры:
Длина |
Значение |
Имя |
Описание |
|
2 байта |
xx xx |
LENGTH |
Суммарная длина следующих полей |
|
4 байта |
xx xx xx xx |
UIN |
UIN отправителя |
|
2 байта |
02 00 |
VERSION |
Идентификатор версии протокола |
|
2 байта |
ЕЕ 07 |
MSG_COMMAND |
Идентификатор того что этот пакет CHANNEL_MESSAGE |
|
2 байта |
00 00 |
X1 |
Зарезервировано |
|
4 байта |
xx xx xx xx |
UIN_2 |
Дублирует поле UIN |
|
2 байта |
xx xx |
TYPE |
Тип сообщения |
|
2 байта |
xx xx |
LENGTH |
Длина текста сообщения. Включая завершающий NULL |
|
Переменная |
MESSAGE |
Текст сообщения. ASCIIZ строка. |
||
4 байта |
xx xx xx xx |
MY_IP_REAL |
Актуальный IP отправителя пакета |
|
4 байта |
xx xx xx xx |
MY_IP |
IP отправителя пакета |
|
4 байта |
xx xx xx xx |
PORT |
TCP порт для ответных сообщений. |
|
3 байта |
04 00 00 |
X2 |
Зарезервировано. |
|
2 байта |
xx xx |
CMD_TYPE |
Идентификатор того является ли этот текст просто сообщением или ответом. |
|
4 байта |
xx FF FF FF |
X3 |
Зарезервировано. |
Поле TYPE принимает такие же значения как и в команде RECEIVE_MESSAGE
Возможные значения поля CMD_TYPE:
10 00 - это просто сообщение.
00 00 - это сообщение является автоматически созданным ответом.
“Автоматические ответы” создаются по получению каждого простого сообщения. Обыкновенно они содержат пустые сообщения. Их функция аналогична сообщениям ACK, используемым при взаимодействии с сервером.
5.1 Последующие версии ICQ
Рассмотрим некоторые изменения в следующей версии ICQ
В этой версии немного изменился формат данных в UDP пакете:
Длина |
Значение |
Название |
Описание |
|
2 байта |
04 00 |
VERSION |
Версия протокола ICQ |
|
4 байта |
хх хх 00 00 |
RANDOM_ NUMBER |
Случайная величина. |
|
2 байта |
хх хх |
COMMAND |
Код запрашиваемой функции |
|
2 байта |
хх хх |
SEQ_NUM1 |
Порядковый номер |
|
2 байта |
хх хх |
SEQ_NUM2 |
Порядковый номер |
|
4 байта |
хх хх хх хх |
UIN |
UIN отправителя |
|
4 байта |
хх хх хх хх |
CHECKCODE |
Контрольная сумма. |
|
Переменная |
0 или больше параметров. Зависит от поля COMMAND |
Появились новые варианты статуса состояния пользователя, которые можно использовать в командах LOGIN, STATUS_CHANGE, STATUS_UPDATE:
Значение |
Название |
Описание |
|
00 00 00 00 |
STATUS_ONLINE |
Пользователь на линии |
|
01 00 00 00 |
STATUS_AWAY |
Пользователь отлучился |
|
13 00 00 00 |
STATUS_DND |
Не беспокоить |
|
00 01 00 00 |
STATUS_INVISIBLE |
Пользователь в режиме “невидимости” |
|
10 00 00 00 |
STATUS_OCCUPIED |
Занят |
|
04 00 00 00 |
STATUS_NA |
Не доступен |
|
20 00 00 00 |
STATUS_CHAT |
Не против чата |
Кроме того, все данные UDP пакета шифруются по следующему алгоритму:
• Вычисляется контрольная сумма по следующему алгоритму:
• Формируется число N1= 0x B8 B4 B2 B6, Где
B8 - 8-oй байт данных (младший байт поля SEQ_NUM1)
B6 - 6-oй байт данных (младший байт кода запрашиваемой функции)
B4 - 4-oй байт данных (младший байт второго слова
RANDOM_NUMBER)
B2 - 2-oй байт данных (младший байт первого слова поля
RANDOM_NUMBER)
b) PL = длина данных пакета.
R1 = Случайное число между 00 и PL - 4. Но не попадающее в диапазон [16,19] (смещения байтов контрольной суммы в пакете)
R2 = Случайное число от 00 до 255 (0xFF).
с) Формируется число N2, X4=R, X3 = NOT (байт по смещению X4)
X2 = R2
X1 = NOT (байт по смещению X2 в таблице 1)
N2 = 0x X4 X3 X2 X1
В качестве таблицы используемой в формировании числа N2 разработчики взяли текст из документации к программе:
Таблица1
Формирование числа N2
POS |
DATA |
ASCII |
|
00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 |
0A 5B 31 5D 20 59 6F 75 20 63 61 6E 20 6D 6F 64 69 66 79 20 74 68 65 20 73 6F 75 6E 64 73 20 49 43 51 20 6D 61 6B 65 73 2E 20 4A 75 73 74 20 73 65 6C 65 63 74 20 22 53 6F 75 6E 64 73 22 20 66 72 6F 6D 20 74 68 65 20 22 70 72 65 66 65 72 65 6E 63 65 73 2F 6D 69 73 63 22 20 69 6E 20 49 43 51 20 6F 72 20 66 72 6F 6D 20 74 68 65 20 22 53 6F 75 6E 64 73 22 20 69 6E 20 74 68 65 20 63 6F 6E 74 72 6F 6C 20 70 61 6E 65 6C 2E 20 43 72 65 64 69 74 3A 20 45 72 61 6E 0A 5B 32 5D 20 43 61 6E 27 74 20 72 65 6D 65 6D 62 65 72 20 77 68 61 74 20 77 61 73 20 73 61 69 64 3F 20 20 44 6F 75 62 6C 65 2D 63 6C 69 63 6B 20 6F 6E 20 61 20 75 73 65 72 20 74 6F 20 67 65 74 20 61 20 64 69 61 6C 6F 67 20 6F 66 20 61 6C 6C 20 6D 65 73 73 61 67 65 73 20 73 65 6E 74 20 69 6E 63 6F 6D 69 6E |
[1] You can modify the sounds ICQ makes. Justselect "Sounds from the "preferences/misc" in ICQ or from the "Sounds" in the control panel. Credit: Eran. [2] Can't remember what was said? Double-click on a user to get a dialog of all messages sent incoming |
Из N1 и N2 CHECKCODE вычисляется как N1 XOR N2.
2) Затем вычисляются значения:
PL = длина данных пакета.
CODE1 = (DWORD) (PL * 0x66756B65)
CODE2 = (DWORD) (CODE1 + CHECKCODE)
N = (PL + 3) DIV 4
POS = 0
После этого в цикле:
while POS < N do begin
T = POS MOD 0x0100
CODE3 = CODE2 + TABLE[T] (Байт T из таблицы Табл. 1)
DATA = DWORD по смещению POS в данных пакета
DATA = DATA XOR CODE3
DWORD по смещению POS в данных пакета = DATA
POS = POS + 4
end
3) первые 2 байта полученных данных заменяются на 04 00
Процедура расшифровки полностью аналогична (благодаря обратимости операции XOR) за исключением того, что значение CHECKCODE не высчитывается, а берется из пакета.
Следует отметить, что шифруются только данные, посылаемые клиентом серверу, или другому клиенту.
5.2 Последней модификацией протокола ICQ
В начале 1998 года появилась следующая версия протокола. На данный момент она является последней модификацией протокола ICQ.
Об этой версии протокола известно не так много.
В этой версии также немного изменился формат данных в UDP пакете:
Длина |
Значение |
Название |
Описание |
|
2 байта |
05 00 |
VERSION |
Версия протокола ICQ |
|
4 байта |
00 00 00 00 |
ZERO |
Зарезервировано |
|
4 байта |
хх хх хх хх |
UIN |
UIN отправителя |
|
4 байта |
хх хх хх хх |
SESSION_ID |
Случайная величина |
|
2 байта |
хх хх хх хх |
COMMAND |
Код запрашиваемой функции |
|
2 байта |
хх хх |
SEQ_NUM1 |
Порядковый номер |
|
2 байта |
хх хх |
SEQ_NUM2 |
Порядковый номер |
|
4 байта |
хх хх хх хх |
CHECKCODE |
Контрольная сумма. |
|
Переменная |
0 или больше параметров. Зависит от поля COMMAND |
Так же известно, что подверглись изменению алгоритмы генерации CHECKCODE и шифрования данных.
Для генерирования CHECKCODE аналогично 4-ой версии протокола формируются 2 числа: N1 и N2 и затем производится операция XOR.
Как и в 4-ой версии протокола, число N1 cоставляется из 8-ого, 4-ого, 2-ого и 6-ого байта данных пакета.
PL = длина данных пакета.
R1 = Случайное число между 00 и (PL - 18) - 1
R2 = Случайное число от 00 до 255 (0xFF).
X4 = R1
X3 = NOT (BYTE по смещению X4 в данных пакета)
X2 = R2
X1 = NOT (BYTE по смещению X2)
Число N2 составляется из полученных таким образом байт.
N2 = 0x X4 X3 X2 X1
Перед помещением величины CHECKCODE в пакет ее биты “перемешиваются”.
Преобразование бит перед помещением величины CHECKCODE в пакет
bit 31 -> bit 21
bit 30 -> bit 20
bit 29 -> bit 19
bit 28 -> bit 18
bit 27 -> bit 17
bit 26 -> bit 11
bit 25 -> bit 26
bit 24 -> bit 25
bit 23 -> bit 24
bit 22 -> bit 23
bit 21 -> bit 22
bit 20 -> bit 05
bit 19 -> bit 04
bit 18 -> bit 03
bit 17 -> bit 02
bit 16 -> bit 01
bit 15 -> bit 31
bit 14 -> bit 30
bit 13 -> bit 29
bit 12 -> bit 28
bit 11 -> bit 27
bit 10 -> bit 00
bit 09 -> bit 10
bit 08 -> bit 09
bit 07 -> bit 08
bit 06 -> bit 07
bit 05 -> bit 06
bit 04 -> bit 16
bit 03 -> bit 15
bit 02 -> bit 14
bit 01 -> bit 13
bit 00 -> bit 12
При декодировании данных значение CHECKCODE должно быть восстановлено по этой же таблице в обратную сторону.
Т.е. bit 31 <- bit 21; bit 30 <- bit 20 и т.д.
2) Дале по алгоритму, аналогичному используемому в 4-ой версии протокола для шифрования и расшифровывания данных используется следующий алгоритм:
PL = Длина данных
CODE1 = (DWORD) (PL * 0x68656C6C) (flush the overflow)
CODE2 = (DWORD) (CODE1 + CHECKCODE) (flush the overflow)
N = (PL + 0x03)
POS = 0x0A
3) цикле делаем следующие преобразования:
while POS < N do
begin
T = POS MOD 0x0100
CODE3 = CODE2 + TABLE[T] (Байт в таблице по смещению T)
DATA = DWORD по смещению POS в данных пакета
DATA = DATA XOR CODE3
DWORD по смещению POS в данных пакета = DATA
POS = POS + 4End
Заключение
Несомненно, ICQ является заслуживающей внимание услугой, предоставляемой Сетью. На данный момент организуются службы, позволяющие посылать сообщения пользователям ICQ с помощью обыкновенного телефона - используя ресурсы пейджинговых компаний. Это как и бесплатность самой ICQ, делают последнюю еще более привлекательным для пользователей сети Интернет. Существует так же возможность создавать собственные локальные ICQ-сервера, которые позволяют общаться пользователям Интранет не завися от серверов Mirabilis.
Список литературы
1. Освой самостоятельно TCP/IP Тимати Паркер 2008, Москва
2. Официальный сайт Mirabilis, и официальный сайт поддержки ICQ
3. ICQ для опытных пользователей
Размещено на Allbest.ru
Подобные документы
Общие сведения о стандартизированном протоколе передачи данных FTP. Модель построения протокола обмена информацией, его применение в автоматических системах оплаты через интернет. Управляющее соединение между клиентом и сервером, программное обеспечение.
презентация [96,0 K], добавлен 15.12.2010Программа обмена сообщениями через Интернет в реальном времени через службы мгновенных сообщений (Instant Messaging Service, IMS). Приемы и навыки объектно-ориентированного программирования с использованием языка программирования высокого уровня C#.
курсовая работа [1,4 M], добавлен 07.07.2013Функция протокола и структура пакета разрабатываемого протокола. Длина полей заголовка. Расчет длины буфера на приеме в зависимости от длины пакета и допустимой задержки. Алгоритмы обработки данных на приеме и передаче. Программная реализация протокола.
курсовая работа [1,0 M], добавлен 18.05.2014Общие представления об интернет. Коммуникации с использованием семейства протокола управления передачей интернет-протокола. Крупнейшие каналы интернет США, компании AT&T. Подводные трансокеанские каналы. Схема взаимодействия компьютеров в интернет.
презентация [2,4 M], добавлен 28.02.2012Общая характеристика протокола ICMP, его назначение и формат сообщений. Анализ применимости протокола ICMP при переходе с набора протоколов IP v4 на набор IP v6. Свойства и принцип работы, сферы применения протоколов обмена маршрутной информацией.
курсовая работа [210,8 K], добавлен 24.08.2009Разработка клиентской и серверной частей программы, осуществляющей обмен текстовыми сообщениями между удаленными компьютерами локальной сети. Ключевые элементы управления программой, ее листинг и тестирование. Использование систем защиты информации.
курсовая работа [1,9 M], добавлен 18.12.2011Интернет - это сотни миллионов компьютеров во всем мире, обменивающиеся между собой информацией по линиям связи. Основные функции Интернет и его информационные возможности. Широкие возможности коммуникации в среде Интернет. Управление через Интернет.
презентация [874,6 K], добавлен 29.07.2010История Network File System. Общие опции экспорта иерархий каталогов. Описание протокола NFS при монтировании удаленного каталога. Монтирование файловой системы Network Files System командой mount. Конфигурации, обмен данными между клиентом и сервером.
курсовая работа [1,3 M], добавлен 16.06.2014История возникновения глобальной компьютерной сети интернет. Компьютеры-серверы и компьютеры-клиенты. Провайдеры интернет и их сети. Доступ в интернет из локальной сети. Взаимодействие между клиентом и сервером. Приложения-серверы и приложения-клиенты.
реферат [53,5 K], добавлен 13.10.2011Универсальная последовательная шина USB - универсальный порт для подключения устройств к персональному компьютеру и организации обмена между ними. Особенности спецификаций USB от версии 1.0 до версии 3.0. Архитектура, правила подключения, совместимость.
курсовая работа [2,6 M], добавлен 23.11.2013