テレグラム DC の秘密 – コックス
Telegram は 5 つのデータセンター (DC) があると主張しており、Telegram のコードとドキュメントでは DC1 ~ 5 と呼ばれています。このうち、DC1 と DC3 は米国のマイアミにあります。 DC2 と DC4 はオランダのアムステルダムにあります。 DC5はシンガポールにあります。
各アカウントは登録時に DC に関連付けられ、 変わらない ユーザーの電話番号または地理的位置を使用します。ユーザーは DC を自由に選択できません。間違った DC に接続すると、サーバーはクライアントに、アカウントに関連付けられた正しい DC に接続するように求めるエラー メッセージを返します。
頻繁にダウンする DC5 から始める
5 つの DC の中で、DC5 は中国電報コミュニティで特に人気があります。これは、多数の中国ユーザーに静かにサービスを提供しているからではなく、頻繁にクラッシュするためです。
DC5 がダウンすると、DC5 ユーザーは Telegram を使用できなくなり、Telegram サークルでは「なぜ DC5 が再びダウンするのか?」という話題になることがよくあります。 DC5 ユーザーは、通常の「接続」クライアントが回復するのを待ってから、他の DC5 ユーザーとのグループ チャットに参加して DC5 を批判することができます。

DC2とDC3の秘密
グループ メンバーの好奇心を満たすために、誰かがユーザーの DC を要求するボットを作成しました。そこで、グループのメンバーは自分たちの DC をチェックし始めました。
- +86 の電話番号で登録したユーザーは、DC5 (シンガポール) で次のダウンタイムに遭遇しました。
- +1 電話番号で登録されたユーザーは DC1 (米国マイアミ) にいて、接続速度と安定性の両方を享受していました。
- ヨーロッパの電話番号で登録したユーザーは、中国の電報コミュニティの中で最も珍しい DC4 (オランダのアムステルダム) にいることに気づきました。
はぁ?待ってください…Telegram は 5 DC を要求していませんか? DC2とDC3はどうですか?

ボット投稿の「ビッグ データ クエリ」から、実際には DC2 または DC3 ユーザーが存在しないことがわかります。
したがって、DC2 と DC3 にはユーザーがいないと想定する人もいましたが、分析して DC2 と DC3 がそれぞれ親 DC がビジー状態のときにユーザー登録を受け取る下位 DC DC1 と DC4 であると想定する人もいました。
本当にそうですか?
DC電報配信ルール(2022-05)
TL;博士:
- DC1、DC2、DC4、DC5ベース 国番号 提供された電話番号 登録中。これら 4 つの DC は新規ユーザー登録を随時受け付けており、既存ユーザーも多数います。
- かつてDC3にはユーザーがいましたが、2020年頃には既存のDC3ユーザーが 可能です DC1。 DC3 には現在ユーザーがいないため、新規登録は受け付けていません。
言い換えれば、DC2 には本当に多くのユーザーがおり、他の DC と同様に、 登録時に電話番号の国コードが DC2 の範囲内にある限り (例: +49 ドイツ)、ユーザーは確実に DC2 に割り当てられます。。一方、DC3 はまだ実行中ですが、おそらく接続されているユーザーはいません。
DC2 には非常に多くのユーザーがいるのに、なぜ上記のボットは DC2 ユーザーを検出しなかったのでしょうか?
これは、DC を見つけるボットの方法が間違っているためです。
私は実際にはどの DC にいるのでしょうか?
現在、DC を決定するには 3 つの一般的な方法があります。以下では、新しい DC2 アカウントを登録し、これら 3 つの方法を試してみます。
方法1(ログイン方法)
割り当てられた電話番号を使用する DC2私たちはつながります DC1 MTProto Telegram プロトコル (公式クライアントで使用されるのと同じプロトコル) を通じて、auth.sendCode インターフェイスを呼び出し、アカウント登録用の確認コードの送信を試みます。

この時点で、サーバーは PHONE_MIGRATE_2 クライアントが DC2 に接続する必要があることを示すエラー (DC2 に接続した後に同じ操作を実行すると、確認コードが直接送信されます)。
したがって、このアカウントは DC2 アカウントであることがわかります。 この方法は、すでに登録されているアカウントにも機能しますが、ユーザーの電話番号を知っている必要があるため、グループ メンバーの DC を照会することが困難になります。
方法2(プロフィール画像・ファイルによる方法)
DC2 アカウント (以下、新しいアカウント名と呼びます) を登録した後、ユーザーの DC を表示するサードパーティ クライアント (Plus Messenger) を使用します。 別のアカウントでサインインする新しい DC アカウントを確認します。ただし、新しいアカウントのプロフィール写真をアップロードするまで、クライアントは DC を表示できません。アップロードすると、新しいアカウントが DC2 にあることが表示されます。

これは、サードパーティのクライアントが、 dc_id ユーザー プロフィール写真をダウンロードするときの、MTProto プロトコルの userProfilePhoto 構造体のフィールド。

このメソッドは、ユーザーがアップロードしたファイルが保存されている DC に基づいてユーザーの DC を決定します。
新しいアカウントでサードパーティ クライアントにログインして DC を確認する場合、クライアントはどのサーバーに接続されているかを認識しているため、方法 1 を使用して DC を特定できます。
方法 3 (Web CDN 方法)
最後に、前述のボットを使用して DC に新しいアカウントをクエリします。

はぁ?これは DC2 の新しいアカウントではありませんか?なぜボットは DC4 だと言うのですか?
このボットは Telegram の Web CDN 経由でユーザーの DCN を検出していることが判明しました。 https://t.me/dctest** を開いてソース コードを確認すると、新しいアカウントのプロフィール写真のドメインが cdn4 で始まっていることがわかり、ボットはこれを DC4 として識別します。

DC2 と DC3 は、Web CDN サービスを提供するために同じ場所にある DC4 と DC1 ドメインを「借用」するためです。ボットは DC2 ユーザーを識別できません。彼らはすべて DC4 ユーザーと間違えられます。
別のタイプのボットでは、ユーザーが DC を識別するために画像/ファイルを送信する必要があります。これは方法 2 に似ており、ユーザーの DC を正確に決定できます。
DC3の消滅
方法 2 を使用してユーザーの DC を正しく識別した後、世界的に (特に外部グループで) DC2 ユーザーはそれほど多くなく、DC3 ユーザーは非常に少ないことがわかりました。広範囲にわたる検索の結果、DC3 で 2 人のユーザーが見つかりました。 @urie** そして @flowinglig**。

ただし、さらなる分析により、それらは実際には DC3 に存在しないことがわかります。たとえば、photos.GetUserPhotos を呼び出してプロフィール写真のリストを表示すると、次のことがわかります。 @urie** 7 つのプロフィール写真をアップロードします。そのうちの 2 つだけが DC3 にあり、新しい写真は DC1 にアップロードされます。

同様に、両方のユーザーのメッセージ履歴内の画像を確認すると、DC3 に保存されている古い画像は数枚だけで、新しい画像は DC1 に保存されていることがわかります。逆に、他の DC のユーザーは、イメージをそれぞれの DC に保存します。
加えて、 @urie** 2021 年に、テストのためにファイルを特定のボット DC (Metodi ファイル) に送信しましたが、結果も DC1 でした。

残念ながら、電話番号にアクセスできないため、方法 1 (ログイン方法) を使用して正確にテストすることはできません。方法 2 (プロファイル画像/ファイル方法) によってのみ、それらが DC3 から DC1 に転送されたと結論付けることができます。
DC3 が新規ユーザーを受け付けなくなったことをさらに確認するために、世界のさまざまな地域から 10,000 を超える電話番号を生成し、方法 1 (ログイン方法) を使用して Telegram 上で DC 配布ルールをテストしました。結果は次のとおりです。

テスト中、間違った DC に接続されているすべての番号が、実際の DC が返された番号に対応しているという事実にできるだけ近いことを確認しました。
PHONE_MIGRATE_Xエラーを防止し、SMS スパムの過剰な生成を防ぎ、SMS 料金による嫌がらせや Pavel Durov の破産を引き起こします。テスト後、DC4 で確認された番号を除外し、残りの番号を DC4 に再接続して、DC3 に割り当てられた番号が失われないようにしました。
上記の分析に基づいて、DC3 は実際には新規ユーザーをもう受け入れておらず、既存のユーザーはおそらくすべて DC1 に移動していると結論付けることができます。
不足している DC3 は見つかりませんでしたが、特定の DC5 のユーザーになりたい場合、DC5 のダウンタイムのリスクを回避したい場合、またはボットが信頼できるかどうかを確認したい場合は、前の画像を参照して、特定の国コードの電話番号で登録できるようになりました。
Telegram サーバーと一部の操作メカニズムはオープンソースではないため、この記事の結論の多くは仮定に基づいています。記事内で間違いを見つけた場合、または追加のヒントがある場合は、お気軽にコメントしてください。
この記事の執筆中に次のプロジェクトとコンテンツが参照されたことを認めます。
コックス
この記事 (https://dev.moe/en/3025) は Coxxs のオリジナル作品です。再投稿する場合は、元のリンクをクレジットしてください。