Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
55
Добавлен:
07.08.2013
Размер:
735.62 Кб
Скачать

Розділ 1 Інтернет пейджер типуIcq

  1. Можливості ICQ

ICQ– це комунікаційна програма для передачі повідомлень в мережі. В основі її роботи лежить метод збереження всіх повідомлень, що надсилаються користувачами, на сервері до тих пір, поки адресат не підключиться до мережі. ICQ може:

  • передавати повідомлення напряму між двома програмами ICQ;

  • передавати такі повідомлення через сервер компанії Mirabilis, якщо по якійсь причині неможливо передати напряму;

  • підтримувати chat по протоколу TCP;

  • передавати файли по протоколу UDP.

ICQ часто називають аналогом пейджера в інтернеті. Для забезпечення мобільності користувачів, їм присвоюють номери, що не залежать від їх положення в мережі на даний момент, і називаються UIN (UniversalInternetNumber). Але при передачі даних програмі доводиться отримувати ІР-адресу користувача з другої сторони, тому що без нього передача по ТСР/ІР неможлива. Для перетворення номерів користувачів в ІР-адреси використовуються спеціальні сервери.

В момент отримання доступу до InternetICQ з’єднується з одним із таких серверів і реєструється на ньому, передаючи ім’я і пароль. Сервер запам’ятовує поточну ІР-адресу цього користувача. Поки користувач на на лінії, сервер може обробляти запити інших ICQ на перетворення номера користувача в його поточну ІР-адресу. Ці запити і відповіді передаються по протоколу UDP.

Отримавши ІР-адресу другої сторони, ICQможе з’єднатися з клієнтом ICQ на другій стороні і передавати дані напряму. Короткі повідомлення ICQ може передавати по UDP. Це протокол швидший ніж TCP, так як не орієнтований на з’єднання, а посилає дані окремими пакетами. Але UDPне надійний, тому використовуються підтвердження доставки. ICQ робить до 6 спроб відправити повідомлення по UDP. І якщо ні на одну із них підтвердження не прийшло, ICQ виводить повідомлення, що не може передати повідомлення напряму, пропонуючи передати через сервер Mirabilis. Коли отримувач повідомлення наступний раз підключиться для реєстрації, це повідомлення буде йому перенаправлене.

Якщо можливо, ICQ намагається встановити пряме ТСР з’єднання між сторонами, які обмінюються повідомленнями. В результаті, наступні повідомлення можуть пересилатися по вже встановленому ТСР-з’єднанню, що надійніше чим UDP, і достатньо швидко.

Користувач може створити «список контактів» - список інших користувачів ICQ. Коли будь-який користувач із цього списку завантажує додаток клієнта і реєструється на сервері –то повідомлення про це можуть отримувати всі користувачі, в чиїх «списках контактів» знаходиться власник даного UIN. Кожен користувач може вказати свій статус, яких свідчить про бажання користувача отримувати які-небудь повідомлення.

  1. Специфікація протоколу ICQ

З’єднання з другим клієнтом, що на даний момент знаходяться в Internet (online) здійснюється за допомогою протоколу ТСР зі встановленням прямого з’єднання між сторонами, що обмінюються повідомленнями. Всі інші з’єднання здійснюються з використанням пакетів протоколу UDP, що пересилаються через ICQ сервер. Отримання кожного UDPпакету має бути підтверджене сервером. У випадку неотримання клієнтом підтвердження від сервера протягом 10 секунд, клієнт повторно відсилає пакет. Після 6 невдалих посилок клієнт посилає на сервер повідомлення B_MESSAGE_ASK, отримавши яке сервер повинен негайно отримати. Процедура повторюється два рази. Якщо ні на один із пакетів, що посилався не було отримано підтвердження, ICQ клієнт припускає, що користувач відключився від Internet (off-line).

Перед тим, як почати встановлювати будь-яке з’єднання, клієнт повинен зареєструватися на одному із ICQ серверів. Під час процедури реєстрації клієнт посилає серверу інформацію про себе таку як ІР адресу, ТСР порт, зарезервований для ICQ, пароль користувача і список інших користувачів, які знаходяться в «списку контактів» клієнта. Клієнт повинен періодично посилати на сервер повідомлення «KEEP_ALIVE», що свідчить про те, що клієнт все ще підключений до мережі. За замовчуванням клієнт посилає UDP пакети на сервер, використовуючи порт 4000.

Функції «послати повідомлення користувачу непідключеному до мережі», отримання інформації про користувача», пошук користувача», зміна інформації поточного користувача» реалізуються через пакети протоколу UDP, які посилаються на сервер. В полі «DATA» UDP пакету розміщується інформація про UIN відправника, код, що ідентифікує запитану функцію і необов’язкові параметри.

Коли користувач надсилає повідомлення іншому користувачу, що зареєстрований на сервері, ICQ клієнт намагається встановити ТСР з’єднанняз цим користувачем, використовуючи аналогічну структуру поля DATATCP пакету. Після відсилання повідомлення, з’єднання не розривається і може бути використано для відсилання наступних повідомлень. З’єднання закривається, коли один з користувачів від’єднується або втрачає зв’язок з сервером.

  1. Комунікація між сервером та клієнтом

Для здійснення комунікації між сервером та клієнтом ICQ використовує протокол UDP. В таблиці 1 вказується як заповнюється поле даних пакету UDP при передачі від клієнта до сервера.

Довжина

Значення

Назва

Опис

2 байти

02 00

VERSION

Версія протоколу ІР

2 байти

хх хх

COMMAND

Код функції

2 байти

хх хх

SEQ_NUM

Порядковий номер

2 байти

хх хх хх хх

UIN

UIN відправника

Змінна

0 або більше параметрів

В таблиці 2 вказано, як заповнюється поле даних пакету UDP при передачі від сервера до клієнта.

Довжина

Значення

Назва

Опис

2 байти

02 00

VERSION

Версія протоколу ІР

2 байти

хх хх

COMMAND

Код функції

2 байти

хх хх

SEQ_NUM

Порядковий номер

Змінна

0 або більше параметрів

Поле VERSION присутнє у всіх пакетах і являється ідентифікатором того, що це пакет ICQ.

Поле SEQ_NUM містить порядковий номер пакету. Всі пакети повинні мати унікальний порядковий номер за винятком випадку перенадсилання пакету . Це поле використовується для відслідкування втрати чи дублювання пакетів. Зазвичай з кожним пакетом SEQ_NUM збільшується на 1. Сервер та клієнт ведуть нумерацію пакетів, що не пересікається. Тобто порядковий номер пакету від сервера ніяк не зв’язаний з порядковими номерами пакетів від клієнта. Сервер починає відлік з 00 00. Клієнт починає відлік з 01 00.

Поле COMMAND при пересиланні повідомлення від клієнта серверу може приймати значення, наведені в таблиці 3.

Значення

Найменування

Опис

0А 00

ACK

Підтвердження

0Е 01

SEND_MESSAGE

Відіслати повідомлення через сервер

E8 03

LOGIN

Зареєструватися на сервері

06 04

CONTACT_LIST

Передати серверу «список контактів»

1A 04

SEARCH_UIN

Шукати користувача за UIN

24 04

SEARCH_USER

Шукати користувача за іменем

60 04

INFO_REQ

Запит основної інформації про користувача

6A 04

EXT_INFO_REQ

Запит розширеної інформації про користувача

9C 04

STATUS_CHANGE

Користувач змінив свій статус

28 05

LOGIN_2

Відсилається під час реєстрації на сервері

0A 05

UPDATE_INFO

Оновити основну інформацію про користувача

3C 05

ADD_TO_LIST

Користувач додається в «список контактів»

FC 03

NEW_USER_REG

Зареєструвати нового користувача

A6 04

NEW_USER_INFO

Відсилається основна інформація про нового користувача

Поле COMMAND при пересиланні повідомлення від сервера клієнту може приймати значення, наведені в таблиці 4.

Значення

Найменування

Опис

0А 00

ACK

Підтвердження

5A 00

LOGIN_REPLY

Відіслати повідомлення через сервер

6E 00

USER_ONLINE

Зареєструватися на сервері

78 00

USER_OFFLINE

Передати серверу «список контактів»

8C 00

RECEIVE_MESSAGE

Шукати користувача за UIN

DC 00

END_OF_SEARCH

Шукати користувача за іменем

18 01

INFO_REPLY

Запит основної інформації про користувача

22 01

EXT_INFO_REPLY

Запит розширеної інформації про користувача

A4 01

STATUS_UPDATE

Користувач змінив свій статус

E0 01

UPDATE_REPLY

Відсилається під час реєстрації на сервері

C8 00

UPDATE_EXT_REPLY

Оновити основну інформацію про користувача

46 00

NEW_USER_UIN

Користувач додається в «список контактів»

B4 00

NEW_USER_REPLY

Зареєструвати нового користувача

  1. Повідомлення від клієнта серверу

ACK(0А 00) – підтвердження.

Параметрів немає.

На відміну від інших команд, поле SEQNUM містить порядковий номер повідомлення, прийом якого підтверджується. Прийом цого пакету не повинен підтверджуватися.

LOGIN_REPLY(5А 00) – відповідь при реєстрації на ICQ сервері.

Параметри:

Довжина

Значення

Ім’я

Опис

4 байти

хх хх хх хх

UUSER_UIN

UIN користувача

4 байти

хх хх хх хх

USER_IP

ІР користувача

2 байти

хх хх

LOGIN_SEQ_NUM

Порядковий номер запиту на реєстрацію

4 байти

01 00 01 00

X1

Невідомо

4 байти

хх 00 16 00

X2

Невідомо

4 байти

8С 00 00 00

X3

Невідомо

4 байти

78 00 05 00

X4

Невідомо

6 байт

0А 00 05 00 01 00

X5

Невідомо

RECEIVEMESSAGE (DC 00) – повідомлення користувачу, передане через сервер.

Параметри:

Довжина

Значення

Ім’я

Опис

4 байти

хх хх хх хх

REMOTE_UIN

UIN відправника

2 байти

хх хх

YEAR

Рік посилання повідомлення

1 байт

хх

MONTH

Місяць посилання повідомлення

1 байт

хх

DAY

День посилання повідомлення

1 байт

хх

HOUR

Година посилання повідомлення

1 байт

хх

MINUTE

Хвилина посилання повідомлення

2 байти

хх хх

TYPE

Тип повідомлення

2 байти

хх хх

LENGTH

Довжина тексту повідомлення

змінна

MESSAGE

Текст повідомлення. ASCIIZ рядок

Поле TYPEможе приймати наступні значення:

01 00 – нормальне повідомлення;

04 00 – повідомлення є Інтернет-адресою;

0С 00 – повідомлення про те, що користувач був доданий в список контактів.

INFO_REPLY (18 01) – основна інформація про користувача.

Довжина

Значення

Ім’я

Опис

2 байти

хх хх

INFO_SEQ_NUM

Порядковий номер запиту

4 байти

хх хх хх хх

REMOTE_UIN

UIN користувача

2 байти

хх хх

LENGTH

Довжина «нікнейму»

Змінна

NICK_NAME

«Нікнейм». ASCIIZ рядок

2 байти

хх хх

LENGTH

Довжина імені

Змінна

FIRST_NAME

Ім’я. ASCIIZ рядок

2 байти

хх хх

LENGTH

Довжина прізвища

Змінна

LAST_NAME

Прізвище. ASCIIZ рядок

2 байти

хх хх

LENGTH

Довжина електронної адреси

Змінна

E_MAIL

Електронна адреса. ASCIIZ рядок

1 байт

хх

AUTHORIZE

Необхідність авторизації

  1. Комунікація між двома клієнтами

Коли користувач намагається відіслати повідомлення іншому користувачу, клієнтська програма перевіряє, чи встановлено ТСР з’єднання з віддаленим користувачем. У випадку наявності такого з’єднання, воно буде використане для передачі повідомлень. В іншому випадку з серверу запитується ІР адреса і порт іншого користувача і робиться спроба встановити ТСР з’єднання. Зазвичай порт береться в діапазоні 1200-1300. Після встановлення з’єднання відсилається повідомлення CHANNEL_INIT. Після цього кожен раз для посилання текстового повідомлення створюється пакет з повідомленням CHANNEL_MESSAGE. Отримання кожного пакету має бути підтверджено повідомленням CHANNEL_ACK.

Взаємодія з використанням протоколу ТСР так як і з використанням протоколу UDP базується на посиланні незалежних пакетів.

Соседние файлы в папке курсовая docx100