![](https://habrastorage.org/webt/rq/un/cx/rquncxhtqvyydpdbneoatkwfvke.jpeg)
ããã«ãHighLoad ++ Siberiaã®ã¬ããŒãã®ããã¹ãããŒãžã§ã³ã«ã€ããŠåŠç¿ããŸãã
- ãããªã³ãŒã«ãµãŒãã¹ãå éšã§ã©ã®ããã«æ©èœãããã
- NATãçªç Žããããšã®çŸãã-ãã¢ããŒãã¢æ¥ç¶ãå¿ èŠãšããã²ãŒã ã®å°é家ã«ãšã£ãŠèå³æ·±ããã®ã§ãã
- WebRTCã®ä»çµã¿ãå«ãŸãããããã³ã«ã
- BigDataã䜿çšããŠWebRTCã調æŽããã«ã¯ã©ãããã°ããã§ããã
ã¹ããŒã«ãŒã«ã€ããŠïŒ Alexander Tobolã¯ãok.ruã§ãããªããã³ããŒããã©ãããã©ãŒã ã®éçºããªãŒãããŠããŸãã
ãããªé話履æŽ
ãããªã³ãŒã«çšã®æåã®ããã€ã¹ã¯1960幎ã«ç»å Žããããã«ãŒãã©ã³ãšåŒã°ããå°çšãããã¯ãŒã¯ã䜿çšããéåžžã«é«äŸ¡ã§ããã 2006幎ãSkypeã¯ã¢ããªã±ãŒã·ã§ã³ã«ãããªé話ãè¿œå ããŸããã 2010幎ãFlashã¯RTMFPãããã³ã«ããµããŒãããOdnoklassnikiã§Flashãããªã³ãŒã«ãéå§ããŸããã 2016幎ãChromeã¯Flashã®ãµããŒããåæ¢ãã2017幎8æã«æ°ãããã¯ãããžãŒã䜿çšããŠé話ãåéããŸãããããã«ã€ããŠã¯ãä»æ¥èª¬æããŸãã ãµãŒãã¹ãçµäºãããšãããã«6ãæéãæ£åžžã«å®äºããé話ãå€§å¹ ã«å¢å ããŸããã æè¿ãã³ãŒã«ã«ããã¹ã¯ããããŸãã
![](https://habrastorage.org/webt/kn/9u/uy/kn9uuyg18yggcfabvmzgs-cfygg.jpeg)
ã¢ãŒããã¯ãã£ãšTK
ç§ãã¡ã¯ãœãŒã·ã£ã«ãããã¯ãŒã¯ã§åããŠãããããæè¡çãªã¿ã¹ã¯ã¯ãªããTKãäœã§ãããã¯ããããŸããã éåžžãã¢ã€ãã¢å šäœã1ããŒãžã«åãŸãã次ã®ããã«ãªããŸãã
![](https://habrastorage.org/webt/qf/9x/ju/qf9xjum4vvjczd3-momvzhht9cw.jpeg)
ãŠãŒã¶ãŒã¯ãWebãŸãã¯iOS / Androidã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠä»ã®ãŠãŒã¶ãŒã«é»è©±ããããããšèããŠããŸãã å¥ã®ãŠãŒã¶ãŒãè€æ°ã®ããã€ã¹ãæã£ãŠããå¯èœæ§ããããŸãã é話ã¯ãã¹ãŠã®ããã€ã¹ã«å±ãããŠãŒã¶ãŒã¯ããã€ã¹ã®1ã€ã§é»è©±ãåãã話ããŸãã ãã¹ãŠãã·ã³ãã«ã§ãã
æè¡ä»æ§
質ã®é«ãã³ãŒã«ãµãŒãã¹ãå®çŸããã«ã¯ã远跡ããç¹æ§ãç解ããå¿ èŠããããŸãã ç§ãã¡ã¯ããŠãŒã¶ãŒãæãæ©ããã®ãæ¢ãããšããå§ããããšã«ããŸããã
ãŠãŒã¶ãŒãé»è©±ãåããæ¥ç¶ã確ç«ããããŸã§åŸ ãããããšããŠãŒã¶ãŒã¯ééããªãã€ã©ã€ã©ããŸãã
![](https://habrastorage.org/webt/8g/kk/qb/8gkkqbq6ioqxnn0ro6dcq9kwhno.jpeg)
é話å質ãæªãå ŽåããŠãŒã¶ãŒã¯ããããããŸã-äœããäžæããããããªãæ£ãã°ããé³ã泡ç«ã£ãŠããŸãã
![](https://habrastorage.org/webt/2l/rt/ud/2lrtudpp-tw5cjsknhzamgj--pi.jpeg)
ããããã»ãšãã©ã®ãŠãŒã¶ãŒã¯é話ã®é 延ã«æ©ãŸãããŠããŸãã é 延ã¯ãåŒã³åºãã®éèŠãªç¹æ§ã®1ã€ã§ãã 5ç§çšåºŠã®äŒè©±ã®åŸ ã¡æéãããããã察話ãè¡ãããšã¯çµ¶å¯Ÿã«äžå¯èœã§ãã
![](https://habrastorage.org/webt/z-/tn/lf/z-tnlfghw6laz3j25e3kbwob9mi.jpeg)
蚱容å¯èœãªç¹æ§ã以äžã®ããã«æ±ºå®ããŸããã
- éå§ -ããã«é話ãéå§ããã®ãè¯ããšå€æããŸããã ã€ãŸã ãŠãŒã¶ãŒãå¿çããåŸã®æ¥ç¶ã¯ã1ç§ä»¥å ã§å®äºããŸãã
- å質ã¯éåžžã«äž»èŠ³çãªææšã§ãã ããšãã°ãS / Næ¯ïŒSNRïŒã枬å®ã§ããŸããããã¬ãŒã ããã®ä»ã®ã¢ãŒãã£ãã¡ã¯ããæ¬ èœããŠããŸãã å質ãããªã䞻芳çã«æž¬å®ãããŠãŒã¶ãŒã®å¹žçŠåºŠãè©äŸ¡ããŸããã
- åŸ æ©æéã¯0.5ç§æªæºã«ããå¿ èŠããããŸãã Latencyã0.5ç§ãè¶ ããå Žåãé 延ãæ¢ã«èãããŠããããäºãã«äžæãå§ããŠããŸãã
![](https://habrastorage.org/webt/cl/yx/j0/clyxj0ajsqq5coamt5orttz-kxc.jpeg)
Polycomã¯ããªãã£ã¹ã«ã€ã³ã¹ããŒã«ãããŠããäŒè°ã·ã¹ãã ã§ãã å¹³åçãªããªã³ã ã¬ã€ãã³ã·ã¯1.3ç§çšåºŠã§ãã ãã®ãããªé 延ããããšãåžžã«ãäºããç解ã§ãããšã¯éããŸããã é 延ã2ç§ã«å¢å ãããšããã€ã¢ãã°ã¯äœ¿çšã§ããªããªããŸãã
![](https://habrastorage.org/webt/3_/yy/qq/3_yyqqbvvq5zoavfa5q9tzvqhiq.jpeg)
ãã§ã«ãã©ãããã©ãŒã ãç«ã¡äžããŠããã®ã§ã1æ¥ããã100äžä»¶ã®ã³ãŒã«ããããšããããäºæ³ããŠããŸããã ããã¯äžŠè¡ããŠ1,000åã®åŒã³åºãã§ãã ãã¹ãŠã®åŒã³åºãããµãŒããŒãä»ããŠè¡ãããå ŽåãåŒã³åºãããšã«1,000ã¡ã¬ãããã®åŒã³åºãããããŸãã ããã¯ããã1ã®ã¬ããã/ç§ã§ã1å°ã®é補ãµãŒããŒã§ååã§ãã
ã€ã³ã¿ãŒããããšTTX
ãã®ãããªã¯ãŒã«ãªæ©èœãéæããã®ã劚ãããã®ã¯äœã§ããïŒ ã€ã³ã¿ãŒãããïŒ
![](https://habrastorage.org/webt/qb/aq/sy/qbaqsyfaf6vln4e882armfugx1g.jpeg)
ã€ã³ã¿ãŒãããã«ã¯ãå æã§ããªãã©ãŠã³ãããªããæéïŒRTTïŒãªã©ããããŸããå¯å€åž¯åå¹ ããããNATããããŸãã
以åã¯ããŠãŒã¶ãŒã®ãããã¯ãŒã¯ã®äŒéé床ã枬å®ããŠããŸããã
![](https://habrastorage.org/webt/bm/ge/z6/bmgez6efih7z_lqwidcknso8edw.jpeg)
æ¥ç¶ã®çš®é¡ããšã«åé¡ããå¹³åRTTããã±ããæ倱ãé床ã調ã¹ããããã®åãããã¯ãŒã¯ã®å¹³åå€ã§åŒã³åºãããã¹ãããããšã«ããŸããã
![](https://habrastorage.org/webt/ui/o4/k8/uio4k8pmxmyxyclfwwawehqijes.jpeg)
ã€ã³ã¿ãŒãããã«ã¯ä»ã«ããã©ãã«ããããŸãïŒ
- ãã±ããæ倱 -0.6ïŒ ã®ã©ã³ãã ãã±ããæ倱ã枬å®ããŸããïŒéå°ãªæ°ã®ãã±ããã«ãã茻茳ãã±ããæ倱ã¯èæ ®ããŠããŸããïŒã
- åé åºä»ã -ãã±ãããåãé åºã§éä¿¡ãããšããããã¯ãŒã¯ã¯ããããåãœãŒãããŸãã
- ãžãã¿ -ç¹å®ã®ééã§ãããªãŸãã¯ãªãŒãã£ãªã¹ããªãŒã ãéä¿¡ããŸãããããã¯ãŒã¯ããã€ã¹ã§ã®ãããã¡ãªã³ã°ãªã©ã«ããããã±ãããã¯ã©ã€ã¢ã³ãåŽã§ãã³ãã«ã«ãŸãšããããŸãã
- NAT-ãŠãŒã¶ãŒã®97ïŒ ä»¥äžãNATã®èåŸã«ããããšãå€æããŸããã çç±ãå 容ãæ¹æ³ã«ã€ããŠèª¬æããŸãã
![](https://habrastorage.org/webt/z_/uo/mc/z_uomck64smc12_beaupdnutgp4.jpeg)
äžèšã®ãããã¯ãŒã¯èšå®ãç°¡åãªäŸã§æ€èšããŠãã ããã
ããã·ãã«ã¹ã¯å·ç«å€§åŠã®ãŠã§ããµã€ãã«ç§ã®ãªãã£ã¹ããã¢ã¯ã»ã¹ããŸãããããã®ãããªå¥åŠãªpingãåãåããŸããã
![](https://habrastorage.org/webt/wi/am/at/wiamatloo1eviw58g3zgzbrsc2e.jpeg)
ãã®äŸã®å¹³åãžãã¿ã¯30ããªç§ã§ããã€ãŸããé£æ¥ããpingæéã®å¹³åééã¯çŽ30ããªç§ã§ãããå¹³åpingã¯105ããªç§ã§ãã
é話ã§éèŠãªã®ã¯ãªãã§ããïŒ
![](https://habrastorage.org/webt/gb/ny/yx/gbnyyxij20hrfo96scwubxdzovu.jpeg)
ãµã³ã¯ãããã«ãã«ã¯ã§ãäºãã«è©±ãããããšããŠãããŠãŒã¶ãŒéã§ãããã·ãã«ã¹ã¯ã«ãããµãŒããŒãä»ããã«p2pæ¥ç¶ã確ç«ã§ããå Žåãã©ãŠã³ãããªãããšãã®ãµãŒãã¹ãžã®ãã©ãã£ãã¯ãçŽ100ããªç§ç¯çŽã§ããããšã¯æããã§ãã
ãããã£ãŠãèšäºã®ã»ãšãã©ã¯ãåªããp2pã®äœææ¹æ³ã«åœãŠãããŠããŸãã
æŽå²ãŸãã¯éºç£
åã«ãèšã£ãããã«ã2010幎ããã³ãŒã«ãµãŒãã¹ãæäŸããŠããŸããããä»ã§ã¯åéããŸããã
![](https://habrastorage.org/webt/si/ru/lu/sirulur_jaalnldpkmvbjx7ct-q.jpeg)
2006幎ãSkypeã®çºå£²æã«ãFlashã¯Amicimaãè²·åããRTMFPãäœæããŸããã Flashã«ã¯ãã§ã«RTMPããããããã¯ååãšããŠé話ã«äœ¿çšã§ããã¹ããªãŒãã³ã°ã«ãã䜿çšãããŸãã Flashã¯åŸã«RTMPä»æ§ãå ¬éããŸããã ãªãRTMFPãå¿ èŠãªã®ã§ããããïŒ 2010幎ã«ã¯ãRTMFPã䜿çšããŸããã
é話ãããã³ã«ãšå®éã®ã¹ããªãŒãã³ã°ãããã³ã«ã®èŠä»¶ãæ¯èŒãããã®å¢çãã©ãã«ãããã確èªããŸãã
![](https://habrastorage.org/webt/ih/j9/xi/ihj9xiris6praclbyxpxelwc1i4.jpeg)
RTMPã¯ãããå€ãã®ãããªã¹ããªãŒãã³ã°ãããã³ã«ã§ãã TCPã䜿çšãã环ç©é 延ããããŸãã ã€ã³ã¿ãŒãããæ¥ç¶ãè¯å¥œã§ããã°ãRTMPãžã®åŒã³åºãã¯æ©èœããŸãã
RTMFPãããã³ã«ã¯ ã1æåã ãã®éãã«ãããããããUDPãããã³ã«ã§ãã ãããã¡ãªã³ã°ã®åé¡ã¯ãããŸãã-TCPäžã«ããåé¡ã ããã¯è¡é ããããã³ã°ã奪ãããŠããŸã-ããã¯1ã€ã®ãã±ããã倱ã£ããšãã§ãããTCPã¯å€±ããããã±ãããåéããæãŸã§æ¬¡ã®ãã±ãããè¿ããŸããã RTMFPã¯NATãåŠçã§ããã¯ã©ã€ã¢ã³ãã®IPã¢ãã¬ã¹ãå€æŽãããŠããŸããã ãã®ããã2010幎ã«RTMFPã§ãŠã§ããéå§ããŸããã
![](https://habrastorage.org/webt/pv/rx/16/pvrx163tvieetirsg8nkfrov7qm.jpeg)
ãã®åŸã2011幎ã«åããŠWebRTCã®æåã®ãã©ãããã©ããã衚瀺ãããŸãããããŸã å®å šã«ã¯æ©èœããŠããŸããã§ããã 2012幎ã«ãiOS / Androidã§ã®é話ã®ãµããŒããéå§ããå¥ã®ããšãèµ·ããã2016幎ã«Chromeã¯Flashã®ãµããŒããåæ¢ããŸããã ç§ãã¡ã¯äœããããªããã°ãªããŸããã§ããã
![](https://habrastorage.org/webt/uu/ub/cs/uuubcssxa_w9-ost03_y6dqq6ic.jpeg)
ç§ãã¡ã¯ãã¹ãŠã®VoIPãããã³ã«ã«æ³šç®ããŸããããã€ãã®ããã«ãäœããããããã«ã競åä»ç€Ÿã調ã¹ãããšããå§ããŸãã
競åä»ç€ŸãŸãã¯ã©ãããå§ããã
æã人æ°ã®ãã競åä»ç€Ÿã§ããSkypeãWhatsAppãGoogle DuoïŒãã³ã°ã¢ãŠãã«äŒŒãŠããŸãïŒãICQãéžæããŸããã
ãŸããé 延ã枬å®ããŸããã
![](https://habrastorage.org/webt/yv/br/d2/yvbrd2tluf9yzf-xqqibngdooh8.jpeg)
ç°¡åã§ãã äžã®åçã¯æ¬¡ã®ãšããã§ãã
- ã¹ããããŠã©ããïŒå·Šäžã®é»è©±ãåç §ïŒãæå»ïŒ03:08ïŒã衚瀺ããŸãã
- æãè¿ãé»è©±ãé»è©±ããããæåã®é»è©±ããããªãšããŠåãåããŸãã ç»åãæºåž¯é»è©±ã®ã«ã¡ã©ã«å ¥ã£ãŠããèŠãç¬éãããçŽ100ããªç§ããããŸããã
- å¥ã®é»è©±ïŒçœïŒãžã®åŒã³åºããšããäžåºŠã ããã§ãé 延ã¯Google Duoã§çŽ310ããªç§ã§ãã
ãã¹ãŠã®ã«ãŒãããŸã å ¬éããŸãããããããã®ããã€ã¹ãp2pæ¥ç¶ã確ç«ã§ããªãããšã確èªããŸããã ãã¡ããã枬å®ã¯ç°ãªããããã¯ãŒã¯ã§è¡ãããŸããããããã¯åãªãäŸã§ãã
![](https://habrastorage.org/webt/rn/xz/ee/rnxzee4grukafmg0gu3cunpemsi.jpeg)
Skypeã¯ãŸã å°ãäžæããŸãã Skypeã§ã¯ãp2pã®æ¥ç¶ã«å€±æããå Žåãé 延ã¯1.1ç§ã§ããããšãå€æããŸããã
ãã¹ãç°å¢ã¯è€éã§ããã ããŸããŸãªæ¡ä»¶ïŒEDGEã3GãLTEãWiFiïŒã§ãã¹ããããã£ãã«ãé察称ã§ããããšãèæ ®ããŠããã¹ãŠã®æž¬å®å€ã®å¹³åå€ã瀺ããŸããã
![](https://habrastorage.org/webt/gb/pp/6s/gbpp6sc5jugssoov8nmzvajlifo.jpeg)
ããããªãŒã®æ¶è²»éãããã»ããµãŒã®è² è·ããã®ä»ãã¹ãŠãæšå®ããããã«ãåçŽã«é«æž©èšã§é»è©±ã®æž©åºŠã枬å®ãããããããã»ããµãŒã®ããããªãŒã®GPUã®å¹³åè² è·ã§ãããšæ³å®ããããšã«ããŸããã ååãšããŠãç±ãé»è©±ãè³ã«æã£ãŠè¡ã£ãããæã«æã£ããããããšã¯éåžžã«äžå¿«ã§ãã ãŠãŒã¶ãŒã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãããããªãŒå šäœã䜿ãæãããŠããŸãããã§ãã
![](https://habrastorage.org/webt/dl/ck/vd/dlckvdbr8we75haadv9qkgk1jxk.jpeg)
çµæã¯æ¬¡ã®ãšããã§ãã
- é 延ãæãé ãã£ãã®ã¯ICQãšSkypeã§ãæéã¯Telegramã§ããã Telegramã«ã¯ãããªã³ãŒã«ããªãã®ã§ãããã¯ãŸã£ããæ£ããæ¯èŒã§ã¯ãããŸãããããªãŒãã£ãªã§ã¯é 延ãæå°éã«æããããŸãã WhatsAppïŒçŽ200ããªç§ïŒãšãã³ã°ã¢ãŠã-390ããªç§ãæé©ã§ãã
- 枩床ã«ãã£ãŠã Telegramã¯ãããªãªãã§æãå°ãªããSkypeãæãå€ããªããŸãã
- å¿çæéã«é¢ããŠã¯ãTelegram ã¯æãé·ãæéæ¥ç¶ã確ç«ããWhatsAppãšGoogle Duoãæéã§ãã
çŽ æŽããããããã€ãã®ã¡ããªãã¯ãå ¥æããŸããïŒ
![](https://habrastorage.org/webt/t8/mb/n0/t8mbn0vv_g1utslspeeevk8g5ie.jpeg)
ããŸããŸãªãããã¯ãŒã¯ã§ãããŸããŸãªããããããã³ãã®ä»ãã¹ãŠã®ãããªãšé³å£°ã®å質ããã¹ãããŸããã ãã®çµæã æé«å質ã®ãããªã¯Google Duoã«ãããé³å£°ã¯Skypeã«ãããšããçµè«ã«éããŸããããããã¯ãã§ã«æªã¿ããããæªãããããã¯ãŒã¯ã«ãããŸãã äžè¬çã«ã誰ããã»ãŒå¹³å¡ã«åããŠããŸãã WhatsAppã®ç»åã¯æããŒãããŠããŸãã
ããããã¹ãŠå®è£ ãããŠãããã®ãèŠãŠã¿ãŸãããã
![](https://habrastorage.org/webt/ih/ap/1i/ihap1infndlvdjllso8eszhjnla.jpeg)
Skypeã«ã¯ç¬èªã®ãããã³ã«ããããŸãããä»ã®ãŠãŒã¶ãŒã¯WebRTCã®å€æŽã䜿çšããããéåžžã¯çŽæ¥WebRTCã䜿çšããŸãã ãã³ã°ã¢ãŠããGoogle DuoãWhatsAppãFacebook Messengerã¯Webã§åäœãããã¹ãŠWebRTCãå éšã«ãããŸãã ãããã¯ãã¹ãŠéåžžã«ç°ãªããç°ãªãç¹æ§ãæã¡ããã¹ãŠ1ã€ã®WebRTCãæã£ãŠããŸãïŒ ã ãããããªãã¯ãããæ£ãã調çã§ããå¿ èŠããããŸãã ããã«ãWebRTCã®äžéšããªãŒãã£ãªéšåãæ åœããTelegramããããICRTããããŸããããã¯é·ãéWebRTCãåå²ããç¬èªã®æ¹æ³ã§éçºãç¶ããŸããã
WebRTC 建ç¯
![](https://habrastorage.org/webt/3q/0x/-c/3q0x-cy-45bblq5lgoayq2awd5u.jpeg)
WebRTCã¯ãã¯ã©ã€ã¢ã³ãéã®ä»²ä»è ã§ããã·ã°ããªã³ã°ãµãŒããŒã®ååšãæå³ããŸããããã¯ãã¯ã©ã€ã¢ã³ãéã®p2pæ¥ç¶ã®ç¢ºç«äžã«ã¡ãã»ãŒãžã亀æããããã«äœ¿çšãããŸãã çŽæ¥æ¥ç¶ã確ç«ããåŸãã¯ã©ã€ã¢ã³ãã¯äºãã«ã¡ãã£ã¢ããŒã¿ã亀æãå§ããŸãã
WebRTC ãã¢
ç°¡åãªãã¢ããå§ããŸãããã WebRTCæ¥ç¶ã確ç«ããã«ã¯ã5ã€ã®ç°¡åãªæé ããããŸãã
詳现ãªã³ãŒãäŸ
1. // Step #1: Getting local video stream and initializing a peer connection with it (both caller and callee) 2. 3. var localStream = null; 4. var localVideo = document.getElementById('localVideo'); 5. 6. navigator 7. .mediaDevices 8. .getUserMedia({ audio: true, video: true }) 9. .then(stream => { 10. localVideo.srcObject = stream; 11. localStream = stream; 12. }); 13. 14. var pc = new RTCPeerConnection({ iceServers: [...] }); 15. 16. localStream 17. .getTracks() 18. .forEach(track => pc.addTrack(track, localStream)); 19. 20. // Step #2: Creating SDP offer (caller) 21. 22. pc.createOffer({ offerToReceiveAudio: true, offerToReceiveVideo: true }) 23. .then(offer => signaling.send('offer', offer)); 24. 25. // Step #3: Handling SDP offer and sending SDP answer (callee) 26. 27. signaling.on('offer', offer => { 28. pc.setRemoteDescription(offer) 29. .then(() => pc.createAnswer()) 30. .then(answer => signaling.send('answer', answer)) 31. }); 32. 33. // Step #4: Handling SDP answer (calleer) 34. 35. signaling.on('answer', answer => pc.setRemoteDescription(answer)); 36. 37. // Step #5: Exchanging ICE candidates 38. 39. pc.onicecandidate = event => signaling.send('candidate', event.candidate); 40. 41. signaling.on('candidate', candidate => pc.addIceCandidate(candidate)); 42. 43. // Step #6: Getting remote video stream (both caller and callee) 44. 45. var remoteVideo = document.getElementById('remoteVideo'); 46. 47. pc.onaddstream = event => remoteVideo.srcObject = event.streams[0];
次ã®ããã«æžãããŠããŸãïŒ
- ãããªãåãããã¢æ¥ç¶ã確ç«ããäœããã®çš®é¡ã®iceServerã転éããŸãïŒãã®å
容ãããã«ã¯ããããŸããïŒã
- SDPãªãã¡ãŒãäœæãããããã·ã°ããªã³ã°ã«éä¿¡ãããšãã·ã°ããªã³ã°WebRTCã¯å®è£
ãããŸããã
- 次ã«ãã·ã°ããªã³ã°ããã®ã©ãããŒãäœæããå¿
èŠããããŸããããããWebRTCã®äžéšã§ã¯ãããŸããã
- ããã«ããã€ãã®åè£è
ã亀æããŸãã
- æåŸã«ããªã¢ãŒããããªã¹ããªãŒã ãååŸããŸãã
ããã§äœãèµ·ããŠããã®ãããããŠèªåèªèº«ãå®è£ ããããã«äœãå¿ èŠãªã®ããç解ããŸãããã
![](https://habrastorage.org/webt/wx/fz/fn/wxfzfnkuw7smjite-bdpmadb_ro.jpeg)
åçãäžããèŠãŠãããŸãã WebRTCã©ã€ãã©ãªããããŸããããã¯ãã©ãŠã¶ã«æ¢ã«çµã¿èŸŒãŸããŠãããChromeãFirefoxãªã©ã§ãµããŒããããŠããŸããAndroid/ iOSã§ãã«ãããã»ãã·ã§ã³èªäœãèšè¿°ããAPIããã³SDPïŒã»ãã·ã§ã³èšè¿°ãããã³ã«ïŒãä»ããŠéä¿¡ã§ããŸãã 以äžã«å«ãŸãããã®ã説æããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ãã®ã©ã€ãã©ãªã䜿çšããã«ã¯ãã·ã°ããªã³ã°ãä»ããŠãµãã¹ã¯ã©ã€ããŒéã®æ¥ç¶ã確ç«ããå¿ èŠããããŸãã ã·ã°ããªã³ã°ã¯ãèªåã§äœæããå¿ èŠããããµãŒãã¹ã§ããããWebRTCã¯ãããæäŸããŸããã
ããã«ãã®èšäºã§ã¯ããããã¯ãŒã¯ã«ã€ããŠé çªã«èª¬æãã次ã«ãããª/ãªãŒãã£ãªã«ã€ããŠèª¬æããæåŸã«ã·ã°ããªã³ã°ãèšè¿°ããŸãã
WebRTCãããã¯ãŒã¯ãŸãã¯p2pïŒå®éã«ã¯c2s2cïŒ
p2pæ¥ç¶ã®ã»ããã¢ããã¯éåžžã«ç°¡åãªããã§ãã
![](https://habrastorage.org/webt/he/7h/so/he7hsoyzqklbzj715slypgychgc.jpeg)
p2pæ¥ç¶ã確ç«ãããã¢ãªã¹ãšãããããŸãã IPã¢ãã¬ã¹ãååŸããäž¡æ¹ãšãæ¥ç¶ãããŠããã·ã°ãã«ãµãŒããŒãæã¡ãããããä»ããŠãããã®ã¢ãã¬ã¹ã亀æã§ããŸãã 圌ãã¯ã¢ãã¬ã¹ã亀æããããïŒ åœŒãã¯åãã¢ãã¬ã¹ãæã£ãŠãããäœããééã£ãŠããïŒ
![](https://habrastorage.org/webt/rn/hc/uj/rnhcujxoa5k0tni2oquj-tx3hfi.jpeg)
å®éãã©ã¡ãã®ãŠãŒã¶ãŒãWi-Fiã«ãŒã¿ãŒã®åŸãã«åº§ã£ãŠããå¯èœæ§ãé«ãããããã¯ããŒã«ã«ã®ã°ã¬ãŒã®IPã¢ãã¬ã¹ã§ãã ã«ãŒã¿ãŒã¯ããããã¯ãŒã¯ã¢ãã¬ã¹å€æïŒNATïŒãªã©ã®æ©èœãæäŸããŸãã 圌女ã¯ã©ã®ããã«åããŠããŸããïŒ
![](https://habrastorage.org/webt/yr/xu/r0/yrxur0s_xhoye3i36zod4ropbec.jpeg)
ç°è²ã®ãµãããããšå€éšIPã¢ãã¬ã¹ããããŸãã ã°ã¬ãŒã¢ãã¬ã¹ãããã±ãããã€ã³ã¿ãŒãããã«éä¿¡ãããšãNATã¯ã°ã¬ãŒã¢ãã¬ã¹ãçœã«çœ®ãæããéä¿¡å ããŒããéä¿¡å ããŒããäžèŽããããŒããèšæ¶ããŸãã è¿ä¿¡ãã±ãããå°çãããšããã®ãããã³ã°ã«ãã£ãŠè§£æ±ºãããéä¿¡è ã«éä¿¡ãããŸãã ãã¹ãŠãã·ã³ãã«ã§ãã
以äžã¯ç§ã®å Žæã§ã©ã®ããã«èŠãããã®ã€ã©ã¹ãã§ãã
![](https://habrastorage.org/webt/ud/ar/da/udardacyxvmzt5mq0modbosd-mc.jpeg)
ããã¯ãç§ã®å éšIPã¢ãã¬ã¹ãšã«ãŒã¿ãŒã®ã¢ãã¬ã¹ã§ãïŒãšããã§ãç°è²ïŒã ã«ãŒãããã¬ãŒã¹ããŠèŠããšãWi-Fiã«ãŒã¿ãŒã衚瀺ãããŸããç°è²ã®ãããã€ããŒã¢ãã¬ã¹ã®ãã±ãããšå€éšã®çœãIPã§ãã ãããã£ãŠãå®éã«ã¯2ã€ã®NATããããŸãã1ã€ã¯Wi-Fiäžã«ããããã1ã€ã¯ãããã€ããŒã«ãããŸãããã¡ãããå°çšã®å€éšIPã¢ãã¬ã¹ãè³Œå ¥ããå Žåãé€ããŸãã
NATã¯æ¬¡ã®çç±ã§éåžžã«äººæ°ããããŸãã
- å€ãã®IPv4ããŸã æ¬ èœããŠãããååãªã¢ãã¬ã¹ããããŸããã
- NATã¯ãããã¯ãŒã¯ãä¿è·ããŠããããã§ãã
- ããã¯ã«ãŒã¿ãŒã®æšæºæ©èœã§ããWi-Fiã«æ¥ç¶ããããã«NATããããåäœããŸãã
ãããã£ãŠãå€éšIPã䜿çšããŠããã®ã¯3ïŒ ã®ãŠãŒã¶ãŒã®ã¿ã§ãæ®ãã¯ãã¹ãŠNATãçµç±ããŸãã
NATã䜿çšãããšããã¯ã€ãã¢ãã¬ã¹ã«å®å šã«ã¢ã¯ã»ã¹ã§ããŸãã ããããããªããã©ãã«ãè¡ããªãã£ããªãã誰ãããªãã®ãšããã«æ¥ãããšãã§ããŸããã
![](https://habrastorage.org/webt/j7/cl/j2/j7clj2pypnpwv_p-odndgflgzpk.jpeg)
p2pæ¥ç¶ã確ç«ããããšã¯åé¡ã§ãã å®éãã¢ãªã¹ãšããã¯ãäž¡æ¹ãNATã®èåŸã«ããå Žåãäºãã«ãã±ãããéä¿¡ã§ããŸããã
WebRTCã«ã¯ããã®åé¡ã解決ããããã®STUNãããã³ã«ããããŸã ã STUNãµãŒããŒã®å±éãææ¡ãããŠããŸãã 次ã«ãã¢ãªã¹ã¯STUNãµãŒããŒã«æ¥ç¶ããIPã¢ãã¬ã¹ãååŸããŠãã·ã°ããªã³ã°ãä»ããŠããã«éä¿¡ããŸãã ãããIPã¢ãã¬ã¹ãååŸããŠãã¢ãªã¹ã«éä¿¡ããŸãã ãããã¯äºãã«ãã±ãããéä¿¡ãããããNATãçªç ŽããŸãã
![](https://habrastorage.org/webt/1m/mq/iz/1mmqiz57zbyzzahdgng_y_3hywo.jpeg)
質å ïŒã¢ãªã¹ã¯ç¹å®ã®ããŒããéããŠãããNAT /ãã¡ã€ã¢ãŠã©ãŒã«ã¯ãã§ã«ãã®ããŒãã«ãã¬ãŒã¯ã¹ã«ãŒãããŠãããããã¯éããŠããŸãã 圌ãã¯ãäºãã®äœæãç¥ã£ãŠããŸãã ã¢ãªã¹ã¯ãã±ãããããã«éä¿¡ããããšããŸãããã¢ãªã¹ã«ãã±ãããéä¿¡ããŸãã ããªãã¯åœŒãã話ãããšãã§ãããšæããŸããïŒ
å®éãã©ã®ãããªå Žåã§ãããªãã¯æ£ããã§ããçµæã¯ãŠãŒã¶ãŒãæã£ãŠããNATãã¢ã®ã¿ã€ãã«äŸåããŸãã
![](https://habrastorage.org/webt/te/hd/hj/tehdhjdvyvfv9dcrxng950n98h8.jpeg)
ãããã¯ãŒã¯ã¢ãã¬ã¹å€æ
NATã«ã¯4ã€ã®ã¿ã€ãããããŸãã
- ãã«ã³ãŒã³NAT;
- å¶éãããã³ãŒã³NATã
- ããŒãå¶éã³ãŒã³NATã
- 察称NAT
åºæ¬ããŒãžã§ã³ã§ã¯ãã¢ãªã¹ã¯ãã±ãããSTUNãµãŒããŒã«éä¿¡ããããŒããéããŸãã ããã¯ã©ããããããèªåã®ããŒããèŠã€ããŠãè¿ä¿¡ãã±ãããéä¿¡ããŸãã ãããFull cone NATã§ããå Žå -å€éšããŒããå éšããŒãã«ãããããã ãã®æãç°¡åãªNATã§ããã°ãBobã¯ããã«Aliceã«ãã±ãããéä¿¡ããæ¥ç¶ã確ç«ããé話ããŸãã
![](https://habrastorage.org/webt/ph/kp/zr/phkpzrkuy3k2uzqsl4sub-sla7o.jpeg)
以äžã¯çžäºäœçšã¹ããŒã ã§ããããããŒãããã®ã¢ãªã¹ã¯ãã±ãããSTUNããŒãã«éä¿¡ããSTUNã¯å€éšã¢ãã¬ã¹ã§åœŒå¥³ã«å¿çããŸãã STUNã¯ä»»æã®ã¢ãã¬ã¹ããå¿çã§ããŸãããã«ã³ãŒã³NATã§ããã°ãNATãä»ããŠãã³ãããããã¯åãã¢ãã¬ã¹ã«å¿çã§ããŸãã
![](https://habrastorage.org/webt/dl/pp/3a/dlpp3anl2az479kengmx5easix4.jpeg)
å¶éã³ãŒã³NATã®å Žåãäºæ ã¯ããå°ãè€éã§ãã å éšã¢ãã¬ã¹ã«ãããããå¿ èŠãããããŒãã ãã§ãªãã移åå ã®å€éšã¢ãã¬ã¹ãèšæ¶ããŸãã ã€ãŸããIP STUNãµãŒããŒãžã®æ¥ç¶ã®ã¿ã確ç«ããå Žåããããã¯ãŒã¯äžã®ä»ã®èª°ãå¿çã§ããªããªããããã®ãã±ããã¯å±ããŸããã
![](https://habrastorage.org/webt/yt/-g/sg/yt-gsg5yyrf99ywt77j2ydntyzy.jpeg)
ãã®åé¡ã¯ã©ã®ããã«è§£æ±ºãããŸããïŒ ãã®ãããªåçŽãªã¹ããŒã ïŒæ¬¡ã®å³ãåç §ïŒã§ã¯ãã¢ãªã¹ã¯ãã±ãããSTUNã«éä¿¡ããIPã§åœŒå¥³ã«çããŸãã STUNã¯ãå¶éä»ãã³ãŒã³NATã§ããéããã©ã®ããŒãããã§ãå¿çã§ããŸãã ããã¯å¥ã®ã¢ãã¬ã¹ãæã£ãŠãããããã¢ãªã¹ã«å¿çã§ããŸããã ã¢ãªã¹ã¯ãããã®IPã¢ãã¬ã¹ãç¥ã£ãŠãããã±ããã§å¿çããŸãã 圌女ã¯ããã«NATãéããããã¯åœŒå¥³ã«çããŸãã ãã£ãã圌ãã¯è©±ããã
![](https://habrastorage.org/webt/iz/ji/ar/izjiare3mege16iftxwal3haqye.jpeg)
ããå°ãè€éãªãªãã·ã§ã³ã¯ã ããŒãå¶éã³ãŒã³NATã§ãã ããã§ããSTUNã®ã¿ãã¢ã¯ã»ã¹å ã®ããŒãããæ£ç¢ºã«å¿çããå¿ èŠããããŸãã ãã¹ãŠãåæ§ã«æ©èœããŸãã
æãæ害ãªã®ã¯Symmetric NATã§ãã
![](https://habrastorage.org/webt/p-/se/fu/p-sefuxnvpapxpuf8-wqavqkd0u.jpeg)
æåã¯ããã¹ãŠããŸã£ããåãããã«æ©èœããŸããã¢ãªã¹ã¯ãã±ãããSTUNãµãŒããŒã«éä¿¡ããåãããŒãããå¿çããŸãã ããã¯ã¢ãªã¹ã«å¿çã§ããŸããããããã«ãã±ãããéä¿¡ããŸãã ãããŠãããã§ãã¢ãªã¹ãããŒã4444ã«ãã±ãããéä¿¡ãããšããäºå®ã«ããããããããããã³ã°ã¯åœŒå¥³ã«æ°ããããŒããå²ãåœãŠãŸãã 察称NATã¯ãæ°ããæ¥ç¶ã確ç«ããããã³ã«ãã«ãŒã¿ãŒã§æ°ããããŒããçºè¡ãããã³ã«ç°ãªããŸãã ãããã£ãŠãããã¯ã¢ãªã¹ãSTUNã«è¡ã£ãããŒãã§æŽè¡ããŠãããæ¥ç¶ã§ããŸããã
éã«ãããããªãŒãã³IPã¢ãã¬ã¹ãæã£ãŠããå Žåãã¢ãªã¹ã¯åœŒã«ã¡ããã©æ¥ãŠãæ¥ç¶ã確ç«ããŸãã
ãã¹ãŠã®ãªãã·ã§ã³ã¯ã以äžã®1ã€ã®è¡šã«ãŸãšããããŠããŸãã
![](https://habrastorage.org/webt/-c/jf/o9/-cjfo9dclflwku9qz-2p4wl_hre.jpeg)
ããŒãå¶éã³ãŒã³NATãŸãã¯å察åŽã®å¯Ÿç§°NATã䜿çšããŠå¯Ÿç§°NATãä»ããŠæ¥ç¶ã確ç«ããããšããå Žåãé€ããã»ãšãã©ãã¹ãŠãå¯èœã§ããããšã瀺ããŠããŸãã
![](https://habrastorage.org/webt/gp/lk/_d/gplk_darehdjbaxktic84liuwto.jpeg)
ããã£ãããã«ãp2pã¯åŸ ã¡æéã®ç¹ã§ç§ãã¡ã«ãšã£ãŠè²Žéã§ãããã€ã³ã¹ããŒã«ã§ããªãå ŽåãWebRTCã¯TURNãµãŒããŒãæäŸããŸãã p2pãã€ã³ã¹ããŒã«ãããªãããšã«æ°ä»ãããšãã¯ãTURNã«æ¥ç¶ããã ãã§ããã¹ãŠã®ãã©ãã£ãã¯ããããã·ãããŸãã ãã ãããã®å Žåããã©ãã£ãã¯ã«å¯ŸããŠæéãæ¯æãããšã«ãªãããŠãŒã¶ãŒã«ã¯ããã«é 延ãçºçããå¯èœæ§ããããŸãã
ç·Žç¿ãã
Googleã«ã¯ç¡æã®STUNãµãŒããŒããããŸãã ããªãã¯ããããã©ã€ãã©ãªã«çœ®ãããšãã§ããŸããããã¯åäœããŸãã
TURNãµãŒããŒã«ã¯è³æ Œæ å ±ïŒãã°ã€ã³ãšãã¹ã¯ãŒãïŒããããŸãã ã»ãšãã©ã®å Žåãããªãã¯ããªãèªèº«ãäžããå¿ èŠããããŸããããã¯èªç±ãèŠã€ããã®ã¯ããªãå°é£ã§ãã
Googleã®ç¡æã®STUNãµãŒããŒã®äŸïŒ
- ã¹ã¿ã³ïŒstun.l.google.comïŒ19302
- ã¹ã¿ã³ïŒstun1.l.google.comïŒ19302
- ã¹ã¿ã³ïŒstun2.l.google.comïŒ19302
- ã¹ã¿ã³ïŒstun3.l.google.comïŒ19302
ãã¹ã¯ãŒãä»ãã®ç¡æTURNãµãŒããŒïŒurlïŒ 'turnïŒ192.158.29.39ïŒ3478ïŒTransport = udp'ãè³æ Œæ å ±ïŒ 'JZEOEt2V3Qb0y27GRntt2u2PAYA ='ããŠãŒã¶ãŒåïŒ '28224511ïŒ1379330808' '
ç§ãã¡ã¯ã³ã¿ãŒã³ã䜿çšããŸã ã
![](https://habrastorage.org/webt/yj/_d/zv/yj_dzvkvpkhmol2a8ryscucgoli.jpeg)
ãã®çµæããã©ãã£ãã¯ã®34ïŒ ãp2pæ¥ç¶ãééãããã®ä»ã¯ãã¹ãŠTURNãµãŒããŒãä»ããŠãããã·ãããŸãã
STUNãããã³ã«ã§èå³æ·±ããã®ã¯äœã§ããïŒ
STUNã§ã¯ãNATã®ã¿ã€ããå€å¥ã§ããŸãã
![](https://habrastorage.org/webt/nj/lo/7h/njlo7h_sounawjxlwk-pxsiejy0.jpeg)
ã¹ã©ã€ã ãªã³ã¯
ãã±ãããéä¿¡ãããšãã«ãåãããŒãããå¿çãåä¿¡ããããšã瀺ãããå¥ã®ããŒããå¥ã®IPããŸãã¯å¥ã®IPãšããŒããããå¿çããããã«STUNã«èŠæ±ã§ããŸãã ãããã£ãŠã STUNãµãŒããŒãžã®4ã€ã®èŠæ±ã«å¯ŸããŠãNATã®ã¿ã€ããå€å¥ã§ããŸã ã
![](https://habrastorage.org/webt/og/0m/2h/og0m2hawerjjdabsr43zwygz_cy.jpeg)
NATã®çš®é¡ãæ°ãããšãããã»ãŒãã¹ãŠã®ãŠãŒã¶ãŒã察称NATãŸãã¯ããŒãå¶éã³ãŒã³NATãæã£ãŠããããšãããããŸããã ããããããŠãŒã¶ãŒã®3åã®1ã ããp2pæ¥ç¶ã確ç«ã§ããããšãããããŸãã
GoogleããSTUNãååŸããŠããããWebRTCã«å ¥ããã ãã§ããã¹ãŠãããŸãããããã«æããã®ãªãããªãç§ã¯ããããã¹ãŠèšã£ãŠããã®ããšå°ãããããããŸããã
å®éã«NATã®ã¿ã€ããèªåã§æ±ºå®ã§ããããã§ãã
![](https://habrastorage.org/webt/ih/qn/8j/ihqn8j2nm2dumsstvyopem7ljxk.jpeg)
ããã¯ãããªãããŒãªããšã¯äœãããªãJavaã¢ããªã±ãŒã·ã§ã³ãžã®ãªã³ã¯ã§ããç°ãªãããŒããšç°ãªãSTUNãµãŒããŒã«pingãå®è¡ããæçµçã«ã©ã®ããŒããèŠããã調ã¹ãŸãã ãã«ã³ãŒã³NATãéããŠããå ŽåãSTUNãµãŒããŒã«ã¯åãããŒãããããŸãã å¶éãããã³ãŒã³NATã§ã¯ãSTUNèŠæ±ããšã«ç°ãªãããŒãããããŸãã
![](https://habrastorage.org/webt/ve/qf/t1/veqft1dee6wstziwrkrbemxj5da.jpeg)
Symmetric NATã䜿çšãããšãç§ã®ãªãã£ã¹ã§ã¯æ¬¡ã®ããã«ãªããŸãã å®å šã«ç°ãªãããŒãããããŸãã
ãã ããæ¥ç¶ããšã«ããŒãçªå·ã1ã€ãã€å¢å ããèå³æ·±ããã¿ãŒã³ãååšããå ŽåããããŸãã
![](https://habrastorage.org/webt/2n/7e/ro/2n7ero_besx7rzunsjuzfjplfpy.jpeg)
ã€ãŸããå€ãã®NATã¯ãããŒããå®æ°ã§å¢æžããããã«æ§æãããŠããŸãã ãã®å®æ°ãèŠã€ããããšãã§ããããã察称NATãçªç Žã§ããŸãã
![](https://habrastorage.org/webt/te/6n/bf/te6nbfknmebcz7zmrtk35jqwfpk.jpeg)
ãããã£ãŠãNATãçªç ŽããŸãã1ã€ã®STUNãµãŒããŒã«ç§»åããå¥ã®STUNãµãŒããŒã«ç§»åããŠãéãã確èªããæ¯èŒããŠããã®å¢åãŸãã¯æžåã§ããŒããæ¢ã«æäŸããããšããŸãã ã€ãŸããã¢ãªã¹ã¯ããã«ããŒããäžããããšããŠããŸããããã§ã«äžå®ã«èª¿æŽãããŠããã次åã¯ããã ãã«ãªãããšãç¥ã£ãŠããŸãã
![](https://habrastorage.org/webt/l1/re/-m/l1re-mp1om6zkjqm0j1n5rfh004.jpeg)
ããã§ãç§ãã¡ã¯å¥ã®12ïŒ ãã¢ããŒãã¢ã溶æ¥ããããšãã§ããŸããã
å®éãåãIPãæã€å€éšã«ãŒã¿ãŒãåãããã«åäœããå ŽåããããŸãã ãããã£ãŠãçµ±èšãåéãã察称NATããããã€ããŒã®æ©èœã§ããããŠãŒã¶ãŒã®Wi-Fiã«ãŒã¿ãŒã®æ©èœã§ã¯ãªãå Žåããã«ã¿ãäºæž¬ããããã«ãŠãŒã¶ãŒã«éä¿¡ããŠããŠãŒã¶ãŒãããã䜿çšããå€æã«æéããããããªãããã«ããããšãã§ããŸãã
CDNãªã¬ãŒãŸãã¯P2Pæ¥ç¶ã確ç«ã§ããªãã£ãå Žåã®å¯ŸåŠæ¹æ³
ããã§ãTURNãµãŒããŒã䜿çšããp2pã§ã¯ãªããªã¢ã«ã¢ãŒãã§äœæ¥ãããã¹ãŠã®ãã©ãã£ãã¯ããµãŒããŒã«æž¡ãå ŽåãCDNãè¿œå ã§ããŸãã ãã¡ãããéã³å Žããªãéãã ç¬èªã®CDNãµã€ãããããããç§ãã¡ã«ãšã£ãŠã¯éåžžã«ç°¡åã§ããã ãããã人ãã©ãã«éãã¹ããã決å®ããå¿ èŠããããŸããïŒCDNãµã€ãã«ããŸãã¯ãäŸãã°ãã¢ã¹ã¯ã¯ãžã®ãã£ã³ãã«ã«ã ããã¯ããã»ã©ç°¡åãªäœæ¥ã§ã¯ãªãããã次ã®ããã«ããŸããã
- ã¢ã¹ã¯ã¯ã®ãµã€ãã®äžéšã®ãŠãŒã¶ãŒã«èª€ã£ãŠçºè¡ããããã®ãäžéš-ãªã¢ãŒãã
- ãŠãŒã¶ãŒã®IPããµãŒããŒãããã³ãããã¯ãŒã¯ã®ç¹æ§ã«é¢ããçµ±èšãåéããŸããã
- maxMindã«ãã£ãŠããµãããããã°ã«ãŒãåããçµ±èšæ
å ±ãèŠãŠãã©ã®ãŠãŒã¶ãŒãæ¥ç¶ã«æãè¿ãTURNãµãŒããŒãæã£ãŠããããIPã§ç解ããããšãã§ããŸããã
![](https://habrastorage.org/webt/ql/dg/sy/qldgsyqtvaeqqdvyctilcipatau.jpeg)
ããã·ãã«ã¹ã¯ã«CDNããããŸãã ãã¹ãŠãã¢ã¹ã¯ã¯ã§æ©èœããå ŽåãRTTã®99ããŒã»ã³ã¿ã€ã«ã¯1.3ç§ã§ãã CDNã«ããããã¹ãŠãã¯ããã«é«éã«åäœããŸãïŒ0.4ç§ïŒã
ãµãŒããŒã䜿çšããã«p2pæ¥ç¶ã䜿çšããæ¹ãåžžã«è¯ãã§ããïŒ èå³æ·±ãäŸã¯ãã¯ã©ã¹ãã€ã«ã¹ã¯ã®2ã€ã®ãããã€ããŒã§ããOptibyteãšMobraã§ãïŒååã¯å€æŽãããŠããå ŽåããããŸãïŒã äœããã®çç±ã§ãp2pã§ã®ãããã®éã®æ¥ç¶ã¯MSKãä»ããæ¥ç¶ãããã¯ããã«æªãã§ãã ãããã圌ãã¯ãäºãã®åéã§ã¯ãããŸããã
![](https://habrastorage.org/webt/yq/en/dm/yqendmksjs7vila8zpra1xu_2uc.jpeg)
ãã®ãããªãã¹ãŠã®ã±ãŒã¹ãåæãããŠãŒã¶ãŒãã©ã³ãã ã«p2pãŸãã¯MSKçµç±ã§éä¿¡ããçµ±èšãåéããŠäºæž¬ãæ§ç¯ããŸããã çµ±èšãæŽæ°ããå¿ èŠãããããšã¯ããã£ãŠãããããäžéšã®ãŠãŒã¶ãŒã«ã€ããŠã¯ããããã¯ãŒã¯ã§äœããå€æŽããããã©ããã確èªããããã«ç°ãªãæ¥ç¶ãç¹å¥ã«ç¢ºç«ããŸãã
ã©ãŠã³ãã¿ã€ã ããã±ããæ倱ã垯åå¹ ãªã©ã®åçŽãªç¹æ§ã枬å®ããŸãããããããæ£ããæ¯èŒããæ¹æ³ãåŠã¶ããšã¯æ®ã£ãŠããŸãã
![](https://habrastorage.org/webt/yu/l-/nb/yul-nbvpnw5za6ixc80wlgumrse.jpeg)
ã©ã¡ããåªããŠããããç解ããæ¹æ³ïŒ2 Mbit / sã€ã³ã¿ãŒãããã400 ms RTTããã³5ïŒ ãã±ããæ倱ããŸãã¯100 Kbit / sã100 msé 延ãšããããªãã±ããæ倱
æ£ç¢ºãªçãã¯ãããŸããããããªé話å質ã®è©äŸ¡ã¯éåžžã«äž»èŠ³çã§ãã ãã®ãããé話çµäºåŸããŠãŒã¶ãŒã«ã¢ã¹ã¿ãªã¹ã¯ã§å質ãè©äŸ¡ããçµæã«å¿ããŠå®æ°ãèšå®ããããã«äŸé ŒããŸããã ããšãã°ãRTTã¯300ããªç§æªæºã§ããããšãå€æããŸãããããã¯åé¡ã§ã¯ãªãããããã¬ãŒããããéèŠã§ãã
Androidããã³iOSã§ã®ãŠãŒã¶ãŒè©äŸ¡ãé«ãã iOSãŠãŒã¶ãŒã¯ãŠããããé 眮ããå¯èœæ§ãé«ããå€ãã®å Žå5ãŠããããé 眮ããããšãããããŸãã ããããããã©ãããã©ãŒã ã®è©³çŽ°ãªçç±ã¯ããããŸããã ãããããããã«å¯ŸããŠå®æ°ãåŒããã®ã§ãç§ãã¡ã«ã¯è¯ãããã«æããŸããã
èšäºã®æŠèŠã«æ»ã£ãŠããããã¯ãŒã¯ã«ã€ããŠè°è«ããŠããŸãã
æ¥ç¶èšå®ã¯ã©ã®ããã«èŠããŸããïŒ
![](https://habrastorage.org/webt/-o/0b/zz/-o0bzzfolvd5rhfysec57ebndda.jpeg)
STUNããã³TURNãµãŒããŒãPeerConnectionïŒïŒã«éä¿¡ãããšãæ¥ç¶ã確ç«ãããŸãã ã¢ãªã¹ã¯èªåã®IPãèŠã€ããŠããããã·ã°ããªã³ã°ã«éä¿¡ããŸãã ããã¯ã¢ãªã¹ã®IPã«ã€ããŠç¥ããŸãã ã¢ãªã¹ã¯ããã®IPãååŸããŸãã ãã±ããã亀æããNATãçªç ŽããTURNãèšå®ããŠéä¿¡ããŸãã
![](https://habrastorage.org/webt/yz/oa/rv/yzoarv064wp3s6zwwjpy0ec68hk.jpeg)
åã«èª¬æããæ¥ç¶ã確ç«ãã5ã€ã®ã¹ãããã§ããµãŒããŒãèŠã€ããããããã©ãã§ååŸããããå€æããICEåè£ã¯ã·ã°ããªã³ã°ãéããŠäº€æããå€éšIPã¢ãã¬ã¹ã§ããããšã確èªããŸããã ã¯ã©ã€ã¢ã³ãã1ã€ã®Wi-Fiã®ç¯å²å ã«ããå Žåãã¯ã©ã€ã¢ã³ãã®å éšIPã¢ãã¬ã¹ãçªç Žããããšãã§ããŸãã
ãããªã®äžéšã«ç§»ããŸãããã
ãããªãšãªãŒãã£ãª
WebRTCã¯ç¹å®ã®ãããªã³ãŒããã¯ãšãªãŒãã£ãªã³ãŒããã¯ã®ã»ããããµããŒãããŸãããç¬èªã®ã³ãŒããã¯ãããã«è¿œå ã§ããŸãã ãããªçšã«H.264ããã³VP8ã§åºæ¬çã«ãµããŒããããŠããŸãã VP8ã¯ãœãããŠã§ã¢ã³ãŒããã¯ã§ãããããå€ãã®ããããªãŒãæ¶è²»ããŸãã H.264ã¯ãã¹ãŠã®ããã€ã¹ïŒéåžžã¯ãã€ãã£ãïŒã§å©çšã§ããããã§ã¯ãªããããããã©ã«ãã®åªå é äœã¯VP8ã§ãã
SDPïŒã»ãã·ã§ã³èšè¿°ãããã³ã«ïŒå ã«ã¯ãã³ãŒããã¯ããŽã·ãšãŒã·ã§ã³ããããŸããäžæ¹ã®ã¯ã©ã€ã¢ã³ããã³ãŒããã¯ã®ãªã¹ããéä¿¡ãããšãããäžæ¹ã®ã¯ã©ã€ã¢ã³ãã¯åªå çã«ç¬èªã®ã³ãŒããã¯ãéä¿¡ããéä¿¡ã«äœ¿çšããã³ãŒããã¯ã«ã€ããŠåæããŸãã å¿ èŠã«å¿ããŠãVP8ããã³H.264ã³ãŒããã¯ã®åªå 床ãå€æŽã§ããŸããããã«ããã264ããã€ãã£ãã§ããäžéšã®ããã€ã¹ã®ããããªãŒãç¯çŽã§ããŸãã ãããè¡ãæ¹æ³ã®äŸã次ã«ç€ºããŸãã ç§ãã¡ã¯ãããè¡ããŸãããããŠãŒã¶ãŒã¯å質ã«ã€ããŠæå¥ãèšããªãã£ãããã«æããŸããããåæã«ããããªãŒã®æ¶è²»ã¯ãã£ãšå°ãªããªããŸããã
WebRTCã®ãªãŒãã£ãªã«ã¯ã OPUSãŸãã¯G711ããã ãéåžžã¯ãã¹ãŠã®OPUSãåžžã«æ©èœããŸããäœãããå¿ èŠã¯ãããŸããã
以äžã¯ã10åé䜿çšããåŸã®æž©åºŠæž¬å®å€ã§ãã
![](https://habrastorage.org/webt/pf/-q/pj/pf-qpjvwi8myzm7_q1zlmpe2zbs.jpeg)
ããŸããŸãªããã€ã¹ããã¹ãããããšã¯æããã§ãã ããã¯iPhoneã®äŸã§ãããããã€ã¹ã®æž©åºŠãæãäœããããOKã¢ããªã±ãŒã·ã§ã³ã¯ããããªãŒãæã䜿çšããŸããã
WebRTCã䜿çšããå Žåã«æå¹ã«ã§ãã2çªç®ã®ããšã¯ãæ¥ç¶ãéåžžã«æªããšãã«ãããªãèªåçã«ãªãã«ããããšã§ãã
![](https://habrastorage.org/webt/xg/kx/ab/xgkxab9ccijdbomfmja0rtrhfpg.jpeg)
40 Kbpsæªæºã®å Žåããããªã¯ãªãã«ãªããŸãã æ¥ç¶ãäœæãããšãã«ãã§ãã¯ããã¯ã¹ããªã³ã«ããã ãã§ãã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãããå€ãèšå®ã§ããŸãã éå§æã®çŸåšã®ãããã¬ãŒãã®æå°å€ãšæ倧å€ãèšå®ããããšãã§ããŸãã
![](https://habrastorage.org/webt/xw/7d/ts/xw7dtsmnuz7pe0ujabtjapnnkxg.jpeg)
ããã¯éåžžã«äŸ¿å©ã§ãã æ¥ç¶ã確ç«ãããšãã«ãäºæ³ããŠãããããã¬ãŒããäºåã«ããã£ãŠããå Žåã¯ã転éããããšãã§ããé話ã¯ããããéå§ããããããã¬ãŒãã調æŽããå¿ èŠã¯ãããŸããã ããã«ããã£ãã«ã§é »ç¹ã«ãã±ããæ倱ãŸãã¯åž¯åå¹ ã®äœäžãããããšãããã£ãŠããå Žåã¯ãæ倧å€ãå¶éã§ããŸãã
WhatsAppã¯éåžžã«ãã£ããã®ãããªã§åäœããŸãããäžãããããã¬ãŒããç©æ¥µçã«å§çž®ãããããããããªé 延ããããŸãã
MaxMindã䜿çšããŠçµ±èšãåéãããããã³ã°ããŸããã
![](https://habrastorage.org/webt/la/1b/kq/la1bkqswv6zqpbqdd7zrjarq0xu.jpeg)
ããã¯ããã·ã¢ã®ããŸããŸãªå°åã§ã®é話ã«äœ¿çšããããããã®éå§å質ã§ãã
ã·ã°ããªã³ã°
åŒã³åºããè¡ãå Žåã¯ãã»ãšãã©ã®å Žåããã®éšåãèšè¿°ããå¿ èŠããããŸãã ããããçš®é¡ã®èœãšãç©ŽããããŸãã èŠãç®ãæãåºããŠãã ããã
![](https://habrastorage.org/webt/ip/iv/er/ipiverlo5evjhsixis-obij86vs.jpeg)
SDPã«æ¥ç¶ããŠäº€æããã·ã°ããªã³ã°ãåããã¢ããªã±ãŒã·ã§ã³ãããã以äžã®SDPã¯WebRTCãžã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã
ããã¯ãåçŽãªã·ã°ããªã³ã°ãã©ã®ãããªãã®ãã瀺ããŠããŸãã
![](https://habrastorage.org/webt/y3/zl/ih/y3zlihhnt8w32ukv-ms7sbelbgm.jpeg)
ã¢ãªã¹ã¯ããã«é»è©±ããŸãã ããšãã°ãWebãœã±ããæ¥ç¶ãä»ããŠæ¥ç¶ããŸãã ããã¯ãæºåž¯é»è©±ãŸãã¯ãã©ãŠã¶ãžã®ããã·ã¥ããŸãã¯äœããã®ãªãŒãã³æ¥ç¶ãžã®ããã·ã¥ãåä¿¡ããWebãœã±ãããä»ããŠæ¥ç¶ãããã®åŸãé»è©±ããã±ããã§é³Žãå§ããŸãã ããã¯é»è©±ãåããã¢ãªã¹ã¯åœŒã®ã³ãŒããã¯ãšåœŒå¥³ããµããŒãããä»ã®WebRTCæ©èœã圌ã«éããŸãã ããã¯åœŒå¥³ã«åãããã«çãããã®åŸã圌ãã¯èŠãåè£è ã亀æããŸãã ããããïŒ
ããã¯ãã¹ãŠããªãé·ãèŠããŸãã ãŸããWebãœã±ããæ¥ç¶ã確ç«ãããŸã§ãããã·ã¥ãçºçãããŸã§ããã®ä»ãã¹ãŠã®æäœãè¡ããŸã§ãBobã®é»è©±ã¯ãã±ããã§é³ŽããŸããã ã¢ãªã¹ã¯ãã€ãåŸ ã£ãŠããããã©ãã«ããã®ãããªã圌ãé»è©±ãåãåããªãã®ããèããŸãã 確èªåŸããã¹ãŠã«æ°ç§ããããŸããæ¥ç¶ãè¯å¥œãªå Žåã§ã3ã5ç§ãæ¥ç¶ãäžè¯ãªå Žåã¯ãã¹ãŠ10ã§ãã
ããã§äœããããªããã°ãªããŸããïŒ ããªãã¯ãã¹ãŠãéåžžã«ç°¡åã«ã§ããããšãæããŠãããŸãã
![](https://habrastorage.org/webt/kz/q0/ym/kzq0ymgejzqqpmlyso5ri8mvz-k.jpeg)
ã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ãæ¢ã«éããŠããå Žåã¯ãããã«ããã·ã¥ãéä¿¡ããŠæ¥ç¶ã確ç«ããç®çã®ã·ã°ããªã³ã°ãµãŒããŒã«æ¥ç¶ããŠãããã«åŒã³åºããéå§ã§ããŸãã
ãã®åŸãå¥ã®æé©åã é»è©±ããŸã ãã±ããã«é³Žã£ãŠããŠãé»è©±ãåãåã£ãŠããªãå Žåã§ãããµããŒããããŠããã³ãŒããã¯ãå€éšIPã¢ãã¬ã¹ã«é¢ããæ å ±ãå®éã«äº€æãã空ã®ãããªãã±ããã®éä¿¡ãéå§ããããšãã§ããŸãã é»è©±ãæã«ãããããã¹ãŠãçŽ æŽããããã®ã«ãªããŸãã
ç§ãã¡ã¯ããããŸãããããã¹ãŠãã¯ãŒã«ã§ããããã«èŠããŸããã ãããããããŸããã
![](https://habrastorage.org/webt/hh/m5/t6/hhm5t6dtihar96isxhtsm92pums.jpeg)
æåã®åé¡ã¯ããŠãŒã¶ãŒãé »ç¹ã«é話ããã£ã³ã»ã«ããããšã§ãã ãé話ããã¯ãªãã¯ããŠããã«ãã£ã³ã»ã«ããŸãã ããã«å¿ããŠãããã·ã¥ã«é»è©±ããããããŠãŒã¶ãŒã¯å§¿ãæ¶ããŸãïŒã€ã³ã¿ãŒããããŸãã¯ä»ã®äœãã倱ããŸããïŒã ãã®éã誰ãã®é»è©±ã鳎ãã圌ã¯é»è©±ãåããŸããã圌ãã¯ããã§åœŒãåŸ ã£ãŠããŸããã ãããã£ãŠãã§ããã ãæ©ãåŒã³åºããéå§ããããã®ããªããã£ããªæé©åã¯å®éã«ã¯æ©èœããŸããã
![](https://habrastorage.org/webt/xy/we/gy/xywegygpnsrlns4osq7nn4i71f0.jpeg)
ã¯ã€ãã¯ã³ãŒã«ãã£ã³ã»ã«ã§ã¯ã2çªç®ã®æ害ãªããšããããŸãã ãµãŒããŒã§äŒè©±ã®IDãçæããå Žåãå¿çãåŸ ã€å¿ èŠããããŸãã ã€ãŸããåŒã³åºããäœæããIDãååŸãããã®åŸã§ã®ã¿ããã±ããã®éä¿¡ãåŒã³åºãã®ãã£ã³ã»ã«ãªã©ã®ããåããè¡ãããšãã§ããŸãã ããã¯éåžžã«æªã話ã§ããå¿çãå°çãããŸã§ãã¯ã©ã€ã¢ã³ãããäœãå®éã«ãã£ã³ã»ã«ã§ããªãããšãå€æããããã§ãã ãããã£ãŠãGUIDãªã©ã®äœããã®IDãã¯ã©ã€ã¢ã³ãã§çæããåŒã³åºããéå§ãããšèšãã®ãæåã§ãã 人ã ã¯ãŸã é »ç¹ã«ãããè¡ããŸãïŒåŒã°ãããã£ã³ã»ã«ãããããã«åã³åŒã³åºãããŸãã ãããæ··ä¹±ããªãããã«ããã«ã¯ãGUIDãå®è¡ããŠéä¿¡ããŸãã
![](https://habrastorage.org/webt/1e/he/ob/1eheobd8oyf6z-je6j0puuj7psy.jpeg)
äœããªãããã«èŠããŸãããå¥ã®åé¡ããããŸãã ããã«2å°ã®é»è©±ãããå ŽåããŸãã¯ãã©ãŠã¶ãéãããŸãŸã®å Žåããã±ããã亀æããããã®ããžãã¯ã¹ããŒã å šäœããå¥ã®ããã€ã¹ããçªç¶å¿çããå Žåãæ¥ç¶ã確ç«ã§ããŸããã
ã©ãããïŒ åºæ¬çãªã·ã³ãã«ãªäœéä¿¡å·æ¹åŒã«æ»ã£ãŠæé©åããŠãå°ãåã«ããã·ã¥ãéä¿¡ããŸãããã ãŠãŒã¶ãŒã¯ããé«éã«æ¥ç¶ãéå§ããŸãããããã«ããæ°ã»ã³ãç¯çŽã§ããŸãã
![](https://habrastorage.org/webt/ap/k3/kx/apk3kx9qq3nsrzmrervqa548e-g.jpeg)
圌ãé»è©±ãåãã亀æãå§ããåŸãæãé·ãéšåãã©ããããïŒ
![](https://habrastorage.org/webt/ff/bj/qv/ffbjqvge9liirsi6spjc7ttlyby.jpeg)
次ã®ããšãã§ããŸãã ã¢ãªã¹ããã§ã«ãã¹ãŠã®ã³ãŒããã¯ãç¥ã£ãŠãããããã®äž¡æ¹ã®é»è©±ã«éä¿¡ã§ããããšã¯æããã§ãã 圌女ã¯ãã¹ãŠã®IPã¢ãã¬ã¹ã解決ãããããããã¥ãŒã«ä¿æããã·ã°ããªã³ã°ã«éä¿¡ããããšãã§ããŸãããã¯ã©ã€ã¢ã³ããšã®æ¥ç¶ãäºåã«éå§ã§ããããã«ãã¯ã©ã€ã¢ã³ãã«ã¯éä¿¡ããŸããã
ããã¯äœãã§ããŸããïŒãªãã¡ãŒãåãåã£ã圌ã¯ãããã«ãã£ãã³ãŒããã¯ã確èªããç¬èªã®ã³ãŒããã¯ãçæããææããŠãããã®ãæžããéä¿¡ããããšãã§ããŸããããããããã«ã¯2å°ã®é»è©±ããããã³ãŒããã¯ããŽã·ãšãŒã·ã§ã³ãç°ãªããŸãããã®ãããã·ã°ããªã³ã°ã¯ããããã¹ãŠä¿æããé»è©±ãåãåãããã€ã¹ãèŠã€ãããŸã§é çªã«åŸ æ©ããŸãã圌ãã®åè£è ã¯ãŸããäž¡æ¹ã®ããã€ã¹ãçæããã·ã°ããªã³ã°ã«éä¿¡ããŸãã
ãããã£ãŠãã·ã°ããªã³ã°ã«ã¯ãã¢ãªã¹ããã®1ã€ã®ã¡ãã»ãŒãžãã¥ãŒãšãç°ãªãããã€ã¹äžã®ããããã®è€æ°ã®ã¡ãã»ãŒãžãã¥ãŒããããŸãã圌ã¯ããããã¹ãŠä¿ç®¡ãããããã®ããã€ã¹ã®1ã€ãæŸããããšããã«ã圌ã¯æ¢ã«æºåãããããã±ãŒãžã®ã»ããå šäœãåã«æããŸãã
éåžžã«é«éã«åäœããŸãããã®ãããªã¢ã«ãŽãªãºã ã䜿çšããŠãGoogle DuoãWhatsAppã«äŒŒãç¹æ§ã«å°éããŸããã
![](https://habrastorage.org/webt/qr/gs/ry/qrgsry_mx3ahy48v6gvw1l49uau.jpeg)
ããããããã£ãšè¯ããã®ãæãã€ãããšãã§ããŸããããšãã°ãã·ã°ããªã³ã°çšã§ã¯ãªãè€æ°ã®ãã¥ãŒãä¿æããããããã¯ã©ã€ã¢ã³ãã«éä¿¡ããŠããããã®çªå·ãçºå£°ããŸãããã»ãšãã©ã®å Žåãã²ã€ã³ã¯éåžžã«å°ãããªããŸããããã§åæ¢ããããšã«ããŸããã
ä»ã«ã©ããªåé¡ãåŸ ã£ãŠããŸããïŒ
![](https://habrastorage.org/webt/tp/fn/p3/tpfnp3a3cqrv_pdv31x7m4tirxi.jpeg)
ã³ãŒã«ããã¯ã®ãããªãã®ããããŸãïŒ1ã€ã¯å¥ã®ãã®ãåŒã³åºããä»ã¯é³ŽããŸãã圌ãã競äºããããšããªãã£ãããããšæããŸã-ä¿¡å·ã¬ãã«ã§ã誰ãã2çªç®ã«æ¥ãå Žåããã é»è©±ãåãå ¥ããŠããã«é»è©±ãããããšãã«ã¢ãŒãã«åãæ¿ããå¿ èŠããããšããã³ãã³ããè¿œå ããŸãã
![](https://habrastorage.org/webt/so/mv/go/somvgopdt0c3zi5kksffvtpogz4.jpeg)
ãããã¯ãŒã¯ãæ¶ããã¡ãã»ãŒãžã倱ãããããããã¹ãŠããã¥ãŒãä»ããŠè¡ãããå¿ èŠããããŸããã€ãŸããã¯ã©ã€ã¢ã³ãã«ãã£ã¹ããããã¥ãŒãå¿ èŠã§ããã¯ã©ã€ã¢ã³ãããéä¿¡ããã¡ãã»ãŒãžã¯ããµãŒããŒãã¡ãã»ãŒãžãåŠçããããšã確èªããåŸã«ã®ã¿ãã¥ãŒããåé€ããå¿ èŠããããŸãããµãŒããŒã«ã¯ãéä¿¡çšã®ãã¥ãŒãããã確èªããããŸãã
ãããã£ãŠããããã¯ãã¹ãŠ24æé幎äžç¡äŒã®ãµãŒãã¹ãèæ ®ããŠç€Ÿå ã§å®è£ ãããŠãããããŒã¿ã»ã³ã¿ãŒã倱ãããœãããŠã§ã¢ã®ããŒãžã§ã³ãå€æŽããã³æŽæ°ã§ããããã«ããããšèããŠããŸãã
![](https://habrastorage.org/webt/3a/uh/au/3auhaued9dsrfuwyhffcubvuqpy.jpeg)
ãªã³ã¯ ã¹ã©ã€ãäžã®ãããªãžã®èšåã«ããã¹ãç
ã¯ã©ã€ã¢ã³ãã¯ãWebãœã±ãããä»ããŠããŒããã©ã³ãµãŒã«æ¥ç¶ããç°ãªãããŒã¿ã»ã³ã¿ãŒã®ã·ã°ããªã³ã°ãµãŒããŒã«éä¿¡ããŸããç°ãªãã¯ã©ã€ã¢ã³ãã¯ç°ãªããµãŒããŒã«ã¢ã¯ã»ã¹ã§ããŸãã Zookeeperã§ã¯ããã®éžæåºã管çããã·ã°ããªã³ã°ãµãŒããŒãå®çŸ©ãããªãŒããŒéžæãè¡ããŸãããµãŒããŒããã®äŒè©±ã®ãªãŒããŒã§ã¯ãªãå ŽåããµãŒããŒã¯ãã¹ãŠã®ã¡ãã»ãŒãžãå¥ã®ãŠãŒã¶ãŒã«éä¿¡ããŸãã
次ã«ãåæ£ã¹ãã¬ãŒãžã䜿çšããŸããCassandraã®äžã«NewSQLããããŸãããäœã䜿çšãããã¯åé¡ã§ã¯ãããŸãããã©ãã§ãä¿¡å·ãéä¿¡ããŠãããã¹ãŠã®ãã¥ãŒã®ç¶æ ãä¿åããŠãä¿¡å·ãµãŒããŒãæ¶ããããé»æºãåããããä»ã®äœããçºçããå ŽåããªãŒããŒéžæãZookeeperã§åäœãããªãŒããŒã«ãªãå¥ã®ãµãŒããŒãèµ·åããŠãããŒã¿ããŒã¹ãããã¹ãŠã®ãã¥ãŒã埩å ã§ããŸãã¡ãã»ãŒãžãéä¿¡ããŸãã
ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«ãªããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ã¡ãã»ãŒãžãéä¿¡ããŸããããšãã°ãå€éšIPããã·ã°ããªã³ã°ãž
- ã·ã°ããªã³ã°ã¯åãå ¥ããããŒã¿ããŒã¹ã«æžã蟌ã¿ãŸãã
- 圌ã¯ãã¹ãŠãæ¥ãããšãç解ããåŸã圌ã¯ãã®ã¡ãã»ãŒãžãåãåã£ããšçããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ããã®ã¡ãã»ãŒãžããã¥ãŒããåé€ããŸãã
æ··åããªãããã«ããã¹ãŠã®ããã±ãŒãžã«ã¯äžæã®çªå·ãä»ããããŠããŸãã
ããŒã¿ããŒã¹ã®èŠ³ç¹ããã¯ãCassandraã®ã¢ããªã³ã䜿çšããŸããããã«ãããããŒã¿ããŒã¹ã§ãã©ã³ã¶ã¯ã·ã§ã³ãè¡ãããšãã§ããŸãïŒãããªã¯ãŸãã«ããã§ãïŒã
ã ãããããªãã¯åŠãã ïŒ
- iceServerãšã¯äœã§ããããŸããããã転éããæ¹æ³ã
- ã»ãã·ã§ã³èšè¿°ãããã³ã«ãšã¯äœã§ããã
- çæããå察åŽã«éä¿¡ããå¿ èŠãããããšã
- ã·ã°ããªã³ã°ããååŸããŠãå察åŽã®WebRTCã«è»¢éããå€éšIPã¢ãã¬ã¹ãšäº€æããå¿ èŠãããããšã
- åç»ã®éä¿¡ãéå§ããŠãã ããïŒ
![](https://habrastorage.org/webt/6j/hp/6k/6jhp6kn6luheqat6jepleauq1me.jpeg)
ç§éã¯åãåã£ãïŒ
- é 延ãåžå Žå¹³åãäžåãã³ãŒã«ã
- é»è©±ãããŸãå ç±ããŸããã§ããã
- æäžäœã¬ãã«ã®ã¢ããªã±ãŒã·ã§ã³ã§ã®å¿çæéã
ããïŒ
![](https://habrastorage.org/webt/97/ru/zy/97ruzyu7gams8pyk2ktcoqb9yim.jpeg)
ã»ãã¥ãªã㣠WebRTCã®äžéè
æ»æ
WebRTCã®äžéè æ»æã«ã€ããŠè©±ããŸããããå®éãWebRTCã¯ã1996幎ã®RTPã«åºã¥ããŠãããšããç¹ã§éåžžã«é£ãããããã³ã«ã§ãããSDPã¯1998幎ã«SIPããæ¥ãŸããã
![](https://habrastorage.org/webt/yi/zm/7k/yizm7kvtjfnpnphvmuwiduk6yua.jpeg)
äžçªäžã®å·šå€§ãªãªã¹ãã¯ãRTP WebRTCãäœæããå€ãã®RFCããã³ãã®ä»ã®RTPæ¡åŒµæ©èœã§ãã
ãªã¹ãã®æåã®2ã€ã®èå³æ·±ãRFC-1ã€ã¯ãã±ããã«é³å£°ã¬ãã«ãè¿œå ãããã1ã€ã¯ãã±ããã§é³å£°ã¬ãã«ããªãŒãã³ã«éä¿¡ããããšã¯å®å šã§ã¯ãªããšè¿°ã¹ãæå·åããŸãããããã£ãŠãSDPã亀æãããšãã¯ãã¯ã©ã€ã¢ã³ãããµããŒãããæ¡åŒµæ©èœã®ã»ãããç¥ãããšãéèŠã§ããããã€ãã®èŒ»èŒ³ã¢ã«ãŽãªãºã ã倱ããããã±ãããå埩ããããã®ããã€ãã®ã¢ã«ãŽãªãºã ããã®ä»ãã¹ãŠããããŸãã
WebRTCã®æŽå²ã¯è€éã§ãããæåã®ãã©ãããªãªãŒã¹ã¯2011幎ã«ãªãªãŒã¹ããã2013幎ã«Firefoxã¯ãã®ãããã³ã«ããµããŒããããã®åŸ2014 Operaã§iOS / Androidã§ã®ãã«ããéå§ãããŸãããäžè¬ã«ãããã¯é·å¹Žã«ããã£ãŠéçºãããŸããããããã§ã1ã€ã®èå³æ·±ãåé¡ã解決ããŠããŸããã
![](https://habrastorage.org/webt/53/s2/31/53s231p3esxh8vt9ls8dn8szgqi.jpeg)
ã¢ãªã¹ãšãããã·ã°ããªã³ã°ã«æ¥ç¶ãããšããã®ãã£ãã«ã䜿çšããŠãDTLSãã³ãã·ã§ã€ã¯ã確ç«ããæ¥ç¶ãä¿è·ããŸãããã¹ãŠãçŽ æŽãããã§ããããããç§ãã¡ã®ä¿¡å·ã§ã¯ãªãããšãå€æããå ŽåãååãšããŠãçãäžã®äººã¯ã¢ãªã¹ãšããã®äž¡æ¹ã§ããéã皌ããæ©äŒãããããã¹ãŠã®ãã©ãã£ãã¯ããããã¯ããããã§èµ·ãã£ãŠããããšãçèŽããŸãã
![](https://habrastorage.org/webt/i-/lq/uh/i-lquhbrd0eltgcqorvk1bu2gjs.jpeg)
ä¿¡é ŒåºŠã®é«ããµãŒãã¹ãããå Žåã¯ããã¡ãããHTTPSãWSSãªã©ã䜿çšããå¿ èŠããããŸããå¥ã®èå³æ·±ããœãªã¥ãŒã·ã§ã³ããããŸã-ZRTPãããã¯ãããšãã°Telegramã«ãã£ãŠäœ¿çšãããŸãã
æ¥ç¶ã確ç«ããããšãã«Telegramã§çµµæåãèŠã人ã¯å€ãããŸãããããã䜿çšãã人ã¯ã»ãšãã©ããŸãããå®éãå人ã«ããªããæã£ãŠããçµµæåãäŒãããšã圌ã¯åœŒããŸã£ããåãã§ããããšã確èªããããªãã¯çµ¶å¯Ÿã«å®å šãªP2Pæ¥ç¶ãä¿èšŒããŸãã
ã©ã®ããã«æ©èœããŸããïŒ
![](https://habrastorage.org/webt/rx/0-/ws/rx0-wsjwmt6y8fboqtzsgyzpqos.jpeg)
ããããã¹ãŠã®ãããã³ã«ã®å éšã§ã¯ãéåžžã®Diffie-Hellmanã¢ã«ãŽãªãºã ãæåã«äœ¿çšãããŸããã¢ãªã¹ã¯ããã€ãã®çªå·ãçæãã1ã€ãé€ããã¹ãŠãããã«éä¿¡ããŸãããŸããããã¯ä¹±æ°ãçæãããããã¢ãªã¹ã«éä¿¡ããŸãããã®äº€æã®çµæãšããŠãã¢ãªã¹ãšããã¯ç¹å®ã®å€§ããªKãååŸããŸããããã«ã€ããŠã¯ããã£ãã«å šäœãèããäžéã®äººã¯äœãç¥ããããŸã£ããæšæž¬ã§ããŸããã
ãã€ããã¢ãªã¹ãšããã®éã«çŸãããšã圌ãã¯åœŒãšåãéµã亀æããããããK 1ãšK 2ãååŸããŸããäžå€®ã«ãã®äººç©ã®ååšã远跡ããæ¹æ³ã¯ãããŸããã次ã«ããã®ãããªããªãã¯ãé©çšãããŸãããããã®ããŒã¯K 1ããã³K 2ã§ãã¢ãªã¹ãšããã¯éµãã©ã³ãã ã«çæããããããã€ãã¯ééããªãç°ãªããŸããK 1ãšK 2ããããã€ãã®ããã·ã¥ãååŸããŠãçµµæåã§è¡šç€ºããŸãããªã³ãŽããã·ãäœã§ãããããŠäººã ã¯èªåãèŠãåçãèªåã®å£°ã§åŒã¶ã ãã§ããé³å£°ã§ãäºããèå¥ã§ãããããã®åçãç°ãªãå Žåã¯ãããªããšããªãã®éã«èª°ããããŠã圌ãããªããèããŠãããããããŸããã
çµæ
- NATã¿ã€ããããã€ãã³ã°ããã察称NATãçªç ŽããŸããã
- çµ±èšçã«è©äŸ¡ãããããè¯ãïŒp2pãŸãã¯ãªã¬ãŒãå質ãCDNããŠãŒã¶ãŒã®èŠ³ç¹ããæã®å質ãæ¹åããŸããã
- ã³ãŒããã¯ã®åªå é äœãå€æŽããããããªãŒãå°ãç¯çŽããŸããã
- ã·ã°ããªã³ã°ã®æå°é 延ã
![](https://habrastorage.org/webt/xr/h6/2i/xrh62iyyd4cb5ynwfa66atogljm.jpeg)
ãã®ã°ã©ãã¯ãæåã«RTMFPã®å€ãåŒã³åºãããããWebRTCã«åãæ¿ãããšãã«å°ããªé害ãçºçãããã®åŸããŒã¯ãäžæããããšã瀺ããŠããŸãããã¹ãŠãããã«æ©èœããããã§ã¯ãããŸããïŒãã®çµæãä¿çãããã³ãŒã«ã®æ°ã4åã«å¢ããŸããã
ç°¡åãªæ瀺
ããããã¹ãŠãå¿ èŠãšããªãå Žåãéåžžã«ç°¡åãªæ瀺ããããŸãã
- WebRTCïŒhttps://webrtc.org/native-code/development/ïŒããã³ãŒããããŠã³ããŒãããiOS / Androidã§ã³ã³ãã€ã«ããŸãããã¹ãŠã®ãã©ãŠã¶ãŒã«æ¢ã«ååšããŸãã
- coturnïŒhttps://github.com/coturn/coturnïŒããããã€ããŸãã
- æžã蟌ã¿ã·ã°ããªã³ã°ã
ãã¹ãŠã鳎ããŸããã鳎ãã¯ããªãè¯ãã§ãã
å ±ååŸã®è³ªåãžã®åçãèã
HighLoad++ 4-.
, . , 19 (10 9 -) , - . , , .