Анатомия торрент-сесии |
(Updated to reflect the tracker changes. 14-04-2004)
There seems to be a lot of confusion about how the statistics updates work. The following is a capture of a full
session to see what's going on behind the scenes. Клиент общается с трекером через простой HTTP GET-запрос. Расмотрим самый простой случай:
GET /announce.php?passkey=a092924c51e9cac0d76b51457de93c9e&info_hash=c%97%91%C5jG%951%BE%C7M%F9%BFa%03%F2%2C%ED%EE%0F& peer_id=S588-----gqQ8TqDeqaY&port=6882&uploaded=0&downloaded=0&left=753690875&event=started
Разбираем на части:
• passkey - ваш личный паскей, который идентифицирует вас как пользователя трекера
• info_hash - хеш идентифицирующий торрент
• peer_id - идентификатор клиента (часть s588 означает Shad0w's 5.8.8, остальное случайные числа)
• port - порт на котором клиент слушает входящие соединения
• uploaded=0 - сколько клиент отдал информации
• downloaded=0 - сколько клиент скачал информации
• left=753690875 - сколько осталось закачать
• event=started - сообщение трекеру о том что клиент только начал закачку
Обратите внимание, что IP адрес пользователя тут не передается (тем не менее клиент может быть настроен на передачу IP адреса).
It's up to the tracker to see it and associate it with the user_id.
(Ответы сервера опущены, в них находиться только IP адреса пиров и сотвествующие порты.)
At this stage the user's profile will be listing this torrent as being leeched.
» С этого момента клиент будет отправлять GET-запросы на трекер. Мы расмотрим только первый из них:
GET /announce.php?passkey=a092924c51e9cac0d76b51457de93c9e&info_hash=c%97%91%C5jG%951%BE%C7M%F9%BFa%03%F2%2C%ED%EE%0F& peer_id=S588-----gqQ8TqDeqaY&port=6882&uploaded=67960832&downloaded=40828928& left=715417851&numwant=0
("numwant" is how the client tells the tracker how many new peers it wants, in this case 0.)
As you can see at this stage the user had uploaded approx. 68MB and downloaded approx. 40MB. Whenever the tracker receives
these GETs it updates both the stats relative to the 'currently leeching/seeding' boxes and the total user upload/download stats. These intermediate GETs will be sent either periodically (every 15 min
or so, depends on the client and tracker) or when you force a manual announce in the client.
Наконец, когда клиент закрываеться он отправляет еще один запрос на трекер:
GET /announce.php?passkey=a092924c51e9cac0d76b51457de93c9e&info_hash=c%97%91%C5jG%951%BE%C7M%F9%BFa%03%F2%2C%ED%EE%0F& peer_id=S588-----gqQ8TqDeqaY&port=6882&uploaded=754384896&downloaded=754215163 &left=0&numwant=0&event=completed
Notice the all-important "event=completed". It is at this stage that the torrent will be removed from the user's profile.
If for some reason (tracker down, lost connection, bad client, crash, ...) this last GET doesn't reach
the tracker this torrent will still be seen in the user profile until some tracker timeout occurs. It should be stressed that this message will be sent only when
closing the client properly, not when the download is finished. (The tracker will start listing
a torrent as 'currently seeding' after it receives a GET with left=0).
There's a further message that causes the torrent to be removed from the user's profile,
namely "event=stopped". This is usually sent
when stopping in the middle of a download, e.g. by pressing 'Cancel' in Shad0w's.
Еще одна заметка: некоторые клиенты имеют функцию пауза/продолжить. Это не отправляет никакого сообщения на сервер.
Не используйте это как попытку обновлять статистку чаще, это просто не будет работать. (Проверено на Shad0w's 5.8.11 и ABC 2.6.5.)
|
|