Telegram์˜ ํ”„๋กœํ† ์ฝœ ๋ฐ ์กฐ์ง์  ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋น„ํŒ. 1๋ถ€, ๊ธฐ์ˆ : ์ฒ˜์Œ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ ์ž‘์„ฑ ๊ฒฝํ—˜ - TL, MT

์ตœ๊ทผ Telegram์ด ์–ผ๋งˆ๋‚˜ ์ข‹์€์ง€, Durov ํ˜•์ œ๊ฐ€ ๋„คํŠธ์›Œํฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ํ›Œ๋ฅญํ•˜๊ณ  ๊ฒฝํ—˜์ด ์žˆ๋Š”์ง€ ๋“ฑ์— ๋Œ€ํ•œ ๊ฒŒ์‹œ๋ฌผ์ด Habrรฉ์— ๋” ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ๊ธฐ์ˆ  ์žฅ์น˜์— ์‹ค์ œ๋กœ ๋ชฐ๋‘ํ•œ ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๊ปํ•ด์•ผ ์ƒ๋‹นํžˆ ๊ฐ„๋‹จํ•œ(๊ทธ๋ฆฌ๊ณ  MTProto์™€ ๋งค์šฐ ๋‹ค๋ฅธ) JSON ๊ธฐ๋ฐ˜ ๋ด‡ API๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋ƒฅ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. ๋ฏฟ์Œ์œผ๋กœ ๋ฉ”์‹ ์ €๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ชจ๋“  ์นญ์ฐฌ๊ณผ PR. ๊ฑฐ์˜ XNUMX๋…„ ๋ฐ˜ ์ „์— NPO Echelon Vasily์˜ ๋™๋ฃŒ(๋ถˆํ–‰ํžˆ๋„ Habrรฉ์— ๋Œ€ํ•œ ๊ทธ์˜ ๊ณ„์ •์€ ์ดˆ์•ˆ๊ณผ ํ•จ๊ป˜ ์‚ญ์ œ๋จ)๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ Perl๋กœ ์ž์‹ ์˜ Telegram ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ๋‚˜์ค‘์— ์ด ๋ผ์ธ์˜ ์ž‘์„ฑ์ž๊ฐ€ ํ•ฉ๋ฅ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™œ Perl์ž…๋‹ˆ๊นŒ? ์ผ๋ถ€๋Š” ์ฆ‰์‹œ ๋ฌป์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๊ทธ๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค ์ด๊ฒƒ์ด ์š”์ ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์–ธ์–ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„์„ฑ๋œ ๋„์„œ๊ด€, ๋”ฐ๋ผ์„œ ์ €์ž๋Š” ๋๊นŒ์ง€ ๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค ์ฒ˜์Œ๋ถ€ํ„ฐ. ๋˜ํ•œ ์•”ํ˜ธํ™”๋Š” ์‹ ๋ขฐํ•˜์ง€๋งŒ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ์— ์ค‘์ ์„ ๋‘” ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ธ‰์—…์ฒด์˜ ๊ธฐ์„ฑํ’ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๊ณ  ๋งน๋ชฉ์ ์œผ๋กœ ๋ฏฟ์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃฐ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค). ํ˜„์žฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” "์ค‘๊ฐ„" ์ˆ˜์ค€์—์„œ ๋งค์šฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋“  API ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Œ).

๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒŒ์‹œ๋ฌผ ์‹œ๋ฆฌ์ฆˆ์—๋Š” ์•”ํ˜ธํ™”์™€ ์ˆ˜ํ•™์ด ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋งŽ์€ ๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ๊ฑด์ถ•ํ•™์  ๋ชฉ๋ฐœ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์–ด๋–ค ์–ธ์–ด๋กœ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด. ์ฆ‰, ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋‹ซํ˜€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ผ์ด ๊ทธ๋ž˜์„œ) ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ์ „๊ณผ ๊ฐ™์ด RFC์™€ ๊ฐ™์€ ํ‘œ์ค€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ (Telegram Desktop, ๋ชจ๋ฐ”์ผ ), ์‹ฌ์ง€์–ด ๋น„๊ณต์‹ Telethon?

๋ชฉ์ฐจ :

๋ฌธ์„œ ... ๊ฑฐ๊ธฐ์— ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ์‹ค์ธ๊ฐ€์š”?..

์ด ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ์˜ ์ผ๋ถ€๋Š” ์ง€๋‚œ ์—ฌ๋ฆ„์— ์ˆ˜์ง‘๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ https://core.telegram.org ๋ฌธ์„œ๋Š” Layer 23, ์ฆ‰ 2014๋…„ ์–ด๋”˜๊ฐ€์— ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค(๊ทธ ๋‹น์‹œ์—๋Š” ์•„์ง ์ฑ„๋„์กฐ์ฐจ ์—†์—ˆ์Šต๋‹ˆ๊นŒ?). ๋ฌผ๋ก  ์ด๋ก ์ƒ์œผ๋กœ๋Š” 2014๋…„ ๋‹น์‹œ์˜ ๊ธฐ๋Šฅ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ์ƒํƒœ์—์„œ๋„ ๋ฌธ์„œ๋Š” ์ฒซ์งธ๋กœ ๋ถˆ์™„์ „ํ–ˆ๊ณ  ๋‘˜์งธ๋กœ ๋ชจ์ˆœ๋˜๋Š” ๋ถ€๋ถ„์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋‹ฌ์—ฌ ์ „์ธ 2019๋…„ XNUMX์›”, ์‹ค์ˆ˜๋กœ ์ด ์‚ฌ์ดํŠธ์—๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด Layer 105์— ๋Œ€ํ•œ ๋ฌธ์„œ์˜ ๋Œ€๊ทœ๋ชจ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด์ œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ์ฝ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฉ”๋ชจ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋งŽ์€ ๊ธฐ์‚ฌ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ๋งŽ์€ ๊ธฐ์‚ฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์•„๋ž˜์˜ ๋น„ํŒ์„ ์ฝ์„ ๋•Œ ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ ์ค‘ ์ผ๋ถ€๋Š” ๋” ์ด์ƒ ๊ด€๋ จ์ด ์—†์ง€๋งŒ ์ผ๋ถ€๋Š” ์—ฌ์ „ํžˆ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ ์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ํ˜„๋Œ€ ์‚ฌํšŒ์—์„œ 5๋…„์€ ๋‹จ์ง€ ๋งŽ์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋Œ€๋‹จํžˆ ๋งŽ์€. ๊ทธ ์ดํ›„๋กœ(ํŠนํžˆ ๊ทธ ์ดํ›„๋กœ ํ๊ธฐ ๋ฐ ๋ถ€ํ™œํ•œ ์ง€์˜ค์ฑ—์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) ์ฒด๊ณ„์˜ API ๋ฉ”์„œ๋“œ ์ˆ˜๊ฐ€ XNUMX๊ฐœ์—์„œ XNUMX๊ฐœ ์ด์ƒ์œผ๋กœ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ Š์€ ์ž‘๊ฐ€๋กœ์„œ ์–ด๋””์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์„ฑํ’ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์šฉ ํ…”๋ ˆํ†ค ๋˜๋Š” PHP์šฉ ๋งค๋“ค๋ฆฐ, ์–ด์จŒ๋“  ๋จผ์ € ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก - ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ api_id ะธ api_hash (VKontakte API๋กœ ์ž‘์—…ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ฆ‰์‹œ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค) ์„œ๋ฒ„๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ ~ํ•ด์•ผ ํ•ด. ๋ฒ•์ ์ธ ์ด์œ ๋กœ ์ธํ•ด ๋„์„œ๊ด€ ์ €์ž๊ฐ€ ์ถœํŒํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ๋Š” ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ ๋” ์ž์„ธํžˆ ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์ œํ•œ์ ์ด์ง€๋งŒ ํ…Œ์ŠคํŠธ ๊ฐ’์— ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด์ œ ๋ฒˆํ˜ธ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค์ง ํ•˜๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋ฏ€๋กœ ์„œ๋‘๋ฅด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด์ œ ๊ธฐ์ˆ ์ ์ธ ๊ด€์ ์—์„œ ์šฐ๋ฆฌ๋Š” ๋“ฑ๋ก ํ›„ ๋ฌธ์„œ, ํ”„๋กœํ† ์ฝœ ๋“ฑ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ Telegram์˜ ์•Œ๋ฆผ์„ ๋ฐ›์•„์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋„ํฌ๊ฐ€์žˆ๋Š” ์‚ฌ์ดํŠธ๋Š” ๋‹จ์ˆœํžˆ "์ ์ˆ˜"๊ฐ€ ์ง€์ •๋˜์—ˆ๊ณ  ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•œ ์‚ฌ๋žŒ๋“ค๊ณผ ํŠน๋ณ„ํžˆ ๊ณ„์† ์ž‘์—…ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋‹ˆ์š”, ๊ทธ๋Ÿฐ ๊ฒƒ์€ ๊ด€์ฐฐ๋˜์ง€ ์•Š์•˜๊ณ  ์ •๋ณด๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ˆ˜์‹ ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์€ ์‹ค์ œ๋กœ ์•„์ง ๋ฉ€์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ https://core.telegram.org/ ์‹œ์ž‘ํ•˜๊ธฐ์—์„œ ๋จผ์ € ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋จผ์ € ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MTProto ํ”„๋กœํ† ์ฝœ - ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์ด ๋ฏฟ๋Š”๋‹ค๋ฉด OSI ๋ชจ๋ธ์— ๋”ฐ๋ฅธ ๋ ˆ์ด์•„์›ƒ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์„ค๋ช… ํŽ˜์ด์ง€ ๋์—์„œ ์™„์ „ํžˆ ํ—›๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ MTProto ์ด์ „๊ณผ ์ดํ›„์— ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ์ˆ˜์ค€์—์„œ (OS ์ปค๋„์—์„œ ์ž‘์—…ํ•˜๋Š” ์™ธ๊ตญ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ ˆ์ด์–ด ์œ„๋ฐ˜์ด๋ผ๊ณ  ๋งํ•จ) ํฌ๊ณ  ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ๋”์ฐํ•œ ์ฃผ์ œ๊ฐ€ ๋ฐฉํ•ด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

์ด์ง„ ์ง๋ ฌํ™”: TL(์œ ํ˜• ์–ธ์–ด) ๋ฐ ๊ทธ ์ฒด๊ณ„, ๊ณ„์ธต ๋ฐ ๊ธฐํƒ€ ๋งŽ์€ ๋ฌด์„œ์šด ๋‹จ์–ด

์‚ฌ์‹ค ์ด ์ฃผ์ œ๊ฐ€ ํ…”๋ ˆ๊ทธ๋žจ ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒํ—ค์ณ ๋ณด๋ฉด ๋”์ฐํ•œ ๋‹จ์–ด๊ฐ€ ๋งŽ์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ณ„ํš. ์ด ๋‹จ์–ด๊ฐ€ ์ƒ๊ฐ๋‚œ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ๋งํ•ด๋ณด์„ธ์š”. JSON ์Šคํ‚ค๋งˆ๋‹น์‹ ์€ ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ์ „์†ก ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด๊ฒƒ์€ ์œ ์‚ฌ์„ฑ์ด ๋๋‚˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์—์„œ MTProto ํ”„๋กœํ† ์ฝœ, ๋˜๋Š” ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์˜ ์†Œ์Šค ํŠธ๋ฆฌ์—์„œ ์ผ๋ถ€ ๊ตฌ์„ฑํ‘œ๋ฅผ ์—ด๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

int ? = Int;
long ? = Long;
double ? = Double;
string ? = String;

vector#1cb5c415 {t:Type} # [ t ] = Vector t;

rpc_error#2144ca19 error_code:int error_message:string = RpcError;

rpc_answer_unknown#5e2ad36e = RpcDropAnswer;
rpc_answer_dropped_running#cd78e586 = RpcDropAnswer;
rpc_answer_dropped#a43ad8b7 msg_id:long seq_no:int bytes:int = RpcDropAnswer;

msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;

---functions---

set_client_DH_params#f5045f1f nonce:int128 server_nonce:int128 encrypted_data:bytes = Set_client_DH_params_answer;

ping#7abe77ec ping_id:long = Pong;
ping_delay_disconnect#f3427b8c ping_id:long disconnect_delay:int = Pong;

invokeAfterMsg#cb9f372d msg_id:long query:!X = X;
invokeAfterMsgs#3dc4b4f0 msg_ids:Vector<long> query:!X = X;

account.updateProfile#78515775 flags:# first_name:flags.0?string last_name:flags.1?string about:flags.2?string = User;
account.sendChangePhoneCode#8e57deb flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool = auth.SentCode;

์ด๊ฒƒ์„ ์ฒ˜์Œ ๋ณด๋Š” ์‚ฌ๋žŒ์€ ์“ฐ์—ฌ์ง„ ๋‚ด์šฉ์˜ ์ผ๋ถ€๋งŒ ์ง๊ด€์ ์œผ๋กœ ์ธ์‹ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ํ˜•์€ ์ฝœ๋ก ์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค ... ์•„๋งˆ๋„. ์—ฌ๊ธฐ์„œ ๊บพ์‡ ๊ด„ํ˜ธ ์•ˆ์—๋Š” ์•„๋งˆ๋„ C++์—์„œ์™€ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์‚ฌ์‹ค, ๋ณ„๋กœ). ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ธฐํ˜ธ๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋ฌผ์Œํ‘œ, ๋Š๋‚Œํ‘œ, ๋ฐฑ๋ถ„์œจ, ๊ฒฉ์ž(๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ช…ํžˆ ๊ทธ๊ฒƒ๋“ค์€ ๋‹ค๋ฅธ ์žฅ์†Œ์—์„œ ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค), ์–ด๋”˜๊ฐ€์— ์กด์žฌํ•˜์ง€๋งŒ ์–ด๋”˜๊ฐ€์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” XNUMX์ง„์ˆ˜ - ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์—ฌ๊ธฐ์„œ ์–ป๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ (์„œ๋ฒ„์—์„œ ๊ฑฐ๋ถ€๋˜์ง€ ์•Š์Œ) ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ? ์„ค๋ช…์„œ๋ฅผ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ, ๊ทผ์ฒ˜์— JSON ๋ฒ„์ „์˜ ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์ง€๋งŒ ๋” ๋ช…ํ™•ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.).

ํŽ˜์ด์ง€ ์—ด๊ธฐ ์ด์ง„ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ๊ทธ๋ฆฌ๊ณ  4ํ•™๋…„์˜ ๋งˆํƒ„๊ณผ ๋น„์Šทํ•œ ๋ฒ„์„ฏ๊ณผ ์ด์‚ฐ ์ˆ˜ํ•™์˜ ๋งˆ๋ฒ•์˜ ์„ธ๊ณ„๋กœ ๋›ฐ์–ด๋“œ์„ธ์š”. ์•ŒํŒŒ๋ฒณ, ์œ ํ˜•, ๊ฐ’, ๊ฒฐํ•ฉ์ž, ๊ธฐ๋Šฅ์  ๊ฒฐํ•ฉ์ž, ์ผ๋ฐ˜ ํ˜•์‹, ๋ณตํ•ฉ ์œ ํ˜•, ๋‹คํ˜•์„ฑ ์œ ํ˜•... ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ฒซ ํŽ˜์ด์ง€์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ์ด ๋‹น์‹ ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค TL ์–ธ์–ด, ์ด๋ฏธ ์‚ฌ์†Œํ•œ ์š”์ฒญ ๋ฐ ์‘๋‹ต์˜ ์˜ˆ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ๋” ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ „ํ˜€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋Ÿฌ์‹œ์•„์–ด์—์„œ ์˜์–ด๋กœ ๋ฒˆ์—ญ๋œ ์ˆ˜ํ•™์„ XNUMX๊ฐœ์˜ ์ค‘์ฒฉ๋œ ํŽ˜์ด์ง€!

๊ธฐ๋Šฅ์  ์–ธ์–ด์™€ ์ž๋™ ์œ ํ˜• ์ถ”๋ก ์— ์ต์ˆ™ํ•œ ๋…์ž๋Š” ๋ฌผ๋ก ์ด ์–ธ์–ด ์„ค๋ช…์—์„œ ํ›จ์”ฌ ๋” ์นœ์ˆ™ํ•œ ์˜ˆ๋ฅผ ๋ณด์•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์ด ์›์น™์ ์œผ๋กœ ๋‚˜์˜์ง€ ์•Š๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ฐ˜๋Œ€ ์˜๊ฒฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ, ๊ณจ ์ข‹๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ ์•„์•„ ๋‹ฌ์„ฑ๋˜์ง€ ์•Š์€
  • ๋Ÿฌ์‹œ์•„ ๋Œ€ํ•™์˜ ๊ต์œก์€ IT ์ „๋ฌธ ๋ถ„์•ผ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ•ด๋‹น ๊ณผ์ •์„ ์ฝ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ฒ˜๋Ÿผ ์‹ค์ œ๋กœ๋Š” ํ•„์š” ์—†์Œ, ์„ค๋ช…๋œ TL์˜ ์ œํ•œ๋œ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๋ ˆ์˜ค๋„ˆ๋“œ ์ฑ„๋„์—์„œ #perl FreeNode IRC ๋„คํŠธ์›Œํฌ์—์„œ Telegram์—์„œ Matrix๋กœ ๊ฒŒ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค(๋”ฐ์˜ดํ‘œ์˜ ๋ฒˆ์—ญ์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ •ํ™•ํ•˜์ง€ ์•Š์Œ).

์ฒ˜์Œ์œผ๋กœ ์œ ํ˜• ์ด๋ก ์„ ์ ‘ํ•œ ์‚ฌ๋žŒ์ด ์‹ ์ด ๋‚˜์„œ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ๋†€๊ธฐ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ์œ ํ˜•(int, long ๋“ฑ)์˜ ํ•„์š”์„ฑ์ด ์งˆ๋ฌธ์„ ์ œ๊ธฐํ•˜์ง€ ์•Š๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๊ฒฐ๊ตญ์—๋Š” ์ˆ˜๋™์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ. ์ฆ‰, ์‚ฌ์‹ค ์ •๋ ฌ, ๊ฒฐ๊ณผ๋ฅผ ์ ์ ˆํ•œ ์ด๋ฆ„์œผ๋กœ ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ.

ํ•˜์ง€๋งŒ ์ „์—

๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฝ์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ TL ๊ตฌ๋ฌธ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…

constructor = Type;
myVec ids:Vector<long> = Type;

fixed#abcdef34 id:int = Type2;

fixedVec set:Vector<Type2> = FixedVec;

constructorOne#crc32 field1:int = PolymorType;
constructorTwo#2crc32 field_a:long field_b:Type3 field_c:int = PolymorType;
constructorThree#deadcrc bit_flags_of_what_really_present:# optional_field4:bit_flags_of_what_really_present.1?Type = PolymorType;

an_id#12abcd34 id:int = Type3;
a_null#6789cdef = Type3;

ํ•ญ์ƒ ์ •์˜ ์‹œ์ž‘ ๋””์ž์ด๋„ˆ, ๊ทธ ํ›„ ์„ ํƒ์ ์œผ๋กœ (์‹ค์ œ๋กœ๋Š” ํ•ญ์ƒ) ๊ธฐํ˜ธ๋ฅผ ํ†ตํ•ด # ํ•ด์•ผ CRC32 ์ฃผ์–ด์ง„ ์œ ํ˜•์˜ ์ •๊ทœํ™”๋œ ์„ค๋ช… ๋ฌธ์ž์—ด์—์„œ. ๋‹ค์Œ์€ ํ•„๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ์œ ํ˜•์ด ๋น„์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ์ฃผ์–ด์ง„ ์ƒ์„ฑ์ž, ์ฆ‰ ํ•˜์œ„ ์œ ํ˜•์ด ์†ํ•œ ์œ ํ˜•์˜ ์ด๋ฆ„ ์ธ ๋“ฑํ˜ธ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. ๋“ฑํ˜ธ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹คํ˜•์„ฑ - ์ฆ‰, ์—ฌ๋Ÿฌ ํŠน์ • ์œ ํ˜•์— ํ•ด๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค„ ๋’ค์— ์ •์˜๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ ---functions---, ๊ทธ๋Ÿฌ๋ฉด ๊ตฌ๋ฌธ์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์ง€๋งŒ ์˜๋ฏธ๋Š” ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž๋Š” RPC ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ด ๋˜๊ณ  ํ•„๋“œ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค(์ฆ‰, ์•„๋ž˜ ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๊ตฌ์กฐ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์ฃผ์–ด์ง„ ์˜๋ฏธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค), "๋‹คํ˜•์„ฑ ์œ ํ˜• '์€ ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๊ทธ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋‹คํ˜•์„ฑ์œผ๋กœ ๋‚จ์•„์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค - ์„น์…˜์—์„œ ์ •์˜๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ---types---, ์ด ์ƒ์„ฑ์ž๋Š” ๊ณ ๋ ค๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์ˆ˜๋กœ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ์œ ํ˜• ์˜ค๋ฒ„๋กœ๋“œ, ์ฆ‰ ์–ด๋–ค ์ด์œ ๋กœ C++์—์„œ์™€ ๊ฐ™์ด ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ์„œ๋ช…์ด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ TL์—์„œ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

OOP๊ฐ€ ์•„๋‹Œ๋ฐ ์™œ "constructor"์™€ "polymorphic"์ธ๊ฐ€? ๊ธ€์Ž„, ์‚ฌ์‹ค ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ OOP์˜ ๊ด€์ ์—์„œ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”์ƒ ํด๋ž˜์Šค๋กœ์„œ์˜ ๋‹คํ˜•์„ฑ ์œ ํ˜•์ด๋ฉฐ ์ƒ์„ฑ์ž๋Š” ์ง๊ณ„ ์ž์† ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. final ์—ฌ๋Ÿฌ ์–ธ์–ด์˜ ์šฉ์–ด๋กœ. ๋ฌผ๋ก  ์—ฌ๊ธฐ์„œ๋„ ์‚ฌ์‹ค ์œ ์‚ฌ์„ฑ OO ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‹ค์ œ ์˜ค๋ฒ„๋กœ๋“œ๋œ ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์•„๋ž˜์˜ ํ•จ์ˆ˜ ๋ฐ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋จธ๋ฆฌ์— ํ˜ผ๋ž€์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ์ƒ์„ฑ์ž๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’ ๊ฑด์„ค ์ค‘ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์„ ์ฝ์„ ๋•Œ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.

์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ํ•ญ์ƒ 4๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋Š” ๋””์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” ๊ฐ’์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 0xcrc32 - ๋‹ค์Œ์— ์ผ์–ด๋‚  ์ผ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. field1 ์œ ํ˜•์œผ๋กœ int, ์ฆ‰. ์œ ํ˜•์ด ์žˆ๋Š” ์ด ์œ„์— ์žˆ๋Š” ํ•„๋“œ์—์„œ ์ •ํ™•ํžˆ 4๋ฐ”์ดํŠธ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. PolymorType ์ฝ๋‹ค. ๋ณธ๋‹ค 0x2crc32 ๋‘ ๊ฐœ์˜ ํ•„๋“œ๊ฐ€ ๋” ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. long, ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” 8 ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์—ญ์ง๋ ฌํ™”๋˜๋Š” ๋ณตํ•ฉ ํ˜•์‹์„ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Type3 ๋‘ ์ƒ์„ฑ์ž๊ฐ€ ๊ฐ๊ฐ ์ถ”๊ฐ€๋กœ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถฉ์กฑํ•ด์•ผ ํ•˜๋Š” ์ฆ‰์‹œ ์Šคํ‚ค๋งˆ์—์„œ ์„ ์–ธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 0x12abcd34, ๊ทธ ํ›„์— ๋‹ค๋ฅธ 4๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. int๋˜๋Š” 0x6789cdef, ๊ทธ ํ›„์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ - ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ทธ ํ›„์— ์šฐ๋ฆฌ๋Š” 4 ๋ฐ”์ดํŠธ ์ฝ๊ธฐ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. int ์—ฌ๋ฐฑ field_c ะฒ constructorTwo ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์— ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ์ฝ๊ธฐ๋ฅผ ๋งˆ์นฉ๋‹ˆ๋‹ค PolymorType.

๋งˆ์ง€๋ง‰์œผ๋กœ ์žกํžˆ๋ฉด 0xdeadcrc ์— constructorThree, ๊ทธ๋Ÿฌ๋ฉด ์ƒํ™ฉ์ด ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ„์•ผ bit_flags_of_what_really_present ์œ ํ˜•์œผ๋กœ # - ์‚ฌ์‹ค ์ด๊ฒƒ์€ ์œ ํ˜•์˜ ๋ณ„์นญ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. nat"์ž์—ฐ์ˆ˜"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‹ค์ œ๋กœ unsigned int๋Š” ์‹ค์ œ ํšŒ๋กœ์—์„œ unsigned ์ˆซ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋Š” ์œ ์ผํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ์€ ๋ฌผ์Œํ‘œ๊ฐ€ ์žˆ๋Š” ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ด๊ฒƒ์ด ํ•„๋“œ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋น„ํŠธ๊ฐ€ ์ฐธ์กฐ๋œ ํ•„๋“œ์— ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์™€์ด์–ด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(๋Œ€๋žต ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์Œ). ๋”ฐ๋ผ์„œ ์ด ๋น„ํŠธ๊ฐ€ ์ผœ์ ธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„๋“œ๋ฅผ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Type, ์ด ์˜ˆ์—์„œ๋Š” 2๊ฐœ์˜ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋น„์–ด ์žˆ๊ณ (์‹๋ณ„์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋จ) ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ids ์œ ํ˜•์œผ๋กœ ids:Vector<long>.

ํ…œํ”Œ๋ฆฟ๊ณผ ์ œ๋„ค๋ฆญ์ด ๋ชจ๋‘ ์ข‹๊ฑฐ๋‚˜ Java๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ. ๊ฑฐ์˜. ์ด๊ฒƒ ๋‹จ ํ•˜๋‚˜์˜ ์‹ค์ œ ํšŒ๋กœ์—์„œ ๊บพ์‡  ๊ด„ํ˜ธ์˜ ๊ฒฝ์šฐ์ด๋ฉฐ ๋ฒกํ„ฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์—์„œ ์ด๋Š” ๋ฒกํ„ฐ ์œ ํ˜• ์ž์ฒด์— ๋Œ€ํ•ด 4 CRC32 ๋ฐ”์ดํŠธ๊ฐ€ ๋˜๋ฉฐ ํ•ญ์ƒ ๋™์ผํ•˜๋ฉฐ 4๋ฐ”์ดํŠธ๋Š” ๋ฐฐ์—ด ์š”์†Œ์˜ ์ˆ˜, ๊ทธ ๋‹ค์Œ์—๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ ์ž์ฒด์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ง๋ ฌํ™”๊ฐ€ ํ•ญ์ƒ 4๋ฐ”์ดํŠธ ๋‹จ์–ด๋กœ ๋ฐœ์ƒํ•˜๊ณ  ๋ชจ๋“  ์œ ํ˜•์ด ๊ทธ ๋ฐฐ์ˆ˜๋ผ๋Š” ์‚ฌ์‹ค์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ๋‚ด์žฅ ์œ ํ˜•๋„ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. bytes ะธ string ๊ธธ์ด๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๊ณ  ์ด ์ •๋ ฌ์„ 4๋กœ ์ •๋ ฌํ•˜๋ฉด ์ •์ƒ์ ์ด๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ ํšจ์œจ์ ์œผ๋กœ ๋“ค๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? TL์€ ํšจ์œจ์ ์ธ ์ด์ง„ ์ง๋ ฌํ™”๋ผ๊ณ  ์ฃผ์žฅํ•˜์ง€๋งŒ ๋ถ€์šธ ๊ฐ’๊ณผ ๋‹จ์ผ ๋ฌธ์ž ๋ฌธ์ž์—ด์„ ์ตœ๋Œ€ 4๋ฐ”์ดํŠธ๊นŒ์ง€ ํ™•์žฅํ•˜๋ฉด JSON์ด ์—ฌ์ „ํžˆ ํ›จ์”ฌ ๋‘๊บผ์›Œ์งˆ๊นŒ์š”? ๋ณด์„ธ์š”, ๋ถˆํ•„์š”ํ•œ ํ•„๋“œ๋„ ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ๋กœ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด ๊ฐ„๋žตํ•œ ์„ค๋ช…์ด ์•„๋‹ˆ๋ผ ์ „์ฒด ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ๊ตฌํ˜„์— ๋Œ€ํ•ด ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์•„๋‹™๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ƒ์„ฑ์ž์˜ CRC32๋Š” ์ •๊ทœํ™”๋œ ์Šคํ‚ค๋งˆ ํ…์ŠคํŠธ ์„ค๋ช… ๋ฌธ์ž์—ด(์—ฌ๋ถ„์˜ ๊ณต๋ฐฑ ์ œ๊ฑฐ ๋“ฑ)์— ์˜ํ•ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์œ ํ˜• ์„ค๋ช… ๋ฌธ์ž์—ด์ด ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ CRC32 ๋ฐ ์ง๋ ฌํ™”๊ฐ€ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ „ ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒˆ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ•„๋“œ๋ฅผ ๋ฐ›์•˜์ง€๋งŒ ๋‹ค์Œ์— ๋ฌด์—‡์„ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅธ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ์š”? ..

๋‘˜์งธ, ๊ธฐ์–ตํ•˜์ž CRC32์—ฌ๊ธฐ์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜ ์–ด๋–ค ์œ ํ˜•์ด (๋น„)์ง๋ ฌํ™”๋˜๊ณ  ์žˆ๋Š”์ง€ ๊ณ ์œ ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ถฉ๋Œ ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”, ํ™•๋ฅ ์€ 232๋ถ„์˜ 32์ด ์•„๋‹ˆ๋ผ ํ›จ์”ฌ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. CRC32๊ฐ€ ํ†ต์‹  ์ฑ„๋„์˜ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€(๋ฐ ์ˆ˜์ •)ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ๊ฐœ์„ ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ํ•ด๋ฅผ ๋ผ์น˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ˆ„๊ฐ€ ๊ธฐ์–ตํ–ˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋…€๋Š” ๋ฐ”์ดํŠธ์˜ ์ˆœ์—ด์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ์ค„์—์„œ CRC4๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ์ค„์—์„œ ์ฒ˜์Œ 4๋ฐ”์ดํŠธ๋ฅผ ๋‹ค์Œ XNUMX๋ฐ”์ดํŠธ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ๋ผํ‹ด ์•ŒํŒŒ๋ฒณ์˜ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด(๋ฐ ์•ฝ๊ฐ„์˜ ๊ตฌ๋‘์ )์ด ์žˆ๊ณ  ์ด๋Ÿฌํ•œ ์ด๋ฆ„์ด ํŠน๋ณ„ํžˆ ์ž„์˜์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ˆœ์—ด์˜ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ๋ˆ„๊ฐ€ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์ •๋ง๋กœ CRC32? ์ดˆ๊ธฐ ์†Œ์Šค ์ค‘ ํ•˜๋‚˜(Waltman ์ด์ „)์—๋Š” ๊ฐ ๋ฌธ์ž์— ์ˆซ์ž 239๋ฅผ ๊ณฑํ•˜๋Š” ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ๋ž‘ํ•˜๋Š” ํ•˜ํ•˜!

๋งˆ์ง€๋ง‰์œผ๋กœ ํ•„๋“œ ์œ ํ˜•์ด ์žˆ๋Š” ์ƒ์„ฑ์ž๊ฐ€ Vector<int> ะธ Vector<PolymorType> ๋‹ค๋ฅธ CRC32๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜จ๋ผ์ธ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์ด๋ก ์ƒ์œผ๋กœ๋Š” ์œ ํ˜•์˜ ์ผ๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๊นŒ?? XNUMX๊ฐœ์˜ ์ˆซ์ž ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Vector<int> ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๊ณ  ๊ธธ์ด์™€ ๋˜ ๋‹ค๋ฅธ 40000๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์ด๊ฒƒ์ด Vector<Type2>, ๋‹จ ํ•˜๋‚˜์˜ ํ•„๋“œ๋กœ ๊ตฌ์„ฑ int ์œ ํ˜•์—์„œ ์œ ์ผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 10000xabcdef0๋ฅผ 34๋ฒˆ ๋ฐ˜๋ณตํ•œ ๋‹ค์Œ 4๋ฐ”์ดํŠธ๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? int๋˜๋Š” ์–ธ์–ด๊ฐ€ ์ƒ์„ฑ์ž์—์„œ ์ด๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. fixedVec 80000๋ฐ”์ดํŠธ ๋Œ€์‹  40000๋ฐ”์ดํŠธ๋งŒ ๋‹ค์‹œ ์ „์†กํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์œ ํœด ์ด๋ก ์  ์งˆ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ๊ฐ ID, ์ด๋ฆ„, ์„ฑ์„ ๊ฐ€์ง„ ๊ทธ๋ฃน ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ์–ป๋Š”๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. ๋ชจ๋ฐ”์ผ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ ์–‘์˜ ์ฐจ์ด๋Š” ์ƒ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ๊ด‘๊ณ ๋˜๋Š” ๊ฒƒ์€ Telegram ์ง๋ ฌํ™”์˜ ํšจ์œจ์„ฑ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ...

์ถ”๋ก ํ•  ์ˆ˜ ์—†๋Š” ๋ฒกํ„ฐ

์ฝค๋น„๋„ค์ดํ„ฐ์˜ ์„ค๋ช… ํŽ˜์ด์ง€๋ฅผ ํ›‘์–ด๋ณด๋ฉด ๋ฒกํ„ฐ(์‹ฌ์ง€์–ด ํ–‰๋ ฌ๋„)๊ฐ€ ์ •์‹์œผ๋กœ ํŠœํ”Œ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์‹œํŠธ๋ฅผ ์ถ”๋ก ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ๊ตญ ๊ทธ๋“ค์€ ๋‘๋“ค๊ฒจ ๋งž๊ณ  ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฒกํ„ฐ์˜ ์ •์˜๋Š” ๋‹จ์ˆœํžˆ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ์—ญ์‹œ ์œ ํ˜•์— ๊ตฌ์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด์•ผ? ์–ธ์–ด๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํŠนํžˆ ๊ธฐ๋Šฅ์ ์ธ ๊ฒฝ์šฐ ๊ตฌ์กฐ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ฒŒ์œผ๋ฅธ ํ‰๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์–ธ์–ด๋กœ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ๊ทธ๋Ÿฌ๋‚˜ ํšจ์œจ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ถ€, ์ฆ‰. ๋‘ ์š”์†Œ์˜ ๊ตฌ์กฐ - ์ฒซ ๋ฒˆ์งธ๋Š” ๋ฐ์ดํ„ฐ ์š”์†Œ์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ๋™์ผํ•œ ๊ตฌ์กฐ ์ž์ฒด์ด๊ฑฐ๋‚˜ ๊ผฌ๋ฆฌ๋ฅผ ์œ„ํ•œ ๋นˆ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค(ํŒฉ (cons) ๋ฆฌ์Šคํ”„์—์„œ). ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ์š”๊ตฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ๊ฐ ์š”์†Œ๋Š” ํ•ด๋‹น ์œ ํ˜•์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋กœ 4๋ฐ”์ดํŠธ(TL์˜ ๊ฒฝ์šฐ CRC32)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์„ ์„ค๋ช…ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ณ ์ • ํฌ๊ธฐ, ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „์— ๊ธธ์ด๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ TL์€ ๋ฒกํ„ฐ ์ถœ๋ ฅ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ธก๋ฉด์— ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ๋ฌธ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

์ง๋ ฌํ™”๋Š” ํ•ญ์ƒ ์œ ํ˜• t ๋ณ€์ˆ˜์˜ ํŠน์ • ๊ฐ’์— ์ข…์†๋˜์ง€ ์•Š๋Š” ๋™์ผํ•œ ์ƒ์„ฑ์ž "๋ฒกํ„ฐ"(const 0x1cb5c415 = crc32("๋ฒกํ„ฐ t:Type # [ t ] = ๋ฒกํ„ฐ t")๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜ t์˜ ๊ฐ’์€ ๊ฒฐ๊ณผ ์œ ํ˜•(์—ญ์ง๋ ฌํ™” ์ด์ „์— ํ•ญ์ƒ ์•Œ๋ ค์ง)์—์„œ ํŒŒ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌํ™”์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž์„ธํžˆ ์‚ดํŽด๋ณด์„ธ์š”. vector {t:Type} # [ t ] = Vector t - ํ•˜์ง€๋งŒ ์•„๋ฌด๋ฐ๋„ ์ •์˜ ์ž์ฒด๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ๋ฒกํ„ฐ์˜ ๊ธธ์ด์™€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์–ด๋””์—์„œ๋‚˜ ๋”ฐ๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ๋ช…์‹ฌํ•˜๊ณ  ์†์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ์ฃผ์–ด์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋ฌธ์„œ์— ์œ ํ˜•์ด ๊ฐ€์งœ๋ผ๊ณ  ์†”์งํ•˜๊ฒŒ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒกํ„ฐ t ๋‹คํ˜•์„ฑ ์˜์‚ฌ ์œ ํ˜•์€ ๊ฐ’์ด ๋ฐ•์Šคํ˜•์ด๋“  ๋ฒ ์–ดํ˜•์ด๋“  ๋ชจ๋“  ์œ ํ˜• t์˜ ๊ฐ’ ์‹œํ€€์Šค์ธ "์œ ํ˜•"์ž…๋‹ˆ๋‹ค.

โ€ฆ ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์— ์ง‘์ค‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ˆ˜ํ•™์˜ ๋Š˜์–ด๋‚จ์„ ํ—ค์ณ๋‚˜๊ฐ€๋Š” ๋ฐ ์ง€์ณค์„ ๋•Œ(์•„๋งˆ๋„ ๋Œ€ํ•™ ๊ณผ์ •์—์„œ ๋‹น์‹ ์—๊ฒŒ ์•Œ๋ ค์กŒ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค) ์ ์ˆ˜๋ฅผ ๋งค๊ธฐ๊ณ  ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ง€์ผœ๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์„ ๋•Œ, ๊ทธ ์ธ์ƒ์€ ๋‹น์‹ ์˜ ๋จธ๋ฆฌ ์†์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. , ๋ถ„๋ช…ํžˆ Cool People(์ˆ˜ํ•™์ž XNUMX๋ช… -ACM ์šฐ์Šน์ž), ๊ทธ๋ฆฌ๊ณ  ์•„๋ฌด๋‚˜ ์•„๋‹™๋‹ˆ๋‹ค. ๊ณผ์‹œํ•˜๋Š” ๋ชฉํ‘œ๊ฐ€ ๋‹ฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ˆซ์ž์— ๋Œ€ํ•ด. ์ƒ๊ธฐํ•˜๋‹ค # ๋™์˜์–ด์ž…๋‹ˆ๋‹ค nat, ์ž์—ฐ์ˆ˜:

์œ ํ˜• ํ‘œํ˜„์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค(typeexpr) ๋ฐ ์ˆซ์ž ํ‘œํ˜„์‹(nat-expr). ๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

type-expr ::= expr
nat-expr ::= expr

๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ๋ฒ•์—์„œ๋Š” ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ์ด ์ฐจ์ด์ ์„ ๋‹ค์‹œ ๊ธฐ์–ตํ•˜๊ณ  ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํ…œํ”Œ๋ฆฟ ์œ ํ˜•(vector<int>, vector<User>) ๊ณตํ†ต ์‹๋ณ„์ž(#1cb5c415), ์ฆ‰. ํ˜ธ์ถœ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธ๋œ ๊ฒฝ์šฐ

users.getUsers#d91a548 id:Vector<InputUser> = Vector<User>;

๊ทธ๋Ÿฌ๋ฉด ๋‹จ์ˆœํ•œ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž์˜ ๋ฒกํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ์ •ํ™•ํ•˜๊ฒŒ, ํ• ๊นŒ์š” ๋Œ€๊ธฐ - ์‹ค์ œ ์ฝ”๋“œ์—์„œ ๊ธฐ๋ณธ ์œ ํ˜•์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๊ฐ ์š”์†Œ์—๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ตฌํ˜„์—์„œ ์ข‹์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒกํ„ฐ์˜ ๊ฐ ์š”์†Œ์— ์ •ํ™•ํžˆ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์œ ํ˜•? ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์ด ๋‹ค๋ฅธ ์š”์†Œ์— ๋‹ค๋ฅธ ์œ ํ˜•์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ข…์˜ PHP๋ผ๋ฉด?

์ด ์‹œ์ ์—์„œ ๊ถ๊ธˆํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ TL์ด ํ•„์š”ํ•œ๊ฐ€์š”? ์นดํŠธ์˜ ๊ฒฝ์šฐ ๋‹น์‹œ ์ด๋ฏธ ์กด์žฌํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•œ protobuf ์ธ ์ธ๊ฐ„ ์ง๋ ฌ ๋ณ€ํ™˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋ก ์ด์—ˆ์œผ๋‹ˆ ์‹ค์ „์„ ๋ด…์‹œ๋‹ค.

์ฝ”๋“œ์˜ ๊ธฐ์กด TL ๊ตฌํ˜„

TL์€ Durov์˜ ์ง€๋ถ„ ๋งค๊ฐ๊ณผ ํ•จ๊ป˜ ์ž˜ ์•Œ๋ ค์ง„ ์‚ฌ๊ฑด ์ด์ „์—๋„ VKontakte์˜ ์ฐฝ์ž์—์„œ ํƒœ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.ํ™•์‹คํžˆ), Telegram์ด ๊ฐœ๋ฐœ๋˜๊ธฐ ์ „์—๋„. ๊ทธ๋ฆฌ๊ณ  ์˜คํ”ˆ์†Œ์Šค์—์„œ ์ฒซ ๋ฒˆ์งธ ๊ตฌํ˜„ ์†Œ์Šค ์žฌ๋ฏธ์žˆ๋Š” ๋ชฉ๋ฐœ์„ ๋งŽ์ด ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ธ์–ด ์ž์ฒด๋Š” ํ˜„์žฌ Telegram๋ณด๋‹ค ๋” ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ด์‹œ๋Š” ์Šคํ‚ค๋งˆ์—์„œ ์ „ํ˜€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ผํƒˆ์ ์ธ ๋™์ž‘์„ ๊ฐ€์ง„ ๋‚ด์žฅ ์œ ์‚ฌ ์œ ํ˜•(๋ฒกํ„ฐ์™€ ๊ฐ™์€)์„ ์˜๋ฏธ). ๋˜๋Š”

Templates are not used now. Instead, the same universal constructors (for example, vector {t:Type} [t] = Vector t) are used w

๊ทธ๋Ÿฌ๋‚˜ ์™„์ „์„ฑ์„ ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด, ๋งํ•˜์ž๋ฉด ์‚ฌ์ƒ์˜ ๊ฑฐ์ธ์˜ ์ง„ํ™”๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ฆผ์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.

#define ZHUKOV_BYTES_HACK

#ifdef ZHUKOV_BYTES_HACK

/* dirty hack for Zhukov request */

๋˜๋Š” ์ด ์•„๋ฆ„๋‹ค์šด ๊ฒƒ:

    static const char *reserved_words_polymorhic[] = {

      "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", NULL

      };

์ด ์กฐ๊ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

intHash {alpha:Type} vector<coupleInt<alpha>> = IntHash<alpha>;

์ด๊ฒƒ์€ int - Type ์Œ์˜ ๋ฒกํ„ฐ๋กœ์„œ ํ•ด์‹œ๋งต ํ…œํ”Œ๋ฆฟ ์œ ํ˜•์˜ ์ •์˜์ž…๋‹ˆ๋‹ค. C++์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    template <T> class IntHash {
      vector<pair<int,T>> _map;
    }

๊ทธ๋ž˜์„œ, alpha - ํ‚ค์›Œ๋“œ! ํ•˜์ง€๋งŒ C++์—์„œ๋งŒ T๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ŒํŒŒ, ๋ฒ ํƒ€๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 8๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์œผ๋ฉด ์„ธํƒ€์—์„œ ํ™˜์ƒ์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•œ๋•Œ ์ƒํŠธ ํŽ˜ํ…Œ๋ฅด๋ถ€๋ฅดํฌ์—์„œ ๋Œ€๋žต ๊ทธ๋Ÿฌํ•œ ๋Œ€ํ™”๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

-- ะะฐะดะพ ัะดะตะปะฐั‚ัŒ ะฒ TL ัˆะฐะฑะปะพะฝั‹
-- ะ‘ะป... ะัƒ ะฟัƒัั‚ัŒ ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะทะพะฒัƒั‚ ะฐะปัŒั„ะฐ, ะฑะตั‚ะฐ,... ะšะฐะบะธะต ั‚ะฐะผ ะตั‰ั‘ ะฑัƒะบะฒั‹ ะตัั‚ัŒ... ะž, ั‚ัั‚ะฐ!
-- ะ“ั€ะฐะผะผะฐั‚ะธะบะฐ? ะัƒ ะฟะพั‚ะพะผ ะฝะฐะฟะธัˆะตะผ

-- ะกะผะพั‚ั€ะธั‚ะต, ะบะฐะบะพะน ั ัะธะฝั‚ะฐะบัะธั ะฟั€ะธะดัƒะผะฐะป ะดะปั ัˆะฐะฑะปะพะฝะพะฒ ะธ ะฒะตะบั‚ะพั€ะฐ!
-- ะขั‹ ะดะพะปะฑะฐะฝัƒะปัั, ะบะฐะบ ะผั‹ ัั‚ะพ ะฟะฐั€ัะธั‚ัŒ ะฑัƒะดะตะผ?
-- ะ”ะฐ ะฝะต ััั‹ั‚ะต, ะพะฝ ั‚ะฐะผ ะพะดะธะฝ ะฒ ัั…ะตะผะต, ะทะฐั…ะฐั€ะบะพะดะธั‚ัŒ -- ะธ ะพะบ

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ "์ผ๋ฐ˜์ ์œผ๋กœ" TL์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐฐ์น˜ ๊ตฌํ˜„์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ Telegram ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ตฌํ˜„์„ ๊ณ ๋ คํ•˜๋Š” ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ‘์‹œ๋‹ค.

๋ฐ”์งˆ์˜ ๋ง:

Vasily, [09.10.18 17:07] ๋ฌด์—‡๋ณด๋‹ค๋„, ๊ทธ๋“ค์ด ๋งŽ์€ ์ถ”์ƒํ™”๋ฅผ ๋ง์นœ ๋‹ค์Œ ๋ณผํŠธ๋ฅผ ๋‘๋“œ๋ฆฌ๊ณ  ๋ชฉ๋ฐœ๋กœ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ๊ฒน์ณค๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ์—‰๋ฉ์ด๊ฐ€ ๋œจ๊ฒ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ถ€๋‘์—์„œ ๋จผ์ € pilot.jpg
๊ทธ๋Ÿฐ ๋‹ค์Œ jekichan.webp ์ฝ”๋“œ์—์„œ

๋ฌผ๋ก  ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ˆ˜ํ•™์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ๋“ค์€ Aho, Ullman์„ ์ฝ์—ˆ๊ณ  ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ DSL ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์‹ค์ƒ์˜ ์‚ฐ์—… ํ‘œ์ค€ ๋„๊ตฌ์— ์ต์ˆ™ํ•˜๋‹ค๊ณ  ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ..

์ €์ž ์ „๋ณด-cli Vitaliy Valtman์€ (cli) ํ•œ๊ณ„๋ฅผ ๋ฒ—์–ด๋‚œ TLO ํ˜•์‹์˜ ๋ฐœ์ƒ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ํŒ€์˜ ๊ตฌ์„ฑ์›์ž…๋‹ˆ๋‹ค. ์ด์ œ TL ๊ตฌ๋ฌธ ๋ถ„์„์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋กœ ๋”ฐ๋กœ๊ทธ๋…€์˜ ์ธ์ƒ์€? TL ํŒŒ์„œ? ..

16.12 04:18 Vasily: ์ œ ์ƒ๊ฐ์—๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ lex + yacc๋ฅผ ๋งˆ์Šคํ„ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
16.12 04:18 ๋ฐ”์‹ค๋ฆฌ: ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์„ค๋ช…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
16.12 04:18 ๋ฐ”์‹ค๋ฆฌ: ์Œ, ์•„๋‹ˆ๋ฉด VK์˜ ์ค„ ์ˆ˜๋งŒํผ ๋ˆ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
16.12 04:19 ๋ฐ”์‹ค๋ฆฌ: ๊ธฐํƒ€ 3k+ ๋ผ์ธ<censored> ํŒŒ์„œ ๋Œ€์‹ 

์˜ˆ์™ธ์ผ๊นŒ์š”? ๋ฐฉ๋ฒ•์„ ๋ณด์ž ะดะตะปะฐะตั‚ ์ด๊ฒƒ์€ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค โ€” Telegram Desktop:

    nametype = re.match(r'([a-zA-Z.0-9_]+)(#[0-9a-f]+)?([^=]*)=s*([a-zA-Z.<>0-9_]+);', line);
    if (not nametype):
      if (not re.match(r'vector#1cb5c415 {t:Type} # [ t ] = Vector t;', line)):
         print('Bad line found: ' + line);

Python์˜ 1100๊ฐœ ์ด์ƒ์˜ ๋ผ์ธ, ๋‘ ๊ฐœ์˜ ์ •๊ทœ์‹ + ๋ฒกํ„ฐ ์œ ํ˜•์˜ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ, ๋ฌผ๋ก  TL ๊ตฌ๋ฌธ์— ๋”ฐ๋ผ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ‚ค๋งˆ์—์„œ ์„ ์–ธ๋˜์ง€๋งŒ ์ด ๊ตฌ๋ฌธ์— ๋ฐฐ์น˜ํ•˜๊ณ  ๋” ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ... ๋ฌธ์ œ๋Š” ์™œ ์ด ๋ชจ๋“  ๊ธฐ์ ์„ ๊ท€์ฐฎ๊ฒŒ ํ•˜๋Š๋ƒ์ž…๋‹ˆ๋‹ค.ะธ์–ด์จŒ๋“  ๋ฌธ์„œ์— ๋”ฐ๋ผ ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋” ๋งŽ์€ ํผํ”„?!

๊ทธ๋‚˜์ €๋‚˜... ์šฐ๋ฆฌ๊ฐ€ CRC32 ๊ฒ€์‚ฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•œ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ? ๋”ฐ๋ผ์„œ Telegram Desktop ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ์—๋Š” ๊ณ„์‚ฐ๋œ CRC32๊ฐ€ ์žˆ๋Š” ์œ ํ˜•์— ๋Œ€ํ•œ ์˜ˆ์™ธ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค ๋‹ค์ด์–ด๊ทธ๋žจ์— ํ‘œ์‹œ๋œ๋Œ€๋กœ!

Vasily, [18.12 22:49] ์—ฌ๊ธฐ์„œ ๊ทธ๋Ÿฌํ•œ TL์ด ํ•„์š”ํ•œ์ง€ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋Œ€์ฒด ๊ตฌํ˜„์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ค„ ๋ฐ”๊ฟˆ์„ ์‚ฝ์ž…ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ์˜ ์ ˆ๋ฐ˜์ด ์—ฌ๋Ÿฌ ์ค„ ์ •์˜์—์„œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ tdesktop๋„

์› ๋ผ์ด๋„ˆ์— ๋Œ€ํ•œ ์š”์ ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ข‹์•„, telegram-cli๋Š” ๋น„๊ณต์‹์ด๊ณ  Telegram Desktop์€ ๊ณต์‹์ด์ง€๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๋ˆ„๊ฐ€ ์••๋‹ˆ๊นŒ? .. Android ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—๋Š” ์Šคํ‚ค๋งˆ ํŒŒ์„œ๊ฐ€ ์ „ํ˜€ ์—†์—ˆ์ง€๋งŒ (์˜คํ”ˆ ์†Œ์Šค์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค) ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์žฌ๋ฏธ์žˆ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์ด ์žˆ์—ˆ์ง€๋งŒ ๊ทธ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ํ•˜์œ„ ์„น์…˜.

์ง๋ ฌํ™”๊ฐ€ ์‹ค์ œ๋กœ ์ œ๊ธฐํ•˜๋Š” ๋‹ค๋ฅธ ์งˆ๋ฌธ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋“ค์€ ๋ฌผ๋ก  ๋น„ํŠธ ํ•„๋“œ์™€ ์กฐ๊ฑด๋ถ€ ํ•„๋“œ๋ฅผ ๋ง์ณค์Šต๋‹ˆ๋‹ค.

๋ฐ”์‹ค๋ฆฌ: flags.0? true
ํ•„๋“œ๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•˜๊ณ  ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์ฐธ์ž…๋‹ˆ๋‹ค.

๋ฐ”์‹ค๋ฆฌ: flags.1? int
ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜๊ณ  deserializeํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์‹ค๋ฆฌ: ์—‰๋ฉ์ด, ํƒ€์ง€ ๋งˆ, ๋ญํ•˜๋Š”๊ฑฐ์•ผ!
Vasily: ๋ฌธ์„œ ์–ด๋”˜๊ฐ€์— true๋Š” ๊ธธ์ด๊ฐ€ XNUMX์ธ ๊ธฐ๋ณธ ์œ ํ˜•์ด๋ผ๋Š” ์–ธ๊ธ‰์ด ์žˆ์ง€๋งŒ ๋ฌธ์„œ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ˜„์‹ค์ ์ž…๋‹ˆ๋‹ค.
Vasily: ๊ฐœ๋ฐฉํ˜• ๊ตฌํ˜„์—๋„ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์—†์ง€๋งŒ ๋ชฉ๋ฐœ๊ณผ ์†Œํ’ˆ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…”๋ ˆํ†ค์€ ์–ด๋•Œ? ์˜ˆ๋ฅผ ๋“ค์–ด MTProto ์ฃผ์ œ๋ฅผ ๋ฏธ๋ฆฌ ์‚ดํŽด๋ณด๋ฉด ๋ฌธ์„œ์— ๊ทธ๋Ÿฌํ•œ ๋ถ€๋ถ„์ด ์žˆ์ง€๋งŒ ๊ธฐํ˜ธ % "์ฃผ์–ด์ง„ ๊ธฐ๋ณธ ์œ ํ˜•์— ํ•ด๋‹น"์œผ๋กœ๋งŒ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์—์„œ ์˜ค๋ฅ˜ ๋˜๋Š” ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

๋ฐ”์‹ค๋ฆฌ, [22.06.18/18/38 XNUMX:XNUMX] ํ•œ ๊ณณ์—์„œ:

msg_container#73f1f8dc messages:vector message = MessageContainer;

๋‹ค๋ฅธ:

msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ๋“ค์€ ๋‘ ๊ฐ€์ง€ ํฐ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ƒํ™œ์—์„œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•Œ๋ชธ ๋ฒกํ„ฐ๊ฐ€ ์˜ต๋‹ˆ๋‹ค

๋ฒ ์–ด ๋ฒกํ„ฐ ์ •์˜๋ฅผ ๋ณธ ์ ์ด ์—†์œผ๋ฉฐ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

์†์œผ๋กœ telethon์œผ๋กœ ์ž‘์„ฑ๋œ ๋ถ„์„

๊ทธ์˜ ์Šคํ‚ค๋งˆ๋Š” ์ •์˜๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. msg_container

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์งˆ๋ฌธ์€ %์— ๋Œ€ํ•ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Vadim Goncharov, [22.06.18/19/22 XNUMX:XNUMX PM] ๊ทธ๋ฆฌ๊ณ  tdesktop์—์„œ?

Vasily, [22.06.18/19/23 XNUMX:XNUMX] ํ•˜์ง€๋งŒ ๊ทœ์ œ ๊ธฐ๊ด€์˜ TL ํŒŒ์„œ๋Š” ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์„ ๋จน์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค

// parsed manually

TL์€ ์•„๋ฆ„๋‹ค์šด ์ถ”์ƒํ™”์ด๋ฉฐ ์•„๋ฌด๋„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์˜ ๊ณ„ํš ๋ฒ„์ „์—๋Š” %๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋ฌธ์„œ๋Š” ๊ทธ ์ž์ฒด๋กœ ๋ชจ์ˆœ๋˜๋ฏ€๋กœ xs

๊ทธ๊ฒƒ์€ ๋ฌธ๋ฒ•์—์„œ ๋ฐœ๊ฒฌ๋˜์—ˆ์œผ๋ฉฐ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‹น์‹ ์€ TL์—์„œ ๋„ํฌ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ฐ˜ ๋ฆฌํ„ฐ ์—†์ด๋Š” ์•Œ์•„๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

๋‹ค๋ฅธ ๋…์ž๋Š” "๊ธ€์Ž„์š”, ๋‹น์‹ ์€ ๋ชจ๋“  ๊ฒƒ์„ ๋น„ํŒํ•˜๋ฏ€๋กœ ์ œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ์„ธ์š”. "๋ผ๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Vasily๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋Œ€๋‹ตํ•ฉ๋‹ˆ๋‹ค. โ€œํŒŒ์„œ์— ๊ด€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    args: /* empty */ { $$ = NULL; }
        | args arg { $$ = g_list_append( $1, $2 ); }
        ;

    arg: LC_ID ':' type-term { $$ = tl_arg_new( $1, $3 ); }
            | LC_ID ':' condition '?' type-term { $$ = tl_arg_new_cond( $1, $5, $3 ); free($3); }
            | UC_ID ':' type-term { $$ = tl_arg_new( $1, $3 ); }
            | type-term { $$ = tl_arg_new( "", $1 ); }
            | '[' LC_ID ']' { $$ = tl_arg_new_mult( "", tl_type_new( $2, TYPE_MOD_NONE ) ); }
            ;

์–ด๋–ป๊ฒŒ ๋“ ๋ณด๋‹ค

struct tree *parse_args4 (void) {
  PARSE_INIT (type_args4);
  struct parse so = save_parse ();
  PARSE_TRY (parse_optional_arg_def);
  if (S) {
    tree_add_child (T, S);
  } else {
    load_parse (so);
  }
  if (LEX_CHAR ('!')) {
    PARSE_ADD (type_exclam);
    EXPECT ("!");
  }
  PARSE_TRY_PES (parse_type_term);
  PARSE_OK;
}

๋˜๋Š”

        # Regex to match the whole line
        match = re.match(r'''
            ^                  # We want to match from the beginning to the end
            ([w.]+)           # The .tl object can contain alpha_name or namespace.alpha_name
            (?:
                #             # After the name, comes the ID of the object
                ([0-9a-f]+)    # The constructor ID is in hexadecimal form
            )?                 # If no constructor ID was given, CRC32 the 'tl' to determine it

            (?:s              # After that, we want to match its arguments (name:type)
                {?             # For handling the start of the '{X:Type}' case
                w+            # The argument name will always be an alpha-only name
                :              # Then comes the separator between name:type
                [wd<>#.?!]+  # The type is slightly more complex, since it's alphanumeric and it can
                               # also have Vector<type>, flags:# and flags.0?default, plus :!X as type
                }?             # For handling the end of the '{X:Type}' case
            )*                 # Match 0 or more arguments
            s                 # Leave a space between the arguments and the equal
            =
            s                 # Leave another space between the equal and the result
            ([wd<>#.?]+)     # The result can again be as complex as any argument type
            ;$                 # Finally, the line should always end with ;
            ''', tl, re.IGNORECASE | re.VERBOSE)

์ด๊ฒƒ์€ ์ „์ฒด ์–ดํœ˜ ๋ถ„์„๊ธฐ์ž…๋‹ˆ๋‹ค.

    ---functions---         return FUNCTIONS;
    ---types---             return TYPES;
    [a-z][a-zA-Z0-9_]*      yylval.string = strdup(yytext); return LC_ID;
    [A-Z][a-zA-Z0-9_]*      yylval.string = strdup(yytext); return UC_ID;
    [0-9]+                  yylval.number = atoi(yytext); return NUM;
    #[0-9a-fA-F]{1,8}       yylval.number = strtol(yytext+1, NULL, 16); return ID_HASH;

    n                      /* skip new line */
    [ t]+                  /* skip spaces */
    //.*$                 /* skip comments */
    /*.**/              /* skip comments */
    .                       return (int)yytext[0];

์ €๊ฒƒ๋“ค. ๋” ๊ฐ„๋‹จํ•œ ๊ฒƒ์€ ์˜จํ™”ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค."

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒฐ๊ตญ TL์˜ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ํŒŒ์„œ ๋ฐ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋Š” ์•ฝ 100์ค„์˜ ๋ฌธ๋ฒ•๊ณผ ~ 300์ค„์˜ ์ƒ์„ฑ๊ธฐ์— ๋งž์Šต๋‹ˆ๋‹ค(๋ชจ๋‘ ํฌํ•จ). print์˜ ์ƒ์„ฑ ์ฝ”๋“œ), ์œ ํ˜• Goodies, ๊ฐ ํด๋ž˜์Šค์—์„œ ์„ฑ์ฐฐ์„ ์œ„ํ•œ ์œ ํ˜• ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹คํ˜•์„ฑ ์œ ํ˜•์€ ๋นˆ ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ ๋ฐ”๋€Œ๊ณ  ์ƒ์„ฑ์ž๋Š” ์ด ํด๋ž˜์Šค์—์„œ ์ƒ์†๋˜๋ฉฐ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์œ ํ˜• ์–ธ์–ด์˜ ์œ ํ˜• ๋ถ€์กฑ

๊ฐ•๋ ฅํ•œ ํƒ€์ดํ•‘์ด ์ข‹์ฃ ? ์•„๋‹ˆ์š”, ์ด๊ฒƒ์€ holivar(๋™์  ์–ธ์–ด๋ฅผ ์„ ํ˜ธํ•˜์ง€๋งŒ)๊ฐ€ ์•„๋‹ˆ๋ผ TL ๋‚ด์˜ ๊ฐ€์ •์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์–ธ์–ด๋Š” ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธ€์Ž„์š”, ๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ตฌํ˜„์ด์ง€๋งŒ ์ ์–ด๋„ ์„ค๋ช…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ๊ธฐํšŒ๋ฅผ ์›ํ•ฉ๋‹ˆ๊นŒ?

์šฐ์„  ์ œ์•ฝ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ์—…๋กœ๋“œ์— ๋Œ€ํ•œ ๋ฌธ์„œ์—์„œ ๋‹ค์Œ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํŒŒ์ผ์˜ ์ด์ง„ ์ฝ˜ํ…์ธ ๊ฐ€ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ถ€ํ’ˆ์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค( ๋ถ€ํ’ˆ ํฌ๊ธฐ ) ๋‹ค์Œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • part_size % 1024 = 0 (1KB๋กœ ๋‚˜๋ˆ„์–ด์ง)
  • 524288 % part_size = 0 (512KB๋Š” part_size๋กœ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด์•ผ ํ•จ)

๋งˆ์ง€๋ง‰ ๋ถ€ํ’ˆ์€ ํฌ๊ธฐ๊ฐ€ part_size๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ ๋ถ€ํ’ˆ์—๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ_๋ถ€๋ถ„, 0์—์„œ 2,999 ์‚ฌ์ด์˜ ๊ฐ’.

ํŒŒ์ผ์ด ๋ถ„ํ• ๋œ ํ›„ ์„œ๋ฒ„์— ์ €์žฅํ•  ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์—…๋กœ๋“œ.์ €์žฅBigFilePart ํŒŒ์ผ์˜ ์ „์ฒด ํฌ๊ธฐ๊ฐ€ 10MB ์ด์ƒ์ธ ๊ฒฝ์šฐ ์—…๋กœ๋“œ.์ €์žฅํŒŒ์ผ ๋ถ€๋ถ„ ๋” ์ž‘์€ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ.
[...] ๋‹ค์Œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์˜ค๋ฅ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • FILE_PARTS_INVALID - ๋ถ€ํ’ˆ ์ˆ˜๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’์ด ์‚ฌ์ด์— ์žˆ์ง€ ์•Š์Œ 1..3000

์Šคํ‚ค๋งˆ์— ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ? TL์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ๋“  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ์š”. ํ•˜์ง€๋งŒ ๊ตฌ์‹ ํ„ฐ๋ณด ํŒŒ์Šค์นผ๋„ ๋‹ค์Œ์— ์˜ํ•ด ์ฃผ์–ด์ง„ ์œ ํ˜•์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Š” ์ด์ œ ๋” ์ž˜ ์•Œ๋ ค์ง„ ํ•œ ๊ฐ€์ง€ ์ผ์„ ๋” ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. enum - ๊ณ ์ •๋œ(์ž‘์€) ๊ฐ’์˜ ์—ด๊ฑฐํ˜•์œผ๋กœ ๊ตฌ์„ฑ๋œ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. C - ์ˆซ์ž์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์œ ํ˜•์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด, ๋ฌธ์ž์—ด๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๋ฌธ์ž์—ด์—๋Š” ์ „ํ™”๋ฒˆํ˜ธ๋งŒ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์„ค๋ช…ํ•˜๋ฉด ์ข‹๊ฒ ์ฃ ?

์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ TL์— ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ๋ฅผ ๋“ค์–ด JSON ์Šคํ‚ค๋งˆ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฝ”๋“œ์—์„œ ์—ฌ์ „ํžˆ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” 512KB์˜ ๋ถ„ํ•  ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ์ด์˜๋ฅผ ์ œ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฒˆํ˜ธ ๋ณด๋‚ด๊ธฐ 1..3000 (๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค) ๊ฐ€๋Šฅํ•˜๊ฒ ์ฃ ? ..

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์˜ค๋ฅ˜ ๋ฐ ๋ฐ˜ํ™˜ ๊ฐ’์— ๋Œ€ํ•ด. TL๊ณผ ํ•จ๊ป˜ ์ผํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ๋ˆˆ์ด ํ๋ฆฟํ•ฉ๋‹ˆ๋‹ค. ๊ฐ TL์˜ ํ•จ์ˆ˜๋Š” ์‹ค์ œ๋กœ ์„ค๋ช…๋œ ๋ฐ˜ํ™˜ ์œ ํ˜•๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ค๋ฅ˜๋„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ TL ์ž์ฒด๋กœ๋Š” ์ถ”๋ก ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ณ  nafig๋Š” ์‹ค์ œ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์‚ฌ์‹ค RPC๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์œผ๋กœ ๋Œ์•„๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋Š˜ ์„ธ๊ณ„์˜ ์ถ”์ƒ ์œ ํ˜• ์ˆ˜ํ•™ ๊ฐœ๋…์˜ ์ˆœ์ˆ˜์„ฑ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? .. ์žก์•„ ๋‹น๊น€-๊ทธ๋ž˜์„œ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€๋…์„ฑ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ธ€์Ž„์š”, ์ผ๋ฐ˜์ ์œผ๋กœ ์„ค๋ช… ์Šคํ‚ค๋งˆ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ(๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ JSON ์Šคํ‚ค๋งˆ์— ์žˆ์Œ) ์ด๋ฏธ ๋ถ€๋‹ด์ด ๋œ๋‹ค๋ฉด ์‹ค์šฉ์ ์ธ ์ธก๋ฉด์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ ์–ด๋„ ์—…๋ฐ์ดํŠธ ์ค‘์— diff๋ฅผ ๋ณด๋Š” ๊ฒƒ์€ ์ง„๋ถ€ํ•œ ์ผ์ž…๋‹ˆ๊นŒ? ์—์„œ ์ง์ ‘ ํ™•์ธํ•˜์„ธ์š”. ์‹ค์ œ ์‚ฌ๋ก€:

-channelFull#76af5481 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;
+channelFull#1c87a71a flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;

๋˜๋Š”

-message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
+message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;

์˜ˆ๋ฅผ ๋“ค์–ด ๋ˆ„๊ตฐ๊ฐ€๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€๋งŒ GitHub๋Š” ๊ทธ๋Ÿฌํ•œ ๊ธด ์ค„ ๋‚ด๋ถ€์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ•์กฐ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ "10 ๊ฐœ์˜ ์ฐจ์ด์  ์ฐพ๊ธฐ", ๊ทธ๋ฆฌ๊ณ  ๋‡Œ๊ฐ€ ์ฆ‰์‹œ ๋ณด๋Š” ๊ฒƒ์€ ๋‘ ์˜ˆ์—์„œ ์‹œ์ž‘๊ณผ ๋์ด ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ์–ด๋”˜๊ฐ€๋ฅผ ์ง€๋ฃจํ•˜๊ฒŒ ์ฝ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค ... ์ œ ์ƒ๊ฐ์—๋Š” ์ด๊ฒƒ์€ ๋‹จ์ง€ ์ด๋ก ์ด ์•„๋‹ˆ๋ผ, ํ•˜์ง€๋งŒ ์ˆœ์ „ํžˆ ์‹œ๊ฐ์ ์œผ๋กœ ๋”๋Ÿฝ๊ณ  ๊น”๋”ํ•˜์ง€ ์•Š์€.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ด๋ก ์˜ ์ˆœ์ˆ˜์„ฑ์— ๋Œ€ํ•ด. ๋น„ํŠธ ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ ๋ณด์ด์ง€ ์•Š๋Š” ๋ฟก๋ฟก์ด ์œ ํ˜• ์ด๋ก ์˜ ๊ด€์ ์—์„œ ๋‚˜์œ๊ฐ€์š”? ์ด์ „ ๋ฒ„์ „์˜ ์Šคํ‚ค๋งˆ์—์„œ ์„ค๋ช…์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์žฌ์ฑ„๊ธฐ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์œ ํ˜•์ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ดˆ๋Š” ์—ฌ์ „ํžˆ ์ด ํ˜•์‹์œผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

storage.fileUnknown#aa963b05 = storage.FileType;
storage.filePartial#40bc6f52 = storage.FileType;
storage.fileJpeg#7efe0e = storage.FileType;
storage.fileGif#cae1aadf = storage.FileType;
storage.filePng#a4f63c0 = storage.FileType;
storage.filePdf#ae1e508d = storage.FileType;
storage.fileMp3#528a0677 = storage.FileType;
storage.fileMov#4b09ebbc = storage.FileType;
storage.fileMp4#b3cea0e4 = storage.FileType;
storage.fileWebp#1081464c = storage.FileType;

๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ๊ตฌ์กฐ์— 5๊ฐœ์˜ ์„ ํƒ์  ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜ต์…˜์— ๋Œ€ํ•ด 32๊ฐœ์˜ ์œ ํ˜•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์กฐํ•ฉ ํญ๋ฐœ. ๋”ฐ๋ผ์„œ TL ์ด๋ก ์˜ ๊ฒฐ์ •์  ์ˆœ๋„๋Š” ์—ฐ์žฌ์˜ ๊ฐ€ํ˜นํ•œ ํ˜„์‹ค์ด๋ผ๋Š” ์ฃผ์ฒ  ์—‰๋ฉ์ด์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ถฉ๋Œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์žฅ์†Œ์—์„œ์ด ์‚ฌ๋žŒ๋“ค์€ ์ž์‹ ์˜ ํƒ€์ดํ•‘์„ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MTProto(๋‹ค์Œ ์žฅ)์—์„œ ์‘๋‹ต์€ Gzip์œผ๋กœ ์••์ถ•๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณ„์ธต ๋ฐ ์Šคํ‚ค๋งˆ ์œ„๋ฐ˜์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ, RpcResult ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ ๋‚ด์šฉ์„ ๊ฑฐ๋‘” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธ€์Ž„, ์™œ ์ด๋Ÿฌ์ง€? .. ์••์ถ•์ด ์–ด๋””์—์„œ๋‚˜ ์ž‘๋™ํ•˜๋„๋ก ๋ชฉ๋ฐœ์„ ์ž˜๋ผ์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ๋‹ค๋ฅธ ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ๋ฒˆ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. InputPeerUser ๋Œ€์‹  InputUser. ํ˜น์€ ๊ทธ ๋ฐ˜๋Œ€๋กœ๋„. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค! ์ฆ‰, ์„œ๋ฒ„๋Š” ์œ ํ˜•์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๋Ÿด ์ˆ˜์žˆ์–ด? ๋Œ€๋‹ต์€ ์•„๋งˆ๋„ telegram-cli์˜ ์ฝ”๋“œ ์กฐ๊ฐ์— ์˜ํ•ด ํ”„๋กฌํ”„ํŠธ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  if (tgl_get_peer_type (E->id) != TGL_PEER_CHANNEL || (C && (C->flags & TGLCHF_MEGAGROUP))) {
    out_int (CODE_messages_get_history);
    out_peer_id (TLS, E->id);
  } else {    
    out_int (CODE_channels_get_important_history);

    out_int (CODE_input_channel);
    out_int (tgl_get_peer_id (E->id));
    out_long (E->id.access_hash);
  }
  out_int (E->max_id);
  out_int (E->offset);
  out_int (E->limit);
  out_int (0);
  out_int (0);

์ฆ‰, ์—ฌ๊ธฐ์—์„œ ์ง๋ ฌํ™”๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ, ์ƒ์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค! ์•„๋งˆ ์„œ๋ฒ„๋„ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๊ฑฐ ์•„๋‹๊นŒ์š”?.. ์›์น™์ ์œผ๋กœ ํ•œ๋ฒˆ๋งŒ ํ•˜๋ฉด ๋˜๋Š”๊ฑด๋ฐ ๋‚˜์ค‘์— ์—…๋ฐ์ดํŠธ๋กœ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ๊ทธ ๊ณ„ํš์˜ ๋ชฉ์ ์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์งˆ๋ฌธ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ ๊ด€๋ฆฌ. ๋ ˆ์ด์–ด

์Šคํ‚ค๋งˆ ๋ฒ„์ „์„ ๋ ˆ์ด์–ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด์œ ๋Š” ๊ฒŒ์‹œ๋œ ์Šคํ‚ค๋งˆ์˜ ๊ธฐ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ๋งŒ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์ฒ˜์Œ์—๋Š” ๊ธฐ๋ณธ ์ž‘์—…์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ฒด๊ณ„์—์„œ ์ˆ˜ํ–‰ ๋  ์ˆ˜ ์žˆ๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋‹ค๋ฅธ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์Œ์„ ํŠน์ • ์š”์ฒญ์— ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์›์น™์ ์œผ๋กœ ์ข‹์€ ์•„์ด๋””์–ด์™€ ์ƒˆ๋กœ์šด ์˜์ง€์กฐ์ฐจ๋„ "ํ˜ผํ•ฉ"๋˜์–ด ์ด์ „์— ๊ฒน์ณ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€ ๋ด…์‹œ๋‹ค. ์‚ฌ์‹ค, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ๋ฏธ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ๋ ˆ์ด์–ด ๊ตฌ์„ฑํ‘œ๋Š” ๋‹จ์ˆœํžˆ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ ˆ์ด์–ด๋Š” 2์—์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋Š” ํŠน๋ณ„ํ•œ TL ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ ˆ์ด์–ด 2๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

invokeWithLayer2#289dd1f6 {X:Type} query:!X = X;

์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๋ชจ๋“  API ํ˜ธ์ถœ ์ „์— ๊ฐ’์ด ์žˆ๋Š” int๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 0x289dd1f6 ๋ฉ”์„œ๋“œ ๋ฒˆํ˜ธ ์•ž์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์•„์š”. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์™”๋‹ค

invokeWithLayer3#b7475268 query:!X = X;

๋‹ค์Œ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ถ”์ธกํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์—

invokeWithLayer4#dea0d430 query:!X = X;

์žฌ๋ฏธ์žˆ๋Š”? ์•„๋‹ˆ, ์›ƒ๊ธฐ์—” ๋„ˆ๋ฌด ์ด๋ฅด๋‹ค. ์ƒ๊ฐํ•ด๋ด. ๊ฐ ๋‹ค๋ฅธ ๊ณ„์ธต์˜ ์š”์ฒญ์€ ์ด๋Ÿฌํ•œ ํŠน์ˆ˜ํ•œ ์œ ํ˜•์œผ๋กœ ๋ž˜ํ•‘๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์•ž์— 4๋ฐ”์ดํŠธ๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ

invokeWithLayer5#417a57ae query:!X = X;

๊ทธ๋Ÿฌ๋‚˜ ์ž ์‹œ ํ›„ ๊ทธ๊ฒƒ์€ ์ผ์ข…์˜ bacchanalia๊ฐ€ ๋  ๊ฒƒ์ž„์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๊ฒฐ์ฑ…์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: ๋ ˆ์ด์–ด 9๋ถ€ํ„ฐ ๋„์šฐ๋ฏธ ๋ฉ”์„œ๋“œ invokeWithLayerN ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค initConnection

๋งŒ์„ธ! 9๊ฐœ์˜ ๋ฒ„์ „ ์ดํ›„, ์šฐ๋ฆฌ๋Š” ๋งˆ์นจ๋‚ด 80๋…„๋Œ€์— ์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ๋˜ ์ž‘์—…์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ์ดˆ๊ธฐ์— ๋ฒ„์ „ ํ˜‘์ƒ์ด ํ•œ ๋ฒˆ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค!

๊ทธ๋ž˜์„œ ๋‹ค์Œ์€?..

invokeWithLayer10#39620c41 query:!X = X;
...
invokeWithLayer18#1c900537 query:!X = X;

์ด์ œ ์›ƒ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ 9๊ฐœ์˜ ๋ ˆ์ด์–ด ํ›„์—์•ผ ๋งˆ์นจ๋‚ด ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋Š” ๋ฒ”์šฉ ์ƒ์„ฑ์ž๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ์—ฐ๊ฒฐ ์‹œ์ž‘ ์‹œ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋˜๋ฉฐ ๋ ˆ์ด์–ด์˜ ์˜๋ฏธ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด๋ถ€ ๋ฒ„์ „์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ณณ. ๋ฌธ์ œ ํ•ด๊ฒฐ๋จ.

์˜ค๋ฅธ์ชฝ?..

๋ฐ”์‹ค๋ฆฌ, [16.07.18/14/01 XNUMX:XNUMX PM] ๊ธˆ์š”์ผ์— ๋‚˜๋Š” ์ƒ๊ฐํ–ˆ๋‹ค:
ํ…”๋ ˆ์„œ๋ฒ„๋Š” ์š”์ฒญ ์—†์ด ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์š”์ฒญ์€ InvokeWithLayer๋กœ ๋ž˜ํ•‘๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ๋ž˜ํ•‘ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‘๋‹ต ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ €๊ฒƒ๋“ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์—…๋ฐ์ดํŠธ๋ฅผ ์›ํ•˜๋Š” ๋ ˆ์ด์–ด๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Vadim Goncharov, [16.07.18/14/02 XNUMX:XNUMX PM] InvokeWithLayer๋Š” ์›์น™์ ์œผ๋กœ ๋ฒ„ํŒ€๋ชฉ์ด ์•„๋‹™๋‹ˆ๊นŒ?

๋ฐ”์‹ค๋ฆฌ, [16.07.18/14/02 XNUMX:XNUMX PM] ์ด ๋ฐฉ๋ฒ•๋ฐ–์— ์—†์–ด์š”

Vadim Goncharov, [16.07.18/14/02 XNUMX:XNUMX PM] ๋ณธ์งˆ์ ์œผ๋กœ ์„ธ์…˜ ์‹œ์ž‘ ์‹œ ๋ ˆ์ด์–ด๋ง์„ ์˜๋ฏธํ•ด์•ผ ํ•จ

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ํด๋ผ์ด์–ธํŠธ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ, ์ฆ‰ ์œ ํ˜• Updates ์ฒด๊ณ„์—์„œ ์ด๊ฒƒ์€ API ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์•„๋‹ˆ๋ผ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ž์ฒด์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋…ผ์˜ํ•  ๋ณต์žกํ•œ ์ฃผ์ œ์ด์ง€๋งŒ ์ง€๊ธˆ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜คํ”„๋ผ์ธ์ผ ๋•Œ๋„ ์„œ๋ฒ„๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ˆ„์ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํฌ์žฅ์„ ๊ฑฐ๋ถ€ํ•  ๋•Œ ๊ฐ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ‚ค์ง€์ด๋ฏ€๋กœ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฒ„์ „์„ ์•Œ๋ ค์ฃผ๊ธฐ ์ „์— ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ๋ˆ„๊ตฌ ๋ณด์ฆ๋ ˆ์ด์–ด ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์„œ๋ฒ„์˜ ์˜๊ฒฌ์€ ํ”„๋กœ์„ธ์Šค์—์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ์ˆœ์ „ํžˆ ์ด๋ก ์  ์‚ฌ๊ณ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์„ฑ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ๋Š” ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ (์–ด์จŒ๋“  ์ž˜ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค)? ํ•˜์•„! ์•„๋ฌด๋ฆฌ!

์ด๊ฒƒ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ 14์›”์— ๋งŒ๋‚œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. XNUMX์›” XNUMX์ผ, Telegram ์„œ๋ฒ„์™€ ๋กœ๊ทธ์— ๋ฌด์–ธ๊ฐ€๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฒˆ์ฉ์˜€์Šต๋‹ˆ๋‹ค.

2019-08-15 09:28:35.880640 MSK warn  main: ANON:87: unknown object type: 0x80d182d1 at TL/Object.pm line 213.
2019-08-15 09:28:35.751899 MSK warn  main: ANON:87: unknown object type: 0xb5223b0f at TL/Object.pm line 213.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ช‡ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ์˜ ์Šคํƒ ์ถ”์ (๋™์‹œ์— ๋กœ๊น…์ด ์ˆ˜์ •๋จ). ๊ฒฐ๊ตญ, TL์—์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์„œ๋ช…์— ์˜ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๋ฉฐ ์ŠคํŠธ๋ฆผ์—์„œ ๋” ๋ฉ€๋ฆฌ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ฐ€๋ฉด ํ•ด๋…์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ƒํ™ฉ์—์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

๊ธ€์Ž„, ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ค๋ฅด๋Š” ๊ฒƒ์€ ์—ฐ๊ฒฐ์„ ๋Š๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„์›€์ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” CRC32๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒด๊ณ„ 73์—์„œ ์ž‘์—…ํ–ˆ์ง€๋งŒ ์ฒด๊ณ„ 82์˜ ๊ฐœ์ฒด๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๋ฅผ์ฃผ์˜ ๊นŠ๊ฒŒ ์‚ดํŽด ๋ด…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ฒด๊ณ„์˜ ์‹๋ณ„์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!

๋ฌธ์ œ๊ฐ€ ์ˆœ์ „ํžˆ ๋น„๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์— ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ์š”? ์•„๋‹ˆ์š”, ์šฐ๋ฆฌ๋Š” Telegram Desktop 1.2.17(์—ฌ๋Ÿฌ Linux ๋ฐฐํฌํŒ๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋ฒ„์ „)์„ ์‹คํ–‰ํ•˜๋ฉฐ ์˜ˆ์™ธ ๋กœ๊ทธ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. MTP Unexpected type id #b5223b0f read in MTPMessageMediaโ€ฆ

Telegram์˜ ํ”„๋กœํ† ์ฝœ ๋ฐ ์กฐ์ง์  ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋น„ํŒ. 1๋ถ€, ๊ธฐ์ˆ : ์ฒ˜์Œ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ ์ž‘์„ฑ ๊ฒฝํ—˜ - TL, MT

Google์€ ๋น„๊ณต์‹ ํด๋ผ์ด์–ธํŠธ ์ค‘ ํ•˜๋‚˜์— ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ๋ฐœ์ƒํ–ˆ์Œ์„ ๋ณด์—ฌ ์ฃผ์—ˆ์ง€๋งŒ ๋ฒ„์ „ ๋ฒˆํ˜ธ์™€ ์ด์— ๋”ฐ๋ผ ๊ฐ€์ •์ด ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค ...

๊ทธ๋ž˜์„œ ๋ญ ํ• ๊นŒ? Vasily์™€ ๋‚˜๋Š” ํ—ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๊ณ„ํš์„ 91๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๊ณ  ๋ฉฐ์น ์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ 73์„ ์‹œ๋„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ฒฝํ—˜์ ์ด๋ฏ€๋กœ ์ ํ”„ํ•ด์•ผ ํ•  ๋ฒ„์ „ ์ˆ˜๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์•„๋ž˜๋กœ, ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š”์ง€ .

๋‚˜์ค‘์— ์ƒํ™ฉ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , ๋„๊ณ , ์ฒด๊ณ„๋ฅผ ๋‹ค๋ฅธ ๊ณ„์ธต์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ณ , ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํฌ์ฐฉํ•˜๊ณ , ์ด์ „ ๋ฌธ์ œ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋ถ„์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ„์ธต์—์„œ ํ˜ผํ•ฉ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์„ค๋ช…? ๋‹ค์–‘ํ•œ ๊ฐ„์ ‘ ์ฆ์ƒ์—์„œ ์ง์ž‘ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ์„œ๋ฒ„๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ "๋ฒ„ํผ๋ง"์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜๋Š” ๋” ๋†’์€ ์„œ๋ฒ„๊ฐ€ ์ œ๊ณต ํ•œ ๊ฒƒ์„ ๋Œ€๊ธฐ์—ด์— ๋„ฃ๊ณ  ์ƒ์„ฑ ๋‹น์‹œ์˜ ์ฒด๊ณ„๋กœ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋Œ€๊ธฐ์—ด์ด "์ฉ์Œ"์ด ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด.. ์ด๊ฒŒ ๋ชน์“ธ ๋ชฉ๋ฐœ?!.. ์•„๋‹ˆ, ๋ฏธ์นœ ์•„์ด๋””์–ด๋ฅผ ์ƒ๊ฐํ•˜๊ธฐ ์ „์— ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. Android ๋ฒ„์ „์—์„œ๋Š” TL ํŒŒ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์ง€๋งŒ (๋น„)์ง๋ ฌํ™”๊ฐ€ ์žˆ๋Š” ๋ฌด๊ฑฐ์šด ํŒŒ์ผ(github์—์„œ ์ƒ‰์ƒ ์ง€์ •์„ ๊ฑฐ๋ถ€ํ•จ)์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์ž…๋‹ˆ๋‹ค.

public static class TL_message_layer68 extends TL_message {
    public static int constructor = 0xc09be45f;
//...
//ะตั‰ะต ะฟะฐั‡ะบะฐ ะฟะพะดะพะฑะฝั‹ั…
//...
    public static class TL_message_layer47 extends TL_message {
        public static int constructor = 0xc992e15c;
        public static Message TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
            Message result = null;
            switch (constructor) {
                case 0x1d86f70e:
                    result = new TL_messageService_old2();
                    break;
                case 0xa7ab1991:
                    result = new TL_message_old3();
                    break;
                case 0xc3060325:
                    result = new TL_message_old4();
                    break;
                case 0x555555fa:
                    result = new TL_message_secret();
                    break;
                case 0x555555f9:
                    result = new TL_message_secret_layer72();
                    break;
                case 0x90dddc11:
                    result = new TL_message_layer72();
                    break;
                case 0xc09be45f:
                    result = new TL_message_layer68();
                    break;
                case 0xc992e15c:
                    result = new TL_message_layer47();
                    break;
                case 0x5ba66c13:
                    result = new TL_message_old7();
                    break;
                case 0xc06b9607:
                    result = new TL_messageService_layer48();
                    break;
                case 0x83e5de54:
                    result = new TL_messageEmpty();
                    break;
                case 0x2bebfa86:
                    result = new TL_message_old6();
                    break;
                case 0x44f9b43d:
                    result = new TL_message_layer104();
                    break;
                case 0x1c9b1027:
                    result = new TL_message_layer104_2();
                    break;
                case 0xa367e716:
                    result = new TL_messageForwarded_old2(); //custom
                    break;
                case 0x5f46804:
                    result = new TL_messageForwarded_old(); //custom
                    break;
                case 0x567699b3:
                    result = new TL_message_old2(); //custom
                    break;
                case 0x9f8d60bb:
                    result = new TL_messageService_old(); //custom
                    break;
                case 0x22eb6aba:
                    result = new TL_message_old(); //custom
                    break;
                case 0x555555F8:
                    result = new TL_message_secret_old(); //custom
                    break;
                case 0x9789dac4:
                    result = new TL_message_layer104_3();
                    break;

๋˜๋Š”

    boolean fixCaption = !TextUtils.isEmpty(message) &&
    (media instanceof TLRPC.TL_messageMediaPhoto_old ||
     media instanceof TLRPC.TL_messageMediaPhoto_layer68 ||
     media instanceof TLRPC.TL_messageMediaPhoto_layer74 ||
     media instanceof TLRPC.TL_messageMediaDocument_old ||
     media instanceof TLRPC.TL_messageMediaDocument_layer68 ||
     media instanceof TLRPC.TL_messageMediaDocument_layer74)
    && message.startsWith("-1");

ํ ... ๋ฏธ์ณค๋‚˜๋ณด๋„ค์š”. ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์ƒ์„ฑ ๋œ ์ฝ”๋“œ๋ผ๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ? .. ๊ทธ๋Ÿฌ๋‚˜ ํ™•์‹คํžˆ ๋ชจ๋“  ๋ฒ„์ „์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค! ์‚ฌ์‹ค, ์™œ ๋ชจ๋“  ๊ฒƒ์ด ํ•˜๋‚˜์˜ ํž™, ๋น„๋ฐ€ ์ฑ„ํŒ… ๋ฐ ๋ชจ๋“  ์ข…๋ฅ˜์˜ _old7 ์™ ์ง€ ๊ธฐ๊ณ„ ์„ธ๋Œ€์™€ ๋น„์Šทํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ... ํ•˜์ง€๋งŒ ๋ฌด์—‡๋ณด๋‹ค ๋‚˜๋Š” ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค

TL_message_layer104
TL_message_layer104_2
TL_message_layer104_3

์—ฌ๋Ÿฌ๋ถ„, ํ•œ ๊ฒน ๋‚ด์—์„œ ๊ฒฐ์ •๋„ ๋ชป ํ•˜์‹œ๋‚˜์š”?! ๊ธ€์Ž„์š”, "XNUMX"๊ฐ€ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์ถœ์‹œ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ด…์‹œ๋‹ค. ํ•˜์ง€๋งŒ THREE? .. ๊ฐ™์€ ๋ ˆ์ดํฌ์—์„œ ์ฆ‰์‹œ ๋‹ค์‹œ? ์ด๊ฒŒ ๋ฌด์Šจ ์Œ๋ž€๋ฌผ์ด์•ผ, ๋ฏธ์•ˆ? ..

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , Telegram Desktop ์†Œ์Šค์—์„œ๋„ ๋น„์Šทํ•œ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ตฌ์„ฑํ‘œ์— ๋Œ€ํ•œ ์—ฐ์† ์ปค๋ฐ‹์€ ๋ ˆ์ด์–ด ๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์—์„œ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ ์†Œ์Šค๋ฅผ ์ œ์™ธํ•˜๊ณ  ์–ด๋””์—์„œ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๊ฑฐ๊ธฐ์—์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ๊นŒ์ง€ ๊ณ„ํš์ด ์™„์ „ํžˆ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‹จ์œ„, ๊ธฐ๋Šฅ ๋ฐ ๊ธฐํƒ€ ํ…Œ์ŠคํŠธ์˜ ํŒฌ์ด ์˜๊ฒฌ์„ ๊ณต์œ ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

public static class TL_folders_deleteFolder extends TLObject {
    public static int constructor = 0x1c295881;

    public int folder_id;

    public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
        return Updates.TLdeserialize(stream, constructor, exception);
    }

    public void serializeToStream(AbstractSerializedData stream) {
        stream.writeInt32(constructor);
        stream.writeInt32(folder_id);
    }
}

//manually created

//RichText start
public static abstract class RichText extends TLObject {
    public String url;
    public long webpage_id;
    public String email;
    public ArrayList<RichText> texts = new ArrayList<>();
    public RichText parentRichText;

    public static RichText TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
        RichText result = null;
        switch (constructor) {
            case 0x1ccb966a:
                result = new TL_textPhone();
                break;
            case 0xc7fb5e01:
                result = new TL_textSuperscript();
                break;

์—ฌ๊ธฐ์—์„œ "์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑ๋œ" ์ฃผ์„์€ ์ด ํŒŒ์ผ์˜ ์ผ๋ถ€๋งŒ ์†์œผ๋กœ โ€‹โ€‹์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ(์œ ์ง€ ๊ด€๋ฆฌ ์•…๋ชฝ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?) ๋‚˜๋จธ์ง€๋Š” ๊ธฐ๊ณ„์—์„œ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋˜ ๋‹ค๋ฅธ ์งˆ๋ฌธ์ด ์ƒ๊น๋‹ˆ๋‹ค. ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™„์ „ํžˆ (Linux ์ปค๋„์˜ GPL ์•„๋ž˜์— ์žˆ๋Š” blob), ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ด๋ฏธ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์˜ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ง๋ ฌํ™”๊ฐ€ ์ซ“๊ณ  ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋™ํ•ด ๋ด…์‹œ๋‹ค.

MTํ”„๋กœํ† 

๊ทธ๋Ÿผ ์—ด์–ด๋ด…์‹œ๋‹ค ์ผ๋ฐ˜์ ์ธ ์„ค๋ช… ะธ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช… ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋„˜์–ด์ง€๋Š” ๊ฒƒ์€ ์šฉ์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ํ’๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ Telegram์˜ ์ƒํ‘œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์œ„์น˜์— ์žˆ๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋ถ€๋ฅด๊ฑฐ๋‚˜ ํ•œ ๋‹จ์–ด๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ถ€๋ฅด๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค(์˜ˆ: ์Šคํ‹ฐ์ปค ํŒฉ์ด ๋ณด์ด๋ฉด ๋†’์€ ์ˆ˜์ค€์˜ API์—์„œ - ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ์ƒ๊ฐํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค).

์˜ˆ๋ฅผ ๋“ค์–ด "๋ฉ”์‹œ์ง€"(๋ฉ”์‹œ์ง€) ๋ฐ "์„ธ์…˜"(์„ธ์…˜) - ์—ฌ๊ธฐ์„œ๋Š” Telegram ํด๋ผ์ด์–ธํŠธ์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๋ฉ”์‹œ์ง€๋กœ ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๊ณ  OOP๋กœ ํ•ด์„๋˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ "ํŒจํ‚ค์ง€"๋ผ๋Š” ๋‹จ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ฎ์€ ์ „์†ก ์ˆ˜์ค€์ด๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์œผ๋ฉฐ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ๊ฒƒ. ํ•˜์ง€๋งŒ ์„ธ์…˜์€ ... ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์†ก ๊ณ„์ธต

์ฒซ ๋ฒˆ์งธ๋Š” ์šด์†ก์ž…๋‹ˆ๋‹ค. 5๊ฐ€์ง€ ์˜ต์…˜์— ๋Œ€ํ•ด ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  • TCP
  • ์›น ์†Œ์ผ“
  • HTTPS๋ฅผ ํ†ตํ•œ ์›น์†Œ์ผ“
  • HTTP
  • HTTPS

Vasily, [15.06.18/15/04 XNUMX:XNUMX PM] UDP ์ „์†ก๋„ ์žˆ์ง€๋งŒ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ๋ณ€ํ˜•์˜ TCP

์ฒซ ๋ฒˆ์งธ๋Š” TCP๋ฅผ ํ†ตํ•œ UDP์™€ ์œ ์‚ฌํ•˜๋ฉฐ ๊ฐ ํŒจํ‚ท์—๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ์™€ crc๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์นดํŠธ์—์„œ ๋ถ€๋‘๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿผ ์ง€๊ธˆ ์ด๋ฏธ 4๊ฐ€์ง€ ๋ณ€์ข…์˜ TCP:

  • ์š”์•ฝ ํ…์ŠคํŠธ
  • ์ค‘๊ฐ„์˜
  • ํŒจ๋”ฉ ์ค‘๊ฐ„
  • ๊ฐ€๋“ ์ฐฌ

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. MTProxy์šฉ ํŒจ๋”ฉ ์ค‘๊ฐ„์ฒด์ž…๋‹ˆ๋‹ค. ์•Œ๋ ค์ง„ ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ๋‚˜์ค‘์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜๋Š” ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „(์ด XNUMX๊ฐœ)์„ ๋” ์ถ”๊ฐ€ํ•ด์•ผ ํ• ๊นŒ์š”? ๋„ค ๊ฐ€์ง€ ๋ชจ๋‘ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋ณธ MTProto ์ž์ฒด์˜ ๊ธธ์ด์™€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์•ฝ๋ณธ์—์„œ๋Š” 1 ๋˜๋Š” 4๋ฐ”์ดํŠธ์ด์ง€๋งŒ 0xef ๋‹ค์Œ ๋ณธ๋ฌธ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • Intermediate์—์„œ ์ด๊ฒƒ์€ 4๋ฐ”์ดํŠธ์˜ ๊ธธ์ด์™€ ํ•„๋“œ์ด๋ฉฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•˜๋Š” 0xeeeeeeee ์ค‘๊ฐ„์ž„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด
  • ๋„คํŠธ์›Œ์ปค์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์ „์ฒด์ ์œผ๋กœ ๊ฐ€์žฅ ์ค‘๋…์„ฑ์ด ๊ฐ•ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค: ๊ธธ์ด, ์‹œํ€€์Šค ๋ฒˆํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ MTProto, ๋ณธ๋ฌธ, CRC32์ธ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ, ์ด ๋ชจ๋“  ๊ฒƒ์ด TCP๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ง๋ ฌ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์˜ ํ˜•ํƒœ๋กœ ์•ˆ์ •์ ์ธ ์ „์†ก์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์‹œํ€€์Šค, ํŠนํžˆ ์ฒดํฌ์„ฌ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž, ์ด์ œ TCP์— 16๋น„ํŠธ ์ฒดํฌ์„ฌ์ด ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ ์†์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋ฐ˜๋Œ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ•ด์‹œ๊ฐ€ 16๋ฐ”์ดํŠธ๋ณด๋‹ค ๊ธด ์•”ํ˜ธํ™” ํ”„๋กœํ† ์ฝœ์ด ์žˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์˜ค๋ฅ˜๋Š” ๋” ๋†’์€ ์ˆ˜์ค€์˜ SHA ๋ถˆ์ผ์น˜์—์„œ ํฌ์ฐฉ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•ด CRC32์—๋Š” ์•„๋ฌด๋Ÿฐ ์š”์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

4๋ฐ”์ดํŠธ ๊ธธ์ด๊ฐ€ ๊ฐ€๋Šฅํ•œ Abridged์™€ "16๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ"๋ฅผ ์ •๋‹นํ™”ํ•˜๋Š” Intermediate๋ฅผ ๋น„๊ตํ•ด๋ณด์ž. ๋ญ, Telegram ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋„ˆ๋ฌด ์„œํˆฌ๋ฅธ ๋‚˜๋จธ์ง€ ์†Œ์ผ“์—์„œ ์ •๋ ฌ๋œ ๋ฒ„ํผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ๋ฏฟ์–ด์ง€๋‚˜์š”? ์—ฌ์ „ํžˆ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ๋Š” ์›ํ•˜๋Š” ์ˆ˜์˜ ๋ฐ”์ดํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋ก์‹œ ์„œ๋ฒ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜๋Š” ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ ์ƒ๋‹จ์— 3๋ฐ”์ดํŠธ์˜ ๋ง‰๋Œ€ํ•œ ํŒจ๋”ฉ์ด ์—ฌ์ „ํžˆ ์žˆ๋Š” ๊ฒฝ์šฐ Abridged๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? XNUMX๋ฐ”์ดํŠธ๋ฅผ ์ ˆ์•ฝํ•˜์‹ญ์‹œ์˜ค. ๋•Œ๋กœ๋Š” ?

๋ˆ„๊ตฐ๊ฐ€๋Š” Nikolai Durov๊ฐ€ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ํฌํ•จํ•˜์—ฌ ์‹ค์ œ์ ์ธ ํ•„์š” ์—†์ด ์ž์ „๊ฑฐ๋ฅผ ๋ฐœ๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ์ข‹์•„ํ•œ๋‹ค๋Š” ์ธ์ƒ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์šด์†ก ์˜ต์…˜ ํฌํ•จ. Web ๋ฐ MTProxy๋Š” ์š”์ฒญ์ด ์žˆ์„ ๊ฒฝ์šฐ ์ง€๊ธˆ์€ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๊ฒ€ํ† ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 2018๋…„์— ์ถœ์‹œ๋œ ์งํ›„ ๊ณต๊ธ‰์ž๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์ฐจ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋น ๋ฅด๊ฒŒ ๋ฐฐ์› ๋˜ ๋ฐ”๋กœ ์ด MTProxy์— ๋Œ€ํ•ด์„œ๋งŒ ๊ธฐ์–ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐจ๋‹จ ์šฐํšŒ๋กœ ํŒจํ‚ท ํฌ๊ธฐ! ๋˜ํ•œ C๋กœ ์ž‘์„ฑ๋œ MTProxy ์„œ๋ฒ„(Waltman์ด ๋‹ค์‹œ ๋งํ•จ)๊ฐ€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ(Phil Kulin์ด ํ™•์ธํ•  ๊ฒƒ์ž„) Linux ์‚ฌ์–‘์— ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ์œ ์‚ฌํ•œ ์„œ๋ฒ„๊ฐ€ Go ๋˜๋Š” Node.js์— ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. XNUMX์ค„ ๋ฏธ๋งŒ์œผ๋กœ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•œ ํ›„ ์„น์…˜์˜ ๋์—์„œ ์ด ์‚ฌ๋žŒ๋“ค์˜ ๊ธฐ์ˆ  ๋ฌธํ•ด๋ ฅ์— ๋Œ€ํ•œ ๊ฒฐ๋ก ์„ ๋„์ถœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ MTProto ์„ธ์…˜์„ ๋ฐฐ์น˜ํ•œ ์„ธ์…˜์ธ 5๋ฒˆ์งธ OSI ๋ ˆ์ด์–ด๋กœ ์ด๋™ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ‚ค, ๋ฉ”์‹œ์ง€, ์„ธ์…˜, Diffie-Hellman

๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ์™„์ „ํžˆ ์ •ํ™•ํ•˜๊ฒŒ ๋„ฃ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ... ์„ธ์…˜์€ ํ™œ์„ฑ ์„ธ์…˜ ์•„๋ž˜์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์„ธ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ˆœ์„œ๋Œ€๋กœ.

Telegram์˜ ํ”„๋กœํ† ์ฝœ ๋ฐ ์กฐ์ง์  ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋น„ํŒ. 1๋ถ€, ๊ธฐ์ˆ : ์ฒ˜์Œ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ ์ž‘์„ฑ ๊ฒฝํ—˜ - TL, MT

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ „์†ก ๊ณ„์ธต์—์„œ ์•Œ๋ ค์ง„ ๊ธธ์ด์˜ ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€์ด๊ฑฐ๋‚˜ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์•„์ง ํ‚ค ํ˜‘์ƒ ๋‹จ๊ณ„์— ์žˆ๊ณ  ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. "ํ‚ค"๋ผ๊ณ  ํ•˜๋Š” ๊ฐœ๋… ์ค‘ ์–ด๋–ค ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? Telegram ํŒ€ ์ž์ฒด์— ๋Œ€ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ์‹œ๋‹ค.

๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์—”ํ„ฐํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ์…˜ - ๊ฐ ์„ธ์…˜์ด ์ „์ฒด ์žฅ์น˜/OS์— ํ•ด๋‹นํ•˜๋Š” "ํ˜„์žฌ ์„ธ์…˜" ์•„๋ž˜์˜ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ UI์— ์žˆ์Šต๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ๋Š” MTProto ์„ธ์…˜, ๋ฉ”์‹œ์ง€ ์‹œํ€€์Šค ๋ฒˆํ˜ธ(๋‚ฎ์€ ์ˆ˜์ค€์˜ ์˜๋ฏธ)๊ฐ€ ์žˆ๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ TCP ์—ฐ๊ฒฐ ๊ฐ„์— ์ง€์†๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ MTProto ์„ธ์…˜์„ ๋™์‹œ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋‘˜ ์‚ฌ์ด ์„ธ์…˜ ๊ฐœ๋…์ด๋‹ค ๊ถŒํ•œ ๋ถ€์—ฌ. ํ‡ดํ™”์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UI ์„ธ์…˜ ์™€ ๊ฐ™๋‹ค ๊ถŒํ•œ ๋ถ€์—ฌ๊ทธ๋Ÿฌ๋‚˜ ์•„์•„, ๊ทธ๊ฒƒ์€ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณธ๋‹ค:

  • ์ƒˆ ๊ธฐ๊ธฐ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋จผ์ € ์ธ์ฆ_ํ‚ค ์˜ˆ๋ฅผ ๋“ค์–ด SMS๋ฅผ ํ†ตํ•ด ๊ณ„์ •์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋ถ€์—ฌ
  • ๊ทธ๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค MTProto ์„ธ์…˜์˜ session_id ์ž์‹  ์•ˆ์—.
  • ์ด ๋‹จ๊ณ„์—์„œ ์กฐํ•ฉ ๊ถŒํ•œ ๋ถ€์—ฌ ะธ session_id ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค ์˜ˆ - ์ด ๋‹จ์–ด๋Š” ์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฌธ์„œ ๋ฐ ์ฝ”๋“œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ MTProto ์„ธ์…˜ ๊ฐ™์€ ์•„๋ž˜ ์ธ์ฆ_ํ‚ค - ๊ฐ™์€ DC๋กœ.
  • ๊ทธ๋Ÿฌ๋˜ ์–ด๋Š ๋‚  ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์Œ์—์„œ ํŒŒ์ผ์„ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ DC - ์ด DC์— ๋Œ€ํ•ด ์ƒˆ DC๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ธ์ฆ_ํ‚ค !
  • ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ๋“ฑ๋ก์ด ์•„๋‹ˆ๋ผ ๋™์ผํ•จ์„ ์‹œ์Šคํ…œ์— ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ถŒํ•œ ๋ถ€์—ฌ (UI ์„ธ์…˜), ํด๋ผ์ด์–ธํŠธ๋Š” API ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. auth.exportAuthorization ์ง‘์—์„œ DC auth.importAuthorization ์ƒˆ๋กœ์šด DC์—์„œ.
  • ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์—ด๋ ค ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MTProto ์„ธ์…˜ (๊ฐ์ž ์ž์‹ ์˜ session_id) ์•„๋ž˜์—์„œ ์ด ์ƒˆ DC๋กœ ๊ทธ์˜ ์ธ์ฆ_ํ‚ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” Perfect Forward Secrecy๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ธ์ฆ_ํ‚ค ์žˆ์—ˆ๋‹ค ์˜๊ตฌ ํ‚ค - DC๋‹น - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ auth.bindTempAuthKey ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ์ผ์‹œ์ ์ธ ์ธ์ฆ_ํ‚ค - ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ํ•œ ๋ฒˆ๋งŒ ์ž„์‹œ_์ธ์ฆ_ํ‚ค DC๋‹น, ๋ชจ๋‘์—๊ฒŒ ๊ณตํ†ต MTProto ์„ธ์…˜ ์ด DC์—.

์œ ์˜ ์‚ฌํ•ญ ์†Œ๊ธˆ (๋ฐ ๋ฏธ๋ž˜์˜ ์†Œ๊ธˆ) ๋˜ํ•œ ํ•˜๋‚˜ ์ธ์ฆ_ํ‚ค ์ €๊ฒƒ๋“ค. ๋ชจ๋‘๊ฐ€ ๊ณต์œ  MTProto ์„ธ์…˜ ๋™์ผํ•œ DC์—.

"์„œ๋กœ ๋‹ค๋ฅธ TCP ์—ฐ๊ฒฐ ์‚ฌ์ด"๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ฒƒ ์›น์‚ฌ์ดํŠธ์˜ ์ธ์ฆ ์ฟ ํ‚ค - ์ด ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋งŽ์€ TCP ์—ฐ๊ฒฐ์„ ์ง€์†(์กด์†)ํ•˜์ง€๋งŒ ์–ธ์  ๊ฐ€๋Š” ๋‚˜๋น ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. HTTP์™€ ๋‹ฌ๋ฆฌ MTProto์—์„œ๋Š” ์„ธ์…˜ ๋‚ด์—์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง€๊ณ  ํ™•์ธ๋˜๋ฉฐ ํ„ฐ๋„์— ๋“ค์–ด๊ฐ”๊ณ  ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ ํ›„ ์„œ๋ฒ„๋Š” ์ด ์„ธ์…˜์—์„œ ๋ฐฐ๋‹ฌํ•˜์ง€ ์•Š์€ ๋ชจ๋“  ๊ฒƒ์„ ์นœ์ ˆํ•˜๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด์ „ TCP ์—ฐ๊ฒฐ.

๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ ์ •๋ณด๋Š” ์ˆ˜๊ฐœ์›”์˜ ์†Œ์†ก ๋์— ์งœ๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? - ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€์ž.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ƒ์„ฑ auth_key ์— Telegram์˜ Diffie-Hellman ๋ฒ„์ „. ๋ฌธ์„œ๋ฅผ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ์‹œ๋‹ค ...

Vasily, [19.06.18/20/05 1:255] data_with_hash := SHAXNUMX(๋ฐ์ดํ„ฐ) + ๋ฐ์ดํ„ฐ + (์ž„์˜์˜ ๋ฐ”์ดํŠธ); ๊ธธ์ด๊ฐ€ XNUMX๋ฐ”์ดํŠธ์™€ ๊ฐ™๋„๋ก;
encryption_data := RSA(data_with_hash, server_public_key); 255๋ฐ”์ดํŠธ ๊ธธ์ด์˜ ์ˆซ์ž(๋น… ์—”๋””์•ˆ)๋Š” ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋Ÿฌ์Šค์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ฒฐ๊ณผ๋Š” 256๋ฐ”์ดํŠธ ์ˆซ์ž๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ๋งˆ์•ฝ DH๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฑด๊ฐ•ํ•œ ์‚ฌ๋žŒ์˜ DH์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค
dx์—๋Š” ๋‘ ๊ฐœ์˜ ๊ณต๊ฐœ ํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์•Œ์•„ ๋ƒˆ์ง€๋งŒ ํ‡ด์ ๋ฌผ์€ ๋‚จ์•„์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ์ด ์ˆซ์ž๋ฅผ ์ธ์ˆ˜ ๋ถ„ํ•ด ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ž‘์—… ์ฆ๋ช…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. DoS ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  RSA ํ‚ค๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. new_nonce. ํ•˜์ง€๋งŒ ๊ฒ‰๋ณด๊ธฐ์— ๊ฐ„๋‹จํ•ด ๋ณด์ด๋Š” ์ด ์ž‘์ „์ด ์„ฑ๊ณตํ•˜๋Š” ๋™์•ˆ, ๋‹น์‹ ์€ ๋ฌด์—‡์„ ๋งˆ์ฃผํ•ด์•ผ ํ• ๊นŒ์š”?

Vasily, [20.06.18/00/26 XNUMX:XNUMX] ์•„์ง appid ์š”์ฒญ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

DH์— ์š”์ฒญ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํŠธ๋žœ์ŠคํฌํŠธ์˜ ๋„ํฌ์—๋Š” 4๋ฐ”์ดํŠธ์˜ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์“ฐ์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒŒ ๋‹ค์•ผ

๊ธ€์Ž„, ๊ทธ๋Š” ๋‚˜์—๊ฒŒ -404๋ผ๊ณ  ๋งํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ญ?

์—ฌ๊ธฐ ๋‚ด๊ฐ€ ๊ทธ์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์„œ๋ฒ„ ์‘๋‹ต์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋ฌด์—‡์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ฌผ์–ด๋ณผ ์‚ฌ๋žŒ์ด ์—†์Šต๋‹ˆ๋‹ค(๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ ์ž์„ธํžˆ ์„ค๋ช…).

์—ฌ๊ธฐ์„œ ๋„ํฌ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ด€์‹ฌ์€

๋‚œ ํ•  ์ผ์ด ์—†์–ด ๊ฟˆ๋งŒ ๊ฟจ์–ด ์ˆซ์ž๋ฅผ ์•ž๋’ค๋กœ

๋‘ ๊ฐœ์˜ 32๋น„ํŠธ ์ˆซ์ž. ๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ฒ˜๋Ÿผ ๊ทธ๋“ค์„ ํฌ์žฅ

ํ•˜์ง€๋งŒ ์•„๋‹ˆ์š”, BE๋กœ ์ฒซ ์ค„์— ํ•„์š”ํ•œ ๊ฒƒ์€ ์ด ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

Vadim Goncharov, [20.06.18/15/49 404:XNUMX PM] ๊ทธ๋ฆฌ๊ณ  ์ด XNUMX ๋•Œ๋ฌธ์—?

๋ฐ”์‹ค๋ฆฌ, [20.06.18/15/49 XNUMX:XNUMX PM] ์˜ˆ!

Vadim Goncharov, [20.06.18/15/50 XNUMX:XNUMX PM] ๊ทธ๊ฐ€ "์ฐพ์ง€ ๋ชปํ•œ" ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

๋ฐ”์‹ค๋ฆฌ, [20.06.18 15:50] ์•ฝ

๊ฐ„๋‹จํ•œ ์•ฝ์ˆ˜ %๋กœ์˜ ๋ถ„ํ•ด๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.)

์˜ค๋ฅ˜ ๋ณด๊ณ ์กฐ์ฐจ ์ˆ™๋‹ฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฐ”์‹ค๋ฆฌ, [20.06.18/20/18 5:XNUMX PM] ์•„, MDXNUMX๋„ ์žˆ๊ตฐ์š”. ์ด๋ฏธ ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ•ด์‹œ

ํ‚ค ์ง€๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

digest = md5(key + iv)
fingerprint = substr(digest, 0, 4) XOR substr(digest, 4, 4)

SHA1 ๋ฐ ์ƒค2

๊ทธ๋ž˜์„œ ๋„ฃ์ž auth_key Diffie-Hellman์— ๋”ฐ๋ฅด๋ฉด ํฌ๊ธฐ๋Š” 2048๋น„ํŠธ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡ ํ–ฅํ›„ ๊ณ„ํš? ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ํ‚ค์˜ ํ•˜์œ„ 1024๋น„ํŠธ๋Š” ์ „ํ˜€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์ง€๋งŒ... ์ผ๋‹จ์€ ์ด์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์™€ ๋น„๋ฐ€์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ ˆ์ฐจ์ธ TLS ์„ธ์…˜์˜ ์•„๋‚ ๋กœ๊ทธ๊ฐ€ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋ฒ„๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•„์ง ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค! ์•„์ง, ์‚ฌ์‹ค ๊ถŒํ•œ ๋ถ€์—ฌ. ์ €๊ฒƒ๋“ค. ICQ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ "๋กœ๊ทธ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ" ๋˜๋Š” SSH์—์„œ์™€ ๊ฐ™์ด ์ ์–ด๋„ "๋กœ๊ทธ์ธ ํ‚ค"(์˜ˆ: ์ผ๋ถ€ gitlab / github)์˜ ๊ด€์ ์—์„œ ์ƒ๊ฐํ–ˆ๋‹ค๋ฉด. ์šฐ๋ฆฌ๋Š” ์ต๋ช…์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„๊ฐ€ "์ด ์ „ํ™”๋ฒˆํ˜ธ๋Š” ๋‹ค๋ฅธ DC์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ์‘๋‹ตํ•˜๋ฉด? ์•„๋‹ˆ๋ฉด "๋‹น์‹ ์˜ ์ „ํ™”๋ฒˆํ˜ธ๋Š” ๊ธˆ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค"? ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์˜ ์ผ์€ ํ‚ค๊ฐ€ ์—ฌ์ „ํžˆ ์œ ์šฉํ•˜๊ณ  ๊ทธ๋•Œ๊นŒ์ง€ ์ฉ์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ํฌ๋ง์œผ๋กœ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์˜ˆ์•ฝ์œผ๋กœ "๋ฐ›์•˜์Šต๋‹ˆ๋‹ค". ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„๋ฅผ ์‹ ๋ขฐํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋Š” ๊ฐ€์งœ์ž…๋‹ˆ๊นŒ? ์•”ํ˜ธํ™” ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Vasily, [21.06.18/17/53 2:XNUMX PM] ๋‹จ์ˆœ์„ฑ์„ ์œ„ํ•ด XNUMXkbit ์ˆซ์ž๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ฐ”์ผ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค%)

ํ•˜์ง€๋งŒ ์ „ํ˜€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•„, nafeijoa

Vasily, [21.06.18/18/02 XNUMX:XNUMX] ๋„ํฌ๋Š” ๊ฐ„๋‹จํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งํ•˜์ง€ ์•Š์•˜๋‹ค. ์ด ๊ฒฝ์šฐ Android์šฉ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋ณผ๊นŒ์š”? ใ… ๊ทธ๊ฒŒ ๋ญ์•ผ? (์˜ˆ, ์ „์ฒด ํŒŒ์ผ์ด ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค.)-๊ทธ๋“ค์ด ๋งํ–ˆ๋“ฏ์ด ์—ฌ๊ธฐ์— ๊ทธ๋Œ€๋กœ ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

278     static const char *goodPrime = "c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b";
279   if (!strcasecmp(prime, goodPrime)) {

์•„๋‹ˆ, ๋ฌผ๋ก  ๊ฑฐ๊ธฐ ์ผ๋ถ€ ์ˆซ์ž์˜ ๋‹จ์ˆœ์„ฑ์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ๋” ์ด์ƒ ์ˆ˜ํ•™์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ง€์‹์ด ์—†์Šต๋‹ˆ๋‹ค.

์ž, ๋งˆ์Šคํ„ฐ ํ‚ค๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธํ•˜๋ ค๋ฉด, ์ฆ‰ ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ์ด๋ฏธ AES๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ์•”ํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ํ‚ค๋Š” ํŒจ๋”ฉ ๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(์„ธ์…˜, ๋ฉ”์‹œ์ง€ ID ๋“ฑ ํฌํ•จ)์˜ SHA128์˜ ์ค‘๊ฐ„ 256๋น„ํŠธ๋กœ ์ •์˜๋˜๋ฉฐ ์ธ์ฆ ํ‚ค์—์„œ ๊ฐ€์ ธ์˜จ 32๋ฐ”์ดํŠธ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋ฐ”์‹ค๋ฆฌ, [22.06.18/14/08 XNUMX:XNUMX PM] ํ‰๋ฒ”ํ•œ ๋…„๋“ค

๋ฐ›์€ auth_key. ๋ชจ๋‘. ๋” ๋‚˜์•„๊ฐ€ ... ๋ถ€๋‘์—์„œ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๊ณต๋ถ€ํ•˜์‹ญ์‹œ์˜ค.

MTProto 2.0์€ 12์—์„œ 1024๋ฐ”์ดํŠธ์˜ ํŒจ๋”ฉ์ด ํ•„์š”ํ•˜๋ฉฐ ๊ฒฐ๊ณผ ๋ฉ”์‹œ์ง€ ๊ธธ์ด๋ฅผ 16๋ฐ”์ดํŠธ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค๋Š” ์กฐ๊ฑด์ด ์—ฌ์ „ํžˆ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ํŒจ๋”ฉ์„ ๋„ฃ์–ด์•ผ ํ• ๊นŒ์š”?

๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ์—ฌ๊ธฐ์—์„œ๋„ ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ 404

๋ˆ„๊ตฐ๊ฐ€ ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ๋ฌธ์„œ์˜ ํ…์ŠคํŠธ๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ์—ฐ๊ตฌํ–ˆ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์— MAC์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ AES๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ผ๋ถ€ IGE ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ๋“ค์€ FAQ์— ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์”๋‹ˆ๋‹ค... ์—ฌ๊ธฐ์—์„œ ๋ฉ”์‹œ์ง€ ํ‚ค ์ž์ฒด๋Š” ๋™์‹œ์— ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•ด๋…๋œ ๋ฐ์ดํ„ฐ์˜ SHA ํ•ด์‹œ์ด๋ฉฐ ๋ถˆ์ผ์น˜์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ ์กฐ์šฉํžˆ ๋ฌด์‹œํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ๋ณด์•ˆ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ฐ‘์ž๊ธฐ ์šฐ๋ฆฌ๋ฅผ ๊นจ๋œจ๋ฆด๊นŒ์š”?).

๋‚˜๋Š” ์•”ํ˜ธ ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด ๋ชจ๋“œ์—์„œ๋Š” ์ด๋ก ์  ๊ด€์ ์—์„œ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Telegram Desktop์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์งˆ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋ถ„๋ช…ํžˆ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MTProto(์ด ๊ฒฝ์šฐ์—๋งŒ ๋ฒ„์ „ 877)์˜ ๋ฉ”์‹œ์ง€์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋กœ์ปฌ ์บ์‹œ(์ด ๋ชจ๋“  D783F5D3D8EF1.0C)๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ฉ”์‹œ์ง€ ํ‚ค, ๊ทธ ๋‹ค์Œ ๋ฐ์ดํ„ฐ ์ž์ฒด(๊ทธ๋ฆฌ๊ณ  ์ฃผ์š” ํฐ auth_key 256๋ฐ”์ดํŠธ(์—†์œผ๋ฉด msg_key ์“ธ๋ชจ ์—†๋Š”). ๋”ฐ๋ผ์„œ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ˆˆ์— ๋„๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์•”ํ˜ธํ™” ๋ฐ ํ•ด๋…๋œ ๋‘ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์‚ฌ๋ณธ์„ ๋ณด๊ด€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ ๋˜๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ๋น„๋””์˜ค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ? .. ์•”ํ˜ธ๋ฌธ ๋’ค์— MAC์ด ์žˆ๋Š” ํด๋ž˜์‹ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฝ๊ณ  ์ฆ‰์‹œ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  MTProto๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฒ˜์Œ์—๋Š” ์ „์ฒด ๋ฉ”์‹œ์ง€๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ฑฐ๋‚˜ ํ•ด๋…ํ•œ ๋‹ค์Œ ๋„คํŠธ์›Œํฌ๋‚˜ ๋””์Šคํฌ๋กœ ์ „์†กํ•˜์‹ญ์‹œ์˜ค. ๋”ฐ๋ผ์„œ Telegram Desktop์˜ ์ตœ์‹  ๋ฒ„์ „์—์„œ ์บ์‹œ์— ์žˆ๋Š” user_data CTR ๋ชจ๋“œ์—์„œ AES์™€ ํ•จ๊ป˜ ๋‹ค๋ฅธ ํ˜•์‹์ด ์ด๋ฏธ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Vasily, [21.06.18/01/27 20:XNUMX AM] ์˜ค, IGE๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. IGE๋Š” ์›๋ž˜ Kerberos๋ฅผ ์œ„ํ•œ "์ธ์ฆ ์•”ํ˜ธํ™” ๋ชจ๋“œ"์˜ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์˜€์Šต๋‹ˆ๋‹ค. ์‹คํŒจํ•œ ์‹œ๋„(๋ฌด๊ฒฐ์„ฑ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ)์ด๋ฏ€๋กœ ์ œ๊ฑฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ž‘๋™ํ•˜๋Š” ์ธ์ฆ ์•”ํ˜ธํ™” ๋ชจ๋“œ์— ๋Œ€ํ•œ XNUMX๋…„ ํƒ๊ตฌ์˜ ์‹œ์ž‘์ด์—ˆ๊ณ , ์ตœ๊ทผ์—๋Š” OCB ๋ฐ GCM๊ณผ ๊ฐ™์€ ๋ชจ๋“œ์—์„œ ์ ˆ์ •์— ๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์นดํŠธ ์ธก์˜ ์ธ์ˆ˜:

Nikolai Durov๊ฐ€ ์ด๋„๋Š” Telegram ํŒ€์€ XNUMX๋ช…์˜ ACM ์ฑ”ํ”ผ์–ธ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ทธ ์ค‘ ์ ˆ๋ฐ˜์€ ์ˆ˜ํ•™ ๋ฐ•์‚ฌ์ž…๋‹ˆ๋‹ค. MTProto์˜ ํ˜„์žฌ ๋ฒ„์ „์„ ์ถœ์‹œํ•˜๋Š” ๋ฐ ์•ฝ XNUMX๋…„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

๋ญ๊ฐ€ ์›ƒ๊ฒจ. ํ•˜์œ„ ๋ ˆ๋ฒจ๊นŒ์ง€ XNUMX๋…„

์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ tls๋ฅผ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„, ์šฐ๋ฆฌ๊ฐ€ ์•”ํ˜ธํ™” ๋ฐ ๊ธฐํƒ€ ๋‰˜์•™์Šค๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ด…์‹œ๋‹ค. ๋งˆ์นจ๋‚ด TL ์ง๋ ฌํ™”๋œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ์—ญ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿผ ๋ฌด์—‡์„, ์–ด๋–ป๊ฒŒ ๋ณด๋‚ด์•ผ ํ• ๊นŒ์š”? ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ์—ฐ๊ฒฐ์•„๋งˆ๋„ ์ด๊ฒƒ์ด ์•„๋‹๊นŒ์š”?

Vasily, [25.06.18/18/46 XNUMX:XNUMX PM] ์—ฐ๊ฒฐ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ ์žฅ์น˜ ๋ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

app_id, device_model, system_version, app_version ๋ฐ lang_code๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ผ๋ถ€ ์ฟผ๋ฆฌ

์–ธ์ œ๋‚˜์ฒ˜๋Ÿผ ๋ฌธ์„œ. ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๊ณต๋ถ€ํ•˜์‹ญ์‹œ์˜ค.

invokeWithLayer๋กœ ๋ชจ๋“  ๊ฒƒ์ด ๋Œ€๋žต์ ์œผ๋กœ ๋ช…ํ™•ํ•˜๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด๋‚ด๋ ค๋Š” ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Vasily, [25.06.18/19/13 XNUMX:XNUMX] ์ฝ”๋“œ๋กœ ํŒ๋‹จํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ์€ ์ด ๊ฐ€๋น„์ง€๋กœ ๋ž˜ํ•‘๋˜๊ณ  ๊ฐ€๋น„์ง€ ์ž์ฒด๋Š” invokewithlayer์— ์žˆ์Šต๋‹ˆ๋‹ค.

initConnection์ด ๋ณ„๋„์˜ ํ˜ธ์ถœ์ผ ์ˆ˜ ์—†๊ณ  ๋ž˜ํผ์—ฌ์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์˜ˆ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ธฐ๋ณธ ํ‚ค์™€ ๊ฐ™์ด ํ•œ ๋ฒˆ์ด ์•„๋‹ˆ๋ผ ๊ฐ ์„ธ์…˜์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ! ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค! ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„์— ์ด๋ฅด๋ €์Šต๋‹ˆ๋‹ค. ์ด๊ฑฐ ์„ค๋ช…์„œ ํŽ˜์ด์ง€ - ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ...

์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋Š” API ๋ฉ”์„œ๋“œ์˜ ์ผ๋ถ€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ์ฆ.์ „์†ก์ฝ”๋“œ
  • ์ธ์ฆ.์žฌ์ „์†ก์ฝ”๋“œ
  • account.getPassword
  • auth.checkPassword
  • au.check์ „ํ™”
  • ์ธ์ฆ.๊ฐ€์ž…
  • ์ธ์ฆ.๋กœ๊ทธ์ธ
  • auth.import๊ถŒํ•œ ๋ถ€์—ฌ
  • help.getConfig
  • help.getNearestDc
  • help.getAppUpdate
  • help.getCdnConfig
  • langpack.getLangPack
  • langpack.getStrings
  • langpack.getDifference
  • langpack.getLanguages
  • langpack.getLanguage

๊ทธ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € auth.sendCode, api_id ๋ฐ api_hash๋ฅผ ๋ณด๋‚ด๊ณ  ๊ทธ ํ›„์— ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ SMS๋ฅผ ๋ฐ›๋Š” ์†Œ์ค‘ํ•œ ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž˜๋ชป๋œ DC์— ๋„๋‹ฌํ•˜๋ฉด(์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ตญ๊ฐ€์˜ ์ „ํ™” ๋ฒˆํ˜ธ๋Š” ๋‹ค๋ฅธ ๊ตญ๊ฐ€์—์„œ ์ œ๊ณต๋จ) ์›ํ•˜๋Š” DC ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. DC ๋ฒˆํ˜ธ๋กœ ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” IP ์ฃผ์†Œ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด help.getConfig. ํ•œ๋•Œ๋Š” 5๊ฐœ๋งŒ ์ถœํ’ˆ๋์ง€๋งŒ 2018๋…„ ์œ ๋ช… ํ–‰์‚ฌ ์ดํ›„ ํฌ๊ฒŒ ๋Š˜์—ˆ๋‹ค.

์ด์ œ ์ต๋ช… ์„œ๋ฒ„์—์„œ ์ด ๋‹จ๊ณ„์— ๋„๋‹ฌํ–ˆ์Œ์„ ๊ธฐ์–ตํ•ฉ์‹œ๋‹ค. IP ์ฃผ์†Œ๋งŒ ๋ฐ›๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋น„์‹ธ์ง€ ์•Š๋‚˜์š”? MTProto์˜ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์—์„œ ์ด ์ž‘์—…๊ณผ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? โ€œ๊ฐ€์งœ ์ฃผ์†Œ๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์ด RKN์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?โ€๋ผ๋Š” ๋ฐ˜๋Œ€ ์˜๊ฒฌ์ด ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๋Š” ์‚ฌ์‹ค ๊ณต์‹ ๊ณ ๊ฐ์—์„œ ์ž„๋ฒ ๋””๋“œ RSA ํ‚ค, ์ฆ‰. ๋‹น์‹ ์€ ๊ทธ๋ƒฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ง•ํ›„ ์ด ์ •๋ณด. ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ฑ„๋„์„ ํ†ตํ•ด ๋ฐ›๋Š” ์ž ๊ธˆ ์šฐํšŒ์— ๋Œ€ํ•œ ์ •๋ณด์— ๋Œ€ํ•ด ์ด๋ฏธ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์—ฌ์ „ํžˆ ์—ฐ๊ฒฐํ•  ์œ„์น˜๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— MTProto ์ž์ฒด์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค).

์ข‹์•„์š”. ์ด ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋‹จ๊ณ„์—์„œ๋Š” ์•„์ง ์ธ์ฆ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐโ€ฆ

๋ฐ”์‹ค๋ฆฌ, [10.07.18 14:45] https://core.telegram.org/method/help.getConfig

config#7dae33e0 [...] = Config;
help.getConfig#c4f9186b = Config;

https://core.telegram.org/api/datacenter

config#232d5905 [...] = Config;
help.getConfig#c4f9186b = Config;

๊ณ„ํš์—์„œ ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ๊ฐ€ ์˜จ๋‹ค

tdesktop ์Šคํ‚ค๋งˆ์—์„œ ์„ธ ๋ฒˆ์งธ ๊ฐ’์€

์˜ˆ, ๋ฌผ๋ก  ๊ทธ ์ดํ›„๋กœ ๋ฌธ์„œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณง ๋‹ค์‹œ ๊ด€๋ จ์ด ์—†๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋–ป๊ฒŒ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋“ฑ๋กํ•˜๋ฉด ์•Œ๋ ค์ค„๊นŒ์š”? Vasily๋Š” ์ด๊ฒƒ์„ํ–ˆ์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ ๊ทธ์—๊ฒŒ ์•„๋ฌด๊ฒƒ๋„ ๋ณด๋‚ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค).

... ๋‹น์‹ ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์–ด๋–ป๊ฒŒ ๋“  API๋กœ ์ด๋™ํ–ˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ด๋™ํ•˜์—ฌ MTProto ํ…Œ๋งˆ์—์„œ ๋ญ”๊ฐ€๋ฅผ ๋†“์ณค์Šต๋‹ˆ๊นŒ? ๋†€๋ผ์šด ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค:

Vasily, [28.06.18/02/04 2:XNUMX AM] ์Œ, ๊ทธ๋“ค์€ eXNUMXe์˜ ์ผ๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋’ค์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Mtproto๋Š” ๋‘ ๋„๋ฉ”์ธ ๋ชจ๋‘์— ๋Œ€ํ•œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ํ‚ค์™€ ์•ฝ๊ฐ„์˜ ๋ž˜ํผ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ์Šคํƒ ์ˆ˜์ค€์„ ์ง€์†์ ์œผ๋กœ ํ˜ผํ•ฉํ•˜๋ฏ€๋กœ mtproto๊ฐ€ ์–ด๋””์—์„œ ๋๋‚˜๊ณ  ๋‹ค์Œ ์ˆ˜์ค€์ด ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€ ํ•ญ์ƒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ์–ด๋–ป๊ฒŒ ํ˜ผํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ธ€์Ž„, ์˜ˆ๋ฅผ ๋“ค์–ด PFS์— ๋Œ€ํ•œ ๋™์ผํ•œ ์ž„์‹œ ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (๊ทธ๋Ÿฐ๋ฐ Telegram Desktop์€ ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค). API ์š”์ฒญ์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. auth.bindTempAuthKey, ์ฆ‰. ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ. ๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์— ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์•”ํ˜ธํ™”๋ฅผ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ดํ›„์— ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. initConnection ๋“ฑ๋“ฑ ์ด๊ฑด ์•„๋‹ˆ๋‹ค ๋ง‰ ์ •์ƒ์ ์ธ ์š”์ฒญ. ์ด์™€๋Š” ๋ณ„๋„๋กœ DC์— ํ•˜๋‚˜์˜ ์ž„์‹œ ํ‚ค๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. auth_key_id ๊ฐ ๋ฉ”์‹œ์ง€์—์„œ ์ ์–ด๋„ ๋ชจ๋“  ๋ฉ”์‹œ์ง€์˜ ํ‚ค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์„œ๋ฒ„๋Š” ์–ธ์ œ๋“ ์ง€ ์ž„์‹œ ํ‚ค๋ฅผ "์žŠ์–ด๋ฒ„๋ฆด" ๊ถŒ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ž˜์˜ ์†”ํŠธ ์„ธํŠธ์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ‚ค๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋Š” ์—†์ง€๋งŒ ?..

MTProto ํ…Œ๋งˆ์—์„œ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๋ฉ”์‹œ์ง€, msg_id, msg_seqno, ์Šน์ธ, ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ์˜ ํ•‘ ๋ฐ ๊ธฐํƒ€ ํŠน์ด์„ฑ

๊ทธ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ•œ ์ˆ˜์ค€ ๋” ๋†’์€ "๋ˆ„์„ค"์ด๊ธฐ ๋•Œ๋ฌธ์— API๋กœ ์ž‘์—…ํ•  ๋•Œ ์ด์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ msg_key์— ๊ด€์‹ฌ์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ํ•˜์œ„ ์ˆ˜์ค€์ด ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ํ•ด๋…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋…๋œ ๋ฐ์ดํ„ฐ ๋‚ด๋ถ€์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(ํŒจ๋”ฉ ์œ„์น˜๋ฅผ ์•Œ๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ธธ์ด๋„ ์žˆ์ง€๋งŒ ์ค‘์š”ํ•˜์ง€ ์•Š์Œ).

  • ์†Œ๊ธˆ int64
  • session_id - int64
  • message_id - int64
  • seq_no-int32

์†Œ๊ธˆ์€ ์ „์ฒด DC์— ๋Œ€ํ•ด ํ•˜๋‚˜๋ผ๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ์™œ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์š”์ฒญ์ด ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ get_future_salts, ์–ด๋–ค ๊ฐ„๊ฒฉ์ด ์œ ํšจํ•œ์ง€ ์•Œ๋ ค์ฃผ์ง€๋งŒ ์†Œ๊ธˆ์ด "์ฉ์€" ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€(์š”์ฒญ)๊ฐ€ ๋‹จ์ˆœํžˆ ์†์‹ค๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋ฌผ๋ก  ์ƒˆ๋กœ์šด ์†”ํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜์—ฌ ๋ณด๊ณ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. new_session_created -ํ•˜์ง€๋งŒ ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ป๊ฒŒ ๋“  ๋‹ค์‹œ ๋ณด๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์งˆ๋ฌธ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•„ํ‚คํ…์ฒ˜์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ์„ธ์…˜์„ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๊ณ  ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ MTProto ์„ธ์…˜์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋‘ ๊ฐœ์˜ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. session_id ะธ seq_no ์ด ์„ธ์…˜ ๋‚ด์˜ ๋ฉ”์‹œ์ง€. ๋ฌผ๋ก  ๊ธฐ๋ณธ TCP ์—ฐ๊ฒฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์ด ๋Š๊ฒผ๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜๋Š” ๋“ฑ ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์—ฌ์ „ํžˆ ๋ชจ๋ฅธ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋น ๋ฅด๊ฒŒ ๋ฐœ์ƒํ•˜๋ฉด ์ด์ „ ์„ธ์…˜์ด ์ƒˆ TCP ์—ฐ๊ฒฐ์—์„œ ๊ณ„์†๋˜๋ฉด ์ฆ๊ฐ€ seq_no ๋” ๋‚˜์•„๊ฐ€. ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด ์„œ๋ฒ„์—์„œ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„๋‚ธ ๋ฐ”์™€ ๊ฐ™์ด ์„œ๋ฒ„ ์ธก์—์„œ๋„ ๋Œ€๊ธฐ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€ seq_no? ์˜ค, ๊นŒ๋‹ค๋กœ์šด ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฌด์Šจ ๋œป์ธ์ง€ ์ •์งํ•˜๊ฒŒ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์‹ญ์‹œ์˜ค.

์ฝ˜ํ…์ธ  ๊ด€๋ จ ๋ฉ”์‹œ์ง€

๋ช…์‹œ์ ์ธ ํ™•์ธ์ด ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋ฐ ๋งŽ์€ ์„œ๋น„์Šค ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋˜๋ฉฐ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์Šน์ธ์„ ์ œ์™ธํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ์‹œํ€€์Šค ๋ฒˆํ˜ธ(msg_seqno)

์ด ๋ฉ”์‹œ์ง€ ์ด์ „์— ๋ฐœ์‹ ์ž๊ฐ€ ์ƒ์„ฑํ•œ "์ฝ˜ํ…์ธ  ๊ด€๋ จ" ๋ฉ”์‹œ์ง€(ํ™•์ธ์ด ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€, ํŠนํžˆ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ๋ฉ”์‹œ์ง€) ์ˆ˜์˜ ๋‘ ๋ฐฐ์— ํ•ด๋‹นํ•˜๋Š” 32๋น„ํŠธ ์ˆซ์ž์ด๋ฉฐ ์ดํ›„์— ํ˜„์žฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ XNUMX์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ  ๊ด€๋ จ ๋ฉ”์‹œ์ง€. ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ญ์ƒ ์ „์ฒด ๋‚ด์šฉ ๋‹ค์Œ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋Š” ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€์˜ ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1์ฆ๊ฐ€ํ•˜๊ณ  ๋˜ 2์ฆ๊ฐ€ํ•˜๋Š” ์ด๊ฒŒ ๋ฌด์Šจ ์„œ์ปค์Šค์•ผ?.. ์›๋ž˜ ์˜๋ฏธ๋Š” "ACK๋Š” ๋กœ์šฐ๋น„ํŠธ, ๋‚˜๋จธ์ง€๋Š” ์ˆซ์ž"๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ฒฐ๊ณผ๊ฐ€ ์•„์ฃผ ์˜ณ์ง€ ์•Š๋‹ค - ํŠนํžˆ, ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค ์—ฌ๋Ÿฌ ๋™์ผํ•˜๋‹ค๋Š” ํ™•์ธ seq_no! ์–ด๋–ป๊ฒŒ? ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณด๋‚ด๊ณ  ๋ณด๋‚ด๊ณ  ์šฐ๋ฆฌ๋Š” ์นจ๋ฌตํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ์˜ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์— ๋Œ€ํ•œ ์„œ๋น„์Šค ํ™•์ธ ๋ฉ”์‹œ์ง€๋กœ๋งŒ ๋Œ€๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฐœ์‹  ํ™•์ธ์€ ๋™์ผํ•œ ๋ฐœ์‹  ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. TCP์— ์ต์ˆ™ํ•˜๊ณ  ์ด์ƒํ•˜๊ฒŒ ๋“ค๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด TCP์—์„œ๋Š” seq_no ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ํ™•์ธ์ด seq_no ๋‹ค๋ฅธ ์ชฝ-์„œ๋‘˜๋Ÿฌ ํ™”๋ฅผ๋ƒ…๋‹ˆ๋‹ค. MTProto์— ํ™•์ธ์ด ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. NOT ์— seq_no, TCP์—์„œ์™€ ๊ฐ™์ง€๋งŒ msg_id !

์ด๊ฒŒ ๋ญ”๊ฐ€์š” msg_id, ์ด ๋ถ„์•ผ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ? ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฉ”์‹œ์ง€์˜ ๊ณ ์œ  ID์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 64๋น„ํŠธ ์ˆซ์ž๋กœ ์ •์˜๋˜๋ฉฐ, ์ตœํ•˜์œ„ ๋น„ํŠธ๋Š” ๋‹ค์‹œ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„ ๋งˆ๋ฒ•์„ ๊ฐ€์ง€๋ฉฐ ๋‚˜๋จธ์ง€๋Š” ์†Œ์ˆ˜ ๋ถ€๋ถ„์„ ํฌํ•จํ•˜์—ฌ ์™ผ์ชฝ์œผ๋กœ 32๋น„ํŠธ ์ด๋™๋œ Unix ํƒ€์ž„์Šคํƒฌํ”„์ž…๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ํƒ€์ž„์Šคํƒฌํ”„ ์ž์ฒด(์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€๋Š” ์„œ๋ฒ„์—์„œ ๊ฑฐ๋ถ€๋จ). ์ด๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ์ „์—ญ์ ์ธ ์‹๋ณ„์ž๋ผ๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๋™์•ˆ - ๊ธฐ์–ต session_id - ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค: ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ํ•œ ์„ธ์…˜์„ ์œ„ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค๋ฅธ ์„ธ์…˜์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.. ์ฆ‰, ์ด๋ฏธ ์žˆ์Œ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์„ธ ๋ ˆ๋ฒจ โ€” ์„ธ์…˜, ์„ธ์…˜ ๋ฒˆํ˜ธ, ๋ฉ”์‹œ์ง€ ID. ์™œ ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•œ์ง€, ์ด ๋ฏธ์Šคํ„ฐ๋ฆฌ๋Š” ๋งค์šฐ ํฝ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, msg_id ํ•„์š”ํ•œโ€ฆ

RPC: ์š”์ฒญ, ์‘๋‹ต, ์˜ค๋ฅ˜. ํ™•์ธ.

์•Œ๋‹ค์‹œํ”ผ ์Šคํ‚ค๋งˆ์˜ ์–ด๋Š ๊ณณ์—๋„ "RPC ์š”์ฒญ ๋งŒ๋“ค๊ธฐ"๋ผ๋Š” ํŠน์ˆ˜ํ•œ ์œ ํ˜•์ด๋‚˜ ํ•จ์ˆ˜๋Š” ์—†์ง€๋งŒ ์‘๋‹ต์€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ฝ˜ํ…์ธ  ๊ด€๋ จ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๊ฑด, ์–ด๋–ค ๋ฉ”์‹œ์ง€๋Š” ์š”์ฒญ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด. ๊ฒฐ๊ตญ, ๊ฐ ์ด msg_id. ๋‹ต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

rpc_result#f35c6d01 req_msg_id:long result:Object = RpcResult;

์ด๊ฒƒ์ด ์–ด๋–ค ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์‘๋‹ต์ธ์ง€ ํ‘œ์‹œ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ API์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ๊ท€ํ•˜์˜ ์š”์ฒญ์ด ๋ช‡ ๋ฒˆ์ธ์ง€ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋น„๋™๊ธฐ์‹์ด๋ฉฐ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ˆœ์„œ๋กœ๋“  ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์›์น™์ ์œผ๋กœ ์ด๊ฒƒ๊ณผ ์ž‘์—…์ž ์—†์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์—์„œ ์ด ์•„ํ‚คํ…์ฒ˜์˜ ์ด๋ฉด์— ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์™€ TCP ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ์„œ๋ฒ„๋Š” ํ”„๋ŸฐํŠธ ์—”๋“œ ๋ฐธ๋Ÿฐ์„œ์ด๋ฉฐ ์š”์ฒญ์„ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋‚ด๊ณ  ๋‹ค์‹œ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. message_id. ์—ฌ๊ธฐ์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์ด๋ฉฐ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋„ค?.. ๊ทธ๋ฆฌ๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด? ๊ฒฐ๊ตญ RPC ์‘๋‹ต ์ž์ฒด์—๋„ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. msg_id! ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์—์„œ "๋‹น์‹ ์€ ๋‚ด ๋Œ€๋‹ต์— ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!"๋ผ๊ณ  ์†Œ๋ฆฌ์ณ์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ํ™•์ธ์— ๋Œ€ํ•ด ๋ฌด์—‡์ด ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ํŽ˜์ด์ง€ ์ •๋ณด ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€ ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค

msgs_ack#62d6b459 msg_ids:Vector long = MsgsAck;

๊ทธ๋ฆฌ๊ณ  ์–‘์ชฝ์ด ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค! RpcResult๋ฅผ ๋ฐ›์œผ๋ฉด ์ž์ฒด์ ์œผ๋กœ ์Šน์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ฒ„๋Š” MsgsAck๋กœ ์š”์ฒญ์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "๋ฐ›์•˜์Šต๋‹ˆ๋‹ค." RpcResult์— ์ฆ‰์‹œ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋„ค, ์—ฌ์ „ํžˆ ๋Œ€๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ํ™•์ธ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์„œ๋ฒ„์—์„œ ๋ฐฐ๋‹ฌ๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ๋‹ค์‹œ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์žฌ์ ‘์† ํ›„์—๋„. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋ฌผ๋ก  ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„์— ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋™์•ˆ ์ฟผ๋ฆฌ ์‹คํ–‰์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ๊ณ ๋ คํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

rpc_error#2144ca19 error_code:int error_message:string = RpcError;

์˜ค, ๋ˆ„๊ตฐ๊ฐ€ ์™ธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋” ์ธ๊ฐ„์ ์ธ ํ˜•์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ค„์ด ์žˆ์Šต๋‹ˆ๋‹ค! ์ฒœ์ฒœํžˆํ•˜์„ธ์š”. ์—ฌ๊ธฐ ์˜ค๋ฅ˜ ๋ชฉ๋ก๊ทธ๋Ÿฌ๋‚˜ ํ™•์‹คํžˆ ์™„์ „ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๊ฐ€ - ๊ฐ™์€ ๊ฒƒ HTTP ์˜ค๋ฅ˜(๋ฌผ๋ก  ์‘๋‹ต์˜ ์˜๋ฏธ ์ฒด๊ณ„๋Š” ์กด์ค‘๋˜์ง€ ์•Š์œผ๋ฉฐ ์ผ๋ถ€ ์œ„์น˜์—์„œ๋Š” ๋ฌด์ž‘์œ„๋กœ ์ฝ”๋“œ๋กœ ๋ฐฐํฌ๋จ) ๋ฌธ์ž์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. CAPITAL_LETTERS_AND_NUMBERS. ์˜ˆ: PHONE_NUMBER_OCCUPIED ๋˜๋Š” FILE_PART_X_MISSING. ์Œ, ์ฆ‰, ์—ฌ์ „ํžˆ ์ด ๋ผ์ธ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ ๋ถ„์„. ์˜ˆ๋ฅผ ๋“ค์–ด, FLOOD_WAIT_3600 XNUMX์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๊ณ , PHONE_MIGRATE_5์ด ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ์žˆ๋Š” ์ „ํ™”๋ฒˆํ˜ธ๋Š” 5๋ฒˆ์งธ DC์— ๋“ฑ๋ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž… ์–ธ์–ด๊ฐ€ ์žˆ์ฃ ? ๋ฌธ์ž์—ด์—์„œ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์„œ๋น„์Šค ๋ฉ”์‹œ์ง€ ํŽ˜์ด์ง€์— ์—†์ง€๋งŒ ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ ๊ด€๋ก€์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฌธ์„œ ํŽ˜์ด์ง€์—์„œ. ๋˜๋Š” ์˜์‹ฌ์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๋‹ค. ๋จผ์ €, ํƒ€์ดํ•‘/๋ ˆ์ด์–ด ์œ„๋ฐ˜ - RpcError ์— ํˆฌ์žํ•  ์ˆ˜ ์žˆ๋‹ค RpcResult. ๋ฐ–์—์„  ์™œ ์•ˆ๋ผ? ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?.. ๋”ฐ๋ผ์„œ ๋ณด์žฅ์€ ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? RpcError ์— ํˆฌ์žํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค RpcResult, ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์œ ํ˜•์— ์ง์ ‘ ๋˜๋Š” ์ค‘์ฒฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ถ€์กฑํ•˜๋‹ค req_msg_id ? ..

๊ทธ๋Ÿฌ๋‚˜ ์„œ๋น„์Šค ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ๊ณ„์†ํ•ฉ์‹œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ์˜ค๋žซ๋™์•ˆ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋ฉ‹์ง„ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

rpc_drop_answer#58e4a740 req_msg_id:long = RpcDropAnswer;

์„ธ ๊ฐ€์ง€ ๋Œ€๋‹ต์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‹ค์‹œ ํ™•์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ต์ฐจํ•˜์—ฌ ๋ฌด์—‡์ด ๋˜์–ด์•ผ ํ•˜๋Š”์ง€(๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ™•์ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์œ ํ˜•์˜ ๋ชฉ๋ก์€ ๋ฌด์—‡์ธ์ง€) ์ดํ•ดํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ๋…์ž๋Š” ์ˆ™์ œ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค(์ฐธ๊ณ : Telegram Desktop ์†Œ์Šค์˜ ์ •๋ณด๊ฐ€ ์™„์ „ํ•˜์ง€ ์•Š์Œ).

์ค‘๋…: ๋ฉ”์‹œ์ง€ ๊ฒŒ์‹œ๋ฌผ ์ƒํƒœ

์ผ๋ฐ˜์ ์œผ๋กœ TL, MTProto ๋ฐ Telegram์˜ ๋งŽ์€ ๊ณณ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์™„๊ณ ํ•œ ๋Š๋‚Œ์„ ๋‚จ๊ธฐ์ง€ ๋งŒ ๊ณต์†ํ•จ, ์žฌ์น˜ ๋ฐ ๊ธฐํƒ€ ์†Œํ”„ํŠธ ์Šคํ‚ฌ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ •์ค‘ํ•˜๊ฒŒ ์นจ๋ฌต์„ ์ง€์ผฐ๊ณ  ๋Œ€ํ™”์˜ ์Œ๋ž€๋ฌผ์€ ๊ฒ€์—ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ด ์žฅ์†ŒะžํŽ˜์ด์ง€์˜ ๋Œ€๋ถ€๋ถ„ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€ ์˜ค๋žซ๋™์•ˆ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ๋กœ ์ž‘์—…ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๊ณก๋ฅ ์˜ ์ž์ „๊ฑฐ๋ฅผ ๋ณธ ๋‚˜์—๊ฒŒ๋„ ์ถฉ๊ฒฉ์„์ค๋‹ˆ๋‹ค.

ํ™•์ธ๊ณผ ํ•จ๊ป˜ ๋ฌดํ•ดํ•˜๊ฒŒ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์šฐ๋ฆฌ๋Š”

bad_msg_notification#a7eff811 bad_msg_id:long bad_msg_seqno:int error_code:int = BadMsgNotification;
bad_server_salt#edab447b bad_msg_id:long bad_msg_seqno:int error_code:int new_server_salt:long = BadMsgNotification;

์Œ, MTProto๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์€ "์ˆ˜์ • - ์žฌ์ปดํŒŒ์ผ - ์‹œ์ž‘" ์ฃผ๊ธฐ์—์„œ ์ˆ˜์ • ์ค‘์— ์ฉ์€ ์ˆซ์ž ์˜ค๋ฅ˜ ๋˜๋Š” ์†”ํŠธ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์›๋ณธ ๋ฉ”์‹œ์ง€๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋Œ€๊ธฐ์—ด์„ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ๊ทธ ์ด์ƒํ•œ ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 16, 17, 18, 19, 20, 32, 33, 34, 35, 48, 64โ€ฆ ๋‚˜๋จธ์ง€ ์ˆซ์ž๋Š” ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ, ํ† ๋ฏธ?

์„ค๋ช…์„œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜๋„๋Š” error_code ๊ฐ’์ด ๊ทธ๋ฃนํ™”๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(error_code >> 4). ์˜ˆ๋ฅผ ๋“ค์–ด ์ฝ”๋“œ 0x40 - 0x4f๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ถ„ํ•ด์˜ ์˜ค๋ฅ˜์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฒซ ๋ฒˆ์งธ๋Š” ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ์˜ ์ด๋™์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ž‘๊ฐ€์˜ ๋จธ๋ฆฌ ์†์—?.. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ๋“ค์€ ์‚ฌ์†Œํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

์ค‘๋…์€ ๊ฒŒ์‹œ๋ฌผ ์ƒํƒœ ๋ฉ”์‹œ์ง€์™€ ๊ฒŒ์‹œ๋ฌผ ์‚ฌ๋ณธ์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

  • ๋ฉ”์‹œ์ง€ ์ƒํƒœ ์ •๋ณด ์š”์ฒญ
    ํ•œ ๋‹น์‚ฌ์ž๊ฐ€ ํ•œ๋™์•ˆ ๋ฐœ์‹  ๋ฉ”์‹œ์ง€ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋ช…์‹œ์ ์œผ๋กœ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    msgs_state_req#da69fb52 msg_ids:Vector long = MsgsStateReq;
  • ๋ฉ”์‹œ์ง€ ์ƒํƒœ์— ๊ด€ํ•œ ์ •๋ณด ๋ฉ”์‹œ์ง€
    msgs_state_info#04deb57d req_msg_id:long info:string = MsgsStateInfo;
    ์—ฌ๊ธฐ info ๋“ค์–ด์˜ค๋Š” msg_ids ๋ชฉ๋ก์˜ ๊ฐ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ XNUMX๋ฐ”์ดํŠธ์˜ ๋ฉ”์‹œ์ง€ ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

    • 1 = ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ์•Œ๋ ค์ง„ ๊ฒƒ์ด ์—†์Œ(msg_id๊ฐ€ ๋„ˆ๋ฌด ๋‚ฎ์Œ, ์ƒ๋Œ€๋ฐฉ์ด ์žŠ์–ด๋ฒ„๋ ธ์„ ์ˆ˜ ์žˆ์Œ)
    • 2 = ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜์ง€ ์•Š์Œ(msg_id๋Š” ์ €์žฅ๋œ ์‹๋ณ„์ž ๋ฒ”์œ„์— ์†ํ•˜์ง€๋งŒ ์ƒ๋Œ€๋ฐฉ์€ ํ™•์‹คํžˆ ๊ทธ๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š์Œ)
    • 3 = ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜์ง€ ์•Š์Œ(msg_id๊ฐ€ ๋„ˆ๋ฌด ๋†’์ง€๋งŒ ์ƒ๋Œ€๋ฐฉ์ด ์•„์ง ์ˆ˜์‹ ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ํ™•์‹คํ•จ)
    • 4 = ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ๋จ(์ด ์‘๋‹ต์€ ๋™์‹œ์— ์ˆ˜์‹  ํ™•์ธ์ด๊ธฐ๋„ ํ•จ)
    • +8 = ์ด๋ฏธ ํ™•์ธ๋œ ๋ฉ”์‹œ์ง€
    • +16 = ์Šน์ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€
    • +32 = ์ฒ˜๋ฆฌ ์ค‘์ด๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฏธ ์™„๋ฃŒ๋œ ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ RPC ์ฟผ๋ฆฌ
    • +64 = ์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ  ๊ด€๋ จ ์‘๋‹ต
    • +128 = ์ƒ๋Œ€๋ฐฉ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ์ด๋ฏธ ์ˆ˜์‹ ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ์Œ
      ์ด ์‘๋‹ต์—๋Š” ์Šน์ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ msgs_state_req ์ž์ฒด์— ๋Œ€ํ•œ ์Šน์ธ์ž…๋‹ˆ๋‹ค.
      ๊ฐ‘์ž๊ธฐ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋ณด๋‚ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€๋ฐฉ์ด ๋™์‹œ์— ๋‘ ๊ฐœ์˜ ๋ฉ”์‹œ์ง€ ์‚ฌ๋ณธ์„ ์ˆ˜์‹ ํ•˜๋”๋ผ๋„ ์ค‘๋ณต ๋ฉ”์‹œ์ง€๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. (๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜์—ฌ ์›๋ž˜ msg_id๊ฐ€ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋Š” msg_copy๋กœ ๋ž˜ํ•‘๋ฉ๋‹ˆ๋‹ค.)
  • ๋ฉ”์‹œ์ง€ ํ˜„ํ™ฉ ์ž๋ฐœ์  ์ „๋‹ฌ
    ๊ฐ ๋‹น์‚ฌ์ž๋Š” ์ƒ๋Œ€๋ฐฉ์ด ์ „์†กํ•œ ๋ฉ”์‹œ์ง€์˜ ์ƒํƒœ๋ฅผ ์ž๋ฐœ์ ์œผ๋กœ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    msgs_all_info#8cc0d131 msg_ids:Vector long info:string = MsgsAllInfo
  • ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€ ์ƒํƒœ์— ๋Œ€ํ•œ ํ™•์žฅ๋œ ์ž๋ฐœ์  ํ†ต์‹ 
    ...
    msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
    msg_new_detailed_info#809db6df answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
  • ๋ฉ”์‹œ์ง€ ์žฌ์ „์†ก์— ๋Œ€ํ•œ ๋ช…์‹œ์  ์š”์ฒญ
    msg_resend_req#7d861a08 msg_ids:Vector long = MsgResendReq;
    ์›๊ฒฉ ๋‹น์‚ฌ์ž๋Š” ์š”์ฒญ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ์ „์†กํ•˜์—ฌ ์ฆ‰์‹œ ์‘๋‹ต [...]
  • ๋‹ต๋ณ€ ์žฌ์ „์†ก์— ๋Œ€ํ•œ ๋ช…์‹œ์  ์š”์ฒญ
    msg_resend_ans_req#8610baeb msg_ids:Vector long = MsgResendReq;
    ์›๊ฒฉ ๋‹น์‚ฌ์ž๋Š” ์ฆ‰์‹œ ์žฌ์ „์†กํ•˜์—ฌ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€ ์š”์ฒญ๋œ ๋ฉ”์‹œ์ง€์— [โ€ฆ]
  • ๋ฉ”์‹œ์ง€ ์‚ฌ๋ณธ
    ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์€ msg_id๊ฐ€ ์žˆ๋Š” ์ด์ „ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ณต์‚ฌ ์ปจํ…Œ์ด๋„ˆ์— ๋ž˜ํ•‘๋ฉ๋‹ˆ๋‹ค.
    msg_copy#e06046b2 orig_message:Message = MessageCopy;
    ์ˆ˜์‹ ๋˜๋ฉด ๋ฉ”์‹œ์ง€๋Š” ๋ž˜ํผ๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ orig_message.msg_id ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋œ ๊ฒƒ์ด ํ™•์‹คํ•œ ๊ฒฝ์šฐ ์ƒˆ ๋ฉ”์‹œ์ง€๋Š” ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋™์‹œ์— ํ•ด๋‹น ๋ฉ”์‹œ์ง€์™€ orig_message.msg_id๊ฐ€ ํ™•์ธ๋จ). orig_message.msg_id์˜ ๊ฐ’์€ ์ปจํ…Œ์ด๋„ˆ์˜ msg_id๋ณด๋‹ค ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค์— ๋Œ€ํ•ด์„œ๋„ ์นจ๋ฌต์„ ์ง€ํ‚ต์‹œ๋‹ค. msgs_state_info ๋‹ค์‹œ, ๋ฏธ์™„์„ฑ TL์˜ ๊ท€๊ฐ€ ํŠ€์–ด๋‚˜์˜ต๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š” ๋ฐ”์ดํŠธ ๋ฒกํ„ฐ๊ฐ€ ํ•„์š”ํ–ˆ๊ณ  enum์˜ ํ•˜์œ„ ๋‘ ๋น„ํŠธ์™€ ์ด์ „ ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ์— ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค). ์š”์ ์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์—์„œ ํ•„์š”ํ•œ๊ฐ€์š”?.. ์–ด๋ ค์›€์ด ์žˆ์ง€๋งŒ ์‚ฌ๋žŒ์ด ๋””๋ฒ„๊น…์— ์ฐธ์—ฌํ•˜๊ณ  ๋Œ€ํ™”์‹ ๋ชจ๋“œ์—์„œ ์„œ๋ฒ„์— ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ๋ฌผ์–ด๋ณด๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ๋Š”์ง€ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฒญ์€ ์—ฌ๊ธฐ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™•๋ณต ์—ฌํ–‰.

๋”ฐ๋ผ์„œ ๊ฐ ์ธก์€ ๋ฉ”์‹œ์ง€๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๋ณด๋‚ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ, ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋‹ต๋ณ€ ๋ฐ ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ๊ฐ„ ๋™์•ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค๋ช…์„œ์—๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ํƒ€์ด๋ฐ์ด๋‚˜ ์‹ค์ œ ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์ด ์„ค๋ช…๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ. ๊ฐ€์žฅ ๋†€๋ผ์šด ๊ฒƒ์€ ์‹ค์ œ๋กœ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋ถ„๋ช…ํžˆ ๊ทธ๋“ค์€ ๊ณต๊ฐœ ๋ฌธ์„œ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ์„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์ดํ•ด ์ด์œ , ๋” ์ด์ƒ TL์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (๋น„๊ต์ ์œผ๋กœ) ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์— ์—ฐ๊ฒฐ๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ํ›จ์”ฌ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•‘๊ณผ ํƒ€์ด๋ฐ. ๋Œ€๊ธฐ์—ด.

๋ชจ๋“  ๊ฒƒ์—์„œ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜(๋ฐฑ์—”๋“œ ๊ฐ„ ์š”์ฒญ ๋ฐฐํฌ)์— ๋Œ€ํ•œ ์ถ”์ธก์„ ๊ธฐ์–ตํ•˜๋ฉด ๋‹ค์†Œ ๋‘”ํ•œ ์ผ์ด ๋’ค๋”ฐ๋ฆ…๋‹ˆ๋‹ค. TCP์˜ ๋ชจ๋“  ์ „๋‹ฌ ๋ณด์žฅ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ (๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ์ค‘๋‹จ๋˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ˆœ๊ฐ„๊นŒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค), MTProto ์ž์ฒด์—์„œ ํ™•์ธ- ๋ณด์žฅ ์—†์Œ. ์„œ๋ฒ„๋Š” ์‰ฝ๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์žƒ๊ฑฐ๋‚˜ ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ชฉ๋ฐœ์„ ๋ง‰๋Š” ๊ฒƒ ์™ธ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค๋„ - ๋ฉ”์‹œ์ง€ ํ. ๊ธ€์Ž„์š”, ํ•œ ๊ฐ€์ง€๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฒƒ์ด ๋ถ„๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธ๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋Š” ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ช‡์‹œ์—? ๊ทธ๋ฆฌ๊ณ  ๊ด‘๋Œ€๋Š” ๊ทธ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๋Ÿฌํ•œ ์ค‘๋…์ž ์„œ๋น„์Šค ๋ฉ”์‹œ์ง€๋Š” ๋ชฉ๋ฐœ๋กœ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋“  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Telegram Desktop์—๋Š” ์ด์— ํ•ด๋‹นํ•˜๋Š” ์•ฝ 4 ๊ฐœ์˜ ๋Œ€๊ธฐ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค (์•„๋งˆ๋„ ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋” ๋งŽ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์™€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋” ์ง„์ง€ํ•˜๊ฒŒ ์กฐ์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— ์‹œ๊ฐ„, ์šฐ๋ฆฌ๋Š” ์ƒ˜ํ”Œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ MTProto ์ฒด๊ณ„์˜ ํŠน์ • ์œ ํ˜•์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ์ ์–ด๋„ ํ”„๋ก ํŠธ ๋ฐธ๋Ÿฐ์„œ์—์„œ ๋ฒ„ํผ๋ง์กฐ์ฐจ ํ•  ์ˆ˜ ์—†์—ˆ๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์˜ฎ๊ฒผ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•„์‚ฌ์ ์œผ๋กœ Vasily๋Š” TCP์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ๋Œ€๊ธฐ์—ด๋งŒ ์žˆ๋Š” ๋Œ€์ฒด ์˜ต์…˜์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ฒ„์— ๋Œ€ํ•œ RTT๋ฅผ ์ธก์ •ํ•˜๊ณ  ์Šน์ธ๋˜์ง€ ์•Š์€ ์š”์ฒญ ์ˆ˜์— ๋”ฐ๋ผ "์ฐฝ" ํฌ๊ธฐ(๋ฉ”์‹œ์ง€์—์„œ)๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ถ”์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€๋žต์ ์ธ ํœด๋ฆฌ์Šคํ‹ฑ์ž…๋‹ˆ๋‹ค. ๋™์‹œ์— ์”น์„ ์ˆ˜ ์žˆ๊ณ  ์žƒ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ธ€์Ž„์š”, ์ดํ•ดํ•˜์‹œ๊ฒ ์ฃ ? TCP๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ์œ„์— TCP๋ฅผ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด๋Š” ๋งค์šฐ ์ž˜๋ชป ์„ค๊ณ„๋œ ํ”„๋กœํ† ์ฝœ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋„ค, ์™œ ๋‘˜ ์ด์ƒ์˜ ๋Œ€๊ธฐ์—ด์ด ํ•„์š”ํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์ด ๊ณ ์ˆ˜์ค€ API๋กœ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋ณด์„ธ์š”, ์š”์ฒญ์„ ํ•˜๊ณ  ์ง๋ ฌํ™”ํ•˜์ง€๋งŒ ์ฆ‰์‹œ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์™œ? ๋Œ€๋‹ต์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— msg_id, ์ผ์‹œ์ ์ธะฐ๋‚˜๋Š” ์•ฝ์†์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋Šฆ๊ฒŒ ์—ฐ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ๋ ˆ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์™€ ๊ทธ๊ฒƒ ์‚ฌ์ด์˜ ์‹œ๊ฐ„ ๋ถˆ์ผ์น˜๋กœ ์ธํ•ด ๊ฐ‘์ž๊ธฐ ์„œ๋ฒ„๊ฐ€ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค (๋ฌผ๋ก  ์šฐ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ํ˜„์žฌ์—์„œ ์ด๋™์‹œํ‚ค๋Š” ๋ฒ„ํŒ€๋ชฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์‘๋‹ต์—์„œ ๊ณ„์‚ฐ๋œ ๋ธํƒ€๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„œ๋ฒ„ ์‹œ๊ฐ„์— - ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ๋ฒ„ํผ๋ง์œผ๋กœ ์ธํ•ด ์กฐ์žกํ•˜๊ณ  ๋ถ€์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋กœ์ปฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์š”์ฒญํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  1. ๋™์ผํ•œ ๋Œ€๊ธฐ์—ด์— ์žˆ์œผ๋ฉฐ ์•”ํ˜ธํ™”๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ •ํ•ด์ง„ msg_id ๋ฉ”์‹œ์ง€๋Š” ๋‹ค๋ฅธ ๋Œ€๊ธฐ์—ด๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ์ „๋‹ฌ; ์†Œ์ผ“์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  3. a) ์„œ๋ฒ„๊ฐ€ MsgsAck์— ์‘๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์œผ๋ฏ€๋กœ "๋‹ค๋ฅธ ๋Œ€๊ธฐ์—ด"์—์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    b) ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ, ๊ทธ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š์•˜๊ณ  badmsg๋ผ๊ณ  ๋Œ€๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "๋‹ค๋ฅธ ๋Œ€๊ธฐ์—ด"์—์„œ ๋‹ค์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
    c) ์•Œ๋ ค์ง„ ๋ฐ”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ํ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ ์–ธ์ œ์ธ์ง€๋Š” ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  4. ์„œ๋ฒ„๊ฐ€ ๋งˆ์นจ๋‚ด ์‘๋‹ตํ•จ RpcResult - ์‹ค์ œ ์‘๋‹ต(๋˜๋Š” ์˜ค๋ฅ˜) - ์ „๋‹ฌ๋˜์—ˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด์ฉŒ๋ฉด, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•˜๋‚˜๋กœ ์••์ถ•๋˜๊ณ  ์„œ๋ฒ„๊ฐ€ ํ•œ ๋ฒˆ์— ๋ชจ๋‘์— ๋Œ€ํ•œ ์Šน์ธ์œผ๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. msg_id. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Š” ๋˜ํ•œ ์ด ํŒฉ์„ ๊ฑฐ๋ถ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ „์ฒด๋„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์‹œ์ ์—์„œ ๋น„๊ธฐ์ˆ ์  ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝํ—˜์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ๋ชฉ๋ฐœ์„ ๋ณด์•˜๊ณ  ์ด์ œ ๋‚˜์œ ์กฐ์–ธ๊ณผ ์•„ํ‚คํ…์ฒ˜์˜ ๋” ๋งŽ์€ ์˜ˆ๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์—์„œ ๊ทธ๋Ÿฌํ•œ ๊ฒฐ์ •์„ ์‹ ๋ขฐํ•˜๊ณ  ๋‚ด๋ฆด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์งˆ๋ฌธ์€ ์ˆ˜์‚ฌ์ ์ž…๋‹ˆ๋‹ค(๋ฌผ๋ก  ์•„๋‹™๋‹ˆ๋‹ค).

์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? "๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์ค‘๋…์„ฑ ๋ฉ”์‹œ์ง€"๋ผ๋Š” ์ฃผ์ œ์— ๋Œ€ํ•ด "๋‹น์‹ ์€ ๋ฉ์ฒญํ•˜๊ณ  ์šฐ๋ฆฌ์˜ ํ›Œ๋ฅญํ•œ ์•„์ด๋””์–ด๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค! "์™€ ๊ฐ™์€ ๋ฐ˜๋Œ€ ์˜๊ฒฌ์œผ๋กœ ์—ฌ์ „ํžˆ ์ถ”์ธก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋จผ์ € ์ผ๋ฐ˜ ์‚ฌ๋žŒ๋“ค์ด ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋ก ์  ๊ทผ๊ฑฐ์™€ ํŒจํ‚ท ๊ตํ™˜ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋‚˜์„œ ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค) ํƒ€์ด๋ฐ/์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ์ˆœ์ „ํžˆ ์‹ค์šฉ์ ์ด๊ณ  ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ œ์ด๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์—ฌ๊ธฐ์—์„œ ์˜ค๋žซ๋™์•ˆ ์•Œ๋ ค์ ธ ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ค๋ช…์„œ๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ์•Œ๋ ค ์ค๋‹ˆ๊นŒ?

์„œ๋ฒ„๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ RPC ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€(์ผ๋ฐ˜์ ์œผ๋กœ RPC ์ฟผ๋ฆฌ) ์ˆ˜์‹ ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ๋จผ์ € ์ˆ˜์‹  ํ™•์ธ์„ ๋ณด๋‚ด๊ณ  ๋‹ค์†Œ ๋‚˜์ค‘์— RPC ์‘๋‹ต ์ž์ฒด๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„ˆ๋ฌด ๋Šฆ๊ฒŒ ์ „์†ก๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์˜ˆ: ์ˆ˜์‹  ํ›„ 60-120์ดˆ ํ›„์— ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ) ๋‹ค์Œ RPC ์ฟผ๋ฆฌ์— ์Šน์ธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€(์ผ๋ฐ˜์ ์œผ๋กœ RPC ์‘๋‹ต) ์ˆ˜์‹ ์„ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€). ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ ์„œ๋ฒ„์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ด์œ ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์„œ๋ฒ„์—์„œ ์Šน์ธ๋˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ(์˜ˆ: 16๊ฐœ ์ด์ƒ) ํด๋ผ์ด์–ธํŠธ๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์Šน์ธ์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

... ๋‚˜๋Š” ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค : ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ํ•„์š”ํ•œ์ง€, ์–ด๋–ป๊ฒŒ ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์Œ, ์ด๋ ‡๊ฒŒ๋˜๋„๋ก ์ถ”์ •ํ•ฉ์‹œ๋‹ค.

ํ•‘ ์ •๋ณด:

ํ•‘ ๋ฉ”์‹œ์ง€(PING/PONG)

ping#7abe77ec ping_id:long = Pong;

์‘๋‹ต์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•œ ์—ฐ๊ฒฐ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

pong#347773c5 msg_id:long ping_id:long = Pong;

์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€์—๋Š” ์Šน์ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Pong์€ Ping์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ๋งŒ ์ „์†ก๋˜๋ฉฐ Ping์€ ์–‘์ชฝ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์—ฐ๋œ ์—ฐ๊ฒฐ ํ์‡„ + PING

ping_delay_disconnect#f3427b8c ping_id:long disconnect_delay:int = Pong;

ํ•‘์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ ํ›„ ์„œ๋ฒ„๋Š” ๋ชจ๋“  ์ด์ „ ํƒ€์ด๋จธ๋ฅผ ์ž๋™์œผ๋กœ ์žฌ์„ค์ •ํ•˜๋Š” ๋™์ผํ•œ ์œ ํ˜•์˜ ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š” ํ•œ disconnect_delay์ดˆ ํ›„์— ํ˜„์žฌ ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ํƒ€์ด๋จธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ 60์ดˆ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ์ด๋Ÿฌํ•œ ping์„ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ disconnect_delay๋ฅผ 75์ดˆ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹  ๋ฏธ์ณค์–ด?! 60์ดˆ ์•ˆ์— ๊ธฐ์ฐจ๋Š” ์—ญ์— ์ง„์ž…ํ•˜์—ฌ ์Šน๊ฐ์„ ๋‚ด๋ฆฌ๊ณ  ํƒœ์šฐ๊ณ  ํ„ฐ๋„์—์„œ ๋‹ค์‹œ ์—ฐ๊ฒฐ์ด ๋Š๊น๋‹ˆ๋‹ค. 120์ดˆ ์•ˆ์— ์ฃผ๋ณ€์„ ์ฐŒ๋ฅด๋Š” ๋™์•ˆ ๊ทธ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์ฐฉํ•˜๊ณ  ์—ฐ๊ฒฐ์ด ๋Š์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์Œ, ๋‹ค๋ฆฌ๊ฐ€ ์–ด๋””์—์„œ ์ž๋ผ๋Š”์ง€๋Š” ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. "์šธ๋ฆฌ๋Š” ์†Œ๋ฆฌ๊ฐ€ ๋“ค๋ฆฌ์ง€๋งŒ ์–ด๋”” ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค." ๋Œ€ํ™”์‹ ์ž‘์—…์„์œ„ํ•œ Nagle ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ TCP_NODELAY ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ธ 200์„ ์ง€์—ฐ์‹œํ‚ค์„ธ์š”. ๋ฐ€๋ฆฌ์ดˆ. ์ •๋ง๋กœ ๋น„์Šทํ•œ ๊ฒƒ์„ ๋ฌ˜์‚ฌํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ๋ช‡ ๊ฐœ์˜ ํŒจํ‚ท์„ ์ ˆ์•ฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด - ์Œ, ์ ์–ด๋„ 5์ดˆ ๋™์•ˆ ์—ฐ๊ธฐํ•˜๊ฑฐ๋‚˜ "์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ ์ค‘์ž…๋‹ˆ๋‹ค..." ๋ฉ”์‹œ์ง€์˜ ์‹œ๊ฐ„ ์ œํ•œ์ด ๋ฌด์—‡์ด๋“  ๊ฐ„์— ์ง€๊ธˆ์ด ๋ฌด์—‡์ด๋“  ์—ฐ๊ธฐํ•˜์‹ญ์‹œ์˜ค. ํ•˜์ง€๋งŒ ๋” ์ด์ƒ.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•‘. ์ฆ‰, TCP ์—ฐ๊ฒฐ์˜ ํ™œ์„ฑ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์žฌ๋ฐŒ์ง€ ๋งŒ ์•ฝ 10 ๋…„ ์ „์— ์ €๋Š” ์šฐ๋ฆฌ ๊ต์ˆ˜์ง„ ํ˜ธ์Šคํ…” ๋ฉ”์‹ ์ €์— ๋Œ€ํ•œ ๋น„ํŒ์ ์ธ ํ…์ŠคํŠธ๋ฅผ ์ผ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ณณ์—์„œ ์ €์ž๋„ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋ฅผ ํ•‘ํ–ˆ๊ณ  ๊ทธ ๋ฐ˜๋Œ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ทผ๋ฐ 3ํ•™๋…„๋„ ๊ทธ๋ ‡๊ณ , ๊ตญ์ œ์‚ฌ๋ฌด์†Œ๋Š” ๋˜ ๋‹ค๋ฅธ๊ฑฐ์ฃ ? ..

์ฒซ์งธ, ์†Œ๊ทœ๋ชจ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ท ๊ตํ™˜์ด ์—†๋Š” TCP ์—ฐ๊ฒฐ์€ ๋ช‡ ์ฃผ ๋™์•ˆ ์ง€์†๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ข‹๊ธฐ๋„ ํ•˜๊ณ  ๋‚˜์˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ธ€์Ž„, ์„œ๋ฒ„์— ๋Œ€ํ•œ SSH ์—ฐ๊ฒฐ์ด ์—ด๋ ค ์žˆ์œผ๋ฉด ์ปดํ“จํ„ฐ์—์„œ ์ผ์–ด๋‚˜ ํŒŒ์›Œ ๋ผ์šฐํ„ฐ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๊ณ  ์ œ์ž๋ฆฌ๋กœ ๋Œ์•„ ์™”์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ ์„ธ์…˜์€ ์ค‘๋‹จ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜๊ณ  ํŒจํ‚ท๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค). ํŽธ๋ฆฌํ•œ. ์„œ๋ฒ„์— ์ˆ˜์ฒœ ๊ฐœ์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๊ณ  ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐจ์ง€ํ•˜๊ณ (์•ˆ๋…•ํ•˜์„ธ์š” Postgres!) ํด๋ผ์ด์–ธํŠธ ํ˜ธ์ŠคํŠธ๊ฐ€ ์˜ค๋ž˜ ์ „์— ์žฌ๋ถ€ํŒ…๋˜์—ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฑ„ํŒ…/IM ์‹œ์Šคํ…œ์€ ๋˜ ๋‹ค๋ฅธ ์ถ”๊ฐ€ ์ด์œ ์ธ ์˜จ๋ผ์ธ ์ƒํƒœ๋กœ ์ธํ•ด ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "๋–จ์–ด์กŒ๋‹ค"๋ฉด ๋Œ€ํ™” ์ƒ๋Œ€์—๊ฒŒ ์•Œ๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Jabber์˜ ์ œ์ž‘์ž๊ฐ€ ๋งŒ๋“ (๊ทธ๋ฆฌ๊ณ  20๋…„ ๋™์•ˆ ์ˆ˜์ •๋œ) ์‹ค์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์ง€๋งŒ ์‚ฌ์šฉ์ž๋Š” ๊ทธ๊ฐ€ ์˜จ๋ผ์ธ ์ƒํƒœ๋ผ๊ณ  ๋ฏฟ๊ณ  ๊ณ„์†ํ•ด์„œ ๊ทธ์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์”๋‹ˆ๋‹ค(๋ช‡ ๋ถ„ ์ „์— ์™„์ „ํžˆ ์†์‹ค๋จ). ํœด์‹์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ์•„๋‹ˆ์š”, TCP ํƒ€์ด๋จธ์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋””์—์„œ๋‚˜ ํŠ€์–ด ๋‚˜์˜ค๋Š” TCP_KEEPALIVE ์˜ต์…˜(์ˆ˜์‹ญ ์ดˆ์™€ ๊ฐ™์€ ์•ผ์ƒ ๊ฐ’ ์„ค์ •)์€ ์—ฌ๊ธฐ์—์„œ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ๋Š” ์‚ด์•„ ์žˆ์ง€๋งŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋„ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ •์ง€ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? Ubuntu 18.04์˜ Telegram Desktop์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ถฉ๋Œํ–ˆ์Šต๋‹ˆ๋‹ค).

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ping์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๊ทธ ๋ฐ˜๋Œ€๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ํ•‘์ด ์ „๋‹ฌ๋˜์ง€ ์•Š๊ณ  ๋ชฉํ‘œ๊ฐ€ ๋‹ฌ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Telegram์—์„œ ๋ฌด์—‡์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ชจ๋“  ๊ฒƒ์ด ์ •๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค! ์Œ, ์ฆ‰ ๋ฌผ๋ก  ๊ณต์‹์ ์œผ๋กœ ์–‘์ธก์€ ์„œ๋กœ ํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ชฉ๋ฐœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ping_delay_disconnect, ์„œ๋ฒ„์˜ ํƒ€์ด๋จธ๋ฅผ ์ž‘๋™์‹œํ‚ต๋‹ˆ๋‹ค. ์Œ, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ์ด ํ•‘ ์—†์ด ๊ทธ๊ณณ์—์„œ ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์‚ด๊ณ  ์‹ถ์€์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ณ ๊ฐ์˜ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ถ€ํ•˜์— ๋”ฐ๋ผ ์„œ๋ฒ„๊ฐ€ ๋” ์ž˜ ์••๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌผ๋ก  ์ž์›์— ๋Œ€ํ•ด ๋ฏธ์•ˆํ•˜๋‹ค๊ณ  ๋Š๋ผ์ง€ ์•Š์œผ๋ฉด ๊ทธ๋“ค์€ ์‚ฌ์•…ํ•œ ํ”ผ๋…ธํ‚ค์˜ค ์ž์ฒด์ด๋ฉฐ ๋ชฉ๋ฐœ์ด ๋‚ด๋ ค์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ–ˆ์–ด์•ผ ํ• ๊นŒ์š”?

์œ„์˜ ์‚ฌ์‹ค์€ ์ „์†ก (๋ฐ ํ•˜์œ„) ์ˆ˜์ค€์˜ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ๋ถ„์•ผ์—์„œ Telegram / VKontakte ํŒ€์˜ ์—ญ๋Ÿ‰์ด ๊ทธ๋‹ค์ง€ ๋†’์ง€ ์•Š๊ณ  ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž๊ฒฉ์ด ๋‚ฎ์Œ์„ ๋ถ„๋ช…ํžˆ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์™œ ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•ด์กŒ์œผ๋ฉฐ Telegram ์„ค๊ณ„์ž๋Š” ์–ด๋–ป๊ฒŒ ์ด์˜๋ฅผ ์ œ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? TCP ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ๋„ ์‚ด์•„๋‚จ๋Š” ์„ธ์…˜์„ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค, ์ฆ‰ ์ง€๊ธˆ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์€ ๋‚˜์ค‘์— ์ „๋‹ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋˜ํ•œ UDP ์ „์†ก์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์–ด๋ ค์›€์— ๋ถ€๋”ชํ˜€ ํฌ๊ธฐํ–ˆ์ง€๋งŒ (๋ฌธ์„œ๊ฐ€ ๋น„์–ด์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ž๋ž‘ ํ•  ๊ฒƒ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ์™€ ํŠนํžˆ TCP๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, ์–ด๋””์— ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์–ด๋””์„œ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€(๋ฐ ๋ฐฉ๋ฒ•)์— ๋Œ€ํ•œ ์ดํ•ด ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด "one shot of two" ์•”ํ˜ธํ™”์™€ ๊ฒฐํ•ฉํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋Œ์„ ๊ฐ€์ง„ ์ƒˆโ€-๊ทธ๋Ÿฐ ์‹œ์ฒด๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

์–ด๋• ์–ด์•ผ ํ–ˆ๋‚˜? ์‚ฌ์‹ค์— ๊ทผ๊ฑฐ msg_id ์žฌ์ƒ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์•”ํ˜ธํ•™์ ์œผ๋กœ ํ•„์š”ํ•œ ํƒ€์ž„์Šคํƒฌํ”„์— ๊ณ ์œ  ์‹๋ณ„์ž ๊ธฐ๋Šฅ์„ ๋ถ™์ด๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํฌ๊ฒŒ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ (์—…๋ฐ์ดํŠธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜•์„ฑ๋  ๋•Œ ์ด๊ฒƒ์€ ์ด ๊ฒŒ์‹œ๋ฌผ ์‹œ๋ฆฌ์ฆˆ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ƒ์œ„ ์ˆ˜์ค€ API ์ฃผ์ œ์ž„) ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ TCP ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ์ฑ…์ž„์„ ์ง‘๋‹ˆ๋‹ค. ์†Œ์ผ“์—์„œ ๋นผ๊ฑฐ๋‚˜ โ€‹โ€‹ํ™•์ธ, ์ฒ˜๋ฆฌ ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์†์‹ค์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ™•์ธ์ด ๋˜๋Š” ๊ฒƒ์€ id์˜ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์ˆœํžˆ "๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์‹ ๋œ seq_no"์ž…๋‹ˆ๋‹ค. TCP์—์„œ์™€ ๊ฐ™์ด ์ˆซ์ž์ผ ๋ฟ์ž…๋‹ˆ๋‹ค(XNUMX๊ฐœ์˜ ์ˆซ์ž - ์ž์‹ ์˜ seq์™€ ํ™•์ธ๋จ). ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ํšŒ์˜ ์ค‘์ž…๋‹ˆ๋‹ค, ๊ทธ๋ ‡์ฃ ?
  2. ์žฌ์ƒ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํƒ€์ž„์Šคํƒฌํ”„๋Š” ๋ณ„๋„์˜ ํ•„๋“œ์ธ la nonce๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์„ ํƒํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํ•˜๊ณ  uint32 - ์†Œ๊ธˆ์ด ์ ์–ด๋„ ๋ฐ˜๋‚˜์ ˆ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜„์žฌ ์‹œ๊ฐ„์˜ ์ •์ˆ˜ ๋ถ€๋ถ„์˜ ํ•˜์œ„ ๋น„ํŠธ์— 16๋น„ํŠธ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ดˆ์˜ ์†Œ์ˆ˜ ๋ถ€๋ถ„์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ง€๊ธˆ์ฒ˜๋Ÿผ).
  3. ์ฒ ํšŒ๋จ msg_id ์ „ํ˜€-๋ฐฑ์—”๋“œ์—์„œ ์š”์ฒญ์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์ฒซ ๋ฒˆ์งธ๋กœ ํด๋ผ์ด์–ธํŠธ ID๊ฐ€ ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ๋กœ ์„ธ์…˜ ID๊ฐ€ ์žˆ์œผ๋ฉฐ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ฒญ ์‹๋ณ„์ž๋Š” ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. seq_no.

๋˜ํ•œ ์ตœ์„ ์˜ ์„ ํƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์™„์ „ํ•œ ๋ฌด์ž‘์œ„๊ฐ€ ์‹๋ณ„์ž ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ์ƒ์œ„ ์ˆ˜์ค€ API์—์„œ ์ด๋ฏธ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ƒ๋Œ€์—์„œ ์ ˆ๋Œ€์œผ๋กœ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•˜๋ฉด ๋” ์ข‹๊ฒ ์ง€๋งŒ, ์ด๊ฒƒ์€ ์ด ๊ฒŒ์‹œ๋ฌผ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.

API?

๋”ฐ๋‹ด! ๊ทธ๋ž˜์„œ ๊ณ ํ†ต๊ณผ ๋ชฉ๋ฐœ๋กœ ๊ฐ€๋“ ์ฐฌ ๊ธธ์„ ํ†ต๊ณผํ•œ ์šฐ๋ฆฌ๋Š” ๋งˆ์นจ๋‚ด ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„์—์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์•„๋‹ˆ๋ผ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•˜๋‹ค๋ฉด PUSH์™€ ๊ฐ™์€ ์ž์ฒด๋ฅผ ์šฐ๋ฆฌ์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค).

์ฃผ์˜, ์ด์ œ ๊ธฐ์‚ฌ์— Perl ์˜ˆ์ œ๋งŒ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค! (๊ตฌ๋ฌธ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด bless์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๊ณ  ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค):

2019.10.24 12:00:51 $1 = {
'cb' => 'TeleUpd::__ANON__',
'out' => bless( {
'filter' => bless( {}, 'Telegram::ChannelMessagesFilterEmpty' ),
'channel' => bless( {
'access_hash' => '-6698103710539760874',
'channel_id' => '1380524958'
}, 'Telegram::InputPeerChannel' ),
'pts' => '158503',
'flags' => 0,
'limit' => 0
}, 'Telegram::Updates::GetChannelDifference' ),
'req_id' => '6751291954012037292'
};
2019.10.24 12:00:51 $1 = {
'in' => bless( {
'req_msg_id' => '6751291954012037292',
'result' => bless( {
'pts' => 158508,
'flags' => 3,
'final' => 1,
'new_messages' => [],
'users' => [],
'chats' => [
bless( {
'title' => 'ะฅัƒะปะธะฝะพะผะธะบะฐ',
'username' => 'hoolinomics',
'flags' => 8288,
'id' => 1380524958,
'access_hash' => '-6698103710539760874',
'broadcast' => 1,
'version' => 0,
'photo' => bless( {
'photo_small' => bless( {
'volume_id' => 246933270,
'file_reference' => '
'secret' => '1854156056801727328',
'local_id' => 228648,
'dc_id' => 2
}, 'Telegram::FileLocation' ),
'photo_big' => bless( {
'dc_id' => 2,
'local_id' => 228650,
'file_reference' => '
'secret' => '1275570353387113110',
'volume_id' => 246933270
}, 'Telegram::FileLocation' )
}, 'Telegram::ChatPhoto' ),
'date' => 1531221081
}, 'Telegram::Channel' )
],
'timeout' => 300,
'other_updates' => [
bless( {
'pts_count' => 0,
'message' => bless( {
'post' => 1,
'id' => 852,
'flags' => 50368,
'views' => 8013,
'entities' => [
bless( {
'length' => 20,
'offset' => 0
}, 'Telegram::MessageEntityBold' ),
bless( {
'length' => 18,
'offset' => 480,
'url' => 'https://alexeymarkov.livejournal.com/[url_ะฒั‹ั€ะตะทะฐะฝ].html'
}, 'Telegram::MessageEntityTextUrl' )
],
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'text' => '???? 165',
'data' => 'send_reaction_0'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'data' => 'send_reaction_1',
'text' => '???? 9'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'message' => 'ะ ะฒะพั‚ ะธ ะฝะพะฒะฐั ะบะฝะธะณะฐ! 
// [ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั ะฒั‹ั€ะตะทะฐะฝ ั‡ั‚ะพะฑ ะฝะต ะฝะฐั€ัƒัˆะฐั‚ัŒ ะฟั€ะฐะฒะธะป ะฅะฐะฑั€ะฐ ะพ ั€ะตะบะปะฐะผะต]
ะฝะฐะฟะตั‡ะฐั‚ะฐัŽ.',
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'date' => 1571724559,
'edit_date' => 1571907562
}, 'Telegram::Message' ),
'pts' => 158508
}, 'Telegram::UpdateEditChannelMessage' ),
bless( {
'pts' => 158508,
'message' => bless( {
'edit_date' => 1571907589,
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'date' => 1571807301,
'message' => 'ะŸะพั‡ะตะผัƒ ะ’ั‹ ัั‡ะธั‚ะฐะตั‚ะต Facebook ะฟะปะพั…ะพะน ะบะพะผะฟะฐะฝะธะตะน? ะœะพะถะตั‚ะต ะฟั€ะพะบะพะผะผะตะฝั‚ะธั€ะพะฒะฐั‚ัŒ? ะŸะพ-ะผะพะตะผัƒ, ัั‚ะพ ัˆะธะบะฐั€ะฝะฐั ะบะพะผะฟะฐะฝะธั. ะ‘ะตะท ะดะพะปะณะพะฒ, ั ั…ะพั€ะพัˆะตะน ะฟั€ะธะฑั‹ะปัŒัŽ, ะฐ ะตัะปะธ ั€ะตัˆะฐั‚ ะดะธะฒั‹ ะฟะปะฐั‚ะธั‚ัŒ, ั‚ะพ ะธ ะตั‰ะต ะผะพะณัƒั‚ ะฝะตั…ะธะปะพ ะฟะพะดะพั€ะพะถะฐั‚ัŒ.
ะ”ะปั ะผะตะฝั ะพั‚ะฒะตั‚ ัะพะฒะตั€ัˆะตะฝะฝะพ ะพั‡ะตะฒะธะดะตะฝ: ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ Facebook ะดะตะปะฐะตั‚ ัƒะถะฐัะฝั‹ะน ะฟะพ ะบะฐั‡ะตัั‚ะฒัƒ ะฟั€ะพะดัƒะบั‚. ะ”ะฐ, ัƒ ะฝะตะณะพ ะผะพะฝะพะฟะพะปัŒะฝะพะต ะฟะพะปะพะถะตะฝะธะต ะธ ะดะฐ, ะธะผ ะฟะพะปัŒะทัƒะตั‚ัั ะพะณั€ะพะผะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะปัŽะดะตะน. ะะพ ะผะธั€ ะฝะต ัั‚ะพะธั‚ ะฝะฐ ะผะตัั‚ะต. ะšะพะณะดะฐ-ั‚ะพ ะฒะปะฐะดะตะปัŒั†ะฐะผ ะะพะบะธะธ ะฑั‹ะปะพ ัะผะตัˆะฝะพ ะพั‚ ะฟะตั€ะฒะพะณะพ ะะนั„ะพะฝะฐ. ะžะฝะธ ะดัƒะผะฐะปะธ, ั‡ั‚ะพ ะปัƒั‡ัˆะต ะะพะบะธะธ ะฝะธั‡ะตะณะพ ะฑั‹ั‚ัŒ ะฝะต ะผะพะถะตั‚ ะธ ะพะฝะฐ ะฝะฐะฒัะตะณะดะฐ ะพัั‚ะฐะฝะตั‚ัั ัะฐะผั‹ะผ ัƒะดะพะฑะฝั‹ะผ, ะบั€ะฐัะธะฒั‹ะผ ะธ ั‚ะฒั‘ั€ะดั‹ะผ ั‚ะตะปะตั„ะพะฝะพะผ - ะธ ะดะพะปั ั€ั‹ะฝะบะฐ ัั‚ะพ ะบั€ะฐัะฝะพั€ะตั‡ะธะฒะพ ะดะตะผะพะฝัั‚ั€ะธั€ะพะฒะฐะปะฐ. ะขะตะฟะตั€ัŒ ะธะผ ะฝะต ัะผะตัˆะฝะพ.
ะšะพะฝะตั‡ะฝะพ, ั€ะตะฟั‚ะธะปะพะธะดั‹ ัะพะฟั€ะพั‚ะธะฒะปััŽั‚ัั ะฝะฐะฟะพั€ัƒ ะผะพะปะพะดั‹ั… ะณะตะฝะธะตะฒ: ั‚ะฐะบ ะฆัƒะบะตั€ะฑะตั€ะณะพะผ ะฑั‹ะป ะฟะพะถั€ะฐะฝ Whatsapp, ะฟะพั‚ะพะผ Instagram. ะะพ ะฒัั‘ ะธะผ ะฝะต ะฟะพะถั€ะฐั‚ัŒ, ะŸะฐัˆะฐ ะ”ัƒั€ะพะฒ ะฝะต ะฟั€ะพะดะฐั‘ั‚ัั!
ะขะฐะบ ะฑัƒะดะตั‚ ะธ ั ะคะตะนัะฑัƒะบะพะผ. ะะตะปัŒะทั ะฒัั‘ ะฒั€ะตะผั ะดะตะปะฐั‚ัŒ ะณะพะฒะฝะพ. ะšั‚ะพ-ั‚ะพ ะบะพะณะดะฐ-ั‚ะพ ัะดะตะปะฐะตั‚ ั…ะพั€ะพัˆะธะน ะฟั€ะพะดัƒะบั‚, ะบัƒะดะฐ ะฒัั‘ ะธ ัƒะนะดัƒั‚.
#ัะพั†ัะตั‚ะธ #facebook #ะฐะบั†ะธะธ #ั€ะตะฟั‚ะธะปะพะธะดั‹',
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'data' => 'send_reaction_0',
'text' => '???? 452'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'text' => '???? 21',
'data' => 'send_reaction_1'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'entities' => [
bless( {
'length' => 199,
'offset' => 0
}, 'Telegram::MessageEntityBold' ),
bless( {
'length' => 8,
'offset' => 919
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'offset' => 928,
'length' => 9
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'length' => 6,
'offset' => 938
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'length' => 11,
'offset' => 945
}, 'Telegram::MessageEntityHashtag' )
],
'views' => 6964,
'flags' => 50368,
'id' => 854,
'post' => 1
}, 'Telegram::Message' ),
'pts_count' => 0
}, 'Telegram::UpdateEditChannelMessage' ),
bless( {
'message' => bless( {
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'data' => 'send_reaction_0',
'text' => '???? 213'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'data' => 'send_reaction_1',
'text' => '???? 8'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'views' => 2940,
'entities' => [
bless( {
'length' => 609,
'offset' => 348
}, 'Telegram::MessageEntityItalic' )
],
'flags' => 50368,
'post' => 1,
'id' => 857,
'edit_date' => 1571907636,
'date' => 1571902479,
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'message' => 'ะŸะพัั‚ ะฟั€ะพ 1ะก ะฒั‹ะทะฒะฐะป ะฑัƒั€ะฝัƒัŽ ะฟะพะปะตะผะธะบัƒ. ะงะตะปะพะฒะตะบ 10 (ะฒะธะดะธะผะพ, 1ั-ะฟั€ะพะณั€ะฐะผะผะธัั‚ะพะฒ) ะตะดะธะฝะพะดัƒัˆะฝะพ ะฝะฐะฟะธัะฐะปะธ:
// [ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั ะฒั‹ั€ะตะทะฐะฝ ั‡ั‚ะพะฑ ะฝะต ะฝะฐั€ัƒัˆะฐั‚ัŒ ะฟั€ะฐะฒะธะป ะฅะฐะฑั€ะฐ ะพ ั€ะตะบะปะฐะผะต]
ะฏ ะฑั‹ ะดะพะฑะฐะฒะธะป, ั‡ั‚ะพ ะฑะปะตัั‚ัั‰ะฐั ัƒ 1ะก ะดะธัั‚ั€ะธะฑัƒั†ะธั, ะฐ ะผะฐั€ะบะตั‚ะธะฝะณ... ะฝัƒ, ั‚ะฐะบะพะต.'
}, 'Telegram::Message' ),
'pts_count' => 0,
'pts' => 158508
}, 'Telegram::UpdateEditChannelMessage' ),
bless( {
'pts' => 158508,
'pts_count' => 0,
'message' => bless( {
'message' => 'ะ—ะดั€ะฐะฒัั‚ะฒัƒะนั‚ะต, ั€ะฐััะบะฐะถะธั‚ะต, ะฟะพะถะฐะปัƒะนัั‚ะฐ, ั‡ะตะผ ะฒั€ะตะดะธั‚ ัะบะพะฝะพะผะธะบะต 1ะก?
// [ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั ะฒั‹ั€ะตะทะฐะฝ ั‡ั‚ะพะฑ ะฝะต ะฝะฐั€ัƒัˆะฐั‚ัŒ ะฟั€ะฐะฒะธะป ะฅะฐะฑั€ะฐ ะพ ั€ะตะบะปะฐะผะต]
#ัะพั„ั‚ #it #ัะบะพะฝะพะผะธะบะฐ',
'edit_date' => 1571907650,
'date' => 1571893707,
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'flags' => 50368,
'post' => 1,
'id' => 856,
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'data' => 'send_reaction_0',
'text' => '???? 360'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'data' => 'send_reaction_1',
'text' => '???? 32'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'views' => 4416,
'entities' => [
bless( {
'offset' => 0,
'length' => 64
}, 'Telegram::MessageEntityBold' ),
bless( {
'offset' => 1551,
'length' => 5
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'length' => 3,
'offset' => 1557
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'offset' => 1561,
'length' => 10
}, 'Telegram::MessageEntityHashtag' )
]
}, 'Telegram::Message' )
}, 'Telegram::UpdateEditChannelMessage' )
]
}, 'Telegram::Updates::ChannelDifference' )
}, 'MTProto::RpcResult' )
};
2019.10.24 12:00:51 $1 = {
'in' => bless( {
'update' => bless( {
'user_id' => 2507460,
'status' => bless( {
'was_online' => 1571907651
}, 'Telegram::UserStatusOffline' )
}, 'Telegram::UpdateUserStatus' ),
'date' => 1571907650
}, 'Telegram::UpdateShort' )
};
2019.10.24 12:05:46 $1 = {
'in' => bless( {
'chats' => [],
'date' => 1571907946,
'seq' => 0,
'updates' => [
bless( {
'max_id' => 141719,
'channel_id' => 1295963795
}, 'Telegram::UpdateReadChannelInbox' )
],
'users' => []
}, 'Telegram::Updates' )
};
2019.10.24 13:01:23 $1 = {
'in' => bless( {
'server_salt' => '4914425622822907323',
'unique_id' => '5297282355827493819',
'first_msg_id' => '6751307555044380692'
}, 'MTProto::NewSessionCreated' )
};
2019.10.24 13:24:21 $1 = {
'in' => bless( {
'chats' => [
bless( {
'username' => 'freebsd_ru',
'version' => 0,
'flags' => 5440,
'title' => 'freebsd_ru',
'min' => 1,
'photo' => bless( {
'photo_small' => bless( {
'local_id' => 328733,
'volume_id' => 235140688,
'dc_id' => 2,
'file_reference' => '
'secret' => '4426006807282303416'
}, 'Telegram::FileLocation' ),
'photo_big' => bless( {
'dc_id' => 2,
'file_reference' => '
'volume_id' => 235140688,
'local_id' => 328735,
'secret' => '71251192991540083'
}, 'Telegram::FileLocation' )
}, 'Telegram::ChatPhoto' ),
'date' => 1461248502,
'id' => 1038300508,
'democracy' => 1,
'megagroup' => 1
}, 'Telegram::Channel' )
],
'users' => [
bless( {
'last_name' => 'Panov',
'flags' => 1048646,
'min' => 1,
'id' => 82234609,
'status' => bless( {}, 'Telegram::UserStatusRecently' ),
'first_name' => 'Dima'
}, 'Telegram::User' )
],
'seq' => 0,
'date' => 1571912647,
'updates' => [
bless( {
'pts' => 137596,
'message' => bless( {
'flags' => 256,
'message' => 'ะกะพะทะดะฐั‚ัŒ ะดะถะตะนะป ั ะธะผะตะฝะตะผ ะฟะพะบะพั€ะพั‡ะต ??',
'to_id' => bless( {
'channel_id' => 1038300508
}, 'Telegram::PeerChannel' ),
'id' => 119634,
'date' => 1571912647,
'from_id' => 82234609
}, 'Telegram::Message' ),
'pts_count' => 1
}, 'Telegram::UpdateNewChannelMessage' )
]
}, 'Telegram::Updates' )
};

์˜ˆ, ํŠนํžˆ ์Šคํฌ์ผ๋Ÿฌ ์•„๋ž˜์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ฐ€์„œ ํ•ด๋ณด์„ธ์š”!

์˜ค์™€์ด~~... ์–ด๋•Œ์š”? ๋งค์šฐ ์นœ์ˆ™ํ•œ ๊ฒƒโ€ฆ ์•„๋งˆ๋„ ํด๋ž˜์Šค๊ฐ€ ๊ฐœ์ฒด์— ์ฒจ๋ถ€๋œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” JSON์˜ ์ผ๋ฐ˜์ ์ธ ์›น API์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ผ๊นŒ์š”?..

๊ทธ๋ž˜์„œ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค ... ๊ทธ๊ฒŒ ๋ญ์•ผ, ๋™์ง€๋“ค? .. ๋„ˆ๋ฌด ๋งŽ์€ ๋…ธ๋ ฅ-๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์›น ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‰ฌ๋Š” ๊ณณ์—์„œ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. ๋ง‰ ์‹œ์ž‘?.. HTTPS๋ฅผ ํ†ตํ•œ JSON์ด ๋” ์‰ฌ์šธ๊นŒ์š”?! ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ ๋Œ€๊ฐ€๋กœ ๋ฌด์—‡์„ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ๋…ธ๋ ฅ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

TL+MTProto๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ์ œ๊ณตํ•œ ๊ฒƒ๊ณผ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์ด ๋ฌด์—‡์ธ์ง€ ํ‰๊ฐ€ํ•ด ๋ด…์‹œ๋‹ค. ๊ธ€์Ž„, HTTP ์š”์ฒญ-์‘๋‹ต์€ ์ ํ•ฉํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ TLS ์œ„์— ๋ญ”๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ปดํŒฉํŠธ ์ง๋ ฌํ™”. JSON๊ณผ ์œ ์‚ฌํ•œ ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ณ€ํ˜•์ด ์žˆ์Œ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. MsgPack์„ ํ™•์žฅ์„ฑ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•˜์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด CBOR์ด ์žˆ์Šต๋‹ˆ๋‹ค. RFC 7049. ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ฃผ๋ชฉํ•  ๋งŒํ•˜๋‹ค. ํƒœ๊ทธ๋“ค, ํ™•์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ ํ‘œ์ค€ํ™” ์žˆ์Šต๋‹ˆ๋‹ค :

  • 25 + 256 - ์ €๋ ดํ•œ ์••์ถ• ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ์ค‘๋ณต ํ–‰์„ ํ–‰ ๋ฒˆํ˜ธ ์ฐธ์กฐ๋กœ ๊ต์ฒด
  • 26 - ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ์ƒ์„ฑ์ž ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ์ง๋ ฌํ™”๋œ Perl ๊ฐ์ฒด
  • 27 - ์œ ํ˜• ์ด๋ฆ„ ๋ฐ ์ƒ์„ฑ์ž ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ์ง๋ ฌํ™”๋œ ์–ธ์–ด ๋…๋ฆฝ ๊ฐ์ฒด

๊ธ€์Ž„, ๋‚˜๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ฐœ์ฒด์˜ ํŒจํ‚น์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ TL๊ณผ CBOR์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ ์–ด๋”˜๊ฐ€์—์„œ CBOR์— ์œ ๋ฆฌํ•˜๊ฒŒ ๋‹ฌ๋ผ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

cborlen=1039673 tl_len=1095092

๋”ฐ๋ผ์„œ, ๊ฒฐ๋ก : ๋™๊ธฐํ™” ์‹คํŒจ ๋˜๋Š” ์•Œ ์ˆ˜ ์—†๋Š” ์‹๋ณ„์ž ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ํšจ์œจ์„ฑ์ด ๋น„์Šทํ•œ ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ ํ˜•์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ์—ฐ๊ฒฐ ์„ค์ •. ์ฆ‰, ์žฌ์—ฐ๊ฒฐ ํ›„(ํ‚ค๊ฐ€ ์ด๋ฏธ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ) RTT๊ฐ€ XNUMX์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ MTProto ๋ฉ”์‹œ์ง€์—์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ถ€ ์˜ˆ์•ฝ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ์†”ํŠธ์— ๋“ค์–ด๊ฐ”๊ณ  ์„ธ์…˜์ด ์ฉ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. TLS๋Š” ๊ทธ ๋Œ€๊ฐ€๋กœ ๋ฌด์—‡์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ? ๊ด€๋ จ ์ธ์šฉ๋ฌธ:

TLS์—์„œ PFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ TLS ์„ธ์…˜ ํ‹ฐ์ผ“(RFC 5077) ํ‚ค๋ฅผ ์žฌํ˜‘์ƒํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์— ํ‚ค ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์•”ํ˜ธํ™”๋œ ์„ธ์…˜์„ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์—ฐ๊ฒฐ์„ ์—ด๊ณ  ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์„ธ์…˜ ํ‹ฐ์ผ“ ํ˜•์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฐ๊ฒฐ์ด ์žฌ๊ฐœ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฌด์—‡๋ณด๋‹ค๋„ ์„ธ์…˜ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ์„ธ์…˜ ํ‹ฐ์ผ“์„ ์„œ๋ฒ„๋กœ ๋‹ค์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ํ‹ฐ์ผ“ ์ž์ฒด๋Š” ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์ž„์‹œ ํ‚ค(์„ธ์…˜ ํ‹ฐ์ผ“ ํ‚ค)๋กœ ์•”ํ˜ธํ™”๋˜๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ ์†”๋ฃจ์…˜์—์„œ SSL์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“  ํ”„๋ŸฐํŠธ์—”๋“œ ์„œ๋ฒ„์— ๋ฐฐํฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.[10]. ๋”ฐ๋ผ์„œ ์ž„์‹œ ์„œ๋ฒ„ ํ‚ค๊ฐ€ ์†์ƒ๋œ ๊ฒฝ์šฐ(์˜ˆ: OpenSSL, nginx, Apache๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ์ „์ฒด ์‹œ๊ฐ„ ๋™์•ˆ ํ‚ค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ธฐ ์‚ฌ์ดํŠธ) ํ‚ค๋ฅผ ๋ช‡ ์‹œ๊ฐ„, ์ตœ๋Œ€ ๋ฉฐ์น  ๋™์•ˆ ์‚ฌ์šฉ).

์—ฌ๊ธฐ์„œ RTT๋Š” XNUMX์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ ์–ด๋„ ClientHello์™€ ServerHello๋ฅผ ๊ตํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„์— Finished์™€ ํ•จ๊ป˜ ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ ์—ด๋ฆฐ ์—ฐ๊ฒฐ์ด ๋งŽ์€ ์›น์ด ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ์ด ์ข…์ข… ํ•˜๋‚˜ ์ด์ƒ์˜ ์ˆ˜๋ช…์ด ๊ธธ๊ณ  ์ƒ๋Œ€์ ์œผ๋กœ ์งง์€ ์›น ํŽ˜์ด์ง€ ์š”์ฒญ ์ธ ๋ฉ”์‹ ์ €๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ๊ธฐ์–ตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์— ๋‹ค์ค‘ํ™”. ์ฆ‰, ๋งค์šฐ ๋‚˜์œ ์ง€ํ•˜์ฒ  ๊ตฌ๊ฐ„์„ ๋งŒ๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ƒ๋‹นํžˆ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ฒƒ์„ ์žŠ์œผ์…จ์Šต๋‹ˆ๊นŒ? ์˜๊ฒฌ์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

๊ณ„์†!

์ด ๊ฒŒ์‹œ๋ฌผ ์‹œ๋ฆฌ์ฆˆ์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹, ์ด๋ฐ์˜ฌ๋กœ๊ธฐ, ์ธํ„ฐํŽ˜์ด์Šค, ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ํƒœ๋„ ๋“ฑ ๊ธฐ์ˆ ์  ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ์กฐ์ง์  ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์— ์ œ์‹œ๋œ ๊ธฐ์ˆ  ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ๋Š” ๊ธฐ์ˆ  ๊ตฌ์„ฑ ์š”์†Œ/๊ฐœ๋ฐœ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ๋ถ„์„์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์Œ์„ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋‹ค์–‘ํ•œ TL ์œ ํ˜•์œผ๋กœ ๋Œ€์œ ํ–‰์˜ ์ง€์†
  • ์ฑ„๋„ ๋ฐ ์Šˆํผ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์‚ฌํ•ญ
  • ๋Œ€ํ™”๋ณด๋‹ค ๋ช…๋‹จ๋ณด๋‹ค ๋‚˜์ฉ๋‹ˆ๋‹ค.
  • ์ ˆ๋Œ€ ๋ฉ”์‹œ์ง€ ์ฃผ์†Œ ์ง€์ •๊ณผ ์ƒ๋Œ€ ๋ฉ”์‹œ์ง€ ์ฃผ์†Œ ์ง€์ • ์ •๋ณด
  • ์‚ฌ์ง„๊ณผ ์ด๋ฏธ์ง€์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ
  • ๊ทธ๋ฆผ ์ด๋ชจํ‹ฐ์ฝ˜์ด ์ดํƒค๋ฆญ์ฒด ํ…์ŠคํŠธ๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋ชฉ๋ฐœ! ๊ณ„์† ์ง€์ผœ๋ด!

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€