{"id":376583,"date":"2024-05-21T06:55:08","date_gmt":"2024-05-21T06:55:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=376583"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T06:55:08","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=376583","title":{"rendered":"<span>Vo(IP) Really Simple: \u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 VoIP \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0411\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u043c <a href=\"http:\/\/suckless.org\/philosophy\/\" rel=\"noopener noreferrer nofollow\">suckless \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438<\/a>, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0437\u043c\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438, \u044f \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 VoIP \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 VoIP \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u041d\u043e \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Session_Initiation_Protocol\" rel=\"noopener noreferrer nofollow\">SIP<\/a>-based \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043b\u0438\u0431\u043e \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u043c\u0438\u0440\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/WebRTC\" rel=\"noopener noreferrer nofollow\">WebRTC<\/a>. \u041e\u0441\u043e\u0431\u043d\u044f\u043a\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u044e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mumble_(software)\" rel=\"noopener noreferrer nofollow\">Mumble<\/a> &#8212; \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0438 \u0433\u0435\u0439\u043c\u0435\u0440\u043e\u0432: \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0448\u044c \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441 \u0438 \u0432\u043e\u0442 \u0443\u0436\u0435 \u0441\u043b\u044b\u0448\u0438\u0448\u044c \u0432 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0430\u0445 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0410 \u043d\u0435\u0442 \u043b\u0438 \u0447\u0435\u0433\u043e \u0435\u0449\u0451 \u043f\u043e\u043f\u0440\u043e\u0449\u0435?<\/p>\n<hr\/>\n<p>\u0427\u0435\u0433\u043e \u044f \u0445\u043e\u0447\u0443? \u041f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u043d\u0430 \u0442\u043e\u043c \u043a\u043e\u043d\u0446\u0435. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 &#8212; \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 VoIP, \u0441 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u043c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c (\u043e\u043f\u044f\u0442\u044c \u0436\u0435 &#8212; \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b). \u0412\u043e\u0442 \u043d\u0430\u0434\u043e \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0441\u043e\u0442\u043e\u0432\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0438 \u0447\u0435\u0440\u0435\u0437 \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u0443.<\/p>\n<h3>\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>SIP-related \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e: \u043e\u043d\u0438 \u0434\u043b\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c <a href=\"https:\/\/github.com\/baresip\/baresip\" rel=\"noopener noreferrer nofollow\">baresip<\/a> \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043b\u0435\u0433\u043a\u043e, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0436\u0435 \u0435\u0449\u0451 \u043d\u0443\u0436\u0435\u043d \u0438 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u0430 \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 CMake-\u043e\u043c \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a suckless \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u041f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0434\u0430 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043d\u044f\u0442\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u044d\u0442\u0443 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b. \u042f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u043c\u0435\u044e \u043f\u0440\u043e\u0442\u0438\u0432 \u043d\u0438\u0445, \u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0434\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430) \u043e\u043d\u0438 \u044f\u0432\u043d\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b.<\/p>\n<p>WebRTC \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043f\u043e \u0441\u0443\u0442\u0438 \u0432 \u043c\u0438\u0440\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e 2-3 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 WebRTC \u0441\u0442\u044d\u043a\u0430: \u043d\u0435\u0438\u043c\u043e\u0432\u0435\u0440\u043d\u0435\u0439\u0448\u0430\u044f \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u043e\u0434\u0430 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0430 <a href=\"https:\/\/github.com\/pion\/webrtc\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a\u0436\u0435<\/a> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 Go, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043c\u0430\u0441\u0441\u0443 \u043a\u043e\u0434\u0430, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0441\u0430\u043c\u043e\u0439 WebRTC \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u042f \u0441\u0447\u0438\u0442\u0430\u044e \u0431\u0435\u0437\u0443\u043c\u0438\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 (\u0442\u043e \u0431\u0438\u0448\u044c, \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 Web-\u0431\u0440\u043e\u0443\u0437\u0435\u0440\u044b). \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u0431\u0435\u0437\u0443\u043c\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 WebRTC \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, WebRTC \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u0438\u0445 \u0431\u0440\u043e\u0443\u0437\u0435\u0440\u043e\u0432: \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c, \u043e\u0442\u044a\u0435\u0434\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u041f\u043b\u044e\u0441 \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0431\u0440\u043e\u0443\u0437\u0435\u0440\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c: Chromium \u0438 Firefox \u043d\u0435 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u0441\u043c\u043e\u0433\u0443\u0442 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 NAT (\u043d\u0443 <a href=\"https:\/\/habr.com\/ru\/articles\/490378\/\" rel=\"noopener noreferrer nofollow\">\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e<\/a>, 2024-\u044b\u0439 \u0433\u043e\u0434, \u043a\u0442\u043e-\u0442\u043e \u0432\u0441\u0451 \u0443\u043f\u043e\u0440\u043d\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u043d\u0430 IPv6 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c?), \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0430\u0443\u0434\u0438\u043e\u043a\u043e\u0434\u0435\u043a, \u0442\u043e \u043b\u044c\u0432\u0438\u043d\u0430\u044f \u0434\u043e\u043b\u044f \u0432\u0441\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0436\u0435 \u0443\u0431\u0440\u0430\u043b\u0430\u0441\u044c \u0431\u044b. \u0415\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0435\u0449\u0451 \u043d\u0435\u0442 IPv6 \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u043b\u043b\u0435\u0433, \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c VPN-\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0441 \u043f\u0440\u044f\u043c\u043e\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0412\u0438\u0434\u0435\u043b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e GNU VoIP \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0435 \u043d\u0430 GNU\/Linux (\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/habr.com\/ru\/articles\/490408\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0421 \u043f\u043e\u043b\u0443\u0447\u0448\u0435<\/a>), \u043b\u0438\u0431\u043e \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Java \u0438 \u0442\u043e\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u043b\u0438 \u0442\u044c\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>Mumble \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u0435\u043d \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u043c. \u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0412 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u043e \u0438\u0445 \u0440\u043e\u0434\u043d\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Qt, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438. \u042d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435\u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e \u0441 Web\/WebRTC, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u0434\u0430\u043b\u0435\u043a\u043e \u0434\u043e suckless. \u041f\u043b\u044e\u0441 \u044d\u0442\u043e GUI \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0447\u0442\u043e \u043c\u043d\u0435, \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u044e\u0449\u0435\u043c\u0443 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u0435 \u0448\u0438\u0431\u043a\u043e \u0443\u0434\u043e\u0431\u043d\u043e. \u0412\u0438\u0434\u0435\u043b \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 Mumble \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Go. \u041d\u043e \u043e\u0431\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u0431\u044b\u0442\u044c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434 GNU\/Linux \u043e\u043d\u0438 \u0431\u044b \u0432\u0435\u043b\u0438 \u0441\u0435\u0431\u044f \u043b\u0443\u0447\u0448\u0435\/\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0435\u0435, \u043d\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e<\/p>\n<p>\u041d\u0435\u043b\u044c\u0437\u044f \u043b\u0438 \u0437\u0430 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435? \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c! \u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0445 \u043d\u0435\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440\u0435\u0447\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0434\u0442\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0438\u0441\u044c \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0431\u0443\u0434\u0435\u0442: \u043a\u0430\u043a \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u043e\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430)? \u0415\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0430 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 API, \u043d\u043e \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u043d\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b (\u0432 FreeBSD, NetBSD, OpenBSD &#8212; \u0441\u0432\u043e\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432 GNU\/Linux \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0442\u044b\u0439 \u0437\u043e\u043e\u043f\u0430\u0440\u043a), \u043b\u0438\u0431\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0435\u0442 binding-\u043e\u0432 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 Go. \u0427\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c Unix-way \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0442\u0438\u043f\u0430 play\/rec \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 <a href=\"https:\/\/sourceforge.net\/projects\/sox\/\" rel=\"noopener noreferrer nofollow\">SoX<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430? \u041e\u043d\u0438 \u0441\u0430\u043c\u0438 \u0437\u043d\u0430\u044e\u0442 \u043a\u0430\u043a \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u041e\u0421, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\/\u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 stdin\/stdout \u043e\u043d\u043d\u044b\u0445. \u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 play-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u0435\u043d &#8212; \u0437\u0432\u0443\u043a\u043e\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u043e\u0439 \u041e\u0421 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u043c\u043e\u0447\u044c \u0438\u0445 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c. \u0412\u043c\u0435\u0441\u0442\u043e SoX \u043c\u043e\u0436\u043d\u043e \u0438 FFmpeg \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0437\u0430 \u041f\u041a \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443, \u0442\u043e \u043d\u0435\u0442 \u0436\u0451\u0441\u0442\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043a\u0438\u043b\u043e\u0431\u0438\u0442\u044b \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a\u0430. \u041d\u043e \u0438 \u0440\u0430\u0437\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0443\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0430\u043d\u0430\u043b\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041e\u0442\u043b\u0438\u0447\u043d\u0435\u0439\u0448\u0438\u043c (\u043b\u0443\u0447\u0448\u0438\u043c?) \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0430\u0443\u0434\u0438\u043e\u043a\u043e\u0434\u0435\u043a <a href=\"https:\/\/opus-codec.org\/\" rel=\"noopener noreferrer nofollow\">Opus<\/a>. 24Kbps <a href=\"https:\/\/wiki.xiph.org\/Opus_Recommended_Settings\" rel=\"noopener noreferrer nofollow\">\u0431\u043e\u043b\u0435\u0435<\/a> \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0440\u0435\u0447\u0438.<\/p>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c 20\u043c\u0441 (\u043a\u0430\u043a \u043e\u043d\u0438 <a href=\"https:\/\/wiki.xiph.org\/OpusFAQ#What_frame_size_should_I_use?\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442<\/a>) sample \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 sample \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0441\u0435\u0442\u0438, \u0433\u0434\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043e\u0434\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u043b\u044e\u0434\u0435\u0439.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 48\u043a\u0413\u0446 16-\u0431\u0438\u0442 1-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0432\u0443\u043a, \u0442\u043e \u0438\u0437 stdout rec \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c 48000<em>2<\/em>20\/1000=1920 \u0431\u0430\u0439\u0442. \u041f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Opus &#8212; \u043e\u043d\u0430 \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0431\u0430\u0439\u0442.<\/p>\n<pre><code> +---------------1920 \u0431\u0430\u0439\u0442--------------+ \/                                        \\ +-----------------------------------------+ |                    PCM                  | +-----------------------------------------+                       |                       v                   +------+                   | Opus |                   +------+ <\/code><\/pre>\n<h3>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u0436\u0430\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0435\u0442\u0438? \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 TCP \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e: \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0430\u043a\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u0418\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u0441\u0451 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430\u043c\u0438. UDP \u0442\u0443\u0442 \u0438\u0434\u0435\u0430\u043b\u0435\u043d. \u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Real-time_Transport_Protocol\" rel=\"noopener noreferrer nofollow\">RTP<\/a>, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0437\u0430\u0434\u0430\u0447? \u0410 \u0437\u0430\u0447\u0435\u043c? \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u043d\u0430\u043c \u0431\u043b\u044e\u0441\u0442\u0438 \u043d\u0435 \u043d\u0430\u0434\u043e, \u0430 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c sample \u0441\u0436\u0430\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0435\u043b\u044c\u0437\u044f &#8212; \u043f\u0430\u043a\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0430\u0441\u0442\u044c, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u043f\u043e\u0437\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e. \u0410 Opus \u043a\u043e\u0434\u0435\u043a \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u043f\u0430\u0436\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438\u043b\u0438 \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0435. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 24-\u0431\u0438\u0442\u0430 (3 \u0431\u0430\u0439\u0442\u0430) \u043f\u0435\u0440\u0435\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 20\u043c\u0441, \u0442\u043e \u044d\u0442\u043e 50 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. 24-\u0431\u0438\u0442 \u0445\u0432\u0430\u0442\u0438\u0442 \u043d\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c \u0431\u0435\u0441\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<pre><code>  24b +-----+--------------...-+ | CTR |        Opus      | +-----+--------------...-+ <\/code><\/pre>\n<p>\u0412 Opus \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043a\u0430\u043a <a href=\"https:\/\/wiki.xiph.org\/OpusFAQ#In_what_ways_is_Opus_optimized_for_the_Internet?\" rel=\"noopener noreferrer nofollow\">PLC<\/a> (Packet Loss Concealment). \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043f\u0440\u043e\u043f\u0430\u0436\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u043e \u043c\u044b \u044f\u0432\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u043c Opus-\u0443 (\u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043f\u0443\u0441\u0442\u043e\u0439 sample \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f) \u0438 \u043e\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 \u0444\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 sample \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0425\u043e\u0442\u044f \u0431\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0438\u0448\u0438\u043d\u044b. \u0415\u0449\u0451 \u0435\u0441\u0442\u044c DTX (discontinuous transmission), \u0433\u0434\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0438\u0448\u0438\u043d\u044b \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443).<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043b\u044e\u0434\u044c\u043c\u0438. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0430 \u0441\u043e\u0442\u0435\u043d \u043b\u044e\u0434\u0435\u0439 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u043d\u0430 \u0441\u0432\u044f\u0437\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043a \u043f\u0430\u043a\u0435\u0442\u0443 \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430.<\/p>\n<pre><code>  8b       24b +-----+-----------+----------------------...-+ | SID |    CTR    |           Opus           | +-----+-----------+----------------------...-+ <\/code><\/pre>\n<p>\u0412 \u0438\u0434\u0435\u0430\u043b\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0431\u044b\u043b \u043b\u0438 \u043f\u0430\u043a\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u0430\u043d, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u0435\u0442\u0441\u044f jitter, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 24-\u0431\u0438\u0442\u0430 \u0441 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0430\u0443\u0434\u0438\u043e sample \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430. \u0421 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c: \u043d\u043e\u043c\u0435\u0440 20\u043c\u0441 sample, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0439 \u043c\u0435\u0440\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (&#171;\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439&#187; \u0441\u0447\u0451\u0442\u0447\u0438\u043a, aCTR). \u041d\u043e \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 sample \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 \u0441\u0435\u0442\u044c \u0438\u0437-\u0437\u0430 DTX. \u0411\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0431\u044b\u043b\u0430 \u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0438\u0448\u0438\u043d\u0430 \u0438\u043b\u0438 sample \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0441\u044f \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c.<\/p>\n<pre><code>  8b       24b         24b +-----+-----------+-----------+----------------------...-+ | SID |    CTR    |   aCTR    |           Opus           | +-----+-----------+-----------+----------------------...-+ <\/code><\/pre>\n<h3>\u0417\u0430\u0449\u0438\u0442\u0430 \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>\u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c \u043d\u0430\u0448 \u043f\u0430\u043a\u0435\u0442? \u0412\u0435\u0434\u044c \u043c\u044b \u0436\u0435 \u043d\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043b\u0438? \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0447\u0451\u0442\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0438\u0444\u0440, \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043e\u043d\u043d\u043e\u0433\u043e. \u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7539\" rel=\"noopener noreferrer nofollow\">ChaCha20<\/a> \u0438 \u0438\u043c\u0435\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442, \u0442\u043e\u0436\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e, AES). \u041f\u0440\u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430) nonce. \u0410 \u043e\u043d\u043e \u0443 \u043d\u0430\u0441 \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f &#8212; \u043d\u0430\u0448 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>\u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043f\u0430\u043a\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d. \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 ChaCha20 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/cr.yp.to\/mac\/poly1305-20050329.pdf\" rel=\"noopener noreferrer nofollow\">Poly1305<\/a> \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 MAC. \u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043a\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043d\u0430 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435: \u0435\u0433\u043e 128-\u0431\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0430\u043b\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u044b\u0441\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u044e\u0447 Poly1305 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0438\u0437 ChaCha20, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0430 64-\u0431\u0430\u0439\u0442\u0430, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f 64-\u0431\u0430\u0439\u0442\u0430 (\u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a), \u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 32-\u0431\u0430\u0439\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430 Poly1305. \u0414\u0430\u043b\u0435\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 XOR-\u0438\u0442\u0441\u044f \u0441 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0448\u0438\u0444\u0440\u0443\u044f \u0435\u0433\u043e. \u041d\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e 20-40 \u0431\u0430\u0439\u0442 Opus. \u0412\u044b\u0445\u043e\u0434\u0438\u0442, \u0447\u0442\u043e \u0438\u0437 ChaCha20 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u044c 128-\u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c\u0438 20-40 \u0431\u0430\u0439\u0442 Opus. \u0414\u043e\u0440\u043e\u0433\u043e\u0432\u0430\u0442\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u0438\u043f\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/SipHash\" rel=\"noopener noreferrer nofollow\">SipHash<\/a>. \u041e\u043d (SipHash-2-4, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0447\u0435\u043c \u0432\u0435\u0441\u044c \u0446\u0438\u043a\u043b \u0434\u043b\u044f Poly1305. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442 64-\u0431\u0438\u0442 MAC \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u043e Poly1305, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SipHash24, \u0443\u0441\u043a\u043e\u0440\u044f\u044f \u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u043b\u043e\u043a ChaCha20 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c), \u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 MAC.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 8 \u0431\u0430\u0439\u0442 UDP \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, 1+3+3=7 \u0431\u0430\u0439\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, 8 \u0431\u0430\u0439\u0442 SipHash24 MAC. \u041c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0443 SRTP. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0431\u044b \u0432\u0441\u0451-\u0440\u0430\u0432\u043d\u043e \u043a\u043e\u043f\u0435\u0439\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e 40-\u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e IPv6 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430.<\/p>\n<pre><code>    +-------------------  SipHash24 -----------------+    \/                                                  \\   \/                             +------ ChaCha20 ------+  \/                             \/                        \\ +-----+-----------+-----------+----------------------...-+-----+ | SID |    CTR    |   aCTR    |           Opus           | MAC | +-----+-----------+-----------+----------------------...-+-----+ <\/code><\/pre>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440<\/h3>\n<p>\u041a\u0430\u043a\u043e\u0432\u0430 \u0440\u043e\u043b\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430? \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d. \u041a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u043a\u043b\u044e\u0447\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e ChaCha20+SipHash24 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u0414\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u044b \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430. \u0412\u0441\u0435 UDP \u043f\u0430\u043a\u0435\u0442\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043d \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c.<\/p>\n<p>\u0421\u043c\u044b\u0441\u043b\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u043a\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u043e\u0435, \u0442\u043e \u0434\u0430: \u043f\u043e \u0434\u0432\u0430 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0443. \u041d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0431\u044a\u0451\u043c\u044b \u0442\u0440\u0430\u0444\u0438\u043a\u0430, \u0434\u043b\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<p>\u0421\u0432\u044f\u0437\u044c \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e TCP, \u0447\u0442\u043e\u0431\u044b \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0435 \u0438 \u043f\u043e \u043d\u0435\u043c\u0443 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0412\u0435\u0434\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c UDP \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043b\u044c \u0443\u0433\u043e\u0434\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u043d\u043e \u0435\u0433\u043e \u0443\u0436\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442.<\/p>\n<h3>\u0417\u0430\u0449\u0438\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h3>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c (\u0442\u0430\u043a \u043a\u0430\u043a \u0432 Go \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f) \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c TLS \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e TCP \u043a\u0430\u043d\u0430\u043b\u0430. \u0412 TLS \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u0430\u043c. \u041d\u043e, \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 TLS \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b &#8212; \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0432\u043e\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043b\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/habr.com\/ru\/articles\/786302\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u0443\u044e<\/a> \u043f\u043e\u0447\u0442\u0443 \u0438\u043b\u0438 IM. \u041c\u043e\u0436\u043d\u043e \u0431\u044b \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c PSK (pre-shared key) \u0432 TLS 1.3, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043d\u0451\u043c \u043f\u0430\u0440\u043e\u043b\u044c, \u043d\u043e Go API \u0434\u043b\u044f TLS \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e TLS \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0440\u0432\u0435\u0440, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u043f\u043e \u043f\u0430\u0440\u043e\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 TLS \u0441\u0435\u0441\u0441\u0438\u0438.<\/p>\n<p>\u041d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0438 suckless \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438 \u043a \u0437\u0430\u0449\u0438\u0442\u0435 TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f? \u0412\u0441\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 TLS \u0434\u043e 1.3 &#8212; \u0443\u0436\u0430\u0441\u043d\u044b \u0438 \u043f\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0438 \u043f\u043e \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. TLS 1.3 \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448, \u043d\u043e \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ASN.1 \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 X.509 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0410 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u0431\u0435\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e X.509 \u0430\u0434\u0430 \u043f\u043e\u0440\u043e\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0435\u0442\u0430\u043c\u0438!<\/p>\n<h3>Noise<\/h3>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441 \u043d\u0443\u043b\u044f \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u043d\u043d\u044b\u0445: <a href=\"http:\/\/noiseprotocol.org\/noise.html\" rel=\"noopener noreferrer nofollow\">Noise Protocol Framework<\/a>. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c (pattern-\u043e\u043c) \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0432\u0441\u0435\u0433\u043e, \u0438\u0449\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0431\u0443\u043a\u043e\u0432\u043e\u043a pattern-\u0430: \u043a\u0430\u043a \u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043b\u044e\u0447 \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440\u0430 (\u043a\u043b\u0438\u0435\u043d\u0442\u0430) \u0438 \u043a\u043b\u044e\u0447 \u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0430\u043a\u0442 \u0437\u043d\u0430\u043d\u0438\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 &#8212; \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u043e\u043b\u0435\u043c (shared knowledge). \u0422\u043e \u0435\u0441\u0442\u044c, \u044f\u0432\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c TCP \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f. \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 &#8212; \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u043e \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041a\u043b\u044e\u0447 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u043b\u043b\u0435\u0433 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0430\u0440\u043e\u043b\u044e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 Noise-NK pattern. \u041f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0435\u0449\u0451 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d round-trip.<\/p>\n<pre><code>&lt;- s ... -> e, es &lt;- e, ee <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 pattern \u0441\u0442\u043e\u0438\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440\u0443 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 DH-\u043a\u043b\u044e\u0447 (&#171;s&#187;) \u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u0439 DH-\u043a\u043b\u044e\u0447 (&#171;e&#187;), \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043d\u0438\u0446\u0438\u0430\u0442\u043e\u0440 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 DH \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0448\u0438\u043c \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u043c \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a\u0430 (&#171;es&#187;);<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e, \u0432\u0435\u0434\u044c \u043f\u043e\u0441\u043b\u0435 &#171;es&#187; \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u043a\u043b\u044e\u0447\u0438 AEAD-\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0448\u0438\u0444\u0440\u043e\u0442\u0435\u043a\u0441\u0442, \u043d\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 MAC;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a, \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0451\u043c\u0430, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f &#171;es&#187; \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0439 \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u0439 DH-\u043a\u043b\u044e\u0447 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u0432\u0435\u0442\u0447\u0438\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 DH \u043e\u0442 \u0434\u0432\u0443\u0445 \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 (&#171;ee&#187;). \u0412\u0441\u044e\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f key ratcheting, \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0438 \u043a\u043b\u044e\u0447\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0443\u0436\u0435 \u043d\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0434\u043b\u044f Noise \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0420\u0430\u0437 \u043c\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 Daniel J. Bernstein (DJB), \u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d: <a href=\"https:\/\/cr.yp.to\/ecdh.html\" rel=\"noopener noreferrer nofollow\">curve25519<\/a> \u0434\u043b\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439, ChaCha20-Poly1305 \u0434\u043b\u044f AEAD-\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, <a href=\"https:\/\/en.wikipedia.org\/wiki\/BLAKE2s#BLAKE2\" rel=\"noopener noreferrer nofollow\">BLAKE2s<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u044d\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0414\u043b\u044f Go \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Noise framework \u0432 \u0432\u0438\u0434\u0435 <a href=\"http:\/\/github.com\/flynn\/noise\" rel=\"noopener noreferrer nofollow\">github.com\/flynn\/noise<\/a> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c, \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438:<\/p>\n<pre><code>hs, err := noise.NewHandshakeState(noise.Config{     CipherSuite: noise.NewCipherSuite(         noise.DH25519,         noise.CipherChaChaPoly,         noise.HashBLAKE2s,     ),     Pattern:     noise.HandshakeNK,     Initiator:   true,     PeerStatic:  []byte(srvPub), }) buf, _, _, err := hs.WriteMessage(nil, []byte(appPayload)) <\/code><\/pre>\n<p>buf \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. \u041d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Noise \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442:<\/p>\n<pre><code>hs, err := noise.NewHandshakeState(noise.Config{     CipherSuite: noise.NewCipherSuite(         noise.DH25519,         noise.CipherChaChaPoly,         noise.HashBLAKE2s,     ),     Pattern:       noise.HandshakeNK,     Initiator:     false,     StaticKeypair: noise.DHKey{Private: []byte(Prv), Public: []byte(Pub)}, }) appPayload, _, _, err := hs.ReadMessage(nil, buf) buf, _, _, err = hs.WriteMessage(nil, []byte(appResponse)) <\/code><\/pre>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c buf, \u0433\u0434\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f. \u041d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438:<\/p>\n<pre><code>buf, tx, rx, err := hs.ReadMessage(nil, buf) <\/code><\/pre>\n<p>tx \u0438 rx \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445. tx.Encrypt(data) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 rx.Decrypt(buf) \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0434\u0435\u0448\u0438\u0444\u0440\u0443\u0435\u0442.<\/p>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e \u0438 \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 Noise framework-\u043e\u043c! \u041d\u0443 \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043f\u0430\u0440 curve25519:<\/p>\n<pre><code>kp, err := noise.DH25519.GenerateKeypair(rand.Reader) os.Stdout.Write(kp.Private[:]) os.Stdout.Write(kp.Public[:]) ... Prv, Pub := raw[:len(raw)\/2], raw[len(raw)\/2:] <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438 \u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 (\u043f\u043e\u0440\u044f\u0434\u043a\u0438, \u0435\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c ASN.1 X.509 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b) \u043c\u0435\u043d\u044c\u0448\u0435 \u043b\u044e\u0431\u043e\u0439 TLS 1.3 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043b\u044e\u0441 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0430 \u043f\u0440\u0438\u0451\u043c\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/en.wikipedia.org\/wiki\/TCP_Fast_Open\" rel=\"noopener noreferrer nofollow\">TCP Fast Open<\/a>, \u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b \u0431\u044b\u043b\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 TCP SYN \u043f\u0430\u043a\u0435\u0442\u0435 \u043e\u0442\u043e\u0441\u043b\u0430\u0442\u044c, \u043a\u0430\u043a \u0438 \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 TCP ACK.<\/p>\n<h3>netstring<\/h3>\n<p>\u041d\u043e \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0437\u0430\u0441\u0430\u0434\u0430: Noise \u043d\u0435 \u0434\u0438\u043a\u0442\u0443\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 TCP \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u0438 \u0431\u0430\u0439\u0442\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u044b Noise \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0425\u043e\u0442\u044c 16-\u0431\u0438\u0442 \u0434\u043b\u0438\u043d\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c &#8212; \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041d\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0442 \u0432\u0441\u0451 \u0442\u043e\u0433\u043e \u0436\u0435 DJB: <a href=\"http:\/\/cr.yp.to\/proto\/netstrings.txt\" rel=\"noopener noreferrer nofollow\">netstring<\/a>. \u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 netstring \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442 \u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043d \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c\u044e:<\/p>\n<pre><code>def NS(data): return printf(\"%d:%s,\", len(data), data) <\/code><\/pre>\n<p>\u0417\u0430\u043f\u044f\u0442\u0430\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 &#8212; \u043d\u0435 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u043d\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0439\u0442, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0443\u043f\u0440\u043e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0421\u0438-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.<\/p>\n<h3>\u0421\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/h3>\n<p>\u0418\u0434\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0447\u0451\u0442\u043a\u043e <a href=\"http:\/\/noiseprotocol.org\/noise.html#payload-security-properties\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435<\/a> \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Noise, \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u0436\u0435 \u0438 \u0432 \u0441\u0430\u043c\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445 \u0440\u0443\u043a\u043e\u043f\u043e\u0436\u0430\u0442\u0438\u044f \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c. \u0427\u0435\u043c \u043c\u044b \u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f, \u043e\u0442\u0441\u044b\u043b\u0430\u044f, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0421\u0435\u0440\u0432\u0435\u0440 \u0436\u0435, \u0432 \u0441\u0432\u043e\u0451\u043c \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 (\u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442\u043e, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0438 \u0442.\u0434.).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 NS(NS(&#171;COOKIE&#187;) || NS(RANDOM)) \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0433\u0434\u0435 RANDOM \u044d\u0442\u043e 128-\u0431\u0438\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u041a\u043b\u0438\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 RANDOM \u0432 UDP \u043f\u0430\u043a\u0435\u0442\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 Noise \u0441\u0435\u0441\u0441\u0438\u0438, \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u044f\u0432\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 UDP \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0430\u0443\u0434\u0438\u043e \u043f\u043e\u0442\u043e\u043a. \u0425\u043e\u0442\u044c \u043f\u0440\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 IPv4 \u043c\u0438\u0440 \u0441 \u0435\u0433\u043e NAT-\u043e\u043c \u044f \u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c, \u043d\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438 \u0432 \u043d\u0451\u043c, \u0432\u0435\u0434\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f NAT-\u0430, \u043d\u0430\u0448 UDP \u043f\u043e\u0440\u0442, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u043d\u0430\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>UDP hole punching \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 stateful firewall (\u0438\u043b\u0438 NAT) \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0443\u0442\u0438, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0438\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u0442 \u043d\u0430\u0441 \u0448\u0451\u043b \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u0442\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0430\u043a\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c\u0441\u044f, \u0442\u043e \u043c\u044b \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0436\u0434\u0451\u0442 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f cookie, \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 NS(NS(&#171;SID&#187;) || NS(ID)) \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c, \u0433\u0434\u0435 ID \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u043e\u043c \u043d\u0430\u0448\u0438\u0445 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Opus \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<pre><code>S &lt;- C : e, es, NS(\"USERNAME\") S -> C : e, ee, NS(NS(\"COOKIE\") || NS(RANDOM)) S &lt;- C : UDP(RANDOM) S -> C : NS(NS(\"SID\") || NS(ID)) <\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0442\u043a\u0443\u0434\u0430-\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Opus \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0412 Noise \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0435\u0441\u0442\u044c, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439, <a href=\"http:\/\/noiseprotocol.org\/noise.html#channel-binding\" rel=\"noopener noreferrer nofollow\">binding value<\/a> \u0441\u0435\u0441\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438. \u0415\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0433\u043e 256-\u0431\u0438\u0442, \u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0430 256-\u0431\u0438\u0442 \u043a\u043b\u044e\u0447\u0430 \u0434\u043b\u044f ChaCha20 \u0438 SipHash24. \u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/HKDF\" rel=\"noopener noreferrer nofollow\">HKDF<\/a>-Expand \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f &#171;\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f&#187; \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0434\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0423 \u043d\u0430\u0441 \u0432\u043e\u0432\u0441\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f BLAKE2s \u0445\u044d\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 BLAKE2X \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0432\u044b\u0445\u043e\u0434\u0430 \u0445\u044d\u0448\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b. \u042d\u0442\u043e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e binding value \u0434\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u043d\u0430\u0440\u0435\u0437\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043b\u044e\u0447\u0438.<\/p>\n<pre><code>keys := make([]byte, chacha20.KeySize+poly1305.KeySize) xof, err := blake2s.NewXOF(len(keys), nil) xof.Write(hs.ChannelBinding()) _, err = io.ReadFull(xof, keys) keyCiph, keyMAC = keys[:chacha20.KeySize], keys[chacha20.KeySize:] <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u043f\u043e Noise-\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u043c\u0443 TCP \u043a\u0430\u043d\u0430\u043b\u0443 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 PING\/PONG \u043f\u0430\u043a\u0435\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e \u043d\u0435\u043c\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0442\u0438\u043f\u0430 NS(NS(&#171;ADD&#187;) || NS(SID) || NS(USERNAME) || NS(KEY)) \u0434\u043b\u044f \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430, \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c, SID-\u043e\u043c \u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0437\u0430\u0449\u0438\u0442\u044b. NS(NS(&#171;DEL&#187;) || NS(SID)) \u0434\u043b\u044f \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<pre><code>S &lt;- C : NS(NS(\"PING\")) S -> C : NS(NS(\"PONG\")) S &lt;> C : ... S -> C : NS(NS(\"ADD\") || NS(SID) || NS(USERNAME) || NS(KEY)) S &lt;> C : ... S -> C : NS(NS(\"DEL\") || NS(SID)) S &lt;> C : ... <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c UDP \u0442\u0440\u0430\u0444\u0438\u043a, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c. SID-\u044b \u0438 \u043a\u043b\u044e\u0447\u0438 \u043e\u043d\u0438 \u0437\u043d\u0430\u044e\u0442 &#8212; \u0441\u043c\u043e\u0433\u0443\u0442 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c. \u0412 \u0432\u0438\u0434\u0443 \u0434\u0435\u0448\u0435\u0432\u0438\u0437\u043d\u044b SipHash24 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0441\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c MAC \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0442\u044c \u0430\u043f\u0440\u0438\u043e\u0440\u0438 &#171;\u0431\u0438\u0442\u044b\u0439&#187; \u0442\u0440\u0430\u0444\u0438\u043a.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043a\u043b\u0438\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a (\u043c\u043e\u043b\u0447\u0430\u0442\u044c), \u0442\u043e \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0448\u043b\u0451\u0442 \u043f\u0430\u043a\u0435\u0442 \u0441 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0434\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f state \u0432 firewall\/NAT.<\/p>\n<h3>UI<\/h3>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0442 \u0438 \u0432\u0441\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043e! \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0414\u043b\u044f VoIP \u0441\u043c\u044b\u0441\u043b\u0430 \u0432 GUI, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435\u0442. \u041d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c mute \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u041f\u0440\u043e\u0441\u0442\u043e\u0439, <a href=\"http:\/\/suckless.org\/rocks\/\" rel=\"noopener noreferrer nofollow\">\u043e\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u044b\u0439<\/a> suckless, <a href=\"https:\/\/github.com\/baskerville\/sxhkd\" rel=\"noopener noreferrer nofollow\">sxhkd<\/a> \u0434\u0435\u043c\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 X11-\u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f FIFO \u0444\u0430\u0439\u043b\u0430, \u0447\u0438\u0442\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 mute. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f sxhkd:<\/p>\n<pre><code>XF86AudioMute     herbe $(cat \/path\/to\/mute-toggle.fifo) <\/code><\/pre>\n<p>\u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 &#171;mute&#187; \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0443, \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c FIFO \u0444\u0430\u0439\u043b, \u0432\u044b\u0432\u043e\u0434\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 mute, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u043e\u043a\u043d\u043e\u043c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0447\u0435\u0440\u0435\u0437 suckless-\u043e\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u0443\u044e <a href=\"https:\/\/github.com\/dudik\/herbe\" rel=\"noopener noreferrer nofollow\">herbe<\/a> \u0443\u0442\u0438\u043b\u0438\u0442\u0443.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0433\u043e \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/www.vors.stargrave.org\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>. \u041a\u0430\u043a \u0438 \u0432\u0441\u0435 \u043c\u043e\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, VoRS \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e <a href=\"https:\/\/www.gnu.org\/philosophy\/free-sw.ru.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c<\/a> \u041f\u041e, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u043c \u043d\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 <a href=\"https:\/\/www.gnu.org\/licenses\/agpl-3.0.ru.html\" rel=\"noopener noreferrer nofollow\">AGPLv3<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/815635\/\"> https:\/\/habr.com\/ru\/articles\/815635\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0411\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u043c <a href=\"http:\/\/suckless.org\/philosophy\/\" rel=\"noopener noreferrer nofollow\">suckless \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u0438<\/a>, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0437\u043c\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438, \u044f \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 VoIP \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 VoIP \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e. \u041d\u043e \u044d\u0442\u043e \u043b\u0438\u0431\u043e \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Session_Initiation_Protocol\" rel=\"noopener noreferrer nofollow\">SIP<\/a>-based \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043b\u0438\u0431\u043e \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u043c\u0438\u0440\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/WebRTC\" rel=\"noopener noreferrer nofollow\">WebRTC<\/a>. \u041e\u0441\u043e\u0431\u043d\u044f\u043a\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u044e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mumble_(software)\" rel=\"noopener noreferrer nofollow\">Mumble<\/a> &#8212; \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0438 \u0433\u0435\u0439\u043c\u0435\u0440\u043e\u0432: \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0448\u044c \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441 \u0438 \u0432\u043e\u0442 \u0443\u0436\u0435 \u0441\u043b\u044b\u0448\u0438\u0448\u044c \u0432 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0430\u0445 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0410 \u043d\u0435\u0442 \u043b\u0438 \u0447\u0435\u0433\u043e \u0435\u0449\u0451 \u043f\u043e\u043f\u0440\u043e\u0449\u0435?<\/p>\n<hr\/>\n<p>\u0427\u0435\u0433\u043e \u044f \u0445\u043e\u0447\u0443? \u041f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u043d\u0430 \u0442\u043e\u043c \u043a\u043e\u043d\u0446\u0435. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 &#8212; \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 VoIP, \u0441 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u043c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c (\u043e\u043f\u044f\u0442\u044c \u0436\u0435 &#8212; \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b). \u0412\u043e\u0442 \u043d\u0430\u0434\u043e \u043f\u043e\u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0441\u043e\u0442\u043e\u0432\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0438 \u0447\u0435\u0440\u0435\u0437 \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0433\u0430\u0440\u043d\u0438\u0442\u0443\u0440\u0443.<\/p>\n<h3>\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>SIP-related \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e: \u043e\u043d\u0438 \u0434\u043b\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c <a href=\"https:\/\/github.com\/baresip\/baresip\" rel=\"noopener noreferrer nofollow\">baresip<\/a> \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043b\u0435\u0433\u043a\u043e, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0436\u0435 \u0435\u0449\u0451 \u043d\u0443\u0436\u0435\u043d \u0438 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u0430 \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 CMake-\u043e\u043c \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a suckless \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u041f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0434\u0430 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043d\u044f\u0442\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u044d\u0442\u0443 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b. \u042f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u043c\u0435\u044e \u043f\u0440\u043e\u0442\u0438\u0432 \u043d\u0438\u0445, \u043d\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0434\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430) \u043e\u043d\u0438 \u044f\u0432\u043d\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b.<\/p>\n<p>WebRTC \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043f\u043e \u0441\u0443\u0442\u0438 \u0432 \u043c\u0438\u0440\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e 2-3 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 WebRTC \u0441\u0442\u044d\u043a\u0430: \u043d\u0435\u0438\u043c\u043e\u0432\u0435\u0440\u043d\u0435\u0439\u0448\u0430\u044f \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u043e\u0434\u0430 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0430 <a href=\"https:\/\/github.com\/pion\/webrtc\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a\u0436\u0435<\/a> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 Go, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043c\u0430\u0441\u0441\u0443 \u043a\u043e\u0434\u0430, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0441\u0430\u043c\u043e\u0439 WebRTC \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u042f \u0441\u0447\u0438\u0442\u0430\u044e \u0431\u0435\u0437\u0443\u043c\u0438\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 (\u0442\u043e \u0431\u0438\u0448\u044c, \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 Web-\u0431\u0440\u043e\u0443\u0437\u0435\u0440\u044b). \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u0431\u0435\u0437\u0443\u043c\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 WebRTC \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, WebRTC \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u0438\u0445 \u0431\u0440\u043e\u0443\u0437\u0435\u0440\u043e\u0432: \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c, \u043e\u0442\u044a\u0435\u0434\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u041f\u043b\u044e\u0441 \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0431\u0440\u043e\u0443\u0437\u0435\u0440\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c: Chromium \u0438 Firefox \u043d\u0435 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u0441\u043c\u043e\u0433\u0443\u0442 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 NAT (\u043d\u0443 <a href=\"https:\/\/habr.com\/ru\/articles\/490378\/\" rel=\"noopener noreferrer nofollow\">\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e<\/a>, 2024-\u044b\u0439 \u0433\u043e\u0434, \u043a\u0442\u043e-\u0442\u043e \u0432\u0441\u0451 \u0443\u043f\u043e\u0440\u043d\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u043d\u0430 IPv6 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c?), \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0430\u0443\u0434\u0438\u043e\u043a\u043e\u0434\u0435\u043a, \u0442\u043e \u043b\u044c\u0432\u0438\u043d\u0430\u044f \u0434\u043e\u043b\u044f \u0432\u0441\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0436\u0435 \u0443\u0431\u0440\u0430\u043b\u0430\u0441\u044c \u0431\u044b. \u0415\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0435\u0449\u0451 \u043d\u0435\u0442 IPv6 \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u043b\u043b\u0435\u0433, \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c VPN-\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0441 \u043f\u0440\u044f\u043c\u043e\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0412\u0438\u0434\u0435\u043b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e GNU VoIP \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0435 \u043d\u0430 GNU\/Linux (\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/habr.com\/ru\/articles\/490408\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0421 \u043f\u043e\u043b\u0443\u0447\u0448\u0435<\/a>), \u043b\u0438\u0431\u043e \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Java \u0438 \u0442\u043e\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u043b\u0438 \u0442\u044c\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>Mumble \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u0435\u043d \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u043c. \u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. \u0412 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u043e \u0438\u0445 \u0440\u043e\u0434\u043d\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Qt, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438. \u042d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435\u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e \u0441 Web\/WebRTC, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u0434\u0430\u043b\u0435\u043a\u043e \u0434\u043e suckless. \u041f\u043b\u044e\u0441 \u044d\u0442\u043e GUI \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0447\u0442\u043e \u043c\u043d\u0435, \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u044e\u0449\u0435\u043c\u0443 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u0435 \u0448\u0438\u0431\u043a\u043e \u0443\u0434\u043e\u0431\u043d\u043e. \u0412\u0438\u0434\u0435\u043b \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 Mumble \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Go. \u041d\u043e \u043e\u0431\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u0431\u044b\u0442\u044c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434 GNU\/Linux \u043e\u043d\u0438 \u0431\u044b \u0432\u0435\u043b\u0438 \u0441\u0435\u0431\u044f \u043b\u0443\u0447\u0448\u0435\/\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0435\u0435, \u043d\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e<\/p>\n<p>\u041d\u0435\u043b\u044c\u0437\u044f \u043b\u0438 \u0437\u0430 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435? \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c! \u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0445 \u043d\u0435\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0440\u0435\u0447\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0434\u0442\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0438\u0441\u044c \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0431\u0443\u0434\u0435\u0442: \u043a\u0430\u043a \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u043e\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430)? \u0415\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0430 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 API, \u043d\u043e \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u043d\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b (\u0432 FreeBSD, NetBSD, OpenBSD &#8212; \u0441\u0432\u043e\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432 GNU\/Linux \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0442\u044b\u0439 \u0437\u043e\u043e\u043f\u0430\u0440\u043a), \u043b\u0438\u0431\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0435\u0442 binding-\u043e\u0432 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 Go. \u0427\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c Unix-way \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0442\u0438\u043f\u0430 play\/rec \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u0430 <a href=\"https:\/\/sourceforge.net\/projects\/sox\/\" rel=\"noopener noreferrer nofollow\">SoX<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430? \u041e\u043d\u0438 \u0441\u0430\u043c\u0438 \u0437\u043d\u0430\u044e\u0442 \u043a\u0430\u043a \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u041e\u0421, \u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\/\u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 stdin\/stdout \u043e\u043d\u043d\u044b\u0445. \u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 play-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u0435\u043d &#8212; \u0437\u0432\u0443\u043a\u043e\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u043e\u0439 \u041e\u0421 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u043c\u043e\u0447\u044c \u0438\u0445 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c. \u0412\u043c\u0435\u0441\u0442\u043e SoX \u043c\u043e\u0436\u043d\u043e \u0438 FFmpeg \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0437\u0430 \u041f\u041a \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443, \u0442\u043e \u043d\u0435\u0442 \u0436\u0451\u0441\u0442\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043a\u0438\u043b\u043e\u0431\u0438\u0442\u044b \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a\u0430. \u041d\u043e \u0438 \u0440\u0430\u0437\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0443\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0430\u043d\u0430\u043b\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041e\u0442\u043b\u0438\u0447\u043d\u0435\u0439\u0448\u0438\u043c (\u043b\u0443\u0447\u0448\u0438\u043c?) \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0430\u0443\u0434\u0438\u043e\u043a\u043e\u0434\u0435\u043a <a href=\"https:\/\/opus-codec.org\/\" rel=\"noopener noreferrer nofollow\">Opus<\/a>. 24Kbps <a href=\"https:\/\/wiki.xiph.org\/Opus_Recommended_Settings\" rel=\"noopener noreferrer nofollow\">\u0431\u043e\u043b\u0435\u0435<\/a> \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0440\u0435\u0447\u0438.<\/p>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c 20\u043c\u0441 (\u043a\u0430\u043a \u043e\u043d\u0438 <a href=\"https:\/\/wiki.xiph.org\/OpusFAQ#What_frame_size_should_I_use?\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442<\/a>) sample \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 sample \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0441\u0435\u0442\u0438, \u0433\u0434\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043e\u0434\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0411\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u043b\u044e\u0434\u0435\u0439.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 48\u043a\u0413\u0446 16-\u0431\u0438\u0442 1-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0432\u0443\u043a, \u0442\u043e \u0438\u0437 stdout rec \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c 48000<em>2<\/em>20\/1000=1920 \u0431\u0430\u0439\u0442. \u041f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Opus &#8212; \u043e\u043d\u0430 \u0438\u0445 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0431\u0430\u0439\u0442.<\/p>\n<pre><code> +---------------1920 \u0431\u0430\u0439\u0442--------------+ \/                                        \\ +-----------------------------------------+ |                    PCM                  | +-----------------------------------------+                       |                       v                   +------+                   | Opus |                   +------+ <\/code><\/pre>\n<h3>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u0436\u0430\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0435\u0442\u0438? \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 TCP \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e: \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0430\u0443\u0434\u0438\u043e\u0442\u0440\u0430\u043a\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u0418\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u0441\u0451 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430\u043c\u0438. UDP \u0442\u0443\u0442 \u0438\u0434\u0435\u0430\u043b\u0435\u043d. \u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Real-time_Transport_Protocol\" rel=\"noopener noreferrer nofollow\">RTP<\/a>, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0437\u0430\u0434\u0430\u0447? \u0410 \u0437\u0430\u0447\u0435\u043c? \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u043d\u0430\u043c \u0431\u043b\u044e\u0441\u0442\u0438 \u043d\u0435 \u043d\u0430\u0434\u043e, \u0430 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c sample \u0441\u0436\u0430\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0435\u043b\u044c\u0437\u044f &#8212; \u043f\u0430\u043a\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0430\u0441\u0442\u044c, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0439\u0442\u0438 \u043f\u043e\u0437\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e. \u0410 Opus \u043a\u043e\u0434\u0435\u043a \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u043f\u0430\u0436\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438\u043b\u0438 \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0435. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 24-\u0431\u0438\u0442\u0430 (3 \u0431\u0430\u0439\u0442\u0430) \u043f\u0435\u0440\u0435\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 20\u043c\u0441, \u0442\u043e \u044d\u0442\u043e 50 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. 24-\u0431\u0438\u0442 \u0445\u0432\u0430\u0442\u0438\u0442 \u043d\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c \u0431\u0435\u0441\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<pre><code>  24b +-----+--------------...-+ | CTR |        Opus      | +-----+--------------...-+ <\/code><\/pre>\n<p>\u0412 Opus \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043a\u0430\u043a <a href=\"https:\/\/wiki.xiph.org\/OpusFAQ#In_what_ways_is_Opus_optimized_for_the_Internet?\" rel=\"noopener noreferrer nofollow\">PLC<\/a> (Packet Loss Concealment). \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043f\u0440\u043e\u043f\u0430\u0436\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u043e \u043c\u044b \u044f\u0432\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u043c Opus-\u0443 (\u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043f\u0443\u0441\u0442\u043e\u0439 sample \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f) \u0438 \u043e\u043d \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 \u0444\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 sample \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0425\u043e\u0442\u044f \u0431\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0438\u0448\u0438\u043d\u044b. \u0415\u0449\u0451 \u0435\u0441\u0442\u044c DTX (discontinuous transmission), \u0433\u0434\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0438\u0448\u0438\u043d\u044b \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443).<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043b\u044e\u0434\u044c\u043c\u0438. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0430 \u0441\u043e\u0442\u0435\u043d \u043b\u044e\u0434\u0435\u0439 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u043d\u0430 \u0441\u0432\u044f\u0437\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043a \u043f\u0430\u043a\u0435\u0442\u0443 \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u0430.<\/p>\n<pre><code>  8b       24b +-----+-----------+----------------------...-+ | SID |    CTR    |           Opus           | +-----+-----------+----------------------...-+ <\/code><\/pre>\n<p>\u0412 \u0438\u0434\u0435\u0430\u043b\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0431\u044b\u043b \u043b\u0438 \u043f\u0430\u043a\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u0430\u043d, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u0435\u0442\u0441\u044f jitter, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 24-\u0431\u0438\u0442\u0430 \u0441 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0430\u0443\u0434\u0438\u043e sample \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430. \u0421 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c: \u043d\u043e\u043c\u0435\u0440 20\u043c\u0441 sample, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0439 \u043c\u0435\u0440\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (&#171;\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439&#187; \u0441\u0447\u0451\u0442\u0447\u0438\u043a, aCTR). \u041d\u043e \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 sample \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0432 \u0441\u0435\u0442\u044c \u0438\u0437-\u0437\u0430 DTX. \u0411\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0431\u044b\u043b\u0430 \u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0438\u0448\u0438\u043d\u0430 \u0438\u043b\u0438 sample \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0441\u044f \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c.<\/p>\n<pre><code>  8b       24b         24b +-----+-----------+-----------+----------------------...-+ | SID |    CTR    |   aCTR    |           Opus           | +-----+-----------+-----------+----------------------...-+ <\/code><\/pre>\n<h3>\u0417\u0430\u0449\u0438\u0442\u0430 \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>\u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c \u043d\u0430\u0448 \u043f\u0430\u043a\u0435\u0442? \u0412\u0435\u0434\u044c \u043c\u044b \u0436\u0435 \u043d\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043b\u0438? \u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0447\u0451\u0442\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0438\u0444\u0440, \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043e\u043d\u043d\u043e\u0433\u043e. \u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7539\" rel=\"noopener noreferrer nofollow\">ChaCha20<\/a> \u0438 \u0438\u043c\u0435\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442, \u0442\u043e\u0436\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e, AES). \u041f\u0440\u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430) nonce. \u0410 \u043e\u043d\u043e \u0443 \u043d\u0430\u0441 \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f &#8212; \u043d\u0430\u0448 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>\u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043f\u0430\u043a\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d. \u0421\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 ChaCha20 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/cr.yp.to\/mac\/poly1305-20050329.pdf\" rel=\"noopener noreferrer nofollow\">Poly1305<\/a> \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 MAC. \u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043a\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043d\u0430 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435: \u0435\u0433\u043e 128-\u0431\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0430\u043b\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u044b\u0441\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043b\u044e\u0447 Poly1305 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0438\u0437 ChaCha20, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0430 64-\u0431\u0430\u0439\u0442\u0430, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f 64-\u0431\u0430\u0439\u0442\u0430 (\u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a), \u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 32-\u0431\u0430\u0439\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430 Poly1305. \u0414\u0430\u043b\u0435\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 XOR-\u0438\u0442\u0441\u044f \u0441 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0448\u0438\u0444\u0440\u0443\u044f \u0435\u0433\u043e. \u041d\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e 20-40 \u0431\u0430\u0439\u0442 Opus. \u0412\u044b\u0445\u043e\u0434\u0438\u0442, \u0447\u0442\u043e \u0438\u0437 ChaCha20 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u044c 128-\u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c\u0438 20-40 \u0431\u0430\u0439\u0442 Opus. \u0414\u043e\u0440\u043e\u0433\u043e\u0432\u0430\u0442\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u0438\u043f\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/SipHash\" rel=\"noopener noreferrer nofollow\">SipHash<\/a>. \u041e\u043d (SipHash-2-4, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 <\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-376583","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/376583","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=376583"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/376583\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=376583"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=376583"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=376583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}