TON: Telegram нээлттэй сүлжээ. 1-р хэсэг: Танилцуулга, сүлжээний давхарга, ADNL, DHT, давхардсан сүлжээ

TON: Telegram нээлттэй сүлжээ. 1-р хэсэг: Танилцуулга, сүлжээний давхарга, ADNL, DHT, давхардсан сүлжээ

Хоёр долоо хоногийн турш Рунет Telegram болон түүний Роскомнадзорын утгагүй, өршөөлгүйгээр блоклосон нөхцөл байдлын талаар шуугиан тарьж байна. Рикошет нь олон хүнийг гомдоосон боловч эдгээр нь бүгд Geektimes дээрх нийтлэлүүдийн сэдэв юм. Би өөр зүйлд гайхсан - Telegram - Telegram Нээлттэй Сүлжээний үндсэн дээр гаргахаар төлөвлөж буй TON сүлжээний Habré-д хийсэн нэг ч дүн шинжилгээ хараагүй байна. Би энэ дутагдлыг нөхөхийг хүссэн, учир нь тэнд суралцах зүйл байгаа - энэ талаар албан ёсны мэдэгдэл байхгүй байсан ч гэсэн.

Хэт их мөнгө цуглуулсан Telegram маш том хэмжээний хаалттай ICO-г эхлүүлсэн гэсэн цуу яриа гараад байгааг сануулъя. Грамын өөрийн криптовалютыг энэ жил худалдаанд гаргах төлөвтэй байгаа бөгөөд Telegram хэрэглэгч бүр автоматаар түрийвчтэй болох бөгөөд энэ нь өөрөө бусад криптовалютуудаас ихээхэн давуу талыг бий болгодог.

Харамсалтай нь, албан ёсны мэдэгдэл байхгүй тул би цааш үргэлжлүүлж болно гарал үүсэл нь тодорхойгүй баримт бичиг, би танд даруй анхааруулж байна. Мэдээжийн хэрэг, энэ нь маш чадварлаг хуурамч зүйл болж хувирч магадгүй, гэхдээ энэ нь Николай Дуровын бичсэн (мөн хөрөнгө оруулагчдын нэг нь задруулсан) ирээдүйн системийн жинхэнэ цагаан хуудас байж магадгүй юм. Хэдийгээр энэ нь хуурамч байсан ч бид судалж, хэлэлцэхийг хэн ч хориглохгүй, тийм ээ?

Энэ баримт бичигт юу гэж заасан бэ? Би үүнийг өөрийн үгээр, тексттэй ойр, гэхдээ орос хэлээр, арай илүү хүмүүнлэгээр хэлэхийг хичээх болно (Николай албан ёсны математик руу орох хандлагатай намайг уучлах болтугай). Хэдийгээр энэ нь жинхэнэ байсан ч энэ нь системийн тайлбарын ноорог бөгөөд олон нийтэд танилцуулах үед өөрчлөгдөх магадлал өндөр гэдгийг санаарай.

Криптовалютаас гадна өөр олон зүйл хүлээгдэж байгааг бид мэдэж байна. Үүнийг дарааллаар нь авч үзье.

  • TON Blockchain. Энэ бол бүхэл бүтэн системийн үндэс суурь юм. Хэрэв та энэ нь юу болохыг мэдэхгүй бол blockchain — Би олж мэдэхийг зөвлөж байна, учир нь энд маш олон блокчэйн байх болно. Бие биендээ үүрлэсэн, бараг хуваагдмал, тэр ч байтугай бусад блокчейн блок доторх "босоо" блокчойнууд. гэх мэт дажгүй сонсогдохуйц нэр томьёо бас байх болно Шуурхай Hypercube чиглүүлэлт и Хязгааргүй хуваах парадигм, гэхдээ энэ талаар дараа дэлгэрэнгүй. Мэдээжийн хэрэг, баталгаатай, ухаалаг гэрээнүүд.
  • TON P2P сүлжээ. Үүний үндсэн дээр системийг бий болгох үе тэнгийн сүлжээ. Түүнийг түүхийн энэ хэсэгт эхлээд хэлэлцэх болно.
  • ТОН хадгалах. Блокчейнээс үл хамааран дээр дурдсан peer-to-peer сүлжээнд баригдах файлын хадгалалт. Торренттой харьцуулж болно.
  • TON прокси. Энэ бол сүлжээний оролцогчдын нэрээ нууцлах зорилготой үйлчилгээ юм. Аливаа багцыг шууд биш харин нэмэлт шифрлэлт бүхий зуучлагч хонгилоор дамжуулж болно - I2P эсвэл TOR гэх мэт.
  • ТОН DHT. Дурын утгыг хадгалах тараагдсан хэш хүснэгт. Энэ нь мөн дээрээс нь баригдсан TON сүлжээ (гэхдээ тэр үед үүнийг ашигладаг) мөн тусалдаг ТОН хадгалах "тараах" зангилаа олох, ба TON прокси - завсрын давталт. Гэхдээ блокчейнээс ялгаатай нь энэ хэш хүснэгт нь найдвартай хадгалалт биш гэдгийг тэмдэглэх нь зүйтэй - та үүнд чухал мэдээллийг хадгалах боломжгүй.
  • TON үйлчилгээ. Захиалгат үйлчилгээний платформ. Үндсэндээ энэ бол дээр дурдсан бүх зүйл дээр шинэ интернет юм. Мэдээлэл солилцох - дамжуулан TON сүлжээ/TON прокси, мөн логик нь ухаалаг гэрээнд байдаг TON Blockchain. Мөн нэлээд танил URL-уудтай интерфейс.
  • ТОН DNS. Бид танил URL-уудын талаар ярьж байгаа тул бид үүнээс 256 битийн хаяг руу хөрвүүлэгч хэрэгтэй - данс, гэрээ, үйлчилгээ, зангилаа.
  • TON төлбөр. Мөнгөний асуудал энд л гарч ирж байна. Мөн энэ нь зөвхөн тийм биш байх болно гр - эфирийн нэгэн адил ямар ч "жетон" боломжтой болно; Грам нь энд зөвхөн "анхдагч" валют байх болно.

Энэ бол уламжлалт протоколууд дээр суурилсан сүлжээний хэсэг болох TON-ийн "үндсэн" давхаргыг дүрсэлсэн эхний хэсэг юм. Дараагийн хэсэгт бид доор тайлбарласан системээр дэмжигдэх "зөөлөн" блокчейн талаар ярих болно. Тиймээс миний дахин ярих дараалал нь дээр дурьдсан баримт бичигт хэрэглэснээс арай өөр юм (энэ нь хийсвэр түвшинд шууд эхэлдэг).

Үндсэн ойлголтууд

TL (Хэлний төрөл). Энэ нь дурын өгөгдлийн бүтцэд зориулсан хийсвэр хоёртын формат юм. Энэ нь Telegram протоколд хэрэглэгддэг бөгөөд TON-д идэвхтэй ашиглагдах болно. Хэрэв та үүнтэй дэлгэрэнгүй танилцахыг хүсвэл - түүний тайлбар энд байна.

Хэш (Hash). Дурын өгөгдлийн бүтцийг тогтмол урттай нэг тоо болгон эргэлт буцалтгүй хувиргах функц. Баримт бичгийн туршид бид функцийн талаар ярьдаг SHA-256.

Сүлжээний зангилаа (Зангилаа). Зангилаа нь системийн ажиллагааг хангах програм хангамж юм. Ялангуяа Telegram үйлчлүүлэгчийн програм бүрт TON зангилаа орно гэж таамаглаж байна. Доод түвшинд зангилаанууд IPv4/IPv6 хаягтай бөгөөд UDP протоколыг ашиглан харилцдаг бол илүү өндөр түвшинд байна. хийсвэр хаягууд болон ADNL протоколыг хэрэгжүүлэх (хийсвэр хаягууд болон ADNL-ийн тухай - доороос үзнэ үү). Системийн зарим хэсэг нь ямар нэг зүйл хийх эсвэл зарим өгөгдлийг хадгалах тухай ярихад үүнийг сүлжээний зангилаанууд гүйцэтгэдэг гэж ойлгодог.

Хийсвэр хаяг (эсвэл зүгээр л хаяг, хаяг). Зангилааны хаяг нь нийтийн түлхүүрээр тодорхойлогддог. Илүү нарийн яривал, энэ нь нийтийн түлхүүрийг агуулсан өгөгдлийн бүтцийн 256 битийн хэш (SHA256) юм (тодорхой криптографийн алгоритмыг заагаагүй - эллипс муруй ба RSA-2048-ийг жишээ болгон өгсөн). Нэг зангилаа нөгөөтэй нь холбогдохын тулд зөвхөн түүний хаягийг төдийгүй энэ өгөгдлийн бүтцийг мэддэг байх шаардлагатай. Онолын хувьд нэг физик зангилаа нь ямар ч тооны хаяг үүсгэж болно (өөр өөр түлхүүрүүдтэй харгалзах).

Цаашилбал, ийм холбоосыг ихэвчлэн ашигладаг: TL бүтэц хэлбэрийн "прототип" (бараг бүх өгөгдлийг агуулсан), хаяглахад ашигладаг 256 битийн хэш.

Блокчейн (blockchain). Блокчейн нь өгөгдлийн бүтэц, элементүүд (блокууд) нь "гинж" болгон эрэмблэгдсэн бөгөөд гинжин хэлхээний дараагийн блок бүр өмнөх блокийн хэшийг агуулна. Ийм байдлаар бүрэн бүтэн байдалд хүрдэг - өөрчлөлтийг зөвхөн шинэ блок нэмэх замаар хийх боломжтой.

үйлчилгээ (үйлчилгээ). TON доторх үйлчилгээ нь блокчэйн ашигладаг эсэхээс хамааран янз бүрийн хэлбэртэй байж болно. Жишээлбэл, нэг (эсвэл олон) сүлжээний зангилаа нь уламжлалт вэб сервер гэх мэт блокчэйнд ямар ч бүртгэл үүсгэхгүйгээр доор тайлбарласан ADNL протоколыг ашиглан тодорхой RPC хүсэлтийг боловсруулах боломжтой. Үүнд ADNL-ээр HTTP-г хэрэгжүүлэх боломж, мөн мессенжер өөрөө энэ протокол руу шилжих зэрэг орно. TOR эсвэл I2P-тэй зүйрлэвэл энэ нь түүнийг янз бүрийн блоклоход илүү тэсвэртэй болгоно.

Үүний зэрэгцээ, хэд хэдэн үйлчилгээ нь блокчэйнтэй харилцах, түүний гаднах хүсэлтийг боловсруулахад оролцдог. Жишээлбэл, TON Storage - файлын хадгалалтын хувьд файлуудыг өөрсдөө блокчейн дээр хадгалах нь тийм ч үндэслэлгүй юм. Энэ нь зөвхөн файлын хэшүүдийг (тэдгээрийн зарим мета мэдээлэл) агуулсан байх бөгөөд тусгай сүлжээний зангилаанууд нь "файлын сервер" болж, тэдгээрийг ADNL-ээр дамжуулан бусад цэгүүд рүү илгээхэд бэлэн болно.

Манангийн үйлчилгээ (манангийн үйлчилгээ). Бид төвлөрлийг сааруулах, тэдгээрт нээлттэй оролцох гэсэн зарим үйлчилгээний талаар ярьж байна. Жишээлбэл, TON Proxy нь бусад зангилаа хооронд зуучлагч (прокси) дамжуулагчаар өөрийн зангилаа өгөхийг хүссэн аливаа оролцогчийн дэмжих үйлчилгээ юм. Хэрэв хүсвэл тэрээр микротөлбөрийн хувьд TON төлбөрийн системийг ашиглан түүний тогтоосон төлбөрийг авах боломжтой (энэ нь эргээд манангийн үйлчилгээ юм).

ADNL: Abstract Datagram Network Layer

Хамгийн доод түвшинд зангилааны хоорондох холбоог UDP протокол ашиглан гүйцэтгэнэ (хэдийгээр бусад сонголтуудыг зөвшөөрч болно).

Дээр дурьдсанчлан, нэг зангилаа нөгөө рүү пакет илгээхийн тулд өөрийн нийтийн түлхүүрүүдийн аль нэгийг (тиймээс түүний тодорхойлсон хаяг) мэддэг байх ёстой. Энэ нь пакетийг энэ түлхүүрээр шифрлэж, пакетын эхэнд 256 битийн очих хаягийг нэмдэг - нэг зангилаа нь эдгээр хаягуудын хэд хэдэн хаягтай байж болох тул энэ нь код тайлахад ямар түлхүүр ашиглахыг тодорхойлох боломжийг олгоно.

TON: Telegram нээлттэй сүлжээ. 1-р хэсэг: Танилцуулга, сүлжээний давхарга, ADNL, DHT, давхардсан сүлжээ

Нэмж дурдахад, хүлээн авагчийн хаягийн оронд өгөгдлийн багцын эхлэл гэж нэрлэгддэг зүйлийг агуулж болно. танигч суваг. Энэ тохиолдолд багцын боловсруулалт нь зангилааны хоорондох тодорхой тохиролцооноос аль хэдийн хамаардаг - жишээлбэл, тодорхой суваг руу илгээсэн өгөгдөл нь өөр зангилаанд зориулагдсан байж болох бөгөөд түүн рүү дамжуулах ёстой (энэ бол үйлчилгээ юм. TON прокси). Өөр нэг онцгой тохиолдол нь зангилаа хоорондын шууд харилцан үйлчлэл байж болох ч энэ сувгийн хувьд тусдаа түлхүүрийн хослолыг ашиглан шифрлэлт хийх боломжтой (Диффи-Хеллман протоколыг ашиглан урьдчилан үүсгэсэн).

Эцэст нь, онцгой тохиолдол бол "null" суваг юм - хэрэв зангилаа "хөршүүдийнхээ" нийтийн түлхүүрийг хараахан мэдэхгүй байгаа бол тэдгээрт пакетуудыг шифрлэлтгүйгээр илгээж болно. Энэ нь зөвхөн эхлүүлэхэд зориулагдсан - зангилаанууд түлхүүрийнхээ талаар мэдээлэл илгээсний дараа тэдгээрийг цаашдын харилцаа холбоонд ашиглах ёстой.

Дээр дурдсан протоколыг (256 бит сувгийн тодорхойлогч + пакетийн агуулга) ADNL гэж нэрлэдэг. Баримт бичигт TCP-ийн аналогийг эсвэл өөрийн нэмэлт - RLDP (Reliable Large Datagram Protocol) дээр суулгах боломжийг дурдсан боловч тэдгээрийн хэрэгжилтийн талаар дэлгэрэнгүй мэдээлэл өгөөгүй болно.

TON DHT: Тархсан хэш хүснэгт

Бусад тархсан системүүдийн нэгэн адил TON нь DHT-ийн хэрэгжилтийг хамардаг - тараасан хэш хүснэгт. Бүр тодруулбал хүснэгт нь Кадемлия шиг. Хэрэв та энэ төрлийн хэш хүснэгтийг сайн мэдэхгүй бол санаа зовох хэрэггүй, доор би тэдгээрийг хэрхэн ажилладаг талаар товч тайлбарлах болно.

TON: Telegram нээлттэй сүлжээ. 1-р хэсэг: Танилцуулга, сүлжээний давхарга, ADNL, DHT, давхардсан сүлжээ

Хийсвэр утгаараа DHT нь 256 битийн түлхүүрүүдийг дурын урттай хоёртын утгуудад буулгадаг. Энэ тохиолдолд хүснэгтийн түлхүүрүүд нь тодорхой TL бүтцийн хэшүүд юм (бүтэцүүд өөрсдөө DHT-тэй хамт хадгалагддаг). Энэ нь зангилааны хаяг үүсгэхтэй маш төстэй бөгөөд тэдгээр нь DHT-д үнэхээр байж болно (жишээлбэл, ийм түлхүүрийг ашиглан өгөгдсөн цэгийн IP хаягийг ашиглана. хийсвэр хаяг, хэрэв тэр үүнийг нуугаагүй бол). Гэхдээ ерөнхий тохиолдолд "түлхүүрүүдийн загвар" (тэдгээрийн тодорхойлолт, гол тайлбарууд) нь хэш хүснэгт дэх оруулгын "эзэмшигч" (өөрөөр хэлбэл зарим зангилааны нийтийн түлхүүр), хадгалагдсан утгын төрөл, дараа нь энэ оруулгыг өөрчлөх дүрмийг заадаг мета өгөгдөл юм. Жишээлбэл, дүрэм нь зөвхөн эзэмшигч нь утгыг өөрчлөхийг зөвшөөрөх эсвэл утгыг доош нь өөрчлөхийг хориглох (дахин тоглуулах халдлагаас хамгаалах).

256 битийн түлхүүрүүдээс гадна DHT хаягийн тухай ойлголтыг нэвтрүүлсэн. Ердийн хост хаягуудаас ялгаатай нь DHT хаяг нь заавал IP хаягтай холбоотой байдаг. Хэрэв зангилаа IP-ээ нуугаагүй бол DHT-ийн ердийн хаягийг ашиглаж болно. Гэхдээ ихэнхдээ DHT хэрэгцээнд зориулж тусдаа, "хагас байнгын" хаягийг бий болгодог.
TON: Telegram нээлттэй сүлжээ. 1-р хэсэг: Танилцуулга, сүлжээний давхарга, ADNL, DHT, давхардсан сүлжээ
Зайны тухай ойлголтыг товчлуурууд болон DHT хаягуудын дээр танилцуулсан - энд бүх зүйл хүснэгттэй давхцаж байна кадемлия — товчлууруудын хоорондох зай нь тэдгээрийн XOR (битийн онцгой OR)-тай тэнцүү байна. Kademlia хүснэгтүүдийн нэгэн адил тодорхой түлхүүрт тохирох утгыг хадгалах ёстой s энэ түлхүүр хүртэлх хамгийн богино зайтай зангилаа (s энд харьцангуй бага тоо байна).

DHT зангилаа бусад ийм зангилаатай холбогдохын тулд санах ойд хадгалагддаг DHT чиглүүлэлтийн хүснэгт — Өмнө нь харилцаж байсан зангилааны DHT ба IP хаягуудыг хол зайгаар нь бүлэглэсэн. Ийм 256 бүлэг байдаг (тэдгээр нь зайны утгад заасан хамгийн чухал биттэй тохирч байна - өөрөөр хэлбэл 0-ээс 255 хүртэлх зайд байгаа зангилаанууд нэг бүлэгт, 256-аас 65535 хүртэл - дараагийн бүлэгт орно гэх мэт). Бүлэг бүрт хязгаарлагдмал тооны "хамгийн сайн" зангилаанууд хадгалагддаг (тэдгээрт пингийн хувьд).

TON: Telegram нээлттэй сүлжээ. 1-р хэсэг: Танилцуулга, сүлжээний давхарга, ADNL, DHT, давхардсан сүлжээ

Зангилаа бүр хэд хэдэн үйлдлийг дэмжих ёстой: түлхүүрийн утгыг хадгалах, зангилааны хайлт и утгыг хайх. Зангилаа хайх нь өгөгдсөн түлхүүр дээр үндэслэн чиглүүлэлтийн хүснэгтээс түүнд хамгийн ойр байгаа цэгүүдийг гаргах явдал юм; Зангилаа нь түлхүүрийн утгыг мэддэг байхаас бусад тохиолдолд утгыг хайх нь ижил байна (дараа нь үүнийг буцаана). Үүний дагуу, хэрэв зангилаа DHT-ийн түлхүүрээр утгыг олохыг хүсвэл өөрийн чиглүүлэлтийн хүснэгтээс энэ түлхүүрт хамгийн ойр байгаа цөөн тооны зангилаа руу хүсэлт илгээдэг. Хэрэв шаардлагатай утга нь тэдний хариултуудын дунд байхгүй, гэхдээ өөр зангилааны хаягууд байгаа бол хүсэлтийг тэдэнд дахин хийнэ.

TON DHT-ийг янз бүрийн зорилгоор ашиглаж болно, жишээлбэл, торрент шиг файл хадгалах (. ТОН хадгалах); тодорхой үйлчилгээг хэрэгжүүлдэг зангилааны хаягийг тодорхойлох; блокчейн дээр данс эзэмшигчдийн талаарх мэдээллийг хадгалах. Гэхдээ хамгийн чухал хэрэглээ бол зангилаануудыг хийсвэр хаягаар нь илрүүлэх явдал юм. Үүнийг хийхийн тулд хаягийг утгыг нь олох шаардлагатай түлхүүр болгон ашигладаг. Хүсэлтийн үр дүнд зангилаа өөрөө олдох болно (хэрэв хайсан хаяг нь түүний хагас байнгын DHT хаяг байсан бол), эсвэл утга нь IP хаяг болон холболтын порт юм - эсвэл өөр хаягаар ашиглах ёстой. зуучлагч хонгил.

TON дахь давхардсан сүлжээ

Дээр тайлбарласан ADNL протокол нь аль ч зангилаа бие биетэйгээ мэдээлэл солилцох чадварыг илэрхийлдэг - гэхдээ оновчтой байдлаар байх албагүй. ADNL-ийн ачаар бүх зангилаа нь дэлхийн TON график үүсгэдэг (хамгийн тохиромжтой) гэж хэлж болно. Гэхдээ энэ график дотор давхардсан сүлжээг бий болгох боломжтой.
TON: Telegram нээлттэй сүлжээ. 1-р хэсэг: Танилцуулга, сүлжээний давхарга, ADNL, DHT, давхардсан сүлжээ

Ийм сүлжээний хүрээнд харилцан үйлчлэл нь зөвхөн шууд хийгддэг - сүлжээнд оролцож буй зангилааны хоорондох урьдчилан үүсгэсэн холболтоор (дээр тайлбарласан ADNL сувгуудаар). Хөршүүдийн хооронд ийм холболтыг бий болгох, хөршөө өөрсдөө хайх нь давхар сүлжээний холболтыг хадгалах, түүн доторх мэдээлэл солилцох саатлыг багасгах зорилготой автомат үйл явц юм.

Нэмж дурдахад том хэмжээний өргөн нэвтрүүлгийн шинэчлэлтүүдийг сүлжээнд хурдан түгээх арга байдаг - тэдгээрийг хэсэг болгон хувааж, алдаа засах кодоор нэмж, эдгээр бүх хэсгүүдийг нэг оролцогчоос нөгөө рүү илгээдэг. Тиймээс оролцогч бүх эд ангиудыг сүлжээгээр цааш явуулахаас өмнө бүрэн авах шаардлагагүй болно.

Давхардсан сүлжээ нь нийтийн болон хувийн байж болно. Олон нийтийн сүлжээний гишүүн болох нь тийм ч хэцүү биш - та үүнийг тайлбарласан TL бүтцийг олох хэрэгтэй (энэ нь олон нийтэд нээлттэй эсвэл DHT-ийн тодорхой түлхүүрээр хандах боломжтой). Хувийн сүлжээний хувьд энэ бүтэц нь зангилаанд урьдчилан мэдэгдэх ёстой.

Үргэлжлүүлэх

Би TON тоймыг хэд хэдэн нийтлэл болгон хуваахаар шийдсэн. Энд энэ хэсэг дуусч байна, мөн дараагийнх нь Би TON-аас бүрдэх блокчейн бүтцийг (илүү нарийвчлалтай блокчейн) авч үзэх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх