{"id":482236,"date":"2026-06-03T11:11:46","date_gmt":"2026-06-03T11:11:46","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=482236"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=482236","title":{"rendered":"NAT traversal \u0432 embedded P2P-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0435 \u043d\u0430 Go: \u043f\u043e\u0447\u0435\u043c\u0443 overlay routing, \u0430 \u043d\u0435 STUN\/TURN\/ICE"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u0438\u043b\u044e embedded P2P-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043d\u0430 Matrix-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u0430\u043a \u043b\u0438\u0447\u043d\u044b\u0439 pet-\u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0440\u0435\u043c\u044f. \u0421\u0442\u0435\u043a: \u0444\u043e\u0440\u043a Dendrite (Matrix homeserver \u043d\u0430 Go), Pinecone overlay routing \u043e\u0442 matrix.org research, gomobile bind \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432 <\/em><code><em>.aar<\/em><\/code><em> \u0438 <\/em><code><em>.xcframework<\/em><\/code><em>, modernc.org\/sqlite \u0432\u043c\u0435\u0441\u0442\u043e CGO-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 (\u0438\u043d\u0430\u0447\u0435 gomobile \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0438\u0447\u0430\u0435\u0442). \u041d\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0438 \u043d\u0435 \u201chello world \u043d\u0430 gomobile\u201d, \u0430 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0430\u043c\u0431\u0438\u0446\u0438\u044f \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0414\u0435\u043b\u044e\u0441\u044c reasoning\u2019\u0430\u043c\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0432\u044b\u0431\u043e\u0440\u044b \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0442\u0435\u0447\u044c.<\/em><\/p>\n<p><em>\u0411\u0435\u0437 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0439 \u043d\u0435\u0443\u0431\u0438\u0432\u0430\u0435\u043c\u043e\u0441\u0442\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445 Rust SDK matrix.org. \u0426\u0438\u0444\u0440\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441 \u044f\u0432\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u201c\u0433\u0434\u0435 \u0437\u0430\u043c\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u043c\u043e\u0451\u043c \u0441\u0442\u0435\u043d\u0434\u0435, \u0433\u0434\u0435 \u043f\u043b\u0430\u043d\u043e\u0432\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430, \u0447\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e\u201d. Production-NAT-\u043a\u0435\u0439\u0441\u044b (CGNAT, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438) &#8212; \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u044b\u0432\u043a\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u043e\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0451\u0442 &#8212; \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435.<\/em><\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043c\u043e\u0435\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430<\/h3>\n<p>\u0421\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0431\u0440\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443 \u043c\u0435\u043d\u044f \u0434\u043e\u043c\u0430:<\/p>\n<ul>\n<li>\n<p>Matrix-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u0444\u043e\u0440\u043a Dendrite (Matrix homeserver \u043d\u0430 Go).<\/p>\n<\/li>\n<li>\n<p>Embedded \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0438\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 <code>gomobile bind<\/code>: <code>.aar<\/code> \u0434\u043b\u044f Android, <code>.xcframework<\/code> \u0434\u043b\u044f iOS.<\/p>\n<\/li>\n<li>\n<p><code>modernc.org\/sqlite<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>mattn\/go-sqlite3<\/code> (pure Go, \u0431\u0435\u0437 CGO &#8212; \u0438\u043d\u0430\u0447\u0435 gomobile \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d-\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0438\u0447\u0430\u0442\u044c).<\/p>\n<\/li>\n<li>\n<p>Pinecone \u043e\u0442 matrix.org \u043a\u0430\u043a overlay-\u0440\u043e\u0443\u0442\u0438\u043d\u0433.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445 Rust SDK matrix.org \u0434\u0435\u043b\u0430\u0435\u0442 E2E (Olm\/Megolm), \u043c\u043e\u044f Go-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043b\u0435\u0437\u0435\u0442 &#8212; \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>NATS JetStream \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 Dendrite \u043a\u0430\u043a async-\u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430-\u043e\u0431\u0451\u0440\u0442\u043a\u0430, \u043d\u0435 shipping-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043f\u043e\u0434 Android \u0438 iOS \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c connectivity \u043c\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 product-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 &#8212; \u0432 \u043f\u043b\u0430\u043d\u0430\u0445, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442 \u0447\u0435\u0440\u0435\u0437 bridge, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 demo-\u0441\u0431\u043e\u0440\u043a\u0430\u0445.<\/p>\n<p>\u0427\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: P2P-\u043e\u0431\u043c\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 Wi-Fi \u0441\u0435\u0442\u0438, cross-platform (Android \u2194 iOS \u043f\u0440\u043e\u0448\u0451\u043b), fallback \u043d\u0430 Matrix-\u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 P2P, multi-device sync, SSL pinning \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 SHA-256 SPKI. \u0427\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435: \u0434\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 handshake-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 custom Matrix event types \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f P2P-\u0440\u0435\u0436\u0438\u043c\u0430, \u043c\u0443\u043b\u044c\u0442\u0438\u0434\u0435\u0432\u0430\u0439\u0441 \u0447\u0435\u0440\u0435\u0437 overlay-\u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u043d\u0433.<\/p>\n<hr\/>\n<h3>\u0427\u0435\u0442\u044b\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043d\u0430 \u0441\u0442\u043e\u043b\u0435<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441\u0435\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c NAT traversal, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432. \u0411\u0435\u0437 \u043e\u0446\u0435\u043d\u043e\u0447\u043d\u044b\u0445 \u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u043e\u0446\u0435\u043d\u043a\u0438 \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<p><strong>STUN\/TURN\/ICE (WebRTC-style).<\/strong> \u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430. \u041a\u043b\u0438\u0435\u043d\u0442\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f ICE candidates \u0447\u0435\u0440\u0435\u0437 signaling channel, \u043f\u0440\u043e\u0431\u0438\u0432\u0430\u044e\u0442 NAT \u0447\u0435\u0440\u0435\u0437 STUN, \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0435 \u0433\u043e\u043d\u044f\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 TURN-\u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u044b &#8212; <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/656947\/\" rel=\"noopener noreferrer nofollow\">WebRTC \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e<\/a> (\u043f\u0435\u0440\u0435\u0432\u043e\u0434 webrtcforthecurious.com) \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/Voximplant\/blog\/351234\/\" rel=\"noopener noreferrer nofollow\">5 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 WebRTC \u0437\u0432\u043e\u043d\u043a\u043e\u0432<\/a> \u043e\u0442 Voximplant.<\/p>\n<p><strong>libp2p.<\/strong> \u041c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 P2P-\u0441\u0442\u0435\u043a \u043e\u0442 Protocol Labs, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 IPFS\/Filecoin\/Kubo. Kademlia DHT \u0434\u043b\u044f discovery, AutoNAT v2 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f reachability, DCUtR (Direct Connection Upgrade Through Relay) \u0434\u043b\u044f hole punching, Circuit Relay v2 \u0434\u043b\u044f fallback. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 Go \u0438 Rust. \u0420\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u043e\u0431\u0437\u043e\u0440\u044b &#8212; <a href=\"https:\/\/habr.com\/ru\/companies\/otus\/articles\/876996\/\" rel=\"noopener noreferrer nofollow\">P2P \u043d\u0430 Go: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 libp2p<\/a> \u043e\u0442 Otus \u0438 flagship-\u043f\u0435\u0440\u0435\u0432\u043e\u0434 2021 <a href=\"https:\/\/habr.com\/ru\/articles\/550780\/\" rel=\"noopener noreferrer nofollow\">\u0410\u0437\u0431\u0443\u043a\u0430 libp2p \u043e\u0442 Textile<\/a>.<\/p>\n<p><strong>Overlay routing \u043a\u0440\u0438\u043f\u0442\u043e-\u0430\u0434\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0445 \u0441\u0435\u0442\u0435\u0439.<\/strong> Yggdrasil, cjdns, Hyperboria. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 IPv6-\u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u043e\u0442 ed25519-\u043a\u043b\u044e\u0447\u0430, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e spanning tree (Yggdrasil) \u0438\u043b\u0438 \u043f\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e-\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. NAT traversal \u043d\u0435\u044f\u0432\u043d\u044b\u0439: \u0443\u0437\u0435\u043b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 outbound TCP \u0434\u043e bootstrap-\u043f\u0438\u0440\u0430, \u0438 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0447\u0442\u043e 100% \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0434\u0435\u0440\u0436\u0430\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e outbound-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e &#8212; <a href=\"https:\/\/habr.com\/ru\/articles\/1022112\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Yggdrasil Network<\/a> \u043e\u0442 <a class=\"mention\" href=\"\/users\/Revertron\">@Revertron<\/a> (\u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Android-\u043a\u043b\u0438\u0435\u043d\u0442\u0430) \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1033236\/\" rel=\"noopener noreferrer nofollow\">Yggdrasil \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/a> \u043e\u0442 <a class=\"mention\" href=\"\/users\/AsciiMoth\">@AsciiMoth<\/a> (\u0444\u043e\u0440\u043a yggdrasil-go).<\/p>\n<p><strong>Overlay routing matrix.org-style (Pinecone).<\/strong> \u041a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a Yggdrasil, \u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434 Matrix federation. \u0414\u0432\u0443\u0445\u0441\u043b\u043e\u0439\u043d\u0430\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f: SNEK (Sequentially Networked Edwards Key) \u0434\u043b\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u043e\u0432, spanning tree \u043a\u0430\u043a fallback \u0438 \u0434\u043b\u044f bootstrap\u2019\u0430. Open source &#8212; <a href=\"https:\/\/github.com\/matrix-org\/pinecone\" rel=\"noopener noreferrer nofollow\">github.com\/matrix-org\/pinecone<\/a>. \u041d\u0430 Habr \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d, \u0431\u0435\u043b\u043e\u0435 \u043f\u044f\u0442\u043d\u043e.<\/p>\n<p>Mesh-VPN \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (Tailscale, ZeroTier, NetBird) \u0442\u043e\u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b &#8212; \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043f\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e (\u044d\u0442\u043e VPN-\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u043d\u0435 peer-to-peer messaging). \u041f\u043e\u0434\u0445\u043e\u0434 librats + Hyperswarm + DCUtR \u0438\u0437 <a href=\"https:\/\/habr.com\/ru\/articles\/1020794\/\" rel=\"noopener noreferrer nofollow\">P2P \u0432 \u0420\u0424: \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/a> (kda2210, \u0430\u043f\u0440\u0435\u043b\u044c 2026) &#8212; \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0443\u0442\u044c, DHT \u0441 hole-punching. \u041d\u0435 \u0434\u0435\u043b\u0430\u043b \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432, \u043d\u043e \u0432 \u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u201c1.4 MB RAM \u043f\u0440\u0438 100 \u043f\u0438\u0440\u0430\u0445 vs 400 MB \u0443 JS-libp2p\u201d.<\/p>\n<hr\/>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u044b\u043f\u0438\u043b\u0438\u043b STUN\/TURN\/ICE<\/h3>\n<p>\u041d\u0435 \u0438\u0437 \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0438. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043f\u043e\u0434 \u044d\u0442\u043e\u0442 use case \u0448\u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d:<\/p>\n<p><strong>1. \u041d\u0435\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e signaling channel.<\/strong> STUN\/TURN\/ICE \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0447\u0442\u043e \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f SDP-offer\/answer \u0438 ICE candidates. \u0412 P2P-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0435 \u043d\u0430 Matrix-\u0441\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043d\u0430\u043b, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u0435\u0441\u0442\u044c &#8212; Matrix-\u0441\u0435\u0440\u0432\u0435\u0440. \u041d\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u041d\u0415 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e: \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u201c\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430\u201d pinecone-\u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u043d\u0435 \u043a\u0430\u043a signaling. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c overlay \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 overlay &#8212; \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u0447\u0438\u0449\u0435.<\/p>\n<p><strong>2. CGNAT \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445.<\/strong> \u041c\u0422\u0421, Tele2, \u0411\u0438\u043b\u0430\u0439\u043d \u0447\u0435\u0440\u0435\u0437 UE-\u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 CGNAT \u043f\u043e \u0441\u0443\u0442\u0438 \u0434\u0430\u044e\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 NAT. Hole punching \u0447\u0435\u0440\u0435\u0437 STUN \u0442\u0430\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u0441\u0435 WebRTC-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432 \u044d\u0442\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 TURN. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 production-grade TURN-\u0444\u0430\u0440\u043c \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 relay-\u0442\u0440\u0430\u0444\u0438\u043a. \u0410\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e <a href=\"https:\/\/habr.com\/ru\/articles\/1010720\/\" rel=\"noopener noreferrer nofollow\">Jami \u0432 \u0420\u043e\u0441\u0441\u0438\u0438<\/a> \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442: \u201c\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 TURN-\u0441\u0435\u0440\u0432\u0435\u0440\u044b turn.jami.net \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b (\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043e \u0442\u0435\u0441\u0442\u0430\u043c\u0438)\u201d. TURN-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c (relay-\u0443\u0437\u043b\u044b \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u044b\u0432\u043a\u0435), \u043d\u043e \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c overlay-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438, \u0430 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e WebRTC-\u0438\u043d\u0444\u0440\u0443.<\/p>\n<p><strong>3. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 STUN &#8212; \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430.<\/strong> Voximplant \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/Voximplant\/blog\/351234\/\" rel=\"noopener noreferrer nofollow\">5 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 WebRTC<\/a> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u21161: \u201c\u041d\u0435 \u043d\u0430\u0434\u0435\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 STUN \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 stun.l.google.com:19302) \u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430 \u2018\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435\u2019 TURN \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u201d. \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u044c production-grade \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 &#8212; \u043d\u0443\u0436\u0435\u043d \u0441\u0432\u043e\u0439 STUN\/TURN. \u042d\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u0438\u043d\u0444\u0440\u0430.<\/p>\n<p><strong>4. \u0420\u0430\u0437\u043c\u0435\u0440 deps \u043d\u0430 embedded.<\/strong> Pure-Go WebRTC-\u0441\u0442\u0435\u043a (pion\/webrtc + ICE-\u0430\u0433\u0435\u043d\u0442) \u0442\u0430\u0449\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442. \u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e, \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u043d. \u0423 \u043c\u0435\u043d\u044f \u0438 \u0442\u0430\u043a \u0441 Dendrite + Pinecone production-\u0441\u0431\u043e\u0440\u043a\u0430 <code>.aar<\/code> \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 35-40 MB. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 ICE-stack \u0440\u0430\u0434\u0438 \u043e\u0434\u043d\u043e\u0433\u043e use case (peer-to-peer \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435) &#8212; \u043f\u0435\u0440\u0435\u0431\u043e\u0440.<\/p>\n<p><strong>5. \u041c\u0443\u043b\u044c\u0442\u0438\u0434\u0435\u0432\u0430\u0439\u0441 \u043f\u043b\u043e\u0445\u043e \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 peer-to-peer connection.<\/strong> STUN\/TURN\/ICE &#8212; \u043f\u0440\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438. \u0423 \u043e\u0434\u043d\u043e\u0433\u043e \u044e\u0437\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0442\u0435\u043b\u0435\u0444\u043e\u043d, \u043f\u043b\u0430\u043d\u0448\u0435\u0442), \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0434\u043e\u0439\u0442\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435. \u042d\u0442\u043e \u0438\u043b\u0438 N\u00d7M ICE-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 (\u043f\u043b\u043e\u0445\u043e), \u0438\u043b\u0438 relay \u0447\u0435\u0440\u0435\u0437 signaling, \u0447\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a Matrix-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u044f, \u0447\u0435\u0433\u043e \u0438 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c.<\/p>\n<p><strong>6. Synchronous offer\/answer.<\/strong> WebRTC signaling \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0441\u0441\u0438\u0438. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f video-call\u2019\u0430, \u043d\u043e \u043f\u043b\u043e\u0445\u043e \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 async-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430, \u0433\u0434\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0438 \u0433\u0434\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043f\u0438\u0440\u0430\u043c\u0438 \u043b\u0438\u0431\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e, \u043b\u0438\u0431\u043e \u0435\u0433\u043e \u043d\u0435\u0442.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e WebRTC \u043f\u043b\u043e\u0445\u043e\u0439. \u0414\u043b\u044f video calling, browser-based applications, screen sharing &#8212; \u0438\u0434\u0435\u0430\u043b\u0435\u043d. \u041f\u0440\u043e\u0441\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: persistent multihop routing \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u0430 \u043d\u0435 peer-to-peer media stream.<\/p>\n<hr\/>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 libp2p<\/h3>\n<p>\u0421 libp2p \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f. \u041d\u0435 \u043f\u043e\u0434\u043e\u0448\u0451\u043b \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<p><strong>1. Heavyweight \u0434\u043b\u044f embedded.<\/strong> <code>go-libp2p<\/code> \u0442\u0430\u0449\u0438\u0442 Kademlia DHT, GossipSub, Noise\/TLS handshake stack, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e muxer\u2019\u043e\u0432 (Yamux, mplex), \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u0432. \u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e P2P \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u0431\u0435\u0433\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e MB \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 dependency tree, \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 (\u0441\u0432\u043e\u044f discovery \u0447\u0435\u0440\u0435\u0437 registry \u043d\u0430 Matrix-\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0441\u0432\u043e\u044f federation-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 Matrix).<\/p>\n<p><strong>2. AutoNAT v2 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435 \u0435\u0449\u0451 \u043f\u0440\u043e\u0445\u043b\u0430\u0434\u0435\u043d.<\/strong> \u0412 \u0430\u043f\u0440\u0435\u043b\u0435-\u043c\u0430\u0435 2026 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d cross-implementation audit \u043e\u0442 ProbeLab \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c root-cause: dialerHost \u0432 AutoNAT v2 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 UDP black hole detector \u0432 read-only mode, \u0438 \u0434\u043b\u044f \u0441\u0432\u0435\u0436\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 (\u0441 \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439) detector \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442 \u201c\u043f\u0440\u043e\u0431\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u201d \u043a\u0430\u043a \u201c\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432 blacklist\u201d. \u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 <code>Unknown<\/code> reachability state \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430. \u041f\u043e\u043b\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442 &#8212; <a href=\"https:\/\/github.com\/probe-lab\/autonat-perf-audit\" rel=\"noopener noreferrer nofollow\">github.com\/probe-lab\/autonat-perf-audit<\/a>. \u041f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c fix \u0432 <code>libp2p\/go-libp2p<\/code> (PR #3505), \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0437\u0430\u043a\u0440\u044b\u043b \u0441 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0447\u0442\u043e v2 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 workaround \u043e\u0442 v1 &#8212; \u044d\u0442\u043e, \u0433\u043e\u0432\u043e\u0440\u0438\u0442, latch existing behavior, \u0430 \u043d\u0435 design pattern. \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f design conversation, \u043d\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0447\u0442\u043e connectivity-\u0441\u0442\u0435\u043a \u0435\u0449\u0451 \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d.<\/p>\n<p><strong>3. \u041d\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e fit \u0441 Matrix federation.<\/strong> Matrix S2S API &#8212; HTTP-like \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438. libp2p \u0434\u0430\u0451\u0442 streams. \u0417\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c Matrix \u0432 libp2p streams \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 wrapper \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e. Pinecone \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f matrix.org research \u043a\u0430\u043a HTTP-transport-compatible: federation \u0438\u0434\u0451\u0442 \u043f\u043e\u0447\u0442\u0438-\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043f\u043e\u0432\u0435\u0440\u0445 overlay.<\/p>\n<p><strong>4. DCUtR \u0442\u0440\u0435\u0431\u0443\u0435\u0442 Circuit Relay.<\/strong> Direct Connection Upgrade Through Relay \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 relay, \u043f\u043e\u0442\u043e\u043c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f upgrade\u2019\u043d\u0443\u0442\u044c \u0434\u043e direct &#8212; \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 relay-\u0443\u0437\u043b\u043e\u0432 \u0438 retry-\u0446\u0438\u043a\u043b \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u043c\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438. \u0422\u0435 \u0436\u0435 relay-\u0443\u0437\u043b\u044b \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f (\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u044b\u0432\u043a\u0435), \u043d\u043e \u0432 Pinecone-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 (\u0433\u0434\u0435 relay &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0437\u0435\u043b overlay \u0441 \u043b\u0443\u0447\u0448\u0438\u043c reach), \u0430 \u043d\u0435 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 libp2p-\u0441\u043b\u043e\u0439.<\/p>\n<p>\u0421\u043d\u043e\u0432\u0430 &#8212; \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0432\u043e\u0440 libp2p. IPFS, Filecoin, Kubo \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043d\u0451\u043c, ProbeLab \u0432 \u043e\u0431\u0449\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0414\u043b\u044f \u043c\u043e\u0435\u0433\u043e use case &#8212; overhead \u0438 mismatch \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438.<\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 overlay routing \u0438 Pinecone-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430<\/h3>\n<p>Overlay routing \u0432 \u043e\u0434\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u0435: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 outbound TCP\/WebSocket \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 bootstrap-\u043f\u0438\u0440\u043e\u0432, \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u0440\u0430\u0444\u0438\u043a \u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e\u0445\u043e\u043f\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e TCP. NAT \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 <strong>\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0438\u0437\u043d\u0443\u0442\u0440\u0438 NAT\u2019\u0430<\/strong> &#8212; \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u043a\u0430 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0442\u0443 \u0436\u0435 \u0441\u0435\u0441\u0441\u0438\u044e. Hole punching \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u043c\u0430\u0433\u0438\u044f \u0438 \u043d\u0435 \u201c\u0431\u0435\u0441\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u201d &#8212; \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 trade-off\u2019\u043e\u0432. Overlay-\u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u201c\u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043e direct connection \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043f\u0438\u0440\u0430\u043c\u0438 \u0437\u0430 NAT\u2019\u043e\u043c\u201d \u0432 \u201c\u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438\u201d. Yggdrasil \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u0440\u0438\u043f\u0442\u043e-spanning-tree. Pinecone &#8212; \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e SNEK + spanning tree.<\/p>\n<p><strong>SNEK \u0432 \u043e\u0434\u043d\u043e\u043c \u0430\u0431\u0437\u0430\u0446\u0435.<\/strong> Sequentially Networked Edwards Key. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u0443\u0437\u043b\u043e\u0432, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u043e ed25519-\u043a\u043b\u044e\u0447\u0430\u043c. \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 bootstrap-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430, \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0439 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 \u0441\u043e\u0441\u0435\u0434 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u201cdescending\u201d peer. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 &#8212; \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0439\u0442\u0438 \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0434\u043e \u043b\u044e\u0431\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0445\u043e\u043f\u043e\u0432 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0435\u0442\u0438. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u0435\u0436\u0438\u0442 \u0432 <code>router\/state_snek.go<\/code>, \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b bootstrap\u2019\u0430 &#8212; 5 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p><strong>Spanning tree.<\/strong> \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c. \u041e\u0434\u0438\u043d \u0443\u0437\u0435\u043b \u0441\u0435\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0431\u044f root\u2019\u043e\u043c (\u043f\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u043c\u0443 ed25519-\u043a\u043b\u044e\u0447\u0443 &#8212; \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e), root \u0448\u043b\u0451\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 <code>TreeAnnouncement<\/code> \u0444\u0440\u0435\u0439\u043c\u044b, \u0443\u0437\u043b\u044b \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 tree \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e root\u2019\u0430. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0443\u0437\u043b\u0430 \u0432 tree &#8212; \u043f\u0443\u0442\u044c \u043e\u0442 root\u2019\u0430 \u043a\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440 portID. \u041a\u043e\u0433\u0434\u0430 SNEK-\u043f\u0443\u0442\u044c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d (\u0441\u0432\u0435\u0436\u0438\u0439 \u0443\u0437\u0435\u043b, \u0435\u0449\u0451 \u043d\u0435 \u043d\u0430\u043a\u043e\u043f\u0438\u043b history), \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 tree.<\/p>\n<p><strong>\u041f\u044f\u0442\u044c \u0442\u0438\u043f\u043e\u0432 \u0444\u0440\u0435\u0439\u043c\u043e\u0432.<\/strong> <code>Keepalive<\/code>, <code>TreeAnnouncement<\/code>, <code>Bootstrap<\/code> (\u0434\u043b\u044f SNEK setup), <code>Traffic<\/code> (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439), <code>WakeupBroadcast<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0435\u0439\u043c \u0438\u043c\u0435\u0435\u0442 10-\u0431\u0430\u0439\u0442\u043d\u044b\u0439 header \u0441 magic <code>0x70696e65<\/code> (ASCII <code>pine<\/code>). \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 &#8212; \u0432 <code>types\/frame.go<\/code>.<\/p>\n<p><strong>\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u044b.<\/strong> Pinecone \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 Pipe (\u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432), Multicast (UDP \u0432 LAN), Bonjour (mDNS \u043d\u0430 macOS\/iOS), Remote (TCP\/WebSocket \u0441 TLS &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 production-\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442), Bluetooth (\u0447\u0435\u0440\u0435\u0437 gomobile binding \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0438\u043a\u0430\u0445). \u0412\u044b\u0431\u043e\u0440 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 Multicast &lt; Remote &lt; Bluetooth.<\/p>\n<p><strong>\u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0434\u043b\u044f NAT-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/strong> \u0412 Pinecone \u043d\u0435\u0442 STUN-\u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041d\u0435\u0442 TURN-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041d\u0435\u0442 ICE candidate negotiation. \u0426\u0438\u0442\u0430\u0442\u0430 \u0438\u0437 README:<\/p>\n<blockquote>\n<p>Pinecone peering connections look like regular TCP or WebSocket connections and will work fine through firewalls or NATs. If you make an outbound connection to a static node, you will still be able to receive incoming Pinecone traffic over that peering.<\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c: \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u043d\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 bootstrap-\u0443\u0437\u043b\u043e\u0432 (\u0441\u0432\u043e\u0438 Relay \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043b\u0430\u043d\u0435 \u0438\u043b\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b matrix.org \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e PoC), \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043a \u043d\u0438\u043c outbound TCP+TLS, NAT \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044e. \u0414\u0440\u0443\u0433\u0438\u0435 \u0443\u0437\u043b\u044b overlay-\u0441\u0435\u0442\u0438 \u0443\u0437\u043d\u0430\u044e\u0442 \u044d\u0442\u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 <code>TreeAnnouncement<\/code> \u0438 \u0448\u043b\u044e\u0442 \u0435\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0430\u043d\u0430\u043b \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c. Hole punching \u043d\u0435 \u043d\u0443\u0436\u0435\u043d &#8212; \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0447\u0442\u043e 100% \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d outbound \u0434\u0435\u0440\u0436\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<p>\u0423\u043f\u0440\u043e\u0449\u0430\u044e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, watermarks \u0434\u043b\u044f \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438, backpressure-\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b, \u0432\u044b\u0431\u043e\u0440 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043c\u0435\u0436\u0434\u0443 tree \u0438 SNEK \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u0431\u043e\u0438\u0445. \u0414\u0435\u0442\u0430\u043b\u0435\u0439 &#8212; \u0432 <a href=\"https:\/\/github.com\/matrix-org\/pinecone\" rel=\"noopener noreferrer nofollow\">Pinecone-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>, \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>docs\/<\/code>. \u0422\u0430\u043c \u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 &#8212; <code>cmd\/pineconesim\/<\/code>, \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0441 \u0432\u0435\u0431-\u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 localhost:65432. \u0423\u0434\u043e\u0431\u043d\u043e \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0435\u0439.<\/p>\n<hr\/>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a<\/h3>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0441 Go-\u0441\u0442\u043e\u0440\u043e\u043d\u044b:<\/p>\n<pre><code>\u041a\u043b\u0438\u0435\u043d\u0442 (\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Rust SDK matrix.org)        \u2502        \u25bc \u0447\u0435\u0440\u0435\u0437 gomobile bridge[Go-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430: \u043c\u043e\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430]   \u251c\u2500\u2500 Embedded Dendrite (Matrix homeserver)   \u2502     \u2514\u2500 Matrix federation API   \u2502         \u2514\u2500 \u0447\u0435\u0440\u0435\u0437 Pinecone overlay routing   \u2502             \u2514\u2500 TCP\/WebSocket \u2192 bootstrap peer (outbound \u0438\u0437 NAT)   \u2502   \u251c\u2500\u2500 REST-\u043a\u043b\u0438\u0435\u043d\u0442 \u043a Matrix-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 (publish\/get\/deactivate Pinecone-\u043a\u043b\u044e\u0447\u0430 \u0432 registry)   \u2502     \u2514\u2500 \u0447\u0435\u0440\u0435\u0437 HTTPS \u0441 SSL pinning   \u2502   \u2514\u2500\u2500 \u041a\u043e\u043b\u0431\u044d\u043a\u0438 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442 (handshake events, lifecycle \u0441\u0442\u0430\u0442\u0443\u0441\u044b)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u0447\u0435\u0440\u0435\u0437 Rust SDK \u0445\u0440\u0430\u043d\u0438\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 Olm\/Megolm. \u041c\u043e\u044f Go-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043b\u0435\u0437\u0435\u0442 &#8212; \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0451\u0440\u043d\u0443\u0442\u044b\u0435 matrix-events \u0447\u0435\u0440\u0435\u0437 overlay, \u0438 \u0432\u0441\u0451.<\/p>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u043b \u043f\u043e\u0441\u043b\u0435 reasoning:<\/p>\n<p><strong>1. \u0417\u0430\u0449\u0438\u0442\u0430 per-chat, \u0430 \u043d\u0435 per-account.<\/strong> \u042e\u0437\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u201c\u0449\u0438\u0442\u201d \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0447\u0430\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 UI, \u043d\u0435 \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043d\u0430 \u0432\u0435\u0441\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442. Pinecone-\u0443\u0437\u0435\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0449\u0438\u0442\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u0447\u0430\u0442\u0435, \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0445 \u0447\u0430\u0442\u043e\u0432, \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u044e\u0437\u0435\u0440 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0449\u0438\u0442. \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u044e\u0437\u0435\u0440\u0443 granular \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0438 \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c P2P-\u0441\u0442\u0435\u043a \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0438. \u0417\u0430\u043f\u0443\u0441\u043a \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u0435\u043d: \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 UI \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043a\u043b\u044e\u0447 \u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439.<\/p>\n<p><strong>2. \u0414\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 handshake \u0447\u0435\u0440\u0435\u0437 Matrix-\u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/strong> \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0449\u0438\u0442\u044b \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 Matrix Client API: \u0434\u0432\u0430 custom event types &#8212; \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f P2P-\u0440\u0435\u0436\u0438\u043c\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430. \u0412 payload &#8212; pinecone-\u043a\u043b\u044e\u0447 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043e\u044e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f overlay-\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u044b. \u042d\u0442\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u201c\u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 overlay \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0436\u0435 \u0437\u043d\u0430\u0442\u044c peer\u2019s key\u201d &#8212; \u0434\u043e handshake\u2019\u0430 overlay-\u0443\u0437\u0435\u043b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d.<\/p>\n<p><strong>3. modernc.org\/sqlite \u0432\u043c\u0435\u0441\u0442\u043e CGO-SQLite.<\/strong> \u041a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0434\u043b\u044f gomobile. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 <code>mattn\/go-sqlite3<\/code> &#8212; CGO-\u0431\u0438\u043d\u0434\u0438\u043d\u0433 \u043a <code>libsqlite3.c<\/code>. <code>gomobile bind<\/code> \u0441 CGO \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 Android NDK toolchain, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e MB, \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 gomobile (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u043f\u043e\u043f\u0430\u043b \u043d\u0430 \u044d\u0442\u043e \u043f\u0430\u0440\u0443 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434 &#8212; \u0434\u0435\u0431\u0430\u0433-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0441 lipo \u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f\u043c\u0438 \u043d\u0430\u0434 <code>.xcframework<\/code>). <code>modernc.org\/sqlite<\/code> &#8212; pure Go, libsqlite3 \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0447\u0435\u0440\u0435\u0437 c2go. Trade-off: \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5-10% \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u043d\u0430 write-heavy workload (\u0441\u0438\u043d\u0442\u0435\u0442\u0438\u043a\u0430), \u0437\u0430\u0442\u043e gomobile \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u0442\u043e \u0431\u0435\u0437 NDK-\u043f\u043b\u044f\u0441\u043e\u043a.<\/p>\n<p><strong>4. \u041c\u0443\u043b\u044c\u0442\u0438\u0434\u0435\u0432\u0430\u0439\u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 overlay, \u0430 \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 Matrix-\u0441\u0435\u0440\u0432\u0435\u0440.<\/strong> \u0423 \u043e\u0434\u043d\u043e\u0433\u043e \u044e\u0437\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041a\u0430\u0436\u0434\u043e\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0439 Pinecone-\u043a\u043b\u044e\u0447 \u0432 registry \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 overlay-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u043c\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0432\u043e\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 registry \u0438 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u0442 \u0438\u043c \u0442\u043e \u0436\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 (Rust SDK \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u043d\u0430 \u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0435) \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 Pinecone, \u0441 \u043c\u0435\u0442\u043a\u043e\u0439 <code>forwarded:true<\/code> \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u043f\u0435\u0442\u0435\u043b\u044c. Matrix-\u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0432\u043e\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442. \u0414\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 &#8212; \u043f\u043e Matrix <code>event_id<\/code>. \u042d\u0442\u043e standard multicast-style sync \u0441 loop-protection \u043c\u0435\u0442\u043a\u043e\u0439, \u0443 Yggdrasil \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430 \u0436\u0435 \u0438\u0434\u0435\u044f.<\/p>\n<p><strong>5. SSL Pinning \u043a Matrix-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 SHA-256 SPKI.<\/strong> \u0412\u0441\u0435 HTTPS-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 SHA-256 \u0445\u0435\u0448 Subject Public Key Info \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 <code>http.Transport.VerifyPeerCertificate<\/code>. \u0414\u0432\u0430 \u0445\u0435\u0448\u0430 \u0432\u0448\u0438\u0442\u044b \u0432 \u043a\u043e\u0434: \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 + \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u043e\u0442\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0431\u0435\u0437 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: \u0432\u0432\u043e\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442, \u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u043e\u0431\u0430 \u0445\u0435\u0448\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u044b, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 primary \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043d\u043e \u0432 pure-Go \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 &#8212; \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f.<\/p>\n<hr\/>\n<h3>\u0417\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u043c\u043e\u0451\u043c \u0441\u0442\u0435\u043d\u0434\u0435<\/h3>\n<p>Disclaimer \u043f\u0435\u0440\u0435\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438: \u0446\u0438\u0444\u0440\u044b &#8212; \u0441 \u043c\u043e\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430, \u043d\u0435 \u0438\u0437 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432. \u042d\u0442\u043e PoC-\u0441\u0431\u043e\u0440\u043a\u0438, \u043d\u0435 production-\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442. Production-NAT-\u043a\u0435\u0439\u0441\u044b (CGNAT, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438) \u0435\u0449\u0451 \u0432\u043f\u0435\u0440\u0435\u0434\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <strong>\u043d\u0435 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430<\/strong>: iOS-\u0446\u0438\u0444\u0440\u044b \u0437\u0430\u043c\u0435\u0440\u044f\u043b \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0447\u0435\u0440\u0435\u0437 Xcode Instruments, \u0434\u043b\u044f Android \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043d\u0430 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442, \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043d\u0435\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d.<\/p>\n<p><strong>iOS, 30-\u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, iPhone 16 Pro Max:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u0440\u0438\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">RAM<\/p>\n<\/td>\n<td>\n<p align=\"left\">6 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CPU \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435\/\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">3%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">CPU \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">1%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0430\u0442\u0430\u0440\u0435\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.1%\/\u0447\u0430\u0441<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0410\u0440\u0442\u0435\u0444\u0430\u043a\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>.aar<\/code> production<\/p>\n<\/td>\n<td>\n<p align=\"left\">35-40 MB<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0435\u043b\u0438\u0437\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0431\u0435\u0437 debug-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>.aar<\/code> debug<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u043a\u043e\u043b\u043e 68 MB<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421 debug-\u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438, \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>.xcframework<\/code> debug<\/p>\n<\/td>\n<td>\n<p align=\"left\">161 MB<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0432\u0430 \u0441\u043b\u0430\u0439\u0441\u0430 (device arm64 + simulator arm64), \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u043a\u043e\u043b\u043e 80 MB. Production-\u0437\u0430\u043c\u0435\u0440 \u043d\u0435 \u0434\u0435\u043b\u0430\u043b<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Android RAM\/CPU \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/strong> \u0417\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u044e \u043e\u043a\u043e\u043b\u043e 120 MB RAM \u0438 ~0.5% CPU \u043f\u0440\u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435. \u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0434\u0435\u043b\u0438\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441 \u0445\u043e\u0441\u0442-\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u041d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c Android-\u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0432 \u043f\u043b\u0430\u043d\u0430\u0445 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437-\u0441\u0431\u043e\u0440\u043a\u0438. \u041d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b &#8212; \u043e\u0436\u0438\u0434\u0430\u044e \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 70-110 MB RAM \u043d\u0430 Snapdragon 8 Gen 2-3 \u043a\u043b\u0430\u0441\u0441\u0435, \u043d\u043e \u044d\u0442\u043e \u0432\u0438\u043b\u043a\u0430, \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>\u0418\u0437 \u0447\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u0435\u0441 <\/strong><code><strong>.aar<\/strong><\/code><strong>.<\/strong> \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043a\u043b\u0430\u0434: NATS JetStream (\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 async-\u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 Dendrite, \u043d\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044f &#8212; \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u043d \u0434\u043b\u044f federation flow), gomatrixserverlib (Matrix-\u043b\u043e\u0433\u0438\u043a\u0430 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u0430\u044f), crypto (Olm\/Megolm \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438), Bleve (\u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 &#8212; \u043d\u0430 6 MB, \u0432 \u043f\u043b\u0430\u043d\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 build tags \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430). Pinecone \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 &#8212; \u043e\u043a\u043e\u043b\u043e 1-2 MB \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p><strong>Cross-platform connectivity \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d.<\/strong> Android \u0438 iOS \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0432 \u043e\u0434\u043d\u043e\u0439 Wi-Fi \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 Pinecone multicast. Cross-network (\u0447\u0435\u0440\u0435\u0437 bootstrap peer \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0435\u0442\u0438) \u043f\u043e\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c setup\u2019\u0435 \u0441 docker-\u0441\u0435\u0442\u044c\u044e. \u0420\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0441 CGNAT &#8212; \u0432\u043f\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p><strong>Multi-device fallback flow.<\/strong> \u041f\u043e\u043b\u043d\u044b\u0439 fallback \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d: \u0435\u0441\u043b\u0438 overlay \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 (peer offline, \u043d\u0435\u0442 route\u2019\u0430, timeout) &#8212; \u043c\u043e\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443, \u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c Matrix-\u043a\u0430\u043d\u0430\u043b\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440. \u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (Olm\/Megolm) \u0434\u0435\u043b\u0430\u0435\u0442 Rust SDK \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 overlay. \u0422\u043e \u0435\u0441\u0442\u044c worst-case &#8212; \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Matrix-\u043a\u043b\u0438\u0435\u043d\u0442 \u0441 E2E. Best-case &#8212; overlay-\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u0438\u043c\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p><strong>80-90% direct P2P \u0431\u0435\u0437 relay.<\/strong> \u042d\u0442\u043e \u043f\u043b\u0430\u043d\u043e\u0432\u0430\u044f \u0446\u0438\u0444\u0440\u0430 \u0438\u0437 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 overlay-\u0441\u0435\u0442\u0435\u0439. \u041d\u0435 \u043c\u043e\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u0430\u044f. \u0414\u043e production-relay-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0442\u0435\u0441\u0442\u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c CGNAT \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443.<\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e overlay-\u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442<\/h3>\n<p>\u0420\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f &#8212; \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u201c\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 WebRTC\u201d, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442. \u0427\u0442\u043e overlay-\u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438:<\/p>\n<p><strong>1. CGNAT \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445.<\/strong> \u041a\u043e\u0433\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0433\u043e\u043d\u0438\u0442 \u0432\u0441\u0435\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d \u0448\u043b\u044e\u0437, outbound TCP \u043e\u0442 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0438\u043a\u0430 \u043a bootstrap-peer\u2019\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f), \u043d\u043e <strong>\u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0438\u043a \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0435\u0442\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0441\u0430\u043c bootstrap\u2019\u043e\u043c<\/strong> \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445. \u041d\u0443\u0436\u043d\u044b public-IP relay\u2019\u0438 \u0433\u0434\u0435-\u0442\u043e \u0441\u043d\u0430\u0440\u0443\u0436\u0438. \u042d\u0442\u043e \u044f\u0432\u043d\u0430\u044f \u0446\u0435\u043d\u0430 overlay-\u043f\u043e\u0434\u0445\u043e\u0434\u0430: relay-\u0443\u0437\u043b\u044b \u043d\u0435 \u201c\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u201d, \u043e\u043d\u0438 \u0447\u0430\u0441\u0442\u044c \u0431\u043e\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u0423 Tailscale \u044d\u0442\u043e DERP-\u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0443 I2P &#8212; Tor-relay\u2019\u0438, \u0443 Yggdrasil &#8212; \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 peer-lists, \u0443 Pinecone \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043c\u043e\u0438 relay-\u0443\u0437\u043b\u044b \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u044b\u0432\u043a\u0435. \u041d\u0438\u043a\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u043b.<\/p>\n<p><strong>2. Cross-network NAT traversal \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d.<\/strong> PoC \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 Wi-Fi \u0447\u0435\u0440\u0435\u0437 Pinecone multicast. \u0421\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0447\u0435\u0440\u0435\u0437 bootstrap-peer \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0435\u0442\u0438 &#8212; \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c Docker-setup\u2019\u0435, \u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0441 CGNAT \u0435\u0449\u0451 \u043d\u0435 \u0433\u043e\u043d\u044f\u043b. \u042d\u0442\u043e \u0432 \u043f\u043b\u0430\u043d\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0451\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0435 &#8212; \u043d\u0430\u043f\u0438\u0448\u0443 \u0447\u0435\u0441\u0442\u043d\u043e.<\/p>\n<p><strong>3. Invite routing \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d.<\/strong> \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0431\u043e\u043b\u044c: invite-flow \u043c\u0435\u0436\u0434\u0443 Matrix-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 Pinecone overlay \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u043d\u043e\u0433\u043e\u0445\u043e\u043f. \u0412 PoC \u043e\u0431\u0445\u043e\u0436\u0443 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043d\u0430\u0442\u044b \u0431\u0435\u0437 invite + join \u043f\u043e room_id (\u044e\u0437\u0435\u0440 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 room_id, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 invite-event). Production-fix \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043b\u0438 deeper rework Dendrite\u2019s federation handler\u2019\u0430, \u0438\u043b\u0438 \u044f\u0432\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f UX.<\/p>\n<p><strong>4. iOS background &#8212; 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/strong> \u042d\u0442\u043e \u043d\u0435 overlay-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u044d\u0442\u043e Apple. \u041b\u044e\u0431\u043e\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u043e\u043d\u0435 \u0443\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 ~30 \u0441\u0435\u043a\u0443\u043d\u0434, \u0432\u0441\u0435 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u0440\u043e\u043f\u0430\u044e\u0442\u0441\u044f. \u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c: APNs push \u2192 Notification Service Extension \u2192 wake-up Pinecone-\u0443\u0437\u043b\u0430 \u0432 lite-\u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0440\u043e\u043a, \u0447\u0442\u0435\u043d\u0438\u0435 pending overlay-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 Rust-SDK-store \u0434\u043b\u044f UI. \u0423 Signal \u0438 Element X \u0442\u043e\u0447\u043d\u043e \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434. NSE \u0438\u043c\u0435\u0435\u0442 \u0436\u0451\u0441\u0442\u043a\u0438\u0439 30-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 lite-\u0440\u0435\u0436\u0438\u043c Pinecone \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u043d\u044f\u0442\u044c\u0441\u044f \u0437\u0430 &lt;5 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p><strong>5. Android background &#8212; vendor wars.<\/strong> Foreground Service \u0441 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u0435\u0440\u0436\u0438\u0442 overlay-\u0443\u0437\u0435\u043b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u041d\u043e \u043d\u0430 Xiaomi\/Huawei\/Samsung-\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430\u0445 Foreground Service \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0443\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f battery saver\u2019\u043e\u043c, \u0435\u0441\u043b\u0438 \u044e\u0437\u0435\u0440 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043d\u0435 \u043c\u043e\u044f \u0432\u0438\u043d\u0430, \u043d\u043e \u044e\u0437\u0435\u0440\u044b \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043a\u0430\u043a \u043c\u043e\u044e. \u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0430\u0439\u0434 \u201c\u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f battery saver\u2019\u0430 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435\u201d. \u0412\u0441\u0435 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u044b \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043b\u043e\u0434\u043a\u0435, \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 &#8212; <a href=\"https:\/\/dontkillmyapp.com\" rel=\"noopener noreferrer nofollow\">dontkillmyapp.com<\/a>.<\/p>\n<p><strong>6. \u0420\u0430\u0437\u043c\u0435\u0440 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432.<\/strong> <code>.aar<\/code> 35-40 MB production, <code>.xcframework<\/code> 161 MB debug &#8212; \u044d\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0443 lightweight WebRTC-\u0441\u0442\u0435\u043a\u0430 (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e MB). \u0421\u0442\u043e\u0438\u0442 \u043b\u0438 overlay-\u043f\u043e\u0434\u0445\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0432\u0435\u0441\u0430 &#8212; \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0433\u043e\u0442\u043e\u0432 \u043b\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 <strong>\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong>. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u043e\u0432 &#8212; \u043d\u0435\u0442, \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0432\u0437\u044f\u0442\u044c WebRTC \u0438 \u0434\u0435\u0440\u0436\u0430\u0442\u044c TURN-\u0444\u0430\u0440\u043c. \u0414\u043b\u044f \u043c\u043e\u0435\u0433\u043e use case (privacy-first, anti-blocking, \u043c\u0443\u043b\u044c\u0442\u0438\u0434\u0435\u0432\u0430\u0439\u0441) &#8212; \u0434\u0430.<\/p>\n<hr\/>\n<h3>\u0420\u0435\u0437\u044e\u043c\u0435<\/h3>\n<p>Overlay routing &#8212; \u043d\u0435 \u043d\u043e\u0432\u0430\u044f \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 WebRTC, \u0438 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442. \u042d\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 trade-off\u2019\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u043c\u0435\u043d\u044c\u0448\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 STUN\/TURN-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u2192 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 bootstrap\/relay-\u0443\u0437\u043b\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u043d\u044c\u0448\u0435 per-connection negotiation \u2192 \u0431\u043e\u043b\u044c\u0448\u0435 per-network maintenance<\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u043d\u044c\u0448\u0435 CGNAT-\u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u0431\u043e\u043b\u0438 \u0432 connectivity \u2192 \u0431\u043e\u043b\u044c\u0448\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0432\u0435\u0441\u0430 \u0432 \u0441\u0430\u043c\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0434 \u043c\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 (privacy-first P2P-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043d\u0430 Matrix, embedded \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0438\u043a\u0435, \u043c\u0443\u043b\u044c\u0442\u0438\u0434\u0435\u0432\u0430\u0439\u0441) &#8212; \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 (browser-based, video conferencing, screen sharing) &#8212; \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442, \u043b\u0443\u0447\u0448\u0435 WebRTC.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e &#8212; Pinecone open source, \u0435\u0441\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0432 <code>cmd\/pineconesim\/<\/code> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e overlay-\u0441\u0435\u0442\u044c \u043d\u0430 \u0441\u043e\u0442\u043d\u0438 \u0443\u0437\u043b\u043e\u0432 \u0441 \u0432\u0435\u0431-\u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439. \u0423\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u043a\u0430\u043a \u0442\u0440\u0430\u0444\u0438\u043a \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438. Yggdrasil \u0442\u043e\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 entry-point \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0437\u0430\u0434\u0430\u0447, \u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1033236\/\" rel=\"noopener noreferrer nofollow\">AsciiMoth \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 Yggdrasil \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/a> &#8212; \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043d\u0438\u0448\u0430, \u0434\u0440\u0443\u0433\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u044b\u0432\u043a\u0430 (relay-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, CGNAT cross-network \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, push-flow \u0434\u043b\u044f iOS) &#8212; \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u044e \u0447\u0442\u043e \u0432\u044b\u043b\u0435\u0437\u0435\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445. \u041c\u043e\u0436\u0435\u0442, \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438 \u0443\u0436\u0435 \u043d\u0430 CGNAT \u0438 \u0434\u043e\u043b\u0438 direct-vs-relay. \u0410 \u043f\u043e\u043a\u0430 &#8212; \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438)<\/p>\n<hr\/>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p><strong>Pinecone \u0438 \u0441\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/matrix-org\/pinecone\" rel=\"noopener noreferrer nofollow\">Pinecone \u0432 github.com\/matrix-org\/pinecone<\/a> &#8212; \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 docs<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/arewep2pyet.com\" rel=\"noopener noreferrer nofollow\">matrix.org research \u043d\u0430 P2P Matrix<\/a> &#8212; \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 P2P-\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Matrix<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u043e NAT traversal \u0438 hole punching:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/tailscale.com\/blog\/how-nat-traversal-works\" rel=\"noopener noreferrer nofollow\">Tailscale: How NAT traversal works<\/a> &#8212; \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u043e \u0442\u0435\u043c\u0435<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/bford.info\/pub\/net\/p2pnat\" rel=\"noopener noreferrer nofollow\">Bryan Ford: Peer-to-Peer Communication Across Network Address Translators (2005)<\/a> &#8212; \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 paper \u043f\u043e hole punching<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/webrtcforthecurious.com\" rel=\"noopener noreferrer nofollow\">WebRTC for the Curious<\/a> &#8212; \u043a\u043d\u0438\u0433\u0430 \u043f\u0440\u043e WebRTC stack<\/p>\n<\/li>\n<\/ul>\n<p><strong>libp2p:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.libp2p.io\" rel=\"noopener noreferrer nofollow\">libp2p docs<\/a> &#8212; \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f DCUtR \u0438 Circuit Relay v2<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/probe-lab\/autonat-perf-audit\" rel=\"noopener noreferrer nofollow\">ProbeLab: AutoNAT v2 performance audit<\/a> &#8212; cross-implementation audit<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0421\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 Habr:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/656947\/\" rel=\"noopener noreferrer nofollow\">WebRTC \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e. \u0427\u0430\u0441\u0442\u044c 1<\/a> &#8212; \u043f\u0435\u0440\u0435\u0432\u043e\u0434 webrtcforthecurious<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/Voximplant\/blog\/351234\/\" rel=\"noopener noreferrer nofollow\">5 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 WebRTC \u0437\u0432\u043e\u043d\u043a\u043e\u0432<\/a> &#8212; flagship \u043f\u043e anti-pattern\u2019\u0430\u043c<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/1022112\/\" rel=\"noopener noreferrer nofollow\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Yggdrasil Network<\/a> &#8212; Revertron, \u043c\u0430\u0439 2026<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/1033236\/\" rel=\"noopener noreferrer nofollow\">Yggdrasil \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/a> &#8212; AsciiMoth, \u043c\u0430\u0439 2026<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/1020794\/\" rel=\"noopener noreferrer nofollow\">P2P \u0432 \u0420\u0424: \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/a> &#8212; librats\/Hyperswarm \u0441 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/1010720\/\" rel=\"noopener noreferrer nofollow\">Jami \u0432 \u0420\u043e\u0441\u0441\u0438\u0438: \u043f\u043e\u0447\u0435\u043c\u0443 \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u044b\u0439 P2P-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a> &#8212; CGNAT \u0432 \u0420\u0424<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/companies\/otus\/articles\/876996\/\" rel=\"noopener noreferrer nofollow\">P2P \u043d\u0430 Go: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 libp2p<\/a> &#8212; \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/874882\/\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 NAT<\/a> &#8212; \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 Tor\/I2P\/Yggdrasil<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/dontkillmyapp.com\" rel=\"noopener noreferrer nofollow\">dontkillmyapp.com<\/a> &#8212; \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 Android battery saver<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1043134\/\">https:\/\/habr.com\/ru\/articles\/1043134\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u0438\u043b\u044e embedded P2P-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043d\u0430 Matrix-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u0430\u043a \u043b\u0438\u0447\u043d\u044b\u0439 pet-\u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0440\u0435\u043c\u044f. \u0421\u0442\u0435\u043a: \u0444\u043e\u0440\u043a Dendrite (Matrix homeserver \u043d\u0430 Go), Pinecone overlay routing \u043e\u0442 matrix.org research, gomobile bind \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432 .aar \u0438 .xcframework, modernc.org\/sqlite \u0432\u043c\u0435\u0441\u0442\u043e CGO-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 (\u0438\u043d\u0430\u0447\u0435 gomobile \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0438\u0447\u0430\u0435\u0442). \u041d\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u0438 \u043d\u0435 \u201chello world \u043d\u0430 gomobile\u201d, \u0430 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0430\u043c\u0431\u0438\u0446\u0438\u044f \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0414\u0435\u043b\u044e\u0441\u044c reasoning\u2019\u0430\u043c\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0432\u044b\u0431\u043e\u0440\u044b \u0438 \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0442\u0435\u0447\u044c.\u0411\u0435\u0437 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0439 \u043d\u0435\u0443\u0431\u0438\u0432\u0430\u0435\u043c\u043e\u0441\u0442\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445 Rust SDK matrix.org. \u0426\u0438\u0444\u0440\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441 \u044f\u0432\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u201c\u0433\u0434\u0435 \u0437\u0430\u043c\u0435\u0440\u0435\u043d\u043e \u043d\u0430 \u043c\u043e\u0451\u043c \u0441\u0442\u0435\u043d\u0434\u0435, \u0433\u0434\u0435 \u043f\u043b\u0430\u043d\u043e\u0432\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430, \u0447\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e\u201d. Production-NAT-\u043a\u0435\u0439\u0441\u044b (CGNAT, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438) &#8212; \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u044b\u0432\u043a\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u043e\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0451\u0442 &#8212; \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435.\u0427\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043c\u043e\u0435\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430\u0421\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0431\u0440\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443 \u043c\u0435\u043d\u044f \u0434\u043e\u043c\u0430:Matrix-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u0444\u043e\u0440\u043a Dendrite (Matrix homeserver \u043d\u0430 Go).Embedded \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0438\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 gomobile bind: .aar \u0434\u043b\u044f Android, .xcframework \u0434\u043b\u044f iOS.modernc.org\/sqlite \u0432\u043c\u0435\u0441\u0442\u043e mattn\/go-sqlite3 (pure Go, \u0431\u0435\u0437 CGO &#8212; \u0438\u043d\u0430\u0447\u0435 gomobile \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d-\u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u0430\u043f\u0440\u0438\u0437\u043d\u0438\u0447\u0430\u0442\u044c).Pinecone \u043e\u0442 matrix.org \u043a\u0430\u043a overlay-\u0440\u043e\u0443\u0442\u0438\u043d\u0433.\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445 Rust SDK matrix.org \u0434\u0435\u043b\u0430\u0435\u0442 E2E (Olm\/Megolm), \u043c\u043e\u044f Go-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043b\u0435\u0437\u0435\u0442 &#8212; \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442.NATS JetStream \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 Dendrite \u043a\u0430\u043a async-\u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.\u042d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430-\u043e\u0431\u0451\u0440\u0442\u043a\u0430, \u043d\u0435 shipping-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043f\u043e\u0434 Android \u0438 iOS \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c connectivity \u043c\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 product-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 &#8212; \u0432 \u043f\u043b\u0430\u043d\u0430\u0445, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442 \u0447\u0435\u0440\u0435\u0437 bridge, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 demo-\u0441\u0431\u043e\u0440\u043a\u0430\u0445.\u0427\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: P2P-\u043e\u0431\u043c\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 Wi-Fi \u0441\u0435\u0442\u0438, cross-platform (Android \u2194 iOS \u043f\u0440\u043e\u0448\u0451\u043b), fallback \u043d\u0430 Matrix-\u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 P2P, multi-device sync, SSL pinning \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 SHA-256 SPKI. \u0427\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435: \u0434\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 handshake-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 custom Matrix event types \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f P2P-\u0440\u0435\u0436\u0438\u043c\u0430, \u043c\u0443\u043b\u044c\u0442\u0438\u0434\u0435\u0432\u0430\u0439\u0441 \u0447\u0435\u0440\u0435\u0437 overlay-\u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0438\u043d\u0433.\u0427\u0435\u0442\u044b\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043d\u0430 \u0441\u0442\u043e\u043b\u0435\u041a\u043e\u0433\u0434\u0430 \u0441\u0435\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c NAT traversal, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432. \u0411\u0435\u0437 \u043e\u0446\u0435\u043d\u043e\u0447\u043d\u044b\u0445 \u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u043e\u0446\u0435\u043d\u043a\u0438 \u0434\u0430\u043b\u044c\u0448\u0435:STUN\/TURN\/ICE (WebRTC-style). \u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430. \u041a\u043b\u0438\u0435\u043d\u0442\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f ICE candidates \u0447\u0435\u0440\u0435\u0437 signaling channel, \u043f\u0440\u043e\u0431\u0438\u0432\u0430\u044e\u0442 NAT \u0447\u0435\u0440\u0435\u0437 STUN, \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0435 \u0433\u043e\u043d\u044f\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0447\u0435\u0440\u0435\u0437 TURN-\u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u044b &#8212; WebRTC \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e (\u043f\u0435\u0440\u0435\u0432\u043e\u0434 webrtcforthecurious.com) \u0438 5 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 WebRTC \u0437\u0432\u043e\u043d\u043a\u043e\u0432 \u043e\u0442 Voximplant.libp2p. \u041c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 P2P-\u0441\u0442\u0435\u043a \u043e\u0442 Protocol Labs, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 IPFS\/Filecoin\/Kubo. Kademlia DHT \u0434\u043b\u044f discovery, AutoNAT v2 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f reachability, DCUtR (Direct Connection Upgrade Through Relay) \u0434\u043b\u044f hole punching, Circuit Relay v2 \u0434\u043b\u044f fallback. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 Go \u0438 Rust. \u0420\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u043e\u0431\u0437\u043e\u0440\u044b &#8212; P2P \u043d\u0430 Go: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 libp2p \u043e\u0442 Otus \u0438 flagship-\u043f\u0435\u0440\u0435\u0432\u043e\u0434 2021 \u0410\u0437\u0431\u0443\u043a\u0430 libp2p \u043e\u0442 Textile.Overlay routing \u043a\u0440\u0438\u043f\u0442\u043e-\u0430\u0434\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. Yggdrasil, cjdns, Hyperboria. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 IPv6-\u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439 \u043e\u0442 ed25519-\u043a\u043b\u044e\u0447\u0430, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e spanning tree (Yggdrasil) \u0438\u043b\u0438 \u043f\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e-\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. NAT traversal \u043d\u0435\u044f\u0432\u043d\u044b\u0439: \u0443\u0437\u0435\u043b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 outbound TCP \u0434\u043e bootstrap-\u043f\u0438\u0440\u0430, \u0438 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0447\u0442\u043e 100% \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0434\u0435\u0440\u0436\u0430\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e outbound-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e &#8212; \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Yggdrasil Network \u043e\u0442 @Revertron (\u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Android-\u043a\u043b\u0438\u0435\u043d\u0442\u0430) \u0438 Yggdrasil \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0442 @AsciiMoth (\u0444\u043e\u0440\u043a yggdrasil-go).Overlay routing matrix.org-style (Pinecone). \u041a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a Yggdrasil, \u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434 Matrix federation. \u0414\u0432\u0443\u0445\u0441\u043b\u043e\u0439\u043d\u0430\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f: SNEK (Sequentially Networked Edwards Key) \u0434\u043b\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u0430\u0442\u043e\u0432, spanning tree \u043a\u0430\u043a fallback \u0438 \u0434\u043b\u044f bootstrap\u2019\u0430. Open source &#8212; github.com\/matrix-org\/pinecone. \u041d\u0430 Habr \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d, \u0431\u0435\u043b\u043e\u0435 \u043f\u044f\u0442\u043d\u043e.Mesh-VPN \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (Tailscale, ZeroTier, NetBird) \u0442\u043e\u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b &#8212; \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043f\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044e (\u044d\u0442\u043e VPN-\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c, \u043d\u0435 peer-to-peer messaging). \u041f\u043e\u0434\u0445\u043e\u0434 librats + Hyperswarm + DCUtR \u0438\u0437 P2P \u0432 \u0420\u0424: \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b (kda2210, \u0430\u043f\u0440\u0435\u043b\u044c 2026) &#8212; \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0443\u0442\u044c, DHT \u0441 hole-punching. \u041d\u0435 \u0434\u0435\u043b\u0430\u043b \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432, \u043d\u043e \u0432 \u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u201c1.4 MB RAM \u043f\u0440\u0438 100 \u043f\u0438\u0440\u0430\u0445 vs 400 MB \u0443 JS-libp2p\u201d.\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u044b\u043f\u0438\u043b\u0438\u043b STUN\/TURN\/ICE\u041d\u0435 \u0438\u0437 \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0438. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043f\u043e\u0434 \u044d\u0442\u043e\u0442 use case \u0448\u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d:1. \u041d\u0435\u0442 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e signaling channel. STUN\/TURN\/ICE \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0447\u0442\u043e \u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f SDP-offer\/answer \u0438 ICE candidates. \u0412 P2P-\u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0435 \u043d\u0430 Matrix-\u0441\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043d\u0430\u043b, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u0435\u0441\u0442\u044c &#8212; Matrix-\u0441\u0435\u0440\u0432\u0435\u0440. \u041d\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u041d\u0415 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e: \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u201c\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430\u201d pinecone-\u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u043d\u0435 \u043a\u0430\u043a signaling. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c overlay \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 overlay &#8212; \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u0447\u0438\u0449\u0435.2. CGNAT \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445. \u041c\u0422\u0421, Tele2, \u0411\u0438\u043b\u0430\u0439\u043d \u0447\u0435\u0440\u0435\u0437 UE-\u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 CGNAT \u043f\u043e \u0441\u0443\u0442\u0438 \u0434\u0430\u044e\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 NAT. Hole punching \u0447\u0435\u0440\u0435\u0437 STUN \u0442\u0430\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u0441\u0435 WebRTC-\u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432 \u044d\u0442\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 TURN. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 production-grade TURN-\u0444\u0430\u0440\u043c \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 relay-\u0442\u0440\u0430\u0444\u0438\u043a. \u0410\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e Jami \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442: \u201c\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 TURN-\u0441\u0435\u0440\u0432\u0435\u0440\u044b turn.jami.net \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b (\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043e \u0442\u0435\u0441\u0442\u0430\u043c\u0438)\u201d. TURN-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c (relay-\u0443\u0437\u043b\u044b \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u044b\u0432\u043a\u0435), \u043d\u043e \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c overlay-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438, \u0430 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e WebRTC-\u0438\u043d\u0444\u0440\u0443.3. \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 STUN &#8212; \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430. Voximplant \u0432 5 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 WebRTC \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u21161: \u201c\u041d\u0435 \u043d\u0430\u0434\u0435\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 STUN \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 stun.l.google.com:19302) \u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430 \u2018\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435\u2019 TURN \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u201d. \u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u044c production-grade \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 &#8212; \u043d\u0443\u0436\u0435\u043d \u0441\u0432\u043e\u0439 STUN\/TURN. \u042d\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u0438\u043d\u0444\u0440\u0430.4. \u0420\u0430\u0437\u043c\u0435\u0440 deps \u043d\u0430 embedded. Pure-Go WebRTC-\u0441\u0442\u0435\u043a (pion\/webrtc + ICE-\u0430\u0433\u0435\u043d\u0442) \u0442\u0430\u0449\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442. \u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e, \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u043d. \u0423 \u043c\u0435\u043d\u044f \u0438 \u0442\u0430\u043a \u0441 Dendrite + Pinecone production-\u0441\u0431\u043e\u0440\u043a\u0430 .aar \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 35-40 MB. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 ICE-stack \u0440\u0430\u0434\u0438 \u043e\u0434\u043d\u043e\u0433\u043e use case (peer-to-peer \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435) &#8212; \u043f\u0435\u0440\u0435\u0431\u043e\u0440.5. \u041c\u0443\u043b\u044c\u0442\u0438\u0434\u0435\u0432\u0430\u0439\u0441 \u043f\u043b\u043e\u0445\u043e \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 peer-to-peer connection. STUN\/TURN\/ICE &#8212; \u043f\u0440\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438. \u0423 \u043e\u0434\u043d\u043e\u0433\u043e \u044e\u0437\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0442\u0435\u043b\u0435\u0444\u043e\u043d, \u043f\u043b\u0430\u043d\u0448\u0435\u0442), \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0434\u043e\u0439\u0442\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435. \u042d\u0442\u043e \u0438\u043b\u0438 N\u00d7M ICE-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 (\u043f\u043b\u043e\u0445\u043e), \u0438\u043b\u0438 relay \u0447\u0435\u0440\u0435\u0437 signaling, \u0447\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a Matrix-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u044f, \u0447\u0435\u0433\u043e \u0438 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c.6. Synchronous offer\/answer. WebRTC signaling \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0441\u0441\u0438\u0438. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f video-call\u2019\u0430, \u043d\u043e \u043f\u043b\u043e\u0445\u043e \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 async-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430, \u0433\u0434\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438, \u0438 \u0433\u0434\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043f\u0438\u0440\u0430\u043c\u0438 \u043b\u0438\u0431\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e, \u043b\u0438\u0431\u043e \u0435\u0433\u043e \u043d\u0435\u0442.\u042d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e WebRTC \u043f\u043b\u043e\u0445\u043e\u0439. \u0414\u043b\u044f video calling, browser-based applications, screen sharing &#8212; \u0438\u0434\u0435\u0430\u043b\u0435\u043d. \u041f\u0440\u043e\u0441\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: persistent multihop routing \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u0430 \u043d\u0435 peer-to-peer media stream.\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 libp2p\u0421 libp2p \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f. \u041d\u0435 \u043f\u043e\u0434\u043e\u0448\u0451\u043b \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:1. Heavyweight \u0434\u043b\u044f embedded. go-libp2p \u0442\u0430\u0449\u0438\u0442 Kademlia DHT, GossipSub, Noise\/TLS handshake stack, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e muxer\u2019\u043e\u0432 (Yamux, mplex), \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u0432. \u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e P2P \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u0431\u0435\u0433\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e MB \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 dependency tree, \u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 (\u0441\u0432\u043e\u044f discovery \u0447\u0435\u0440\u0435\u0437 registry \u043d\u0430 Matrix-\u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0441\u0432\u043e\u044f federation-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 Matrix).2. AutoNAT v2 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435 \u0435\u0449\u0451 \u043f\u0440\u043e\u0445\u043b\u0430\u0434\u0435\u043d. \u0412 \u0430\u043f\u0440\u0435\u043b\u0435-\u043c\u0430\u0435 2026 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d cross-implementation audit \u043e\u0442 ProbeLab \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c root-cause: dialerHost \u0432 AutoNAT v2 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 UDP black hole detector \u0432 read-only mode, \u0438 \u0434\u043b\u044f \u0441\u0432\u0435\u0436\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 (\u0441 \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439) detector \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442 \u201c\u043f\u0440\u043e\u0431\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u201d \u043a\u0430\u043a \u201c\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432 blacklist\u201d. \u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 Unknown reachability state \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430. \u041f\u043e\u043b\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442 &#8212; github.com\/probe-lab\/autonat-perf-audit. \u041f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c fix \u0432 libp2p\/go-libp2p (PR #3505), \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0437\u0430\u043a\u0440\u044b\u043b \u0441 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0447\u0442\u043e v2 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 workaround \u043e\u0442 v1 &#8212; \u044d\u0442\u043e, \u0433\u043e\u0432\u043e\u0440\u0438\u0442, latch existing behavior, \u0430 \u043d\u0435 design pattern. \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f design conversation, \u043d\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0447\u0442\u043e connectivity-\u0441\u0442\u0435\u043a \u0435\u0449\u0451 \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d.3. \u041d\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e fit \u0441 Matrix federation. Matrix S2S API &#8212; HTTP-like \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438. libp2p \u0434\u0430\u0451\u0442 streams. \u0417\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c Matrix \u0432 libp2p streams \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 wrapper \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e. Pinecone \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f matrix.org research \u043a\u0430\u043a HTTP-transport-compatible: federation \u0438\u0434\u0451\u0442 \u043f\u043e\u0447\u0442\u0438-\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043f\u043e\u0432\u0435\u0440\u0445 overlay.4. DCUtR \u0442\u0440\u0435\u0431\u0443\u0435\u0442 Circuit Relay. Direct Connection Upgrade Through Relay \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 relay, \u043f\u043e\u0442\u043e\u043c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f upgrade\u2019\u043d\u0443\u0442\u044c \u0434\u043e direct &#8212; \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 relay-\u0443\u0437\u043b\u043e\u0432 \u0438 retry-\u0446\u0438\u043a\u043b \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u043c\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438. \u0422\u0435 \u0436\u0435 relay-\u0443\u0437\u043b\u044b \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f (\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u044b\u0432\u043a\u0435), \u043d\u043e \u0432 Pinecone-\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 (\u0433\u0434\u0435 relay &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0437\u0435\u043b overlay \u0441 \u043b\u0443\u0447\u0448\u0438\u043c reach), \u0430 \u043d\u0435 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 libp2p-\u0441\u043b\u043e\u0439.\u0421\u043d\u043e\u0432\u0430 &#8212; \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0432\u043e\u0440 libp2p. IPFS, Filecoin, Kubo \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043d\u0451\u043c, ProbeLab \u0432 \u043e\u0431\u0449\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0414\u043b\u044f \u043c\u043e\u0435\u0433\u043e use case &#8212; overhead \u0438 mismatch \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 overlay routing \u0438 Pinecone-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430Overlay routing \u0432 \u043e\u0434\u043d\u043e\u0439 \u0444\u0440\u0430\u0437\u0435: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 outbound TCP\/WebSocket \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 bootstrap-\u043f\u0438\u0440\u043e\u0432, \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u0440\u0430\u0444\u0438\u043a \u0445\u043e\u0434\u0438\u0442 \u043c\u043d\u043e\u0433\u043e\u0445\u043e\u043f\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e TCP. NAT \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0438\u0437\u043d\u0443\u0442\u0440\u0438 NAT\u2019\u0430 &#8212; \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u043a\u0430 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0442\u0443 \u0436\u0435 \u0441\u0435\u0441\u0441\u0438\u044e. Hole punching \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.\u042d\u0442\u043e \u043d\u0435 \u043c\u0430\u0433\u0438\u044f \u0438 \u043d\u0435 \u201c\u0431\u0435\u0441\u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u201d &#8212; \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 trade-off\u2019\u043e\u0432. Overlay-\u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u201c\u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043e direct connection \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043f\u0438\u0440\u0430\u043c\u0438 \u0437\u0430 NAT\u2019\u043e\u043c\u201d \u0432 \u201c\u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438\u201d. Yggdrasil \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-482236","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/482236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=482236"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/482236\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=482236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=482236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=482236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}