# レスポンスの中身

* *Peerの一覧が含まれている\**
* **Bencoding形式で渡される**
* **圧縮して行うことができる**

本章では、 Tracker へのレスポンス について解説していきま す。リクエストとレスポンスの両方について理解ができた訳で すから、あなたは、Trackerサーバーを作る事がでくるようにな さているはずです。 実際に、Trackerサーバーを作成してみましょう。そして、実際 動作させてみて、想定した通りのリクエスト、レスポンスが飛 び交い、データの配信が開始される事を確認ていきます。

## レスポンスの中身はPeerの一覧

Trackerはデータを配信しているPeerの一覧を返します。レスポ ンスととして最低限必要なのは、アドレスとポート番号の一ラ ンクです。 この2つのデータさえあればもTorrentクライアント同時でデー タを配信は合う事が可能です。 実際に渡されるデータの形式を見ていきましょう。

## レスポンスはBencode形式

Peer の一覧も Torrent ファイルと同様に Bencoding 形式で渡 されます。

```
{
peers:
[
{
peer_id:<benstring>
ip:<benstring 127.0.0.1の形式>
port:<beninteger>
}
{
peer_id:<benstring>
ip:<benstring 127.0.0.1の形式>
port:<beninteger>
}
...
]
interval:<beninteger 次にTrackerへアクセスする時間 単位は秒>
}
```

intervalキーを除けば、ipアドレス、port番号、peer\_id いっ た、リクエスト時にTracker へ渡した情報が含まれている事デ ータが含まれている事が読み取れるでしょう。 “interval”は次に Tracker へアクセスすべき目安の時間です。 どの程度の間隔でアクセスすべきなのかは、Torrent クライアン トからは判断できせん。どの程度のPeerが配信に参加してい て、どの程度のPeerが新規に参加しているを知らないためで す。 Tracker サーバー は自身の状態を加味して、この時間を決めま す。 例えば、頻繁にTrackerへアクセスされるとTrackerサーバーへ の負荷があがります。Peerのリストは更新されていない。更新 されても対象にあなたのアドレスが含まれるので更新する必要 性が弱い。といった時は、特別、アクセス時間を長く取るとい つた対応が考えられます。

## 圧縮して送信する事もできる

データを圧縮して相手へ送る事もできます。リクエストに "\&compact=1" を含めると、対応しているTracker であれば、データを圧縮して送ってくれます。 { interval: peers: } peer のアドレスと port 番号を、バイト配列として扱うことで データを圧縮します。BIG\_ENDIANで記録されます。 たとえば、IP4のアドレスは、「127.0.0.1」ならば、 \[0x7F, 0, 0, 1] と配列になります。ポートが8080ならば、\[0x1F, 0x90] といった並びで記録します。 Torrentでは、これせのデータを繋げて、アドレスが 「127.0.0.1」 で 、ポートが8008ならば、\[0x7F, 0x00, 0x00, 0x01, 0x1F, 0x90] といった並びのバイト配列として扱います。

## 不正な値を受け取った時もBencode

Trackerはデ不正な値を受け取った時も、Bencode形式のデー タを返します。人がよんで解るようなメッセージを付けて以下 のような形式で返します。

```
{
failure reason:<benstring 失敗した理由>
}
```

これで、レスポンスされデータの形式については、済みまし た。では、実際にTrackerサーバー、Trackerクライアントほ実 装してみましょう。

Kyorohiro work

<http://kyorohiro.strikingly.com>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nazenani-torrent.firefirestyle.net/tracker/response.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
