翻蚳è
ããïŒJavaã®éãããã¯ã¢ãŒãã§ã®UDPãœã±ããã®åäœãçè§£ããããã«åºã¥ããŠãããã¯ãŒã¯æ¥ç¶ãæäœããããã®ç¬èªã®ã¯ã©ã¹ãäœæããå¿
èŠããããŸããã æ®å¿µãªãããç§ã¯ãã®ããŒãã«é¢ããçã«ããªã£ããã·ã¢èªã®ããã¥ã¡ã³ããèŠã€ããŸããã§ããã ããããUDPãä»ããä¿¡é Œæ§ã®é«ãæ¥ç¶ã®äœæãšããããŒããæããã«ããããšããhabrã®ããã€ãã®è©Šã¿ã«ã€ãŸãããŸããã ãŠãŒã¶ãŒ bvasilyevã äœæããGlenn Fiedlerã«ããããã€ãã®èšäºã®ç¿»èš³ãå«ã ã
ãããŠãèšäºã§ã¯ã²ãŒã ã§äœ¿çšããããã®ãã®ãããªæ¥ç¶ã®äœæã«ã€ããŠèª¬æããŸãïŒç§ãå¿
èŠãšãããã®ã§ã¯ãããŸããïŒã æ®å¿µãªããã bvasilyev ã¯çŽ1幎åã«ãã®ãµã€ã¯ã«ã®ç¿»èš³ãäžæããæãè峿·±ããã®ã¯å
ã®èšèªã«æ®ã£ãŠããŸããã ãããã£ãŠããµã€ã¯ã«ã®4çªç®ã®èšäºã翻蚳ã ãä»®æ³æ¥ç¶ã®å®è£
ã ãµã€ã¯ã«ã®3çªç®ã®èšäºããjavaã« æžãæãã ããšã«ããŸããïŒå°ãåŸã§èª¬æããŸãïŒã ç§ä»¥å€ã®èª°ãããã®èšäºã䜿çšã§ããããã«ãããã«æçš¿ããŸãã æ®å¿µãªãããç§ã¯ããã®ç¿»èš³ã«åŸäºããããšã¯ãããŸããã§ãããç§ã¯åžžã«è±èªã®ããã¥ã¡ã³ããå匷ããŸããã ãããããã®å Žåãå®å
šã«ç°ãªãæå³ã§ç¹å®ã®åèªãäœåºŠã䜿çšãããŠãããããããããçš®é¡ã®å®çŸ©ã®ååã§ãç¹°ãè¿ã-åãæå
ã§ã翻蚳ãããã®åŸç§ã«éŠŽæã¿ã®ããèšèªã§ããã¹ããæäœããæ¹ã䟿å©ã§ããããšãããããŸãã ä¿®æ£ããã³åççãªææ¡ãæè¿ããŸããæåã®èšäºç¬¬äºã®èšäºç¬¬äžã®èšäºïŒãªã³ãŒã«ïŒ
bvasilyev翻蚳æžã¿ïŒ
ä¿¡é Œæ§ãé åºä»ããUDPãä»ããéè² è·ã®åé¿
ãšã³ããªãŒ
ããã«ã¡ã¯ãç§ã®ååã¯ã°ã¬ã³ãã£ãŒãã©ãŒã§ããã·ãªãŒãºãã²ãŒã éçºè
åããããã¯ãŒã¯ããã°ã©ãã³ã°ãã®ç¬¬4åã®èšäºã§ãè¿ãããŸãã
åã®èšäºã§ã¯ãUDPã«åºã¥ããä»®æ³æ¥ç¶ã®ç¬èªã®æŠå¿µãäœæããŸããã
ããã§ãä»®æ³UDPæ¥ç¶ã«ä¿¡é Œæ§ãç§©åºãããã³èŒ»èŒ³åé¿ã远å ããŸãã
ããã¯ãã²ãŒã ã«ãããäœã¬ãã«ã®ãããã¯ãŒã¯äœæ¥ã®äžã§æãé£ããéšåã§ããããããã®èšäºã¯éåžžã«æ³¢ä¹±ã«å¯ãã®ã§ãææ
¢ããŠè¡ããŸããïŒ
TCPã®åé¡
TCPã«ç²ŸéããŠãã人ã¯ãä¿¡é Œæ§ã®é«ãåçåããããã±ãã転éã·ã¹ãã ãšèŒ»èŒ³åé¿ãåããç¬èªã®å
éšæ¥ç¶ã³ã³ã»ãããæ¢ã«æã£ãŠããããšãç¥ã£ãŠããŸãã
åé¡ã¯ããã¢ã¯ã·ã§ã³ããžã£ã³ã«ã®ãã«ããã¬ã€ã€ãŒã²ãŒã ã¯ã1ç§ããã10ã30ãã±ããã®é »åºŠã§éä¿¡ããããã±ããã®äžå®ã®ã¹ããªãŒã ã«äŸåããŠããããšã§ãã ã ããã«ã¯ããã¬ã€ã€ãŒã®å
¥åããã€ã¹ããã®ããŒã¿ãåãã£ã©ã¯ã¿ãŒã®äœçœ®ãšéåºŠã®æ¹åãã²ãŒã äžçã®ãªããžã§ã¯ãã®ç©çç¶æ
ãå«ãŸããŸãã
TCPã®åé¡ã¯ãä¿¡é Œæ§ã®é«ãåçåããããããŒã®ããã®æœè±¡ããŒã¿é
ä¿¡ã§ãã ãã®ããããã±ããã倱ãããå ŽåãTCPã¯åæ¢ãããã±ãããåéä¿¡ãããã®ãåŸ
ã€å¿
èŠããããŸãã ããã«ããããã±ããã®äžå®ã®ãããŒãäžæããããããåéä¿¡ãã±ãããåä¿¡ãããŸã§åŸã®ãã±ãããé çªã«åŸ
æ©ããå¿
èŠãããããã±ãããæ£ããé åºã«äžŠã¹ãããšãã§ããŸãã
å¿
èŠãªã®ã¯ãç°ãªãã¿ã€ãã®ä¿¡é Œæ§ã§ãã ãã¹ãŠã®ããŒã¿ãé©åã«é åºä»ããããã¹ããªãŒã ãšããŠæ±ãã®ã§ã¯ãªããäžå®ã®é床ã§ãã±ãããéä¿¡ããå¥ã®ã³ã³ãã¥ãŒã¿ãŒã«ããåä¿¡ã«ã€ããŠã®éç¥ãåãåããŸãã ããã«ãããåéä¿¡ããããã±ãããåŸ
ããã«æéäŸåã®ããŒã¿ãé
ä¿¡ã§ãããšåæã«ãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§ã®ãã±ããæå€±ã®åŠçæ¹æ³ã決å®ããããšãã§ããŸãã
TCPã䜿çšããŠæå®ãããããããã£ã§ä¿¡é Œæ§ã®é«ãã·ã¹ãã ãäœæããããšã¯ã§ããªããããUDPã®äžã«ç¬èªã®ã·ã¹ãã ãäœæãã以å€ã«éžæè¢ã¯ãããŸããã
æ®å¿µãªãããæžãæããå¿
èŠãããã®ã¯ä¿¡é Œæ§ã ãã§ã¯ãããŸããã ããã¯ãTCPã茻茳åé¿ãæäŸãããããæ¥ç¶ã®ããããã£ã«å¿ããŠãéä¿¡ããŒã¿ã®é床ãåçã«å€æŽã§ããããã§ãã ããšãã°ãTCPã¯28.8kã¢ãã ã䜿çšããå ŽåãT1åç·ãããå°ãªãããŒã¿ãéä¿¡ããæ¥ç¶ã®ã¿ã€ããäºåã«ç¥ããªããŠããããè¡ãããšãã§ããŸãã
ã·ãŒã±ã³ã¹çªå·
ä¿¡é Œæ§ã«æ»ããŸãããïŒ
ä¿¡é Œæ§ã·ã¹ãã ã®ç®æšã¯åçŽã§ãïŒæ¥ç¶ã®å察åŽã«å°éãããã±ãããç¥ãããã
ãŸããããã±ãŒãžãèå¥ããæ¹æ³ãå¿
èŠã§ãã
ãããã±ãŒãžèå¥åãã®æŠå¿µã远å ãããšã©ããªããŸããïŒ æŽæ°ã«ããŸãã ããããŒãããéå§ããéä¿¡ãããã¹ãŠã®ãã±ããã§ãã®æ°ã1ã€å¢ããããšãã§ããŸãã éä¿¡ããæåã®ãã±ããã¯ããã±ãã0ãã§ãéä¿¡ããã100çªç®ã®ãã±ããã¯ããã±ãã99ãã§ãã
ããã¯å®éã«ã¯ããªãäžè¬çãªæ¹æ³ã§ãã TCPã§ã䜿çšãããŠããŸãïŒ ãããã®ãããèå¥åã¯ã·ãŒã±ã³ã¹çªå·ãšåŒã°ããŸãã ãŸããTCPãšãŸã£ããåãããã«ä¿¡é Œæ§ãå®è£
ããããã§ã¯ãããŸããããåãçšèªã䜿çšããããšã¯çã«ããªã£ãŠãããããä»åŸã¯ã·ãªã¢ã«çªå·ãšåŒã³ãŸãã
UDPã¯ãã±ããã®é åºãä¿èšŒããªãããã100åã®åä¿¡ãã±ãããå¿
ããã100åã®ãã±ãããéä¿¡ãããããšãæå³ããããã§ã¯ãããŸããã ãã®çµæãã·ãªã¢ã«çªå·ããã±ããã®ã©ããã«æ¿å
¥ããå¿
èŠããããããæ¥ç¶ã®ããäžæ¹ã®ç«¯ã«ããã³ã³ãã¥ãŒã¿ãŒã¯ã©ã®ç¹å®ã®ãã±ãããç¥ãããšãã§ããŸãã
åã®èšäºã®ä»®æ³æ¥ç¶çšã®åçŽãªããã±ãŒãžããããŒãæ¢ã«ãããããããããŒã«ã·ãŒã±ã³ã¹çªå·ã远å ããã ãã§ãã æ¬¡ã®ããã«ãªããŸãã
[uint protocol id] [uint sequence] (packet dataâŠ)
æ¥ç¶ã®å察åŽã«ããã³ã³ãã¥ãŒã¿ãŒããã±ãããåä¿¡ããã®ã§ãéä¿¡ã³ã³ãã¥ãŒã¿ãŒã«ãã£ãŠå²ãåœãŠãããã·ãªã¢ã«çªå·ãããããŸãã
ã¢ãã¯
ã·ãŒã±ã³ã¹çªå·ã䜿çšããŠãã±ãããèå¥ã§ããããã«ãªã£ãã®ã§ã次ã®ã¹ãããã¯ãåä¿¡ããŠãããã±ãããæ¥ç¶ã®å察åŽã«ç¥ãããããšã§ãã
è«ççã«ã¯ãããã¯éåžžã«ç°¡åã§ããåä¿¡ããåãã±ããã®ã·ãªã¢ã«çªå·ãã¡ã¢ãããããã®ã·ãªã¢ã«çªå·ãéä¿¡å
ã®ã³ã³ãã¥ãŒã¿ãŒã«è¿éããã ãã§ãã
2å°ã®ãã·ã³éã§åžžã«ãã±ããã亀æããŠãããããã·ãªã¢ã«çªå·ã§è¡ã£ãããã«ããã±ããããããŒã«ackã远å ããã ãã§ãã
[uint protocol id] [uint sequence] [uint ack] (packet data...)
äžè¬çãªã¢ãããŒãã¯æ¬¡ã®ãšããã§ãã
- ãã±ãããéä¿¡ãããã³ã«ãããŒã«ã«ã·ãŒã±ã³ã¹çªå·ãå¢ãããŸãã
- ãã±ãããåä¿¡ãããšããã±ããã®ã·ãŒã±ã³ã¹çªå·ãããªã¢ãŒãã·ãŒã±ã³ã¹çªå·ãšåŒã°ããæè¿åä¿¡ãããã±ããã®ã·ãŒã±ã³ã¹çªå·ãšæ¯èŒããŸãã åä¿¡ãããã±ããã®æ°ãå€ãå Žåããªã¢ãŒãã·ãªã¢ã«çªå·ãæŽæ°ããåä¿¡ãããã±ããã®ã·ãªã¢ã«çªå·ãšåãã«èšå®ããŸãã
- ãã±ããããããŒãã³ã³ãã€ã«ãããšãããŒã«ã«ã·ãªã¢ã«çªå·ããã±ããã®ã·ãªã¢ã«çªå·ã«ãªãããªã¢ãŒãã·ãªã¢ã«çªå·ãackã«ãªããŸãã
ãã®åçŽãªackã·ã¹ãã ã¯ãå°çãããã¹ãŠã®ãã±ããã«éä¿¡ãã±ããããããšããæ¡ä»¶ã§æ©èœããŸãã
ããããããã±ãŒãžãéä¿¡ããåã«2ã€ã®ããã±ãŒãžãå°çããããã«ããã±ãŒãžãç§»åãããšã©ããªããŸããïŒ ããã±ãŒãžããšã«1ã€ã®ackãããªãã®ã§ãã©ãããŸããïŒ
次ã«ãæ¥ç¶ã®çåŽãããéãããŒã¹ã§ãã±ãããéä¿¡ããå ŽåãèããŸãã ã¯ã©ã€ã¢ã³ãã1ç§ããã30ãã±ãããéä¿¡ãããµãŒããŒã1ç§ããã10ãã±ããããéä¿¡ããªãå ŽåããµãŒããŒããéä¿¡ãããåãã±ããã«å°ãªããšã3 ACKãå
¥ããå¿
èŠããããŸãã
ããã«è€éã«ããŸãããïŒ ackãå«ãããã±ãŒãžã倱ãããå Žåã¯ã©ããªããŸããïŒ ãœãŒã¹ãã±ãããéä¿¡ããã³ã³ãã¥ãŒã¿ãŒã¯ãå®éã«ã¯åä¿¡ãããã®ã«å¯ŸããŠãããã倱ããããšèããŸãïŒ
ä¿¡é Œæ§ã®é«ãã·ã¹ãã ãããä¿¡é Œæ§ã®é«ããã®ã«ããå¿
èŠãããããã§ãã
ä¿¡é ŒãããACK
ããã§ã¯ãTCPãããã³ã«ããé¢ããŸãã
TCPã¯ã次ã®ã·ãŒã±ã³ã¹çªå·ãæã€ãã±ããã§éä¿¡ãããackã®ã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠãä¿æããŠããéãäœãããŸãã-æå®ãããé åºã§åä¿¡ããããšãæåŸ
ããŠããŸãã TCPãç¹å®ã®ãã±ããã®ACK確èªå¿çãåä¿¡ããªãå ŽåãTCPã¯åæ¢ãããã®ã·ãŒã±ã³ã¹çªå·ãæã€ãã±ãããå床éä¿¡ããŸãã ããã¯ãŸãã«é¿ãããåäœã§ãïŒ
ãããã£ãŠãä¿¡é Œæ§ã®é«ãã·ã¹ãã ã§ã¯ãç¹å®ã®ã·ãŒã±ã³ã¹çªå·ãæã€ãã±ãããåéä¿¡ããããšã¯ãããŸããã çªå·nã®ãã±ããã1åã ãéä¿¡ããŠãããn + 1ãn + 2ãªã©ãéä¿¡ããŸãã ãã±ããnã倱ãããå Žåãåéä¿¡ã忢ããããšã¯ãããŸãããå¿
èŠã«å¿ããŠå€±ãããããŒã¿ãå«ãæ°ãããã±ãããäœæããããã«ãã®ã¢ããªã±ãŒã·ã§ã³ãçµäºãããã®ãã±ããã¯æ°ããã·ãªã¢ã«çªå·ã§éä¿¡ãããŸãã
TCPãšã¯ç°ãªãããšãè¡ã£ãŠãããããackãéä¿¡ãããã±ããã®ã»ãããã¹ãããïŒããŒã«ïŒã§ããããã«ãªã£ããããåä¿¡ããæåŸã®ãã±ããã®ã·ãŒã±ã³ã¹çªå·ãéä¿¡ããã ãã§ã¯äžååã§ãã
1ã€ã®ããã±ãŒãžã«è€æ°ã®ackãå
¥ããå¿
èŠããããŸãã
ã©ã®ãããã®ackãå¿
èŠã§ããïŒ
åè¿°ã®ããã«ãæ¥ç¶ã®äžæ¹ã仿¹ãããéããã±ãããéä¿¡ããå ŽåããããŸãã ææªã®å Žåãäžæ¹ãå°ãªããšãæ¯ç§10ãã±ãããéä¿¡ãã仿¹ã30以äžãéä¿¡ãããšä»®å®ããŸãããããã®å Žåãåãã±ããã«å¿
èŠãªackã®å¹³åæ°ã¯3ã§ããããã±ãããå°ããªããŒãã«æ¥ãå Žåããã£ãšå¿
èŠãããããŸããã ææªã®å Žåã¯6ã10ãšããŸãããã
ããããå«ãããã±ãŒãžã倱ããããšããäºå®ã®ããã«åä¿¡ãããªãã£ããããã®ackã«ã€ããŠã¯ã©ãã§ããïŒ
ãã®åé¡ã解決ããããã«ãåŸæ¥ã®ãããã¯ãŒã¯åé·æ§æŠç¥ã䜿çšããŠãã±ããæå€±ãç¡å¹ã«ããŸãïŒ
åãã±ããã«33åã®ackãå«ãŸããããã«ããŸããæå€§33åããã ãåžžã«33åãŸã§å«ããããšã¯ã§ããŸããããããã£ãŠãç¹å®ã®ackã«å¯ŸããŠãackãæã€1ã€ã®ãã±ãããééã§ããªãã£ãå Žåãåé·æ§ãå ããŠæå€§32åéä¿¡ããŸãïŒ
ãããã33åã®ç¢ºèªãããã±ãŒãžã§éä¿¡ããã«ã¯ã©ãããã°ããã§ããïŒ çµå±ãåackã®4ãã€ãã¯132ãã€ãã§ãïŒ
ã³ãã¯ãããããã£ãŒã«ãã䜿çšããŠãackãã«ãªã32åã®ãã®ä»ã®ackã衚ãããšã§ãã
[uint protocol id] [uint sequence] [uint ack] [uint ack bitfield] (packet data...)
ãackããããã£ãŒã«ãããå®çŸ©ããŠãåãããããackãã®åã«ãã32åã®ã·ãŒã±ã³ã¹çªå·ã®ackã«å¯Ÿå¿ããããã«ããŸãã ãackã100ãšããŸãããããack bit fieldãã®æåã®ããããèšå®ãããŠããå Žåããã±ããã«ã¯ãã±ãã99ã®ackãå«ãŸããŸãã2çªç®ã®ããããèšå®ããããšããã±ãã98ã確èªãããŸãã ã
調æŽãããã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«ãªããŸãã
- ãã±ãããéä¿¡ãããã³ã«ãããŒã«ã«ã·ãŒã±ã³ã¹çªå·ãå¢ãããŸãã
- ãã±ãããåä¿¡ãããšããã±ããã®ã·ãŒã±ã³ã¹çªå·ãšãªã¢ãŒãã·ãŒã±ã³ã¹çªå·ãæ¯èŒããŸãã åä¿¡ãããã±ããã®æ°ãå€ãå Žåããªã¢ãŒãã·ãªã¢ã«çªå·ãæŽæ°ããåä¿¡ãããã±ããã®ã·ãªã¢ã«çªå·ãšåãã«èšå®ããŸãã
- ãã±ããããããŒãã³ã³ãã€ã«ãããšãããŒã«ã«ã·ãªã¢ã«çªå·ããã±ããã®ã·ãªã¢ã«çªå·ã«ãªãããªã¢ãŒãã·ãªã¢ã«çªå·ãackã«ãªããŸãã ackããããã£ãŒã«ãã¯ã[ãªã¢ãŒãã·ãªã¢ã«çªå·-32ããªã¢ãŒãã·ãªã¢ã«çªå·]ã®ç¯å²ã®ã·ãŒã±ã³ã¹çªå·ãå«ã33ãã±ããã®ãã¥ãŒã調ã¹ãããšã§èšç®ãããŸãã ããªã¢ãŒãã·ãŒã±ã³ã¹çªå·-nãã«çãããã±ããã·ãŒã±ã³ã¹çªå·ãåä¿¡ãã¥ãŒã«ããå Žåãããããã£ãŒã«ãïŒ[1.32]ïŒã®ãããnãã1ãã«èšå®ããŸãã
- ããã«ããã±ãããåä¿¡ãããšãackããããã£ãŒã«ããã¹ãã£ã³ããããããnãèšå®ãããŠããå Žåããã±ããnã®ã·ãŒã±ã³ã¹çªå·ã確èªãããŸãïŒãŸã 確èªãããŠããªãå ŽåïŒã
ã¢ã«ãŽãªãºã ã®ãã®æ¹åãããããŒãžã§ã³ã䜿çšãããšãackã®æå€±ãéå§ããããã«ã1ç§ä»¥äž100ïŒ
ã®ãã±ããã倱ãå¿
èŠããããŸãã
ãã±ããæå€±æ€åº
æ¥ç¶ã®å察åŽã§ãã±ãããåä¿¡ãããããšãããã£ãã®ã§ããã±ããæå€±ãã©ã®ããã«æ€åºããã®ã§ããïŒ
ããã§ã®ã³ãã¯ãackãç§ãã¡ã«æ»ã£ãŠããããšã§ããç¹å®ã®æéå
ã«ç¢ºèªãåãåããªãã£ãå Žåããã±ããã¯å€±ããããšèŠãªãããŸãã
1ç§éã«30ãã±ãã以äžãéä¿¡ãã1ç§éã«ãã±ããã®ackãåä¿¡ããªãå Žåããã±ããã倱ãããå¯èœæ§ãéåžžã«é«ããšèããããŸãã
ãã®ããããããã䜿çšãããã®ãããªããªãã¯ã䜿çšãããšãå°çãããã±ããã100ïŒ
確信ã§ããåä¿¡ãããªãã£ããã±ããã®ã»ãããæšæž¬ããããã®ããªãã®ä¿¡é ŒãåŸãããšãã§ããŸãã
ãã®çµæããã®ä¿¡é Œæ§ã®ææ³ã䜿çšããŠåéä¿¡ãããã¹ãŠã®ããŒã¿ã«ã¯ç¬èªã®ã¡ãã»ãŒãžèå¥åãå¿
èŠã«ãªããããäœåºŠãåä¿¡ããå Žåã¯æåŠã§ããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§å®è¡ã§ããŸãã
ã·ãªã¢ã«çªå·ãªã»ããåŠç
ã·ãªã¢ã«çªå·ãšç¢ºèªã®è°è«ã¯ãã·ãªã¢ã«çªå·ã®ãªã»ããã®åé¡ã匷調ããã«ã¯å®äºããŸããïŒ
ã·ãŒã±ã³ã¹çªå·ãšackã¯32ãããã®ç¬Šå·ãªãæŽæ°ãªã®ã§ãç¯å²ã¯[0.4294967295]ã§ãã ããã¯éåžžã«å€§ããªæ°ã§ãïŒ 1ç§éã«30ãã±ãããéä¿¡ãããšããã®ç¯å²ã䜿ãæãããŠã·ãŒã±ã³ã¹çªå·ããªã»ããããå¿
èŠããããŸã§ã«4幎å以äžããããŸãã
ãã ãã垯åå¹
ãç¯çŽããã·ãŒã±ã³ã¹çªå·ãšackã16ãããæŽæ°ã«æžããããå ŽåããããŸãã åãã±ããã§4ãã€ãç¯çŽã§ããŸãããç¯å²ã¯30åã§äœ¿ãæããããŸãïŒ
ã§ã¯ããããã©ã®ããã«åŠçããŸããïŒ
ç§Theã¯ãçŸåšã®ã·ãªã¢ã«çªå·ãæ¢ã«éåžžã«å€§ãããå°çããæ¬¡ã®ã·ãªã¢ã«çªå·ãéåžžã«å°ããå Žåãã·ãªã¢ã«çªå·ã®ã«ãŠã³ãããŠã³ãéå§ããå¿
èŠãããããšãçè§£ããããšã§ãã ãããã£ãŠãæ°ããã·ãŒã±ã³ã¹çªå·ã¯ãã·ãŒã±ã³ã¹çªå·ã®çŸåšã®å€ãããæ°å€çã«ã¯å°ããã§ãããå®éã«ã¯ãã以éã®ããã±ãŒãžã§ãã
ããšãã°ãã·ãŒã±ã³ã¹çªå·ã1ãã€ãã§ãšã³ã³ãŒããããšããŸãïŒæ¹æ³ã§æšå¥šãããŸãã:)ïŒã255ã®åŸã«ãŒãåãçºçããŸãã
... 252, 253, 254, 255, 0, 1, 2, 3, ...
ãã®å Žåã«å¯ŸåŠããã«ã¯ã255ã®åŸã«ã·ãªã¢ã«çªå·ããŒãã«ãªã»ãããããããšãç¥ã£ãŠããæ°ãã颿°ãå¿
èŠã§ãããããã£ãŠã0ã1ã2ã3ã¯255ããé
ããšèŠãªãããŸããããã±ãŒãž255ã
颿°ã¯æ¬¡ã®ãšããã§ãã
bool sequence_more_recent( unsigned int s1, unsigned int s2, unsigned int max) { return ( s1 > s2 ) && ( s1 - s2 <= max/2 ) || ( s2 > s1 ) && ( s2 - s1 > max/2 ); }
ãã®é¢æ°ã¯ã2ã€ã®æ°å€ãšãããã®å·®ãæ¯èŒããããšã«ããæ©èœããŸãã ãããã®å·®ãã·ãªã¢ã«çªå·ã®æå€§å€ã®ååãããå°ããå Žåããããã¯äºãã«è¿ãã¯ãã§ãããã®ãããéåžžãäžæ¹ã®çªå·ã仿¹ã®çªå·ããã倧ãããã©ããã確èªããŸãã ãã ããããããé¢ããŠããå Žåããããã®å·®ã¯ã·ãªã¢ã«çªå·ã®æå€§å€ã®åå以äžã«ãªããé説çã«ãçŸåšã®ã·ãªã¢ã«çªå·ãããå°ããã·ãªã¢ã«çªå·ãåŸã§æ€èšããŸãã
ããã«ãããééçã«ã·ãŒã±ã³ã¹çªå·ã®ãŒãåãå¯èœã«ãªãããã0,1,2ã¯255ããåŸãšèŠãªãããŸãã
ãšãŠãã·ã³ãã«ã§ãšã¬ã¬ã³ãïŒ
ã·ãŒã±ã³ã¹çªå·ã®åŠçã«ã¯å¿
ããããå«ããŠãã ããã
éè² è·é²æ¢
ä¿¡é Œæ§ã«é¢ããåé¡ã解決ããŸããããäŸç¶ãšããŠèŒ»èŒ³ãé²ããšããåé¡ããããŸãã TCPã¯TCPä¿¡é Œæ§ãã±ããã®äžéšãšããŠèŒ»èŒ³åé¿ãæäŸããŸãããUDPã«ã¯èŒ»èŒ³åé¿ã®ææ®µããããŸããïŒ
ãããŒå¶åŸ¡ãªãã§åçŽã«ãã±ãããéä¿¡ãããšãæ¥ç¶ããã©ããã£ã³ã°ãã匷ãé
å»¶ïŒ2ç§ä»¥äžïŒïŒãçºçããŸããããã¯ãåœç€Ÿãšä»ã®ã³ã³ãã¥ãŒã¿ãŒéã®ã«ãŒã¿ãŒãããã¡ãŒãéè² è·ã«ãªãããã§ãã ããã¯ãã«ãŒã¿ãŒãéä¿¡ãããã¹ãŠã®ãã±ãããé
ä¿¡ããããšéåžžã«äžçæžåœè©Šã¿ãããã«çºçããŸãããããã£ãŠããã±ãããããããããæéã§ãããšå€æãããŸã§ããããããããã¡ãŒãã¥ãŒã«å
¥ããŸãã
ãã±ãããæéé
å»¶ã«éåžžã«ææã§ãããã«ãŒã¿ãŒãéè² è·ã«ãªã£ãå Žåã«ãããã¡ãªã³ã°ãã代ããã«ç Žæ£ããå¿
èŠãããããšãã«ãŒã¿ãŒã«äŒããããšãã§ããã°ããã®ã§ãããäžçäžã®ãã¹ãŠã®ã«ãŒã¿ãŒã®ãœãããŠã§ã¢ãæžãæããã«ãããè¡ãããšã¯ã§ããŸããïŒ
ãã®ãããããããéä¿¡ãã£ãã«ããªãŒããŒãããŒããªãããã«ããããã«ã§ããããšã ãã«çŠç¹ãåœãŠãå¿
èŠããããŸãã
ãããè¡ãæ¹æ³ã¯ãç¬èªã®ã³ã¢èŒ»èŒ³åé¿ã¢ã«ãŽãªãºã ãå®è£
ããããšã§ãã ãããŠãç§ã¯åŒ·èª¿ããŸã-äž»ãªãã®ïŒ ä¿¡é Œæ§ãšåæ§ã«ãTCPãããé©åãªãã®ãæãä»ãæåã®è©Šã¿ã«ã¯æã¿ããããŸãããå¯èœãªéãã·ã³ãã«ã«ããŸãããã
æ
è¡ããªããæž¬å®ïŒåŸåŸ©æé-RTTïŒ
ãã¹ãŠã®èŒ»èŒ³é²æ¢ã¯ãæ¥ç¶ã®èŒ»èŒ³ãåé¿ããééæéïŒRTTïŒãå¢ããããšã§è»œæžãããããããã£ãã«ãéè² è·ã«ãããã©ããã®æãéèŠãªææšã¯RTTèªäœã§ããããšãããããŸãã
æ¥ç¶ã®RTTãæž¬å®ããæ¹æ³ãå¿
èŠã§ãã
åºæ¬çãªãã¯ããã¯ã¯æ¬¡ã®ãšããã§ãã
- éä¿¡ããããã±ããããšã«ããã±ããã®ã·ãªã¢ã«çªå·ã«å ããŠãéä¿¡æå»ãå«ããšã³ããªã远å ããŸãã
- ackãååŸãããã³ã«ããã®ã¬ã³ãŒããèŠãŠãackãåä¿¡ãããæå»ãšãã±ãããéä¿¡ãããæå»ãšã®çŸå°æéã®å·®ãèŠã€ããŸãã ããã¯ããã®ããã±ãŒãžã®RTTæéã§ãã
- ãªããªã ãã±ããã®å°çã¯ãããã¯ãŒã¯ã®ãžãã¿ãŒïŒãžãã¿ãŒ-ããžã¿ã«ããŒã¿ä¿¡å·ã®äœçžãžãã¿ãŒ-éä¿¡ä¿¡å·ã®äžèŠãªäœçžããã³/ãŸãã¯åšæ³¢æ°ã®ã©ã³ãã åå·®ïŒã«ãã£ãŠå€åãããããæ°ããå€ãååŸãããã³ã«ãã®å€ãå¹³æ»åããŠå®çšçãªå€ã®ææšãæäŸããå¿
èŠããããŸãRTTçŸåšã®RTTããã±ãŒãžãšRTTããã±ãŒãžã®å·®ãããŒã»ã³ããŒãžã§èšç®ããŸãã ç§ã®æèŠã§ã¯ã10ïŒ
ã¯å®éã«ã¯è¯ãããã§ãã ããã¯ææ°çã«å¹³æ»åãããç§»åå¹³åãšåŒã°ããRTTã®åå·®ãå¹³æ»åãã广ããããŸãã
- éä¿¡ããããã±ããã®ãã¥ãŒãåžžã«å€§ãããªããªãããã«ãããããäºæ³ãããæå€§RTTãè¶
ãããã±ããã®éä¿¡ããã£ã³ã»ã«ããŸãã ä¿¡é Œæ§ã«é¢ããåã®ã»ã¯ã·ã§ã³ã§è¿°ã¹ãããã«ãackã1ç§ä»¥å
ã«åä¿¡ããªãã£ããã±ããã¯å€±ãããå¯èœæ§ãéåžžã«é«ããããæå€§RTTã«ã¯1ç§ãé©åãªå€ã§ãã
ããã§RTTãåŸããã茻茳åé¿ãã¬ã€ãããã¡ããªãã¯ãšããŠäœ¿çšã§ããŸãã RTTã倧ãããªãããããšãããŒã¿ã®éä¿¡é »åºŠãäœããªãã蚱容ç¯å²å
ã§ããã°ãããŒã¿ã®éä¿¡é »åºŠãå¢ããããšãã§ããŸãã
åçŽãªãã€ããªéè² è·é²æ¢
åã«è¿°ã¹ãããã«ã飜ãããšã®ãªãããã«ãéåžžã«åçŽãªéè² è·é²æ¢ãå®è£
ããŸãã ãã®éè² è·é²æ¢ã«ã¯2ã€ã®ã¢ãŒãããããŸãã è¯ãé¢ãšæªãé¢ã ãã®åçŽãªãã€ããªéè² è·é²æ¢ãšåŒã³ãŸãã
ãããµã€ãºãããšãã°256ãã€ãã®ãã±ãããéä¿¡ããŠãããšä»®å®ããŸãããã ãããã®ãã±ããã1ç§éã«30åéä¿¡ãããããç¶æ³ãæªãå Žåã¯ãéä¿¡é床ã1ç§éã«10åã«æžããããšãã§ããŸãã
ãããã£ãŠã256ãã€ãã®ãã±ããã¯1ç§éã«30åãçŽ64 kbit / sã®é床ãæäŸãã1ç§éã«10åã¯çŽ20 kbit / sã®é床ãæäŸããŸãã å°ãªããšã20kbit / sãåŠçã§ããªããããŒããã³ããããã¯ãŒã¯æ¥ç¶ã¯äžçã«ååšããªãããããã®ä»®å®ãé²ããŸãã äžè¬ã«éä¿¡/å信垯åå¹
ãæã€ããã€ã¹ã«é©ããŠããTCPãšã¯ç°ãªããæ¥ç¶ã«åå ããŠããããã€ã¹ã®æå°åž¯åå¹
ãæ³å®ããŸãã
ãããã£ãŠãäž»ãªã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãã ãããã¯ãŒã¯ç¶æ
ããè¯ããå Žåã1ç§ããã30ãã±ãããéä¿¡ãããããã¯ãŒã¯ç¶æ
ããæªããå Žåã1ç§ããã10ãã±ããã«ããããããŸãã
ãã¡ããããè¯ãããšãæªããã奜ããªããã«å®çŸ©ã§ããŸãããRTTã®ã¿ãèæ
®ãããšãè¯ãçµæãåŸãããŸããã ããšãã°ãRTTãç¹å®ã®ãããå€ïŒ250ããªç§ãªã©ïŒãè¶
ããå Žåãæ¥ç¶ãéè² è·ã«ãªãå¯èœæ§ãããããšãããããŸãã ãã¡ãããããã¯ã茻茳ã®ãªãéåžžã®æ¡ä»¶äžã§ã¯ã誰ã250ããªç§ãè¶
ããªãããšãåæãšããŠããŸããããã¯ããããŒããã³ãèŠä»¶ãèæ
®ãããšåŠ¥åœã§ãã
åãšæªãåãæ¿ããæ¹æ³ã¯ïŒ 䜿çšãããã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«æ©èœããŸãã
- çŸåšè¯å¥œãªã¢ãŒãã§ãããç¶æ
ãæªåããŠããå Žåã¯ãããã«äžè¯ãªã¢ãŒãã«åãæ¿ããŠãã ããã
- äœå質ã¢ãŒãã§ãç¹å®ã®æéãtãã®éæ¡ä»¶ãè¯å¥œã ã£ãå Žåã¯ãé«å質ã¢ãŒãã«æ»ããŸãã
- è¯ãã¢ãŒããšæªãã¢ãŒãããã°ããåãæ¿ããã®ãé¿ããããã«ã10ç§ã§è¯ãã¢ãŒãããæªãã¢ãŒãã«åãæ¿ããå Žåã¯ãæé 't'ã2åã«ããŠãããæªãã¢ãŒããè¯ãã¢ãŒãã«æ»ãããšãã§ããŸãã æéãtãã®æå€§å€ãæå€§å€ãããšãã°60ç§ã«å¶éããŸãã
- æ¥ç¶ãçæéããæ¥ç¶ãããŠããªãç¶æ
ã§è¯å¥œãªéä¿¡ã¢ãŒããåæãããªãããã«ããã«ã¯ãæ¥ç¶ãè¯å¥œãªã¢ãŒãã§ãã10ç§ããšã«ããtãæéãååã«ããŸãã æéãtãã®æå°å€ãäœããã®æå°å€ãããšãã°1ç§ã«å¶éããŸãã
ãã®ã¢ã«ãŽãªãºã ã䜿çšãããšãæªãç¶æ
ã«è¿
éã«å¯Ÿå¿ãããã±ããã®éä¿¡é »åºŠã1ç§ããã10ã«æžãããŠããã£ãã«ã®èŒ»èŒ³ãåé¿ããŸãã ãŸãããããã¯ãŒã¯ã®ç¶æ
ãè¯å¥œãªéã¯ãä¿å®ã¢ãŒãã§è¯å¥œãªã¢ãŒãã«åãæ¿ããŠãæ¯ç§30ã®é«ããã±ããéä¿¡ã¬ãŒããç¶æããããšããŸãã
ãã¡ãããã¯ããã«è€éãªã¢ã«ãŽãªãºã ãå®è£
ã§ããŸãã ãã®ãããRTTã ãã§ãªãããã±ããæå€±ã®å²åãã¡ããªãã¯ãšããŠãããã«ã¯ãããã¯ãŒã¯ãžãã¿ã®å€ïŒãã±ãã確èªå¿çã®åæ£æéïŒãšããŠèæ
®ããããšãã§ããŸãã
ãŸãã茻茳åé¿ã«è²ªæ¬²ã«ãªããã¯ããã«é«ã垯åå¹
ïŒLANãªã©ïŒã§ããŒã¿ãéä¿¡ã§ããå ŽåãèŠã€ããããšããŸãããéåžžã«æ³šæããå¿
èŠããããŸãã 貪欲ãå¢ãããšãæ¥ç¶ãéè² è·ã«ãªããªã¹ã¯ã倧ãããªããŸãïŒ
ãããã«
æ°ããä¿¡é Œæ§ã·ã¹ãã ã«ãããå®å®ãããã±ããã¹ããªãŒã ãéä¿¡ããåä¿¡ãããã±ãããéç¥ã§ããŸãã ãããããå¿
èŠã«å¿ããŠã倱ããããã±ããã«é¢ããçµè«ãå°ãåºããåä¿¡ãããªãã£ãããŒã¿ãåéä¿¡ã§ããŸãã
ããã«ããããã¯ãŒã¯ã®ç¶æ
ã«å¿ããŠ1ç§ããã10ã30åãã±ãããéä¿¡ããåçŽãªèŒ»èŒ³åé¿ã·ã¹ãã ããããããæ¥ç¶ãéè² è·ã«ãªãããšã¯ãããŸããã
ãã®èšäºã§èšåããã«ã¯ããŸãã«ãå
·äœçãªè©³çްã®å®è£
ã倿°ãããŸãã®ã§
ããµã³ãã«ã®ãœãŒã¹ã³ãŒããèŠãŠããããã®å®è£
æ¹æ³ã確èªããŠãã ããã
ä¿¡é Œæ§ãåçåãããã³èŒ»èŒ³åé¿ã¯ãããããäœã¬ãã«ãããã¯ãŒã¯ã®æãè€éãªåŽé¢ã§ãã