Спецификация протокола.

32 views
Skip to first unread message

Tsukasa

unread,
Apr 24, 2013, 7:23:21 AM4/24/13
to pica-pica-de...@googlegroups.com
Хотелось бы получить полную спецификацию протокола, ибо того, что лежит на GitHub, не хватает для полной реализации ноды.

an...@picapica.im

unread,
Apr 24, 2013, 1:36:38 PM4/24/13
to pica-pica-de...@googlegroups.com


Это и есть полное описание всех пакетов протокола,
если речь идет о
https://github.com/antonsviridenko/pica-pica/blob/master/doc/proto.txt

Где, когда и в какой последовательности отправлять эти пакеты,
можно почитать вот здесь
http://picapica.im/vkr.pdf
но там информация малость устаревшая, кое-что с тех пор поменялось.
Какие конкретно вопросы по части реализации возникли?
Вы хотите сделать новую реализацию ноды? На каком языке?
Почему бы не присоединиться к разработке существующей реализации? :)


On Wed, Apr 24, 2013 at 04:23:21AM -0700, Tsukasa wrote:

> Хотелось бы получить полную спецификацию протокола, ибо того, что лежит на
> GitHub, не хватает для полной реализации ноды.
>
> --
> Вы получили это сообщение, поскольку подписаны на группу Pica Pica Development (Russian).
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес pica-pica-developm...@googlegroups.com.
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу pica-pica-de...@googlegroups.com.
> Перейдите в группу по ссылке http://groups.google.com/group/pica-pica-development-ru?hl=ru.
> Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
>
>

Tsukasa

unread,
Apr 24, 2013, 4:32:12 PM4/24/13
to pica-pica-de...@googlegroups.com
Мне не ясно, как осуществляется поиск подключённых клиентов. Клиент не отправляет никакой информации о себе после подключения, которую можно было бы использовать для ответа на запросы 0xA5. Ещё не очень понятно, как работает пересылка сообщений между клиентами.
Я использую фреймворк Tornado и уже сделал большую часть межсерверного взаимодействия. Оно даже работает :3
Причём заняло это у меня часов 10. Не думаю, что реализацию на C можно сделать за такое время.
Мне ещё интересно, почему в списке узлов задаётся развер пакета, а не количество узлов. Так было бы намного проще с точки зрения реализации.

среда, 24 апреля 2013 г., 20:36:38 UTC+3 пользователь Anton написал:


Это и есть полное описание всех пакетов протокола,
если речь идет о
https://github.com/antonsviridenko/pica-pica/blob/master/doc/proto.txt

Где, когда и в какой последовательности отправлять эти пакеты,
можно почитать вот здесь
http://picapica.im/vkr.pdf
но там информация малость устаревшая, кое-что с тех пор поменялось.
Какие конкретно вопросы по части реализации возникли?
Вы хотите сделать новую реализацию ноды? На каком языке?
Почему бы не присоединиться к разработке существующей реализации? :)


On Wed, Apr 24, 2013 at 04:23:21AM -0700, Tsukasa wrote:

> Хотелось бы получить полную спецификацию протокола, ибо того, что лежит на
> GitHub, не хватает для полной реализации ноды.
>
> --
> Вы получили это сообщение, поскольку подписаны на группу Pica Pica Development (Russian).
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес pica-pica-development-ru+unsub...@googlegroups.com.

Anton Sviridenko

unread,
Apr 25, 2013, 1:43:07 PM4/25/13
to pica-pica-de...@googlegroups.com
On Wed, Apr 24, 2013 at 01:32:12PM -0700, Tsukasa wrote:
> Мне не ясно, как осуществляется поиск подключённых клиентов. Клиент не
> отправляет никакой информации о себе после подключения, которую можно было
> бы использовать для ответа на запросы 0xA5. Ещё не очень понятно, как
> работает пересылка сообщений между клиентами.

Номер клиента содержится в сертификате клиента, в поле CommonName, в
формате номер#никнейм. При подключении клиента нода извлекает этот номер
из сертификата и запоминает у себя.

Пересылка сообщений работает в общем случае через 2 ноды, но может и
через одну, если оба клиента подключены к одной и той же ноде

http://www.linux.org.ru/news/internet/8141624?cid=8155820

Значит так, есть 3 типа соединения, обозначенные для краткости:
C2N - между клиентом и нодой для обмена служебными сообщениями (0xCA, 0x01 - 0x0A)

N2N - между нодами, сообщения 0xCB, 0x01, 0x02, 0xA0 - 0xD0

C2C - между клиентами, тунеллируемое через 1 или 2 ноды

1) сначала клиент1 отправляет 0x03 ноде к которой он подключен (нода1),
2) нода1 рассылает всем остальным нодам запрос 0xA5,
3) нода2, к которой подключен искомый клиент2 отвечает ноде1 сообщением 0xA8
4) нода1 посылает ноде2 0xAA
5) нода2 отправляет клиенту2 0x04
6) клиент2 отвечает ноде2 сообщением 0x06
7) клиент2 создает новое С2С TCP соединение к ноде2 и отправляет по нему (открытым текстом) 0x20
8) нода2 отправляет ноде1 сообщение 0xAB
9) нода1 отправляет клиенту1 0x07
10) клиент1 создает С2С TCP соединение с нодой1, отправляет по нему 0x20
11) после этого ноды считают соединение между клиентами установленным,
все, что приходит от одного клиента по C2C соединению, заворачивается в
сообщение 0xD0 и пересылается другой ноде

Вот так, всё просто :)


> Я использую фреймворк Tornado и уже сделал большую часть межсерверного
> взаимодействия. Оно даже работает :3
> Причём заняло это у меня часов 10. Не думаю, что реализацию на C можно
> сделать за такое время.

Можно посмотреть?

> Мне ещё интересно, почему в списке узлов задаётся развер пакета, а не
> количество узлов. Так было бы намного проще с точки зрения реализации.
>

Потому что адреса узлов могут быть разных форматов и переменной длины в
случае DNS

> среда, 24 апреля 2013 г., 20:36:38 UTC+3 пользователь Anton написал:
> >
> >
> >
> > Это и есть полное описание всех пакетов протокола,
> > если речь идет о
> > https://github.com/antonsviridenko/pica-pica/blob/master/doc/proto.txt
> >
> > Где, когда и в какой последовательности отправлять эти пакеты,
> > можно почитать вот здесь
> > http://picapica.im/vkr.pdf
> > но там информация малость устаревшая, кое-что с тех пор поменялось.
> > Какие конкретно вопросы по части реализации возникли?
> > Вы хотите сделать новую реализацию ноды? На каком языке?
> > Почему бы не присоединиться к разработке существующей реализации? :)
> >
> >
> > On Wed, Apr 24, 2013 at 04:23:21AM -0700, Tsukasa wrote:
> >
> > > Хотелось бы получить полную спецификацию протокола, ибо того, что лежит
> > на
> > > GitHub, не хватает для полной реализации ноды.
> > >
> > > --
> > > Вы получили это сообщение, поскольку подписаны на группу Pica Pica
> > Development (Russian).
> > >
> > > Чтобы отказаться от подписки на эту группу и перестать получать из нее
> > сообщения, отправьте электронное письмо на адрес
> > pica-pica-developm...@googlegroups.com <javascript:>.
> > > Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу
> > pica-pica-de...@googlegroups.com <javascript:>.
> > > Перейдите в группу по ссылке
> > http://groups.google.com/group/pica-pica-development-ru?hl=ru.
> > > Подробнее о функциях можно узнать на странице
> > https://groups.google.com/groups/opt_out.
> > >
> > >
> >
>
> --
> Вы получили это сообщение, поскольку подписаны на группу Pica Pica Development (Russian).
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес pica-pica-developm...@googlegroups.com.

Anton Sviridenko

unread,
Apr 25, 2013, 1:47:00 PM4/25/13
to pica-pica-de...@googlegroups.com

Еще надо учесть, что в будщем планируется отвязка от центра
сертификации, и поэтому вместо 32 битного номера в качестве
идентификатора клиента будет как минимум 160 битное число,
или больше, если взять какой-нибудь из SHA-2 хэшей,
протокол, соответственно, поменяется

Tsukasa

unread,
Apr 25, 2013, 4:39:52 PM4/25/13
to pica-pica-de...@googlegroups.com
четверг, 25 апреля 2013 г., 20:43:07 UTC+3 пользователь Anton написал:
Теперь ясно. Надо будет попробовать.
> Я использую фреймворк Tornado и уже сделал большую часть межсерверного
> взаимодействия. Оно даже работает :3
> Причём заняло это у меня часов 10. Не думаю, что реализацию на C можно
> сделать за такое время.

Можно посмотреть?

https://github.com/kanski/pica-node
Всё писалось на скорую руку, так что выглядит оно не очень хорошо. Общаться с клиентами оно (почти) не умеет.
> Мне ещё интересно, почему в списке узлов задаётся развер пакета, а не
> количество узлов. Так было бы намного проще с точки зрения реализации.
>

Потому что адреса узлов могут быть разных форматов и переменной длины в
случае DNS

Парсить это можно и не зная размера пакета. Я сначала не заметил, что там размер и сходу написал думая, что это количество нод. Реализация была намного проще и понятней :3
> среда, 24 апреля 2013 г., 20:36:38 UTC+3 пользователь Anton написал:
> >
> >
> >
> > Это и есть полное описание всех пакетов протокола,
> > если речь идет о
> > https://github.com/antonsviridenko/pica-pica/blob/master/doc/proto.txt
> >
> > Где, когда и в какой последовательности отправлять эти пакеты,
> > можно почитать вот здесь
> > http://picapica.im/vkr.pdf
> > но там информация малость устаревшая, кое-что с тех пор поменялось.
> > Какие конкретно вопросы по части реализации возникли?
> > Вы хотите сделать новую реализацию ноды? На каком языке?
> > Почему бы не присоединиться к разработке существующей реализации? :)
> >
> >
> > On Wed, Apr 24, 2013 at 04:23:21AM -0700, Tsukasa wrote:
> >
> > > Хотелось бы получить полную спецификацию протокола, ибо того, что лежит
> > на
> > > GitHub, не хватает для полной реализации ноды.
> > >
> > > --
> > > Вы получили это сообщение, поскольку подписаны на группу Pica Pica
> > Development (Russian).
> > >
> > > Чтобы отказаться от подписки на эту группу и перестать получать из нее
> > сообщения, отправьте электронное письмо на адрес
> > pica-pica-development-ru+unsub...@googlegroups.com <javascript:>.
> > > Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу
> > pica-pica-de...@googlegroups.com <javascript:>.
> > > Перейдите в группу по ссылке
> > http://groups.google.com/group/pica-pica-development-ru?hl=ru.
> > > Подробнее о функциях можно узнать на странице
> > https://groups.google.com/groups/opt_out.
> > >
> > >
> >
>
> --
> Вы получили это сообщение, поскольку подписаны на группу Pica Pica Development (Russian).
>
> Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес pica-pica-development-ru+unsub...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages