Міністерство освіти і науки України
Чернівецький національний університет ім. Ю. Федьковича
Інженерно – технічний факультет
Реферат
на тему: “ Технології миттєвого обміну повідомленнями: ICQ та IRC ”
Виконав
Студент 504 групи
Чернівці
2010
Зміст
1.Вступ……………………………………………………………………………….3
2.Можливості ICQ…………………………………………………………………4
3.Специфікація ICQ протоколу…………………………………………………..5
4.Комунікації між сервером і клієнтом………………………………………….6
5.IRC…………………………………………………………………………………7
6.Опис IRC…………………………………………………………………………..8
7.Технічні деталі……………………………………………………………………9
7.1.Команди……………………………………………………………………...9
7.2. Режими каналів……………………………………………………………10
7.3.Режими користувачів……………………………………………………...10
8.CTCP………………………………………………………………………………10
Вступ
ICQ - комунікаційна програма для передачі повідомлень за допомогою мережі інтернет. В основі її роботи покладений метод збереження всіх повідомлень, що посилаються користувачами, на сервері до тих пір, поки адресат не підключиться до інтернет. Назва ICQ співзвучно англійському "I seek you" - "Я тебе шукаю". Ця програма була створена в 1999 році маловідомої ізраїльською фірмою Mirabilis. І на даний момент кількість її користувачів обчислюється кількома десятками мільйонів. Популярність програмі принесло зручність використання і безоплатність послуг, що надаються.
IRC (англ. Internet Relay Chat) — сервіс Інтернет, який надає користувачам можливість спілкування шляхом надсилання текстових повідомлень багатьом людям з усього світу одночасно (в режимі реального часу). Аналогію можна знайти у радіо на коротких хвилях, навіть використовується аналогічне поняття англ. channel (канал, хвиля).
Можливості 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) та інші. Користувач може вільно змінювати свій статус, про що інформується кожен зареєстрований на сервері клієнт, в чиєму списку контактів знаходиться змінив статус користувач.
Специфікація ICQ протоколу
За час існування ICQ, використовуваний нею протокол зазнав безліч змін і мав різні версії, кожна наступна з яких відрізнялася від попередньої.
Розглянемо роботу протоколу більш докладно. Незважаючи на те, що ця версія вже практично не використовується, основні принципи роботи і використовувані структури залишилися незмінні.
З'єднання з іншим клієнтом, що знаходяться в даний момент в Internet (on-line) здійснюється за допомогою протоколу TCP з установкою прямого з'єднання між участь у переговорах сторонами. Всі інші з'єднання здійснюються з використанням пакетів протоколу UDP посилаються через ICQ сервер. Отримання кожного UDP пакету має бути підтверджено сервером. У разі неотримання клієнтом підтвердження від сервера на протязі 10 секунд, клієнт повторно надсилає пакет. Після таких 6 невдалих посилок клієнт посилає на сервер повідомлення B_MESSAGE_ASK, отримавши яке сервер повинен негайно відповісти. Процедура повторюється 2 рази. Якщо ні на один з посланих пакетів не було отримано підтвердження, ICQ клієнт припускає, що користувач відключився від Internet (off-line).
Перед тим як почати встановлювати будь-які з'єднання, клієнт повинен зареєструватися на одному з ICQ-серверів (login). Під час процедури реєстрації клієнт посилає серверу інформацію про себе таку як IP адреса, TCP порт зарезервований для ICQ, пароль користувача і список інших користувачів ICQ що знаходяться в "списку контактів" клієнта. Клієнт повинен періодично посилати на сервер повідомлення "KEEP_ALIVE" свідчить про те, що клієнт все ще підключений до Мережі. За замовчуванням клієнт посилає UDP пакети на сервер використовуючи порт 4000.
Функції "послати повідомлення користувачу непідключеному до Internet (off-line)", "отримання інформації про користувача", "пошук користувача", "зміна інформації поточного користувача" реалізуються через пакети протоколу UDP, що посилаються на сервер. У полі "DATA" UDP пакету розміщується інформація про UIN відправника, код, що ідентифікує запитану функцію і необов'язкові параметри.
Коли користувач посилає повідомлення іншому користувачеві, який підключений (зареєстрований на сервері), ICQ клієнт намагається встановити TCP з'єднання з цим користувачем, використовуючи аналогічну (за невеликим винятком) структуру поля DATA TCP пакету. Після посилки повідомлення з'єднання не розривається і може бути використане для посилки наступних повідомлень. З'єднання закривається, коли один з користувачів від'єднується (log-off) або ж втрачає з'єднання з сервером.
Комунікації між сервером і клієнтом
Як вже було сказано раніше, для здійснення такого роду комунікацій ICQ використовує протокол UDP. Поле даних пакета UDP при посилці від клієнта до сервера заповнюється наступним чином:
-
Довжина
|
Значення
|
Назва
|
Опис
|
2 байти
|
02 00
|
VERSION
|
Версія протоколу ICQ
|
2 байти
|
хх хх
|
COMMAND
|
Код запитуваної функції
|
2 байти
|
хх хх
|
SEQ_NUM
|
Порядковий номер
|
4 байти
|
хх хх хх хх
|
UIN
|
UIN відправника
|
Змінна
|
|
|
0 або більше параметрів. Залежить від поля COMMAND
|
Тут і далі "байт" представляє собою послідовність з 8-и бітів, старший біт знаходиться ліворуч, молодший байт іде першим.
Поле даних пакета 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.
На початку 1998 року з'явилася наступна версія протоколу. На даний момент вона є останньою модифікацією протоколу ICQ.
Про цю версії протоколу відомо не так багато.
У цій версії також трохи змінився формат даних у UDP пакеті:
Безсумнівно, ICQ є вартою уваги послугою надається Мережею. На даний момент організуються служби, що дозволяють посилати повідомлення користувачам ICQ за допомогою звичайного телефону - використовуючи ресурси пейджингових компаній. Це, як і безоплатність самої ICQ, роблять останню ще більш превлекательним для користувачів мережі Інтернет. Існує також можливість створювати власні локальні ICQ-сервера, які дозволяють спілкуватися користувачам Інтранет не залежачи від серверів Mirabilis.
IRC
IRC (англ. Internet Relay Chat) — сервіс Інтернет, який надає користувачам можливість спілкування шляхом надсилання текстових повідомлень багатьом людям з усього світу одночасно (в режимі реального часу). Аналогію можна знайти у радіо на коротких хвилях, навіть використовується аналогічне поняття англ. channel (канал, хвиля).
Надруковане на комп'ютері користувача повідомлення стає видимим всім користувачам на тому ж каналі. Користувач може приєднатися до вже наявного каналу або налаштувати свій. Користувач може створити свій особистий канал тільки для себе і буквально однієї-двох людей. Так само, як і у короткохвильовиків, користувач може присвоїти собі унікальний «позивний» («нік», «псевдонім», англ. nick).
Опис IRC
IRC-клієнт, який підключився до кількох каналів на двох різних IRC-серверах
При підключенні до серверу IRC користувач бачить список доступних каналів, у кожний з яких (або відразу в декілька) він може «увійти» (підключитися). Каналом є віртуальна «кімната», в якій можуть знаходитися декілька користувачів. Всі повідомлення, що видаються в канал, видно всім користувачам, які знаходяться на цьому ж каналі. Кожен канал має свою назву і, як правило, певну тему для обговорення. Після «входу» на канал користувач може бачити, що пишуть інші учасники каналу, а також може сам писати повідомлення. Тема, що обговорюється на каналі, зазвичай випливає з його назви (наприклад, канал #wikipedia-ru).
Різні сервери можуть об'єднуватися (лінкуватися) в мережу з єдиним простором імен користувачів і каналів. Великі світові IRC-мережі налічують у своєму складі сотні серверів. Аварійний тимчасовий розрив IRC-мережі на дві частини називається netsplit'ом (сплітом).
IRC надає можливість як групового, так і приватного спілкування. Для групового чату в IRC призначені канали, на яких користувачі можуть збиратися та вести спілкування.
Оператори IRC-мережі керують роботою серверів та мережі в цілому. Як правило, в IRC-мережах на операторів теж встановлюються обмеження на рівні правил мережі, мережевого етикету або навіть на рівні IRCd/IRC-сервісів.
-
Технічні деталі
Команди
Більшість команд, які вводяться в командну консоль, відрізняються від тих, які передаються по мережі. Ось команди, визначені в RFC 2812:
NICK username — змінює нік учасника на зазначене параметром username.
OPER username password — видає права оператора користувачеві, використовуючи відповідний O:Line.
QUIT — від'єднує користувача від сервера.
JOIN channels [keys] — приєднується до каналів channels використовуючи відповідні ключі keys якщо канал має режим +k. Канали в списку розділяються комами.
JOIN 0 — покинути всі канали.
PART channels [:message] — покинути канали channels, використовуючи message. Якщо message містить прогалини, то перед ним ставиться :.
MODE channel /username modes — змінює режими каналу channel (потрібні права оператора каналу) або користувача username (більшість серверів дозволяють змінювати свої режими тільки самим користувачам). Modes — рядок у форматі +flags-flags params.
TOPIC channel [:message] — змінює тему на message. Якщо не вказано параметр message, то повертає тему каналу.
NAMES [channel] — повертає список користувачів на каналі, або, якщо канал не вказано, у всій мережі..
LIST [pattern] — повертає всі канали. Якщо встановлено шаблон pattern, то повертаються тільки канали, що збігаються з ним
INVITE user channel — запрошує user на канал channel.
KICK channels users [:reason] — викидає користувачів users з каналів channels. Можливо вказати причину reason.
PRIVMSG channel /user:message — посилає повідомлення message на канал channel або користувачу user.
NOTICE channel /user:message — аналог PRIVMSG. Згідно RFC 2812, на NOTICE ніколи не може бути автоматичних відповідей.
WALLOPS text — посилає текст всім користувачам з режимом +w.
WHOIS — показує інформацію про даного користувача.
Оператори каналу можуть задавати різні режими каналів за допомогою команди MODE. У RFC 2811 визначені наступні режими:
+O user — позначає творця каналу. Не повинен змінюватися вручну (відсутня в багатьох реалізаціях).
+o user — позначає оператора каналу.
+v user — дає користувачеві право говорити на модерується каналах (див. + m).
+a — анонімний канал. Імена всіх користувачів ховаються як anonymous!anonymous@anonymous (відсутня в багатьох реалізаціях).
+m — тільки користувачі з прапорами +o, +h, або +v можуть посилати в нього повідомлення.
+n — тільки що знаходяться на каналі користувачі можуть посилати в нього повідомлення.
+p/+s —- канал ховається в усіх відповідях сервера якщо користувач не знаходиться на цьому каналі.
+t — тему каналу можуть змінювати тільки оператори.
+l limit — обмежує кількість користувачів на каналі числом limit.
+k key — встановлює ключ (пароль) на канал key.
+i — на канал можна увійти тільки за запрошенням (invite).
+b — вивести список банів +b на каналі. Доступний всім користувачам.
+b mask — забороняє доступ до каналу користувачів, співпадаючих з маскою mask.
+e mask — дозволяє користувачам, що потрапляють під маску mask, заходити на канал незалежно від режимів +b.
+I mask — дозволяє користувачам, що потрапляють під маску mask, заходити на канал незалежно від режиму +i.
+c — оформлення тексту на каналі заборонено (не визначено в RFC).
+i — невидимий користувач.
+s — отримувати повідомлення сервера.
+w — отримувати wallops.
+o — оператор сервера. Для отримання повинна використовуватися команда OPER.
CTCP
CTCP — це особливий тип повідомлень. Повідомлення CTCP виглядають так:
PRIVMSG target :\001command [arguments]\001
target — це канал або користувач, якому надсилається повідомлення, \001 — це бінарний символ 0x01, command — це команда CTCP, arguments — аргументи команди.
Основні команди:
PING — повертає аргументи назад.
VERSION — повертає версію клієнта.
USERINFO — повертає інформацію про користувача.
CLIENTINFO — повертає інформацію про клієнта.
SOURCE — повертає джерело, звідки можна завантажити клієнт.
TIME — повертає час на комп'ютері користувача.
ACTION — емулює дію (команда /me).
Відповідь на CTCP-запит приходить в наступному вигляді:
NOTICE target :\001command [arguments]\001
Джерела інформації
http://iserverd .ru/docum_ext/icqkurs.htm#2
http://uk.wikipedia.org/wiki/IRC
http://tools.ietf.org/html/rfc2810
http://info.internet.isi.edu/in-notes/rfc/files/rfc768.txt
|