TCP/IPããããããã - éä¿¡ãããã³ã«ã®åºç€ç¥èãå³è§£ã§åŠãŒã
çŸåšã®ã€ã³ã¿ãŒããããæ¯ããæè¡ã§ããTCP/IPã«ã€ããŠãåºç€ãšãªããããã³ã«çŸ€ãšãTCPã®åºæ¬æ©èœãäžžç°äžèŒããã äžå±±æ ããã«è§£èª¬ããŠããã ããŸããã
ä»ããããã50幎åããã±ããäº€ææ¹åŒã«ããäžçåã®ã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã§ããARPANETãæ§ç¯ãããŸããããã以æ¥ãTCP/IPïŒTransmission Control Protocol / Internet ProtocolïŒã¯éä¿¡ãå®çŸããåºç€æè¡ãšããŠäœ¿ããç¶ããŠããŸããä»ã§ã¯ããœã³ã³ã«éãããã¹ããŒããã©ã³ãã²ãŒã æ©ãã»ã³ãµãŒãæè¿ã§ã¯èªåè»ãªã©ãç¡ç·éä¿¡æ©èœãæã£ãããŸããŸãªç«¯æ«ãå«ãã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã¯æ§æãããŠããŸãã
ãã®äžã§ããéä¿¡ã®ä¿¡é Œæ§ã確ä¿ããã圹å²ãæ ã£ãŠããTCPã¯ããã®æ§è³ªäžãå€ãã®æ©èœãåããŠããŸããå ããŠãæä»£ãšãšãã«é²åããã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ã«åãããŠåžžã«é²åãç¶ããŠããŸããæ¬çš¿ã§ã¯ãçŸåšã®ã€ã³ã¿ãŒããããæ¯ããæè¡ã§ããTCP/IPã«ã€ããŠãåºç€ãšãªããããã³ã«çŸ€ãšãTCPã®åºæ¬æ©èœã«ã€ããŠè§£èª¬ããŸãã
- ãããã³ã«ã¹ã¿ãã¯
- TCPãšã¯
- ã³ãã¯ã·ã§ã³ç®¡ç
- ãããŒå¶åŸ¡ã»ãŠã£ã³ããŠå¶åŸ¡
- 茻茳å¶åŸ¡ã»åéå¶åŸ¡
- è¿å¹Žã®TCP茻茳å¶åŸ¡ã¢ã«ãŽãªãºã
- ãŸãšã
ãããã³ã«ã¹ã¿ãã¯
ã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã¯éåžžã«èº«è¿ãªååšã§ããäžæ¹ã§ãããããã®éä¿¡ãããã³ã«ã§æ¯ããããéåžžã«è€éãªã·ã¹ãã ã§ãããããã³ã«ã¯ãããšããšè€æ°ã®äººéã§äœæ¥ãå®è¡ããããã®åãæ±ºããšããæå³ã§äœ¿ãããŠããèšèã§ãããã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã®çºå±ã«äŒŽãããœãããŠã§ã¢éã®éä¿¡èŠçŽãæãããã«ãçšããããããã«ãªããŸãããç°ãªããã³ããŒè£œåéã®éä¿¡ãå®çŸããããã«ãéä¿¡ãããã³ã«ã¯äžå¯æ¬ ãªãã®ã§ãã
ã³ã³ãã¥ãŒã¿ã¯ãéä¿¡ãå®çŸããããã®äžé£ã®ãããã³ã«çŸ€ãäžã€ã®ã¢ãžã¥ãŒã«ãšããŠå®è£ ããŠããŸãããã®ã¢ãžã¥ãŒã«ã¯ããããã³ã«ã¹ã¿ãã¯ãšåŒã°ãããããããã³ã«ã¹ã€ãŒããšåŒã°ãããããŸãããããã³ã«ã¹ã¿ãã¯ã®å®è£ ã¯OSã«ããç°ãªããŸãããOSIïŒOpen System InterconnectionïŒåç §ã¢ãã«ãçšããŠçµ±äžçã«è¡šçŸããããšãã§ããŸãã
ãããã³ã«ãéå±€åããããšã«ãã£ãŠããœãããŠã§ã¢ã®éçºè ã¯ãã®éå±€ãæ ã圹å²ã«ç¹åããæ©èœã®ã¿éçºããã°è¯ãããšã«ãªããŸããããã«ãããå®è£ ã®å®¹æåãšãšãã«è²¬ä»»ã®åºåãæç¢ºã«ããããšãã§ããã®ã§ãã
OSIåç §ã¢ãã«ã¯7ã€ã®éå±€ïŒã¬ã€ã€ïŒã§æ§ç¯ãããéå±€ãäœãã»ã©ããŒããŠã§ã¢ããã®ãéå±€ãé«ãã»ã©ãœãããŠã§ã¢ããã®åŠçãè¡ããŸããåéå±€ã®åç§°ãšäž»ãªæ©èœã¯ä»¥äžã®ããã«ãŸãšããããŸãã
- 第7å±€ïŒã¢ããªã±ãŒã·ã§ã³å±€
- ããããã®ã¢ããªã±ãŒã·ã§ã³ã®äžã§éä¿¡ã«é¢ä¿ãããããã³ã«ãå®ãã
- 第6å±€ïŒãã¬ãŒã³ããŒã·ã§ã³å±€
- ã¢ããªã±ãŒã·ã§ã³åºæã®ããŒã¿ãã©ãŒãããããããã¯ãŒã¯å ±éã®ãã©ãŒãããã«å€æ
- 第5å±€ïŒã»ãã·ã§ã³å±€
- ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã§éåä¿¡éã«ãããéä¿¡ã®æ¥ç¶ã管ç
- 第4å±€ïŒãã©ã³ã¹ããŒãå±€
- ã³ãã¯ã·ã§ã³ã確ç«ã»åæããã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ã«å¿ããæ¹æ³ã§ããŒã¿ã転é
- 第3å±€ïŒãããã¯ãŒã¯å±€
- ã¢ãã¬ã¹ã®ç®¡çãçµè·¯ã®éžæãè¡ããå®å ãŸã§ããŒã¿ãå±ãã
- 第2å±€ïŒããŒã¿ãªã³ã¯å±€
- ç©ççã«æ¥ç¶ããã2ã€ã®æ©åšéã§ã®éä¿¡ãæäŸ
- 第1å±€ïŒç©çå±€
- æ å ±ãããåã黿°ãªããã¯å ã®ä¿¡å·ã«å€æããç©çåªäœãéããŠæ å ±äŒé
TCP/IPãåæ§ã«éå±€åãããã³ã«ã®æŠå¿µãšããŠã¢ãã«åãããŠããŸãããOSIåç §ã¢ãã«ãšã¯ããç°ãªããŸããäž¡è ã®å¯Ÿå¿é¢ä¿ãšã該åœãããããã³ã«ã®äŸã以äžã«ç€ºããŸãã
OSIåç §ã¢ãã«ã«ãããã»ãã·ã§ã³å±€ä»¥äžã¯ãTCP/IPã§ã¯ã¢ããªã±ãŒã·ã§ã³å±€ã«å±ããŠãããã»ãšãã©ã®æ©èœã¯åã ã®ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠå®è£ ãããŸããå®éã«ã¯ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã¯OSIåç §ã¢ãã«ã§ã¯ãªããTCP/IPã«æºæ ããŠããŸãã
OSIåç §ã¢ãã«ã¯æ©èœå¥ã«ãããã³ã«éå±€ãã¢ãã«åããŠããã®ã«å¯ŸããTCP/IPã¯å®è£ ãå®çšæ§ãäž»çŒã«ããŠã¢ãã«åãããŠããããšãããçŸåšãŸã§ã«åºãæ®åããŠããããšããèæ¯ããããŸãã
TCPãšã¯
TCPã®åºæ¬ã¹ããã¯ã¯ãã€ã³ã¿ãŒãããæè¡ã®æšæºä»æ§çŸ€ã§ããRFCïŒRequest For CommentsïŒ793ã«èŠå®ãããŠããŸããTCPã¯ãã³ãã¯ã·ã§ã³åããšåé¡ãããéåä¿¡ãè¡ãæ©åšéã§éä¿¡ã®éå§ãšçµäºã確èªããŸããããŒã¿è»¢éæã«ã¯ãéä¿¡åŽã¯ããŒã¿ãéä¿¡ããåä¿¡åŽã¯ããã«å¯Ÿãã確èªå¿çã§ããACKïŒAcknowledgementïŒãè¿ãããšã«ãã£ãŠã䞡端ã®ãã¹ãéã§ããŒã¿ãå±ãããã©ããã確èªãåããªãã確å®ã«ããŒã¿è»¢éãè¡ããŸãã
éåžžãããŒã¿ã®éä¿¡åäœã«ã¯ããŒã¿éšãšãããéšãããããããã¯åéå±€ããšã«ãã©ãŒããããèŠå®ãããŠããŸããTCPã§ã¯ãäž¡ãã¹ãã¯ãã©ã³ã¹ããŒãå±€ã®ãããã®ã¿ãåç §ããéä¿¡ã®ãããšããè¡ããŸãããŸãTCPã§ã¯ãã®éä¿¡åäœã®ããšããã»ã°ã¡ã³ãããšåŒã³ãŸãã
TCPã®ãããã«ã¯ããã»ã°ã¡ã³ããäœçªç®ãŸã§éãããããã瀺ãã·ãŒã±ã³ã¹çªå·ãããäœçªç®ãŸã§åãåããŸãã/次ã¯äœçªç®ã欲ããããšããããšã瀺ã確èªå¿ççªå·ããåä¿¡å¯èœãªã»ã°ã¡ã³ãéãã瀺ããŠã£ã³ããŠãµã€ãºçã®ãã£ãŒã«ããçšæãããŠããŸãã以äžã®å³ã®äŸã§ã¯ã1000bytesããšã«ããŒã¿ãéä¿¡ããã·ãŒã±ã³ã¹çªå·ãæŽæ°ãããŠããæ§åã瀺ããŠããŸãã
TCPã¯ãéä¿¡ããäž¡è ãåæã«ããŒã¿ãéåä¿¡å¯èœã§ããå šäºééä¿¡ãæäŸããŸããããããã¯ãŒã¯ã®ç¶æ³ã«ãã£ãŠã¯å®å ãžå°çããã»ã°ã¡ã³ãã®é åºãå ¥ãæ¿ãã£ãããæ¶å€±ããŠããŸã£ããããããšããããŸãã
ãã®åé¡ãè§£æ¶ããããã«ãTCPã¯ã·ãŒã±ã³ã¹çªå·ã«ããã»ã°ã¡ã³ãã®é åºå¶åŸ¡ããæ¶å€±ããã»ã°ã¡ã³ãã®åéå¶åŸ¡ããããŠãããã¯ãŒã¯ã®æ··éïŒèŒ»èŒ³ããµããããšèšããŸãïŒãã§ããã ãåé¿ãããããªéä¿¡ã»ã°ã¡ã³ãéã®å¶åŸ¡ããšãã£ãæ©èœãæã£ãŠããããšã³ãããŒãšã³ãéã«ãããä¿¡é Œæ§ã®é«ãéä¿¡ãå®çŸããŠããã®ã§ãã
ãŸããåããã©ã³ã¹ããŒãå±€ãããã³ã«ãšããŠUDPïŒUser Datagram ProtocolïŒããããŸããUDPã¯éä¿¡ã®å質ããããªã¢ã«ã¿ã€ã æ§ãéèŠãããããã³ã«ã§ããTCPãšUDPãããããåããæ©èœãäžã®è¡šã«ãŸãšããŸãããã®å³ããããããããã«ãUDPã¯éåžžã«ã·ã³ãã«ã§ããäžæ¹ãTCPã¯å€ãã®æ©èœãåããŠããããšãããããŸãã以éã§ã¯ãTCPã®åºæ¬æ©èœã解説ããŸãã
ã³ãã¯ã·ã§ã³ç®¡ç
ã³ãã¯ã·ã§ã³ã®ç¢ºç«ïŒ3ãŠã§ã€ãã³ãã·ã§ã€ã¯
TCPã§ã¯éä¿¡ãéå§ããåã«ãéä¿¡çžæãšã®éã§ã³ãã¯ã·ã§ã³ã確ç«ããŸããTCPã¯å šäºéã®éä¿¡ãæäŸãããããã³ã«ãªã®ã§ãéåä¿¡åŽã®åæ¹ããã®æ¥ç¶ç¢ºç«èŠæ±ãè¡ãå¿ èŠããããŸããã³ãã¯ã·ã§ã³ã®ç¢ºç«ã¯äžèšã®æé ã§è¡ãããŸãã
- éä¿¡åŽãã確ç«èŠæ±ãšããŠSYNïŒã³ãã¯ã·ã§ã³ã®ç¢ºç«èŠæ±ïŒãã©ã°ã®æå¹åãããTCPãã±ãããéä¿¡
- åä¿¡åŽã¯ããã«å¯ŸããACKãšãåæã«åä¿¡åŽããã®æ¥ç¶ç¢ºç«èŠæ±ãšããŠåTCPãããã®SYNãã©ã°ãæå¹åããŠéä¿¡ïŒSYN+ACKïŒ
- éä¿¡åŽãåä¿¡åŽããã®SYNã«å¯ŸããACKãã±ãããéä¿¡
ãã®ããã«3åã®éä¿¡ã§ã³ãã¯ã·ã§ã³ã®ç¢ºç«ãæç«ããããã3ãŠã§ã€ãã³ãã·ã§ã€ã¯ãšåŒã°ããŸãããã®æµãã以äžã«ç€ºããŸãã
ã³ãã¯ã·ã§ã³ã®åæïŒããŒãã¯ããŒãº
ã³ãã¯ã·ã§ã³ã®çµäºã¯çæ¹ãã€è¡ããŸããããã¯ãTCPã®ããŒã¿è»¢éãå šäºééä¿¡ã«ãŠè¡ãããŠããå Žåãäžæ¹ã®ã³ãã¯ã·ã§ã³ãå ã«ããŒã¿è»¢éãå®äºãããšããŠããããäžæ¹ã®ããŒã¿è»¢éãç¶ç¶ããŠããå¯èœæ§ãããããã§ãã
ãããã£ãŠãã³ãã¯ã·ã§ã³åæãå®äºãããŸã§ã«ã¯4ã€ã®ãã±ããããããšããããããšã«ãªããŸãããã®ããã»ã¹ãããŒãã¯ããŒãºãšåŒã³ãŸããã³ãã¯ã·ã§ã³åæã¯ãFINã«å¯ŸããACKãã±ãããè¿éããåŸã«ãäžå®ã®ã¿ã€ã ã¢ãŠãæéãåŸ ã£ãŠè¡ãããŸããåæ¹ã®åæãå®äºããã°ãTCPã«ããã³ãã¯ã·ã§ã³ã®çµäºãšãªããŸãã
- éä¿¡åŽã¯æåã«FINïŒã³ãã¯ã·ã§ã³çµäºèŠæ±ïŒãéä¿¡
- åä¿¡åŽã¯ACKãéä¿¡ããç¶ããŠFINãéä¿¡
- éä¿¡åŽã¯FINãåä¿¡ããŠæåŸã®ACKãéã£ãåŸãäžå®æéåŸ ã£ãŠã³ãã¯ã·ã§ã³çµäº
ãã®æ§åã以äžã«ç€ºããŸãã
ãããŒå¶åŸ¡ã»ãŠã£ã³ããŠå¶åŸ¡
ãããŒïŒæµéïŒå¶åŸ¡
åä¿¡åŽã®æ©åšã¯ãããŒã¿ãåŠçããããã«äžæçã«èšæ¶ããé åãšããŠããããã¡ããåããŠããŸããããã¯æ©åšã®CPUçã®åŠçé床ãå«ããŠã¹ããã¯ã«äŸåããŸããåä¿¡åŽã§ã¯ãåãåã£ãããŒã¿ããã£ããåä¿¡ãããã¡ã«æºããŠå±ãå ãšãªãã¢ããªã±ãŒã·ã§ã³ã«åŒãæž¡ããŸãã
åä¿¡åŽãåä¿¡ãããã¡ããã倧ããªããŒã¿ãåä¿¡ããŠããŸããšããã®ããŒã¿ãåãããŒããããŒã¿ã®æ¶å€±ãšèŠãªãããŠããŸããéä¿¡åŽã«ç¡é§ãªåéããããŠããŸãããšã«ãªããŸãããã®ããšããããããã¯ãŒã¯ã®èŒ»èŒ³ä»¥åã«ãŸãéä¿¡æ©åšãšããŠã®èš±å®¹éãææ¡ã転ééã調æŽããªããã°ãªããŸãããããã§åä¿¡åŽã¯éä¿¡åŽã«åä¿¡å¯èœãªããŒã¿ãµã€ãºãACKãšãšãã«éç¥ããããšã§ãéä¿¡åŽãã»ã°ã¡ã³ãã®éä¿¡éã調æŽã§ããããã«ãªã£ãŠããã®ã§ãããããããããŒå¶åŸ¡ããšèšããŸãã
ããã§ãTCPã¯ããŒã¿è»¢éã«ããŠã£ã³ããŠããšããæŠå¿µãåãå ¥ããŠããŸããéä¿¡åŽã¯éç¥ããããŠã£ã³ããŠãµã€ãºåã®ã»ã°ã¡ã³ããäžåºŠã«éä¿¡ã§ãããšããä»çµã¿ã«ãªã£ãŠããŸããTCPã®ãããã«ã¯ãŠã£ã³ããŠãµã€ãºãéç¥ããããã®ãã£ãŒã«ãïŒrwndïŒãå®çŸ©ãããŠãããåä¿¡åŽã¯ãåä¿¡å¯èœãªãããã¡éããã®ãã£ãŒã«ãã«æ ŒçŽããŠACKãè¿çããŸããéåä¿¡åŽã®ãããšããšããŠã¯ã以äžã®ã€ã¡ãŒãžã§ãã
ãŠã£ã³ããŠå¶åŸ¡
TCPã®éä¿¡åŽã§ã¯ãäžåºŠã«è»¢éå¯èœãªããŒã¿éã衚ããã©ã¡ãŒã¿ã§ãããŠã£ã³ããŠãµã€ãºïŒswndïŒãå®çŸ©ãããŠãããããã墿žãããªãããæªéä¿¡ã®ããŒã¿ã転éããŸãããã®ãŠã£ã³ããŠå¶åŸ¡ã«ã¯ãã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠããšããèãæ¹ãçšããããŠããŸãã
äžã®å³ãçšããŠèª¬æããŸãããŠã£ã³ããŠå ã«ããã»ã°ã¡ã³ãã¯ACKãåŸ ããã«éä¿¡ããããšãã§ããã®ã§ãå³äž(a)ã«ãããŠã4ã€ã®ã»ã°ã¡ã³ãïŒ2ã3ã4ã5ïŒã¯äžåºŠã«éä¿¡ãããACKã®åä¿¡ãåŸ ã£ãŠããããšããç¶æ ã§ãã
次ã«ã(b)ã®ç¶æ ã«ç§»è¡ããŸããäŸãã°ãã¹ããŒã¹ã¿ãŒããšãããã§ãŒãºã§ã¯ã2çªã®ã»ã°ã¡ã³ãã«å¯ŸããACKãåä¿¡ãããšããŠã£ã³ããŠã¯ïŒã€å³ãžã¹ã©ã€ããããšåæã«ãã®å€§ããã1ã€æ¡åŒµãããŸãããããŠéä¿¡åŸ ã¡ã§ãã£ã6çªãš7çªã®ã»ã°ã¡ã³ããéä¿¡ãããŸãããã®ããã«ããŠãACKãå°çãããã³ã«ã»ã°ã¡ã³ãæ°ãå¢å ãããªããéåºããŠãããŸãã
ãŠã£ã³ããŠãã¹ã©ã€ããããéã«å¢æžããããŠã£ã³ããŠã®æ°ïŒãŠã£ã³ããŠãµã€ãºïŒã¯èŒ»èŒ³ã®ç¶æ çã«ãã£ãŠããŸããŸãªã¢ã«ãŽãªãºã ã«ãã£ãŠæ±ºããããŸãããã®ãŠã£ã³ããŠãµã€ãºã¯èŒ»èŒ³ãŠã£ã³ããŠãµã€ãºïŒcwndïŒãšããŠå®çŸ©ãããŠããã以éã«ãŠèª¬æããããŸããŸãªèŒ»èŒ³å¶åŸ¡ã¢ã«ãŽãªãºã ã«ãã£ãŠèœåçã«æ±ºå®ãããŸãããã ããåä¿¡åŽã®èš±å®¹éãè¶ ããŠéãããšã¯ã§ãããéç¥ãããrwndå€ãcwndãããå°ããå Žåã«ã¯ãrwndãåªå ãããããšã«ãªããŸãã
TCPã§ã¯ãããããŒå¶åŸ¡ããããŠã£ã³ããŠå¶åŸ¡ããã茻茳å¶åŸ¡ããšããããŸããŸãªæ¹æ³ã«ãã£ãŠãŠã£ã³ããŠãµã€ãºã決å®ããŸãããããã®é¢ä¿ãããã§ç°¡åã«æŽçããŸãããã
ãŸããããŠã£ã³ããŠå¶åŸ¡ããäžäœæŠå¿µã«çžåœããã¹ã©ã€ãã£ã³ã°ãŠã£ã³ããŠæ¹åŒã«åºã¥ããŠããŒã¿ã®è»¢éãè¡ãããšãããã®ã§ããéä¿¡ãŠã£ã³ããŠãµã€ãºswndãæ±ºå®ããããã®æ¹æ³ãããããŒå¶åŸ¡ããšã茻茳å¶åŸ¡ããšãªããŸãã
ãããŒå¶åŸ¡ã¯åä¿¡åŽããéç¥ãããåãå ¥ãå¯èœãªãŠã£ã³ããŠãµã€ãºrwndã«åºã¥ããŠéä¿¡ãŠã£ã³ããŠãµã€ãºswndãæ±ºå®ãããã®ã§ãã茻茳å¶åŸ¡ã¯ããããã¯ãŒã¯ã®èŒ»èŒ³ãã§ããã ãæãã€ã€ããã€å¹çããããŒã¿ã転éããããšãç®çãšã茻茳ãŠã£ã³ããŠãµã€ãºcwndãæ±ºå®ãããã®ã§ãã rwndãcwndãããå°ãããã°ãrwndãåªå çã«æ¡çšããŸãã
茻茳å¶åŸ¡ã»åéå¶åŸ¡
ãããã¯ãŒã¯ã§ã¯ããã®äžã§ãããšããããŠããããŒã¿ã®ç·éãæ··éç¶æ³ãå šãäºæž¬ããããšãã§ããŸããããã ããããã¯ãŒã¯ã«å€§éã®ããŒã¿ãéãç¶ãããšãã©ããã®äžç¶ç¹ã§ããŒã¿ã溢ãããã³ã¯ç¶æ ã«ãªã£ãŠããŸãããšã¯æããã§ãããã®ç¶æ ã茻茳ã§ãã
TCPã®èŒ»èŒ³å¶åŸ¡ã¢ã«ãŽãªãºã ã¯ã芳枬å¯èœãªããæ å ±ã«åºã¥ã転ééã®å¶åŸ¡ãè¡ããŸãããã®åºæ¬çãªææããã®äžã€ã¯ã»ã°ã¡ã³ãã®æ¶å€±ã§ããåºæ¬çãªå¶åŸ¡æ¹æ³ãšããŠã¯ãã»ã°ã¡ã³ããæ¶å€±ããŠããªããšãã¯ãããã¯ãŒã¯ã空ããŠãããšå€æã転ééãäžããå察ã«ã»ã°ã¡ã³ããæ¶å€±ãããšãã«ã¯ãããã¯ãŒã¯ãæ··éããŠãããšå€æã転ééãäžããŸãããã®ããã« TCPã§ã¯è»¢ééã®äžãäžããç¹°ãè¿ããªããéä¿¡ãè¡ããŸããã€ãŸããã»ã°ã¡ã³ãæ¶å€±ãèµ·ããïŒéä¿¡çµè·¯ããã³ã¯ç¶æ ã«ããããšå€æããŠããã®ã§ãã
åºæ¬çãªèŒ»èŒ³å¶åŸ¡ã§ã¯ã茻茳ãŠã£ã³ããŠãµã€ãºcwndããã¹ããŒã¹ã¿ãŒããã茻茳åé¿ããé«éãªã«ããªããšãã£ãã¢ã«ãŽãªãºã ã䜿ãåããããšã«ããå¶åŸ¡ããŸãã以éã§ã¯ãTCPã®äžã§ãéèŠãªæ©èœã®äžã€ã§ããåéå¶åŸ¡ãšäœµããŠããããã®ã¢ã«ãŽãªãºã ã®åäœã解説ããŸãã
ã¹ããŒã¹ã¿ãŒã
ããããã®ã¢ããªã±ãŒã·ã§ã³ãéä¿¡éå§ãšãšãã«å€§éã®ããŒã¿ãéä¿¡ãå§ãããšãããã«èŒ»èŒ³ãèµ·ãã£ãŠããŸãããšãäºæ³ãããŸãããããé²ããããéä¿¡éå§æã«ã¯ãã¹ããŒã¹ã¿ãŒãããšåŒã°ããã¢ã«ãŽãªãºã ã«åŸã£ãŠããŒã¿ãéä¿¡ããŸããéä¿¡åŽã¯ãŸã茻茳ãŠã£ã³ããŠãµã€ãºcwndã1ã»ã°ã¡ã³ããµã€ãºïŒmssïŒã«èšå®ããŠéä¿¡ããããã«å¯ŸããACKãåãåããšcwndã1ã»ã°ã¡ã³ãå¢å ãããŸãã
cwnd = cwnd + mss
äžã®å³ã§ã瀺ãããã«ãéä¿¡åŽã¯ACKã1ã€åãåãããšã«2ã€ã®ã»ã°ã¡ã³ããéä¿¡ã§ããããšã«ãªããŸããã»ã°ã¡ã³ãã®éä¿¡ããACKãåä¿¡ãããŸã§ã®åŸåŸ©é å»¶æéïŒRTTïŒRound Trip TimeïŒããšã«èŠãå Žåãcwndã¯ææ°é¢æ°çã«å¢å ããŸãããããŠåä¿¡åŽããéç¥ããããŠã£ã³ããŠãµã€ãºrwndãããã¯äºãå®ããããæå€§å€ã«éããåŸã¯ãããã®å€ãšãªããŸããããã§ã»ã°ã¡ã³ãã®æ¶å€±ãæ€åºããŠåéãè¡ã£ãå Žåã¯ãcwndã1ãšãå床ã¹ããŒã¹ã¿ãŒãããå§ããŸãã
茻茳åé¿
ã¹ããŒã¹ã¿ãŒãã¯ææ°é¢æ°çã«èŒ»èŒ³ãŠã£ã³ããŠãæ¡å€§ãããããæéã®çµéãšãšãã«ããŒã¿è»¢ééãå€§å¹ ã«å¢ããŠãããŸããã»ã°ã¡ã³ãã®æ¶å€±åŸãã¹ããŒã¹ã¿ãŒãã«ãã£ãŠã»ã°ã¡ã³ããéãç¶ãããšãåã³èŒ»èŒ³ãèµ·ããå¯èœæ§ããããŸãããããé²ãããã®æ¹è¯æ³ãšããŠèŒ»èŒ³åé¿ã¢ã«ãŽãªãºã ãèæ¡ãããŸãããåéãèµ·ããæç¹ã§ã®cwndã®ååã®å€ãã¹ããŒã¹ã¿ãŒãéŸå€ãšããŠèšå®ããcwndãåœè©²éŸå€ã«éãããšããACKãåãåãæ¯ã®èŒ»èŒ³ãŠã£ã³ããŠã®å¢å åãç·©ããã«ããŸãããã®ãšãã®cwndã®æŽæ°åŒã¯
cwnd = cwnd + mss/cwnd
ãšãªããŸããããã«ãããäžã®å³ã«ç€ºãããã«ããŠã£ã³ããŠãµã€ãºã¯RTTããšã«1ã»ã°ã¡ã³ããµã€ãºãã€ç·åœ¢ã«å¢å ããŠãã圢ãšãªãã茻茳ãçºçãããšãã®ãŠã£ã³ããŠãµã€ãºãŸã§åŸã ã«è»¢ééãäžããŠããããšã«ãªããŸãã
åéå¶åŸ¡
ã»ã°ã¡ã³ããŸãã¯ACKããããã¯ãŒã¯äžã§æ¶å€±ããå Žåããã®ã»ã°ã¡ã³ãã¯åéãããªããã°ãªããŸãããåéã¯ãéä¿¡ã®ä¿¡é Œæ§ãæäŸããæãéèŠãªæ©èœã§ããåæã«ã転éå¹çãèæ ®ããå¿ èŠããããŸããã»ã°ã¡ã³ãã®æ¶å€±ã¯ã
- åéã¿ã€ããŒãã¿ã€ã ã¢ãŠãããå Žå
- éè€ããACKãäžå®æ°ä»¥äžå±ããå Žå
ã®2ã€ã®ã±ãŒã¹ã§å€æããããããã奿©ãšããŠã»ã°ã¡ã³ãã®åéãè¡ãããŸãã以éã¯ãããããã®ã±ãŒã¹ã§ã®åéå¶åŸ¡ã解説ããŸãã
A. åéã¿ã€ããŒã«ããã¿ã€ã ã¢ãŠãå¶åŸ¡
ããŒã¿ã®æ¶å€±ãæ€åºããäžã€ã®ææ®µã¯ããéä¿¡åŽã«ACKãå±ãããåŠããã§ããããã倿ããããã«ãã¿ã€ããŒãçšããŸããã»ã°ã¡ã³ãéä¿¡åŸãåœè©²ã»ã°ã¡ã³ãã«å¯Ÿå¿ããã¿ã€ããŒãã»ããããäžå®æéåŸ ã£ãŠãACKãè¿ä¿¡ãããªãå Žåãã€ãŸããã¿ã€ã ã¢ãŠããšãªã£ãå Žåã«ãéä¿¡åŽã¯åãã»ã°ã¡ã³ããéä¿¡ããŸãã
åéã¿ã€ããŒã¯ã»ã°ã¡ã³ããéåºããã床ã«ã»ãããããŸããããã®ãšããé©åãªåéã¿ã€ã ã¢ãŠãå€ïŒRTOïŒRetransmission Time OutïŒã決å®ããããšãéèŠãšãªããŸããRTOãé·ããããšãã»ã°ã¡ã³ãã®æ¶å€±ãèµ·ãã£ããšããŠãäœèšã«åŸ ã€ããšã«ãªããã転éå¹çã®äœäžãæããéã«çããããšãæ£ç¢ºã«ACKãè¿ã£ãŠããŠããã«ãé¢ããããããåŸ ããã«äžèŠãªåéãè¡ã£ãŠããŸããŸãã
ããã§RTTãäžã€ã®éèŠãªææšãšãªããŸããããããã¯ãŒã¯ã®æ··ã¿å ·åãçµè·¯ã®é·ãã«ãã£ãŠãã®å€ã¯å€§ããå€åããŸããããã§ACKã®åä¿¡ããšã«èŠ³æž¬ãããRTTãåºã«ãRTOã鿿޿°ããŠããããšã§RTTã®å€åã«åçã«å¯Ÿå¿ã§ããããã«ããŠããŸãã
B. éè€ACKã®å©çšïŒé«éå転éã¢ã«ãŽãªãºã
ã»ã°ã¡ã³ãæ¶å€±ã®å€æã«ã¿ã€ã ã¢ãŠããŸã§åŸ ã€ã®ã¯ãäœèšãªæéããããŠããããšããããšã§ãããã転éå¹çã®äœäžãæãäžå ãšèããããŸããããã§ãããå¹ççãªåéå¶åŸ¡ãšããŠACKãå©çšããæ¹æ³ãèæ¡ãããŸããã
ã»ã°ã¡ã³ããæ¶å€±ããå Žåãåä¿¡åŽã§ã¯æåŸ ããã·ãŒã±ã³ã¹çªå·ãšã¯ç°ãªãããŒã¿ãåä¿¡ããããšã«ãªããŸãããã®ãããªå Žåãåä¿¡åŽã¯æåŸ ããã»ã°ã¡ã³ããåãåããŸã§ãã®ã»ã°ã¡ã³ããèŠæ±ããACKãéãç¶ããéä¿¡åŽã¯åãã·ãŒã±ã³ã¹çªå·ãèŠæ±ããACKãåä¿¡ãç¶ããããšã«ãªããŸãããããéè€ACKãšèšããé«éå転éïŒFast RetransmitïŒã¢ã«ãŽãªãºã ã§ã¯ãã®ç¹åŸŽãå©çšããŸãã
éä¿¡åŽã¯ãåä¿¡ããACKã«ç¶ããŠããã«åããã®ã3åé£ç¶ããŠåä¿¡ãããšãåœè©²ã»ã°ã¡ã³ãã¯æ¶å€±ãããšå€æããã¿ã€ã ã¢ãŠããåŸ ããã«åéåŠçãè¡ããŸãããã®ã¢ã«ãŽãªãºã ã¯ã¿ã€ã ã¢ãŠãã«ããåéå¶åŸ¡ãããé«éã«åäœããããšãããé«éå転éãšåŒã°ããŸãããªãéè€ACKã®æ°ã3åããšãããšã1åã2åã®éè€åä¿¡ã®æ®µéã«ãããŠã¯ãåã«ã»ã°ã¡ã³ãã®é åºãå ¥ãæ¿ãã£ãŠããã ãããšããå¯èœæ§ãããããã§ãã
é«éãªã«ããª
茻茳åé¿ã¯ãèŒ»èŒ³ãæ€åºããåŸã®ã»ã°ã¡ã³ãéä¿¡éãå°ããã€å¢å ãããããã«ããŠå床ã®èŒ»èŒ³ãèµ·ãã«ãããã工倫ã§ãããäžæ¹ãèŒ»èŒ³ãæ€åºããŠåéãè¡ã£ãçŽåŸãæ¯åã¹ããŒã¹ã¿ãŒãããåéããã®ã§ã¯è»¢éå¹çãå¿ ãããè¯ããšã¯èšããŸããã
ããã§ä»åºŠã¯ãåéåŸã®èŒ»èŒ³ãŠã£ã³ããŠcwndãå°ãããéããªãããã«æ¹è¯ããããšã§è»¢éå¹çãåäžãããããšãã工倫ãèæ¡ãããŸãããé«éãªã«ããªã¯ã茻茳ã®çšåºŠãå°ããå Žåã«æå¹ãšèããããããšãããéè€ACKã®åä¿¡ã奿©ãšããé«éå転éãšçµã¿åãããŠçšããããŸããåéåŸã§ãã£ãŠãcwndãå°ãããéãããããçšåºŠè»¢ééãç¶æã§ãããããªãŠã£ã³ããŠå¶åŸ¡ãè¡ããŸãã
å ·äœçã«ã¯ãé«éå転éãè¡ãããåŸã«ã茻茳ãŠã£ã³ããŠãµã€ãºãcwnd/2ïŒ3ãšããå€ã«èšå®ãã以ééè€ACKã§ãã£ãŠãåãåãããšã«èŒ»èŒ³ãŠã£ã³ããŠã1ãã€å¢å ããŠãããŸããããã§æªéä¿¡ã®ã»ã°ã¡ã³ããããã°éä¿¡ããŸããåéã»ã°ã¡ã³ãã«å¯ŸããACKãåä¿¡ãããšã茻茳åé¿ãã§ãŒãºãžãšç§»ããŸãã
ãããŸã§ã«èª¬æãã茻茳åé¿ã¢ã«ãŽãªãºã ãšåéå¶åŸ¡ãè€åçã«åäœãããšãã®èŒ»èŒ³ãŠã£ã³ããŠcwndã®å€åã®äŸã以äžã«ç€ºããŸãã
ãã®ããã«ãTCPã®èŒ»èŒ³å¶åŸ¡ã¢ã«ãŽãªãºã ã¯ã茻茳ãèµ·ããªãéçè¿ããŸã§è»¢ééãäžãããåäœãšãã茻茳æ€åºåŸã®åéæã«ã§ããã ã転ééãäžãéããªãããã«ãããåäœãç¹°ãè¿ãããšã«ãã£ãŠããããã¯ãŒã¯ã®æ··éç¶æ³ã«æè»ã«å¯Ÿå¿ããªããé«ä¿¡é Œãã€å¹çã®è¯ãããŒã¿äŒéãå®çŸããŠããŸãã
è¿å¹Žã®TCP茻茳å¶åŸ¡ã¢ã«ãŽãªãºã
TCPã¯æŽå²ã®ãããããã³ã«ã§ãããä»ãªãæ¹è¯ãé²åãç¶ããŠããŸããäžã§ãç¹ã«å€ãã®æ¹è¯ãè¡ãããŠããã®ã茻茳å¶åŸ¡ã¢ã«ãŽãªãºã ã§ãããGoogleã2016幎9æã«æ°ããã¢ã«ãŽãªãºã ã§ããTCP BBRïŒBottleneck Bandwidth and Round-trip propagation timeïŒãçºè¡šãããªã©ãè¿å¹Žã§ããããã¯ãæŽæ°ãããŠããŸãã
ãããã茻茳å¶åŸ¡ã¢ã«ãŽãªãºã ãšã¯ã茻茳ãŠã£ã³ããŠãµã€ãºãã©ã®ããã«èª¿ç¯ããããã«é¢ããæ¹æ³ã§ããããå¹çã®è¯ãããŒã¿è»¢éãå®çŸãããããæè¡ã®é²æ©ããããã¯ãŒã¯ç°å¢ã®å€åã«åãããªããããããŸã§å€ãã®ã¢ã«ãŽãªãºã ãéçºãããŠããŸããã
ãããŸã§ã«éçºããã茻茳å¶åŸ¡ã¢ã«ãŽãªãºã ã¯ã倧ãã3ã€ã®ã¿ã€ãã«åé¡ãããŸããããªãã¡ãèŒ»èŒ³ã®ææšãšããŠãã±ãããã¹ãçšããLoss-basedãé å»¶ãçšããDelay-basedããã®äž¡æ¹ãçšããHybridã§ãããããŸã§ã«éçºãããã¢ã«ãŽãªãºã ã®åç§°ã以äžã®å¹Žè¡šã«ãŸãšããŸãã
ãããŸã§ã«èª¬æããŠããã¢ã«ãŽãªãºã ã¯Loss-basedã§ããããããã¯ãŒã¯ã®æ··é床åã®ææšãšããŠãã±ãã廿£æ°ãçšããŸããåæã®TCP Renoã§ã¯é«éãªã«ããªã®ã¿ãæ¡çšãããŠããŸãããæ¬¡ã«ç»å ŽããTCP NewRenoã§ã¯é«éå転éã«å ããé«éãªã«ããªæ®µéã«ãããŠè€æ°ã®ã»ã°ã¡ã³ãæ¶å€±ãçããéã®æ¹è¯ããªãããŠããŸããNewRenoã¯é·ãéã«ããã£ãŠæšæºçãªã¢ã«ãŽãªãºã ãšããŠåºãå©çšãããŠããŸããã
Loss-basedã¿ã€ãã§è¿å¹Žäž»æµãšãªã£ãŠããã¢ã«ãŽãªãºã ãšããŠCUBICããããŸããããã¯Linux 2.6.19以éã§æšæºæèŒãããŠããŸããCUBICã¯çŸåšã®ã€ã³ã¿ãŒãããã§äžè¬çã§ããåºåž¯åã»é«é å»¶ç°å¢ïŒãã³ã°ãã¡ãããã€ããšåŒã°ããŸãïŒã«å¯Ÿãã驿£ãé«ãããŸãæ¢åã¢ã«ãŽãªãºã ãšã®èŠªåæ§ãé«ããªã©ãå€ãã®åªããç¹é·ããããŸãã
Delay-basedã¢ã«ãŽãªãºã ã§ã¯ãèŒ»èŒ³ç¶æ ã®ææšãšããŠRTTãå©çšããŸããTCP VegasãšããŠ1990幎代åã°ã«å°å ¥ãããŸãããããã¯ã€ãŸãRTTã倧ãããªãã»ã©ããããã¯ãŒã¯ãæ··éããŠãããšå€æããŠèŒ»èŒ³ãŠã£ã³ããŠãµã€ãºã調æŽããŸããããã¯ãã«ãŒã¿çã®ãããã¯ãŒã¯æ©åšã®ã¡ã¢ãªäžã§ã®è»¢éåŸ ã¡æéã¯ãããã«ã©ãã ãããŒã¿ãèç©ãããŠãããã«ãã£ãŠå€§ããå€åããããšããæ§è³ªã«åºã¥ããŠããŸãã
ã«ãŒã¿çããéåºãããããŒã¿ã®è»¢éã¬ãŒãã¯äžå®ãªã®ã§ããããã¯ãŒã¯ã®æ··éã«ããåäœæéãããã®å ¥åããŒã¿éã倧ãããªãã°ãã¡ã¢ãªäžã«èç©ãããããŒã¿éãå¢ããæ°ããå°çããæ°ããæµå ¥ãããã±ããã転éãããŸã§ã®æéãå¢å ããŠããŸããŸããããã§ãRTTãå¢å€§ããéã«ã¯èŒ»èŒ³ãŠã£ã³ããŠãµã€ãºãæããæ··éãè§£æ¶ãããããšããã®ãDelay-basedã¢ã«ãŽãªãºã ãªã®ã§ãã
ãã ããã€ã³ã¿ãŒãããã®ãããªããŸããŸãªéä¿¡ãæ··åšããç°å¢ã«ãããŠã¯ãRTTãå¢å€§ãããšããã«èŒ»èŒ³ãŠã£ã³ããŠãµã€ãºãæžå°ãããŠããŸãDelay-basedã¢ã«ãŽãªãºã ã¯ãLoss-basedã¢ã«ãŽãªãºã ã«é§éãããããã£ãããšãã課é¡ããããŸããã
ãããŠãè¿å¹ŽéçºãããéèŠãªDelay-basedã¢ã«ãŽãªãºã ãBBRã§ããBBRã¯ãGoogle瀟ã2016幎9æã«çºè¡šããŠä»¥éãLinuxã«ãŒãã«4.9以éã§å©çšå¯èœãšãªã£ãŠããŸãããŸãYouTubeãGoogle Cloud Platformçã§ãçšãããããªã©ããã®å©çšãåºããæ³šç®ãéããŠããŸãã
BBRã®åºæ¬çãªèãæ¹ã¯ãLoss-basedã¢ã«ãŽãªãºã ã«ããããã±ãããã¹ã«ãã茻茳æ€ç¥ã§ã¯é ãããããšãããã®ã§ãããã®ä»£ããã«ããã±ããããããã¡ã«èç©ããå§ããçŽåãã€ãŸããããã¯ãŒã¯ã®åž¯åã¯ãã«ã«æŽ»çšãã€ã€ããããã¡é å»¶ãçºçãããªãããšããç¶æ ãçæ³çãªç¶æ³ãšããŸãã
ãã®çæ³çãªç¶æ³ãç®æãããã«ã¹ã«ãŒããããšRTTãåžžã«ã¢ãã¿ãªã³ã°ããããŒã¿éåºéãšRTTã®é¢ä¿ãææ¡ããªããããŒã¿éä¿¡é床ã調ç¯ããããšã§ããããã¯ãŒã¯ãåŠçå¯èœãªç¯å²å ã§ã®æå€§ã¹ã«ãŒããããåºãããšãç®æããŸãã
BBRã¯ãå€ãã®å Žåã«ãããŠé©åãªèŒ»èŒ³å¶åŸ¡ãå¯èœã§ããããšã確èªãããŠããŸãããã ããBBRã¯ãŸã æ¯èŒçæ°ãã茻茳å¶åŸ¡ã¢ã«ãŽãªãºã ã§ãããããä»åŸããŸããŸãªæ€èšŒãæ¹è¯ãå ããããŠãããšèããããŸãã
ãŸãšã
æ¬èšäºã¯ãTCP/IPã®æŠèŠãšãéä¿¡ã®ä¿¡é Œæ§ãæäŸããã®ã«éèŠãªåœ¹å²ãæ ãTCPãäžå¿ã«ãåºæ¬çãªæ©èœã解説ããŸããããŸãæ¬èšäºã¯ãçè ãã¡ã®èæžãTCPæè¡å ¥éââé²åãç¶ããåºæ¬ãããã³ã«ãã®å 容ãåºã«å·çããŠããŸãã詳ããã¯ãã¡ãã®æžç±ã«ãæžããŠãããŸãã®ã§ããèå³ã®ããæ¹ã¯ãã²ãåç §ãã ãããæ¬çš¿ã®å 容ãããšã«ãèªè ã®æ¹ã ãTCP/IPãžã®çè§£ãæ·±ããŠããã ããã°å¹žãã§ãã
äžžç° äžèŒ ïŒãŸããã»ãããïŒ
äžå±± æ ïŒãªãããŸã»ããïŒ
ç·šéïŒäžè æŽ




