- °³¿ä
- Connection Establishment and Termination
- SYN, FIN, ACK
- Half Close
- Maximum Segment Size
- 2MSL State (TIME_WAIT)
- FIN_WAIT_2 State
- Abortive Release
- Half Open
- Interactive Data Flow
- Delayed Acknowledgments
- Nagle Algorithm
- Bulk Data Flow
- Sliding Windows
- Slow Start
- Timeout and Retransmission
- Congestion Avoidance Algorithm
- Fast Retransmit and Fast Recovery Algorithms
- Repacketization
- Persist Timer
- Silly Window Syndrome
- Keepalive Timer
- Futures and Performance
- Path MTU Discovery
- Window Scale Option
- Timestamp
- Protection Against Wrapped Sequence Numbers
- ¸µÅ©
1 °³¿ä
Tcp¿Í °ü·ÃµÈ ¿ë¾îµé ¿ä¾à. TCP/IP Illustrated ¿ä¾à? Æ©Å丮¾óÀÌ¾ß ³Î·ÈÀ¸´Ï, ºñ¸Á·Ï Á¤µµ·Î ±â·ÏÇØµÖ¾ß°Ú´Ù.
2 Connection Establishment and Termination
2.1 SYN, FIN, ACK
2.2 Half Close
TCP´Â full-duplex connection (¼Û¼ö½ÅÀÌ µ¿½Ã¿¡ ÀÌ·ç¾îÁö´Â ¿¬°á)À» °¡Áö±â ¶§¹®¿¡, µ¥ÀÌÅÍ ¼Û¼ö½Å½Ã ´Ù¸¥ ÇϳªÀÇ Ã¤³Î(?)¿¡´Â ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. ±×·¸±â ¶§¹®¿¡ ¿Ïº®ÇÑ(?) ¿¬°á Á¾·á¸¦ À§Çؼ´Â 2°³ÀÇ Ã¤³Î ¸ðµÎ¸¦ µ¶¸³ÀûÀ¸·Î ´Ý¾Æ¾ß ÇÑ´Ù.
¼Û¼ö½ÅÀÌ ¿ÏÀüÈ÷ µû·Î ÀÌ·ç¾îÁö±â ¶§¹®¿¡, FINÀ» ¹ÞÀº ÂÊ¿¡¼´Â ±× ¹æÇâÀ¸·Î ´õ ÀÌ»ó ¼ö½ÅÀ» ¹ÞÁö ¸øÇÒ »Ó, ÀÌÂÊ¿¡¼ ¼Û½ÅÀ» ÇÒ ¼ö´Â ÀÖ´Ù. TCPÀÇ ÀÌ·± Ư¼ºÀ» half-close¶ó°í ÇÑ´Ù. ¸ÕÀú FINÀ» º¸³»´Â ÂÊÀ» active-close¸¦ ¼öÇàÇÑ´Ù°í Çϰí, ³ªÁß¿¡ FINÀ» º¸³»´Â ÂÊÀ» passive-close¸¦ ¼öÇàÇÑ´Ù°í ÇÑ´Ù.
ÀÌ·¯ÇÑ half-close ±â´ÉÀ» Ȱ¿ëÇÏ´Â ÇÁ·Î±×·¥À¸·Î¼´Â rsh(´Ù¸¥ ÄÄÇ»ÅÍ¿¡ Á¢¼ÓÇØ ƯÁ¤ ¸í·ÉÀ» ¼öÇàÇÑ ÈÄ, ±× °á°ú¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥)°¡ ´ëÇ¥ÀûÀÌ´Ù.
2.3 Maximum Segment Size
MSS´Â ¼Û¼ö½ÅÇÒ ¼ö ÀÖ´Â ÃÖ´ë ¼¼±×¸ÕÆ® Å©±â¸¦ ¸»ÇÑ´Ù. ÃÖÃÊ ¿¬°á½Ã SYN ÆÐŶ¿¡´Ù ÀÌ Å©±â¸¦ ¼·Î¿¡°Ô "Å뺸"ÇÏ°Ô µÈ´Ù. ÀÌ Å©±â´Â ÀϹÝÀûÀ¸·Î ÇØ´ç ÄÄÇ»ÅÍ¿¡ ¹°·ÁÀÖ´Â ³×Æ®¿öÅ© Ä«µåÀÇ MTU(Maximum Transmission Unit) Å©±â¿Í ºñ·ÊÇÑ´Ù. MSS´Â ÀϹÝÀûÀ¸·Î ¼¼±×¸ÕÆ®ÀÇ ´ÜÆíȰ¡ ÀϾÁö ¾Ê´Â ÇÑ, Ŭ¼ö·Ï ÁÁ´Ù°í º¼ ¼ö ÀÖÀ¸³ª, ¹Ýµå½Ã ±×·± °Í¸¸Àº ¾Æ´Ï´Ù. (Nagle Algorithm ºÎºÐ Âü°í) ¶ÇÇÑ Å¬¶óÀÌ¾ðÆ®³ª ¼¹ö Áß¿¡¼ ¾î´À ÇÑÂÊ¿¡¼ Å« MSS¸¦ Å뺸ÇÏ´õ¶óµµ, ´Ù¸¥ ÇÑÂÊÀÇ MSS°¡ ÀÛÀ¸¸é ¾îÂ÷ÇÇ ±×ÂÊÀÇ MSS¿¡ ¸ÂÃç Åë½ÅÀÌ ÀϾ°Ô µÈ´Ù.
Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ¸ðµÎ°¡ °°Àº Å©±âÀÇ MSS¸¦ °¡Áø´Ù°í ÇØµµ, µÑÀÌ Åë½ÅÇϱâ À§ÇØ °ÅÄ¡´Â ³ëµå ÁßÀÇ Çϳª°¡ À̺¸´Ù ÀÛÀº MSS¸¦ °¡Áø´Ù¸é, °á±¹ ¼¼±×¸ÕÆ® ´ÜÆíȰ¡ ÀϾ°í, ¼Û¼ö½Å ¼º´ÉÀÌ ¶³¾îÁö°Ô µÈ´Ù. À̸¦ ¹æÁöÇϱâ À§Çؼ´Â Áß°£¿¡ °ÅÄ¡´Â ¸ðµç ³ëµå¿¡ ´ëÇÑ MTUÀÇ ÃÖ¼Ò°ªÀÌ ÇÊ¿äÇÏ´Ù. À̸¦ path MTU discovery¶ó°í ÇÑ´Ù. ¾ÆÁ÷±îÁö´Â ÀϹÝÀûÀÎ ±â´ÉÀº ¾Æ´Ñ ¸ð¾çÀÌ´Ù.
2.4 2MSL State (TIME_WAIT)
MSL(Maximum Segment Lifetime)À̶õ À̸§ ±×´ë·Î, ¼¼±×¸ÕÆ®°¡ ³×Æ®¿÷ »ó¿¡¼ µ¹¾Æ´Ù´Ò ¼ö ÀÖ´Â ÃÖ´ë ½Ã°£À̸ç, IP µ¥ÀÌÅͱ׷¥ÀÇ TTL°ú ºñ½ÁÇÏ´Ù°í º¸¸é µÈ´Ù. ´Ù¸¸ TTLÀº ½Ã°£ÀÌ ¾Æ´Ï¶ó, È©(³ëµå)À» ±âÁØÀ¸·Î Çϴµ¥, ¹¹ »ó°ü¾ø´Ù. Áß¿äÇÑ °ÍÀº ±¸Çö¸¶´Ù Ʋ¸®±ä ÇÏÁö¸¸ MSL °ªÀº »ó¼ö¶ó´Â °ÍÀÌ´Ù.
Active-close¸¦ ¼öÇàÇÑ °æ¿ì, ÇØ´ç ¼ÒÄÏ Æä¾î´Â MSL ½Ã°£ÀÇ 2¹è¸¸Å TIME_WAIT »óÅ·Π¸Ó¹°·¯¾ß ÇÑ´Ù. ACK°¡ Çϳª µå¶øµÇ´õ¶óµµ ´Ù½Ã ¹ÞÀ» ¼ö ÀÖ´Â ½Ã°£À̶ó°í Çϴµ¥, Çѹø ´õ µå¶øµÇ¸é ¾î¶»°Ô µÇ´Â °ÅÁö? ¾î·µç TIME_WAIT »óÅ¿¡ ÀÖ´Â ¼ÒÄÏÀº »ç¿ëÇÒ ¼ö ¾ø´Ù. TIME_WAIT »óÅ¿¡ ÀÖ´Â Æ÷Æ®·Î ³¯¾Æ¿À´Â ÆÐŶÀº ¸ðµÎ ¹ö·ÁÁø´Ù.
TIME_WAIT »óŰ¡ ÇÊ¿äÇÑ ÀÌÀ¯´Â, ÀÓÀÇÀÇ ¼ÒÄÏ Æä¾î Á¢¼ÓÀÌ Á¾·áµÈ ÀÌÈÄ, ¶È°°Àº(¾çÂÊÀÇ Æ÷Æ® ¹øÈ£°¡ °°Àº...) ¼ÒÄÏ Æä¾î°¡ ´Ù½Ã »ý¼ºµÇ¾î ÆÐŶÀÌ ¿Ô´Ù°¬´ÙÇÒ ¶§, ÀÌÀü ¿¬°áÀÇ Áö¿¬µÈ ÆÐŶÀ» »õ·Î¿î ¿¬°áÀÇ ÆÐŶÀ¸·Î ¿ÀÀÎÇÏÁö ¾Êµµ·Ï Çϱâ À§ÇؼÀÌ´Ù. ±×·¯¹Ç·Î TIME_WAIT »óÅ¿¡ ÀÖ´Â ¼ÒÄÏ Æä¾î´Â 2MSL¸¸ÅÀÇ ½Ã°£ÀÌ Áö³ª±â Àü¿¡´Â Àý´ë·Î Àç»ç¿ëÇÒ ¼ö ¾ø´Ù.
¼¹ö¿¡¼ SO_REUSEADDR ¿É¼ÇÀ» ÀÌ¿ëÇØ Æ÷Æ®¸¦ Àç»ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº Ŭ¶óÀÌ¾ðÆ®°¡ »ç¿ëÇÏ´Â Æ÷Æ®°¡ ÀÌÀü ¿¬°á°ú´Â Ʋ¸®±â ¶§¹®ÀÌ´Ù. ¼ÒÄÏ Æä¾îÀÇ À¯ÀϼºÀ» º¸ÀåÇÏ´Â °ÍÀº ¾î´À ÇÑÂÊÀÇ ÁÖ¼Ò:Æ÷Æ®°¡ ¾Æ´Ï¶ó ¾çÂÊ ¸ðµÎÀÇ ÁÖ¼Ò:Æ÷Æ®´Ù.
Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹öÀÇ ¿ªÇÒÀ» ¼·Î ¹Ù²Ù´Â °æ¿ì TIME_WAIT »óÅ¿¡ ÀÖ´Â ¼ÒÄÏ Æä¾îµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹öÀÇ ¿ªÇÒÀ» ¹Ù²Û´Ù´Â ¸»Àº, Ŭ¶óÀÌ¾ðÆ® ÄÄÇ»ÅÍ¿¡¼ ÀÌÀü ¿¬°á¿¡ ½è´ø ÀÚµ¿À¸·Î ¹ÙÀεùµÈ(ephemeral, Çѱ۷Π¹¹Áö...) Æ÷Æ®¿¡´Ù ¼¹ö¸¦ ¶ç¿ì°í, ¼¹ö ÄÄÇ»ÅÍ¿¡¼´Â ¹Ý´ë·Î ¼¹ö ¹ÙÀεùÇÒ ¶§ ½è´ø Æ÷Æ®¸¦ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ¶ç¿ì´Âµ¥ ¾´´Ù´Â ¸»ÀÌ´Ù. Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹öÀÇ ¿ªÇÒÀÌ ¹Ù²î±â´Â ÇßÁö¸¸, ¼ÒÄÏ Æä¾î´Â ºÐ¸íÈ÷ TIME_WAIT »óÅ¿¡ Àִµ¥µµ ºÒ±¸Çϰí, ¿¬°áÀÌ ¼º¸³µÈ´Ù. Sequence number°¡ ÀÌÀü ¿¬°á¿¡¼ ¾²´ø °Íº¸´Ù »õ·Î¿î °ÍÀ̶ó¸é ¿¬°áÀ» Çã¶ôÇÑ´Ù, ¾î¼±¸Àú¼±¸ Àִµ¥, ÀÌ·¸°Ô ¾µ ÀÏÀº ¾Æ¸¶µµ ¾øÀ» °ÍÀ̹ǷΠ°¡º±°Ô »ý±îÁÖ¸é µÇ°Ú´Ù.
Quite time? ¾Æ Àû±â ±ÍÂú´Ù.
2.5 FIN_WAIT_2 State
Active-close¸¦ ¼öÇàÇÑ ÂÊ¿¡¼ FINÀ» º¸³»°í, »ó´ë¹æÀÌ FIN¿¡ ´ëÇÑ ACK¸¦ º¸³»¿Â »óŰ¡ FIN_WAIT_2 »óÅ´Ù. ÀÌ »óÅ¿¡¼ »ó´ë¹æÀ¸·ÎºÎÅÍ FINÀ» ¹Þ°í, ACK¸¦ º¸³»¾ß ¿¬°áÀÌ Á¾·áµÈ´Ù. ±×·¸´Ù¸é »ó´ë¹æÀÌ FINÀ» º¸³»Áö ¾ÊÀ¸¸é ¾î¶»°Ô µÇ´Â°¡? ¾Æ¹« °Íµµ ÇÏÁö ¾ÊÀ¸¸é ¿µ¿øÀÌ ÀÌ »óÅ¿¡ ¸Ó¹«¸£°Ô µÉ °ÍÀÌ´Ù. À̸¦ ¹æÁöÇϱâ À§Çؼ ±¸Çö¸¶´Ù Ʋ¸®±â´Â ÇÏÁö¸¸, ÀϹÝÀûÀ¸·Î ŸÀ̸Ӹ¦ ÀÌ¿ëÇÑ´Ù. ¹¹ ¾Ë¾Æ¼ Àß ÇϰÚÁö.
2.6 Abortive Release
ÀϹÝÀûÀ¸·Î RST ÆÐŶÀº, ¼ö½ÅÇÑ ¼¼±×¸ÕÆ®°¡ Á¤»óÀûÀÎ ¼¼±×¸ÕÆ®°¡ ¾Æ´Ò °æ¿ì, À̸¦ »ó´ë¹æ¿¡°Ô ¾Ë¸®±â À§ÇØ »ç¿ëµÈ´Ù. SYNÀÌ µµÂøÇߴµ¥, ÇØ´ç Æ÷Æ®¿¡ ¸®½º´× ÁßÀÎ ¼¹ö°¡ ¾ø´Â °Í°ú °°Àº °æ¿ì°¡ ´ëÇ¥ÀûÀÎ ¿¹¶ó°í ÇÒ ¼ö ÀÖ´Ù.
À§¿¡¼ ¾ð±ÞÇÑ 4°³ÀÇ ÆÐŶÀÌ(FIN, ACK, FIN, ACK) ¿Ô´Ù°¬´ÙÇÏ´Â ¿¬°á Á¾·á¸¦ orderly release(graceful close¶ó°íµµ ÇÏÁö ¾Ê³ª?)¶ó°í ÇÑ´Ù. ÀÌ °æ¿ì ¹öÆÛ¿¡ ½×¿©ÀÖ´Â ¸ðµç µ¥ÀÌÅ͸¦ ¼Û½ÅÇÑ ´ÙÀ½, ºñ·Î¼Ò ¿¬°á Á¾·á¿¡ µé¾î°¡°Ô µÈ´Ù. À̿ʹ ´Þ¸® RST ÆÐŶÀ» ÀÌ¿ëÇØ °Á¦·Î ¿¬°áÀ» Á¾·áÇÒ ¼ö ÀÖ´Ù. À̸¦ abortive release¶ó°í ÇÑ´Ù. ÀÌ °æ¿ì ¹öÆÛ¿¡ ½×¿©ÀÖ´ø µ¥ÀÌÅÍ´Â ¸ðµÎ ³¯¾Æ°¡°Ô µÈ´Ù.
SO_LINGER °ªÀ» 0À¸·Î ÁÖ¸é abortive release¸¦ ÇÏ°Ô µÈ´Ù. Áï close() ÇÔ¼ö È£Ãâ½Ã FIN ´ë½Å¿¡ RST°¡ ³¯¾Æ°£´Ù´Â ¸»ÀÌ´Ù.
2.7 Half Open
Ŭ¶óÀÌ¾ðÆ®³ª ¼¹ö ¾î´À ÇÑÂÊ¿¡¼ »ó´ë¹æ¿¡°Ô ¾Ë¸®Áö ¾Ê°í, Áï FIN or RST¸¦ º¸³»Áö ¾Ê°í, ¿¬°áÀ» Á¾·áÇÑ °æ¿ì¸¦ half-open »óŶó°í ÇÑ´Ù. FIN/RST¸¦ º¸³»Áö ¾Ê´Â´Ù´Â ¸»Àº, ÄÄÇ»ÅͰ¡ Å©·¡½¬µÇ°Å³ª, Àü¿øÀÌ ³»·Á°¬°Å³ª, ·£¼±À» »Ì¾Ò´Ù´Â À̾߱â´Ù.
TCP¿¡´Â ÇÏÆ®ºñÆ®½ÄÀ¸·Î ÀÏÁ¤ ½Ã°£¸¶´Ù ¿Ô´Ù°¬´ÙÇÏ´Â ÆÐŶÀÌ ¾ø´Ù. ÇÑ ÂÊ¿¡¼ µ¥ÀÌÅ͸¦ º¸³»¸é, ´Ù¸¥ ÂÊ¿¡¼ ACK¸¦ º¸³¾ »ÓÀÌ´Ù. Áï ¾î´À ÇÑÂÊÀÇ ÄÄÇ»ÅͰ¡ Å©·¡½¬µÇ°Å³ª, Àü¿øÀÌ ³»·Á°¬°Å³ª, ·£¼±ÀÌ »ÌÈù ½ÃÁ¡¿¡¼, ¼·Î¿¡°Ô º¸³¾ µ¥ÀÌÅͰ¡ ¾ø´Ù¸é ¿¬°áÀÌ Á¾·áµÈ °ÍÀ» ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø´Ù´Â ¸»ÀÌ´Ù.
°á±¹ ¿¬°á Á¾·á¸¦ ¾Ë¾Æ³»±â À§Çؼ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ·¹º§¿¡¼ ÀÏÁ¤ °£°ÝÀ¸·Î ÆÐŶÀ» ½÷ºÁ¾ß ÇÑ´Ù. ´Ü TCP ³»ºÎ¿¡¼µµ À̸¦ ¾Ë¾Æ³»±â À§ÇØ ¹º°¡ ÀÖ±â´Â ÀÖ´Â ¸ð¾çÀÌ´Ù. (keepalive timer Âü°í)
3 Interactive Data Flow
3.1 Delayed Acknowledgments
ÀÓÀÇÀÇ ¼¼±×¸ÕÆ®¿¡ ´ëÇÑ ACK¸¦ º¸³¾ ¶§, ACK¸¸ ´Þ¶û º¸³»´Â °Íº¸´Ù´Â µ¥ÀÌÅÍ¿Í ÇÔ²² º¸³»´Â °ÍÀÌ Æ®·¡ÇÈÀ» ÁÙÀ̴µ¥ µµ¿òÀÌ µÈ´Ù. À̸¦ À§ÇØ ´ëºÎºÐÀÇ TCP ±¸Çö¿¡¼´Â ¼¼±×¸ÕÆ®¸¦ ¼ö½ÅÇßÀ» ¶§ ¹Ù·Î ACK¸¦ º¸³»´Â °ÍÀÌ ¾Æ´Ï¶ó, ÀÏÁ¤ ½Ã°£(´ëºÎºÐ 200ms) ÈÄ¿¡ º¸³»µµ·Ï ±¸ÇöµÇ¾î ÀÖ´Ù. ÀÌ ½Ã°£ ÈÄ¿¡ ACK¸¦ º¸³¾ ¶§, °°ÀÌ º¸³¾ µ¥ÀÌÅͰ¡ Àֱ⸦ ±â´ëÇÏ´Â °ÍÀÌ´Ù. À̸¦ delayed acknowledgement ¶Ç´Â piggybackÀ̶ó°í ÇÑ´Ù.
3.2 Nagle Algorithm
Nagle ¾Ë°í¸®ÁòÀ» ¿ä¾àÇÏÀÚ¸é ´ÙÀ½°ú °°´Ù.
ACK¸¦ ¹ÞÁö ¸øÇÑ µ¥ÀÌÅͰ¡ ÀÖ´Â »óȲ¿¡¼´Â, Á¶±×¸¸ ¼¼±×¸ÕÆ®µéÀº ACK¸¦ ¹ÞÀ» ¶§±îÁö º¸³¾ ¼ö ¾ø´Ù.
´ë½Å ÀÌ Á¶±×¸¸ ¼¼±×¸ÕÆ®µéÀº Çϳª·Î ÇÕÃÄÁ®¼ ACK°¡ µµÂøÇßÀ» ¶§ Çϳª·Î ³¯¾Æ°¡°Ô µÈ´Ù.
|
ACK°¡ »¡¸® ¿Ã¼ö·Ï µ¥ÀÌÅ͵µ »¡¸® ³¯¾Æ°£´Ù. ÇÏÁö¸¸ ACK°¡ ¹Ù·Î¹Ù·Î ³¯¾Æ¿ÀÁö ¾Ê´Â »óȲ(Áï ´À¸° WAN)¿¡¼´Â ¾Ë°í¸®ÁòÀ» Àû¿ëÇÏÁö ¾Ê¾ÒÀ» ¶§º¸´Ù, ´õ ÀûÀº ¼öÀÇ ¼¼±×¸ÕÆ®µéÀÌ ³¯¾Æ°¡°Ô µÈ´Ù. Áï º´¸ñ Çö»óÀ» ÁÙÀÌ´Â µ¥ µµ¿òÀÌ µÈ´Ù. ÇÏÁö¸¸ °á±¹ µ¥ÀÌÅ͸¦ ¸ð¾Æ¼ º¸³»´Â °ÍÀ̱⠶§¹®¿¡ ¿ø·¡º¸´Ù ¹ÝÀÀÀÌ ´À·ÁÁø´Ù. ºü¸¥ ¹ÝÀÀÀÌ ÇÊ¿äÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì, ÀÌ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù. TCP_NODELAY ¼ÒÄÏ ¿É¼ÇÀ» ÀÌ¿ëÇØ ¾Ë°í¸®ÁòÀ» ²ø ¼ö ÀÖ´Ù.
4 Bulk Data Flow
|<----------- offered window ---------->|
| (advertised by receiver) |
| |
| usable |
| |<----- window ---->|
| | |
+-------------------+-------------------+
1 2 3 | 4 5 6 | 7 8 9 | 10 11
+-------------------+-------------------+
sent & ACKed sent, not ACKed can send ASAP
4.2 Slow Start
º´¸ñ Çö»óÀ» ÁÙÀ̱â À§Çؼ µµÀÔµÈ ¾Ë°í¸®ÁòÀ¸·Î¼, sliding window¿Í ºñ½ÁÇÑ congestion window¶ó´Â °ÍÀ» »ç¿ëÇÑ´Ù.
ÃÖÃÊ¿¡ congestion windowÀÇ Å©±â´Â 1ÀÌ´Ù. ÀÌ À©µµ¿ìÀÇ Å©±â´Â, ¼¼±×¸ÕÆ®¸¦ ¼Û½ÅÇÒ ¶§¸¶´Ù 1¾¿ ÁÙ¾îµé°í, º¸³½ µ¥ÀÌÅÍ¿¡ ´ëÇÑ ACK¸¦ ¹ÞÀ» ¶§¸¶´Ù 1¾¿ ´Ã¾î³´Ù. Áï ÃÖÃÊÀÇ ¼¼±×¸ÕÆ®¸¦ ¼Û½ÅÇÑ ´ÙÀ½, ±×¿¡ ´ëÇÑ ACK¸¦ ¹ÞÀ¸¸é 2°¡ µÈ´Ù. ±×·¯¸é 2°³ÀÇ ¼¼±×¸ÕÆ®¸¦ ÇѲ¨¹ø¿¡ º¸³¾ ¼ö ÀÖ´Ù. ´Ù½Ã À̵鿡 ´ëÇÑ ACK¸¦ ¸ðµÎ ¹ÞÀ¸¸é 4°¡ µÈ´Ù. Áï Áö¼ö½ÂÀ¸·Î ´Ã¾î³ª°Ô µÈ´Ù.
ÀÌ·± ½ÄÀ¸·Î °è¼Ó À©µµ¿ìÀÇ Å©±â¸¦ ´Ã·Á°¡´Ùº¸¸é, ¾î´À ÇѰèÁ¡¿¡ À̸£·¯ ¶ó¿ìÅͰ¡ ¼¼±×¸ÕÆ®¸¦ µå¶øÇϱ⠽ÃÀÛÇÒ °ÍÀÌ´Ù. ÀÌ´Â °á±¹ ŸÀӾƿôÀ̳ª Áߺ¹µÈ ACK¸¦ ¹Þ´Â Çö»óÀ¸·Î ³ªÅ¸³´Ù. ÀÌ·± Çö»óÀÌ ³ªÅ¸³ª¸é congestion windowÀÇ Å©±â¸¦ ÁÙÀδÙ. (¾ó¸¶³ª ÁÙÀ̴°¡´Â ¾Æ·¡¿¡¼...)
5 Timeout and Retransmission
5.1 Congestion Avoidance Algorithm
Congestion avoidance ¾Ë°í¸®ÁòÀº °£´ÜÈ÷ ¸»Çؼ, ACK¸¦ ¹ÞÀ» ¶§¸¶´Ù 1/cwnd Å©±â¸¸Å¾¿ ´Ã¸®´Â ¾Ë°í¸®ÁòÀÌ´Ù.
Slow startÀÇ °æ¿ì ACK¸¦ ¹ÞÀ» ¶§¸¶´Ù cwnd(congestion window)ÀÇ Å©±â¸¦ 1¾¿ ´Ã¸®°Ô µÈ´Ù. ÀÌ·¸°Ô ÇÏ´Ùº¸¸é, À§¿¡¼µµ ¾ð±ÞÇßµíÀÌ, ¾î´À ½ÃÁ¡¿¡¼ ÆÐŶ ·Î½º°¡ »ý±â°Ô µÈ´Ù. ÆÐŶ ·Î½º°¡ »ý±â´Â °Í¿¡ ´ëÇÑ Áõ°Å´Â 2°¡Áö°¡ ÀÖ´Ù. ù¹øÂ°´Â ŸÀӾƿôÀÌ ÀϾ´Â °ÍÀ̰í, µÎ¹øÂ°´Â ¼ö½Å Ãø¿¡¼ °°Àº ACK¸¦ µÎ¹ø ¹Þ´Â °ÍÀÌ´Ù.
Congestion avoidance ¾Ë°í¸®Áò°ú slow start ¾Ë°í¸®ÁòÀº º°°³ÀÇ °ÍÀÌÁö¸¸, º¸Åë °°ÀÌ ±¸ÇöµÈ´Ù. À̵éÀ» ±¸ÇöÇÏ´Â µ¥¿¡´Â 2°¡Áö º¯¼ö°¡ ÇÊ¿äÇÏ´Ù. ù¹øÂ°´Â cwnd(congestion window), ±×¸®°í µÎ¹øÂ°´Â ssthresh(slow start threshold)´Ù.
- ¿¬°áÀÌ ¼º¸³µÇ¸é cwndÀÇ Å©±â´Â 1·Î, ssthreshÀÇ Å©±â´Â 65535 ¹ÙÀÌÆ®·Î ¼³Á¤ÇÑ´Ù.
- TCP ¼Û½Å ÇÔ¼ö¿¡¼´Â MIN(cwnd, ¼ö½Å ÃøÀÇ À©µµ¿ì)º¸´Ù ÀÛÀº Å©±âÀÇ µ¥ÀÌÅ͸¸ º¸³½´Ù.
- º´¸ñ Çö»óÀÌ ÀÏ¾î³ °æ¿ì, ÇöÀç À©µµ¿ì Å©±âÀÇ Àý¹ÝÀ» ssthresh º¯¼ö¿¡´Ù ´ëÀÔÇÑ´Ù. ¶ÇÇÑ º´¸ñ Çö»óÀÌ Å¸ÀӾƿôÀ¸·Î ³ªÅ¸³ °æ¿ì, cwndÀÇ Å©±â¸¦ 1·Î ÁÙÀδÙ.
- ACK°¡ µµÂøÇÑ °æ¿ì, cwndÀÇ Å©±â¸¦ ´Ù½Ã ´Ã¸®±â ½ÃÀÛÇÑ´Ù. ¿©±â¼ cwnd, ssthreshÀÇ µÎ º¯¼öÀÇ °ª¿¡ µû¶ó, slow start¸¦ Àû¿ëÇÒ °ÍÀΰ¡, congestion avoidance¸¦ Àû¿ëÇÒ °ÍÀΰ¡°¡ ³ª´µ°Ô µÈ´Ù.
ÇöÀç cwndÀÇ Å©±â°¡ ssthreshº¸´Ù À۰ųª °°Àº °æ¿ì, slow start ¾Ë°í¸®ÁòÀ» Àû¿ëÇÑ´Ù. ¹Ý´ëÀÇ °æ¿ì congestion avoidance ¾Ë°í¸®ÁòÀ» Àû¿ëÇÑ´Ù. Slow start ¾Ë°í¸®ÁòÀ» Àû¿ëÇÏ´Â °æ¿ì, cwndÀÇ Å©±â°¡ ssthresh °ªº¸´Ù Ä¿Áö°Ô µÇ¸é, congestion avoidance ¾Ë°í¸®ÁòÀ» Àû¿ëÇÏ°Ô µÈ´Ù. Congestion avoidance ¾Ë°í¸®ÁòÀ» Àû¿ëÇÏ°Ô µÇ¸é, cwndÀÇ Å©±â´Â ACK¸¦ ¹ÞÀ» ¶§¸¶´Ù 1¾¿ ´Ã¾î³ª´Â °ÍÀÌ ¾Æ´Ï¶ó, 1/cwnd Å©±â¸¸Å¾¿ ´Ã¾î³ª°Ô µÈ´Ù.
5.2 Fast Retransmit and Fast Recovery Algorithms
5.3 Repacketization
6 Persist Timer
6.1 Silly Window Syndrome
ÀÌ Çö»óÀº ¼Û/¼ö½ÅÃø ¸ðµÎ¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
- ¼ö½ÅÃø : µ¥ÀÌÅ͸¦ ¼ö½ÅÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹öÆÛ(À©µµ¿ì)°¡ »ý±æ ¶§¸¶´Ù, ÀÌ ¹öÆÛÀÇ Å©±â°¡ Á» ´õ Ä¿Áö±â¸¦ ±â´Ù¸®Áö ¾Ê°í, »ó´ë¹æ¿¡°Ô À©µµ¿ì Å©±â¸¦ Å뺸ÇÑ´Ù.
- ¼Û½ÅÃø : º¸³¾ µ¥ÀÌÅͰ¡ ¸ðÀ̱⸦ ±â´Ù¸®Áö ¾Ê°í, Á¶±×¸¸ µ¥ÀÌÅ͸¦ °è¼Ó º¸³½´Ù.
µÑ Áß¿¡ ¾î´À ÂÊÀÌ ¹®Á¦ÀÌ´ø °£¿¡ °á°úÀûÀ¸·Î ¼Û¼ö½ÅÀÚ ¸ðµÎ, ¹öÆÛ´Â ÃæºÐÇÔ¿¡µµ ºÒ±¸Çϰí, Á¶±×¸¸ Å©±âÀÇ ¼¼±×¸ÕÆ®¸¸À» ¼·Î ±³È¯ÇÏ°Ô µÈ´Ù. À̸¦ silly window syndromÀ̶ó°í ÇÑ´Ù. ÀÌ Çö»óÀ» ÇÇÇϱâ À§ÇÑ ÀϹÝÀûÀÎ ±¸Çö ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.
- ¼ö½ÅÃø : ÀÌ¿ë °¡´ÉÇÑ ¹öÆÛÀÇ Å©±â°¡ Àüü ¹öÆÛÀÇ Å©±âÀÇ 50% ÀÌ»óÀ̰ųª MSS¿Í µ¿ÀÏÇØÁú ¶§±îÁö À©µµ¿ì Å©±â¸¦ Å뺸ÇÏÁö ¾Ê´Â´Ù.
- ¼Û½ÅÃø : ´ÙÀ½ Á¶°Ç ÁßÀÇ ¾î´À Çϳª¶óµµ ÂüÀÌ µÇ¾î¾ß¸¸ ¼¼±×¸ÕÆ®¸¦ Àü¼ÛÇÑ´Ù.
- ÃÖ´ë Å©±â(full-sized)ÀÇ ¼¼±×¸ÕÆ®¸¦ º¸³¾ ¼ö ÀÖ´Ù.
- ¼ö½ÅÃø¿¡¼ Å뺸Çß´ø À©µµ¿ìÀÇ Å©±â Áß¿¡ ÃÖ´ë°ªÀÌ ÀÖÀ» ÅÙµ¥, ÀÌ ÃÖ´ë°ªÀÇ Àý¹Ý ÀÌ»óÀÇ Å©±â¸¦ °¡Áø ¼¼±×¸ÕÆ®¸¦ ¹Ù·Î º¸³¾ ¼ö ÀÖ´Ù.
- ÇöÀç °¡Áö°í ÀÖ´Â µ¥ÀÌÅ͸¦ ¸ðµÎ º¸³¾ ¼ö ÀÖ°í, ACK¸¦ ±â´Ù¸®°í ÀÖÁö ¾Ê´Ù. ¶Ç´Â nagle ¾Ë°í¸®ÁòÀÌ ²¨Á® ÀÖ´Ù.
7 Keepalive Timer
Half open Ç׿¡¼ ¾ð±ÞÇßµíÀÌ, ¼Û¼ö½ÅÇÒ µ¥ÀÌÅͰ¡ ¾ø´Â »óȲ¿¡¼ ¾î´À ÇÑÂÊÀÌ ºñÁ¤»óÀûÀ¸·Î ¿¬°áÀ» Á¾·áÇÑ °æ¿ì TCP ·¹º§¿¡¼´Â À̸¦ ¾Ë¾Æ³¾ ¹æ¹ýÀÌ ¾ø´Ù. ¾ÖÇø®ÄÉÀÌ¼Ç ·¹º§¿¡¼ ÀÏÁ¤ °£°ÝÀ¸·Î ÆÐŶÀ» ½÷ºÁ¾ßÇÑ´Ù°í Çߴµ¥, À̸¦ TCP ·¹º§¿¡¼ ó¸®Çϱâ À§ÇØ TCP¿¡ µµÀÔµÈ °ÍÀÌ keepalive timerÀÌ´Ù.
RFC¿¡´Â ¾ø´Â »çÇ×À̸ç, ¾Æ·¡¿Í °°Àº ¹®Á¦Á¡ ¶§¹®¿¡ RFC¿¡ µé¾î°¡Áö ¾Ê¾Ò´Ù.
- Á¤»óÀûÀÎ ¿¬°áÀÌ ¸î¹øÀÇ ÆÐŶ ·Î½º ¶§¹®¿¡ ²÷¾îÁ®¹ö¸± ¼ö ÀÖ´Ù.
- ÇÊ¿ä¾ø´Â ´ë¿ªÆøÀ» Àâ¾Æ¸Ô´Â´Ù.
- ÆÐŶ´ç ¿ä±ÝÀ» ºÎ°úÇÏ´Â ÀÎÅÍ³Ý ¿¬°áÀÇ °æ¿ì, Ãß°¡ÀûÀ¸·Î ¿ä±ÝÀÌ µé¾î°£´Ù.
ÇÏÁö¸¸ ´ëºÎºÐÀÇ TCP ±¸Çö¿¡´Â µé¾î°¡ ÀÖÀ¸¸ç, SO_KEEPALIVE ¿É¼ÇÀ» ÅëÇØ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù.
8 Futures and Performance
8.1 Path MTU Discovery
¼Û½Å Ãø ³ëµå¿Í ¼ö½Å Ãø ³ëµå »çÀÌ¿¡ ÀÖ´Â ¸ðµç ³ëµåµéÀÇ MTU °ª Áß¿¡ Á¦ÀÏ ÀÛÀº °ªÀ» ã¾Æ³»¾î À̸¦ ¼Û½Å½Ã »ç¿ëÇÏ´Â ±â´ÉÀÌ´Ù. °¡Àå ÀÛ´Â MTU °ª¿¡ ¼¼±×¸ÕÆ® Å©±â¸¦ ¸ÂÃãÀ¸·Î¼ fragmentationÀ» ÃÖ¼ÒÈÇϴµ¥ ±× ¸ñÀûÀÌ ÀÖ´Ù.
À©µµ¿ìÁî¿¡¼ À̸¦ Ȱ¼ºÈ½Ã۱â À§Çؼ´Â ·¹Áö½ºÆ®¸®¸¦ ¼öÁ¤ÇØ¾ß ÇÏ´Â ¸ð¾çÀÌ´Ù.
System Key: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Value Name: EnablePMTUDiscovery
Data Type: REG_DWORD (DWORD Value)
Value Data: (0 = false, 1 = true)
8.2 Window Scale Option
TCP À©µµ¿ì Å©±â´Â ±âº»ÀûÀ¸·Î 16ºñÆ® º¯¼ö¸¦ ÀÌ¿ëÇϱ⠶§¹®¿¡ 65535¹ÙÀÌÆ® ÀÌ»óÀ¸·Î Ä¿Áú ¼ö ¾ø´Ù. ÀÌ´Â ¿äÁò °°Àº ½Ã´ë¿¡´Â »ó´çÈ÷ ÀÛÀº °ªÀÌ´Ù. ±×·¡¼ Çì´õ¿¡ ÀÖ´Â 16ºñÆ® À©µµ¿ì Å©±â´Â ¹«½ÃÇϰí, µû·Î 32ºñÆ®ÀÇ À©µµ¿ì Å©±â¸¦ »ç¿ëÇÏ´Â ±â´ÉÀ» window scale optionÀ̶ó°í ÇÑ´Ù. 32ºñÆ® º¯¼ö¸¦ ¾îµð´Ù µÎ´ÂÁö´Â Àß ¸ð¸£°ÚÁö¸¸, ¾Æ¸¶ µ¥ÀÌÅÍ ºÎºÐ¿¡´Ù µÎ°ÚÁö. ¾î·µç ÀÌ ¿É¼ÇÀ» ÄѰí, ¼Û¼ö½Å ÃøÀÌ ¼·Î SYNÀ» ÁÖ°í¹ÞÀ¸¸é, Á» ´õ Å« Å©±âÀÇ À©µµ¿ì¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
8.3 Timestamp
¼Û½ÅÃø¿¡¼ ¼¼±×¸ÕÆ®¸¶´Ù ½Ã°£ °ªÀ» ±â·ÏÇϰí, ¼ö½ÅÃø¿¡¼´Â ¼Û½ÅÃø¿¡¼ º¸³½ ½Ã°£ °ªÀ» ACK¿¡ ½Ç¾îº¸³»´Â ±â´ÉÀ» ¸»ÇÑ´Ù. ÀÌ ½Ã°£ °ªÀ» ÀÌ¿ëÇØ ¼Û½Å Ãø¿¡¼ Á» ´õ Á¤¹ÐÇÑ RTT °ªÀ» ÃøÁ¤ÇÒ ¼ö ÀÖ´Ù.
8.4 Protection Against Wrapped Sequence Numbers
9 ¸µÅ©
SeriousMoin v1 (koMoinMoin 1.0a4 Modified)