TIME_WAIT ¾ø¾Ö±â
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 TIME_WAIT ¿¡ ´ëÇØ¼­
2 TIME_WAIT ¹®Á¦ ¹ß»ý »óȲ
3 ¼ÒÇÁÆ®¿þ¾îÀûÀÎ ÇØ°á
3.1 ¼ÒÄÏ¿É¼Ç º¯°æ : linger
3.2 ¼ÒÄÏ¿É¼Ç º¯°æ : SO_REUSEADDR
4 Ä¿³Î·¹º§¿¡¼­ÀÇ ÇØ°á
4.1 client Port range º¯°æ
4.2 tcp_fin_timeout
4.3 timewait ¼³Á¤ º¯°æ
5 Âü°í

1 TIME_WAIT ¿¡ ´ëÇØ¼­

close.png

¸¸µé¾îÁø TCP¿¬°áÀÌ Á¾·áµÇ±â À§Çؼ­´Â FINÆÐŶ ±³È¯ÀÌ ÀÌ·ç¾îÁø´Ù. À̶§ ¿ì¾ÆÇÑ Á¾·á°¡ ÀÌ·ç¾îÁö±â À§Çؼ­´Â ÃÑ 4¹øÀÇ ÆÐŶ±³È¯ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ¿ì¾ÆÇÑ Á¾·á¶ó´Â °ÍÀº ¿¬°áµÈ È£½ºÆ® ¾çÂÊÀÌ ¸ðµÎ ¿¬°áÀÌ Á¾·áµÇ¾úÀ½À» ¾Ë°Ô µÇ´Â »óÅ´Ù. ¸¸¾à FIN ÆÐŶÀ» º¸³Â´Âµ¥, »ó´ë È£½ºÆ®¿¡¼­ ACK ÆÐŶÀ» º¸³»Áö ¾Ê°í Á¾·áÇØ¹ö¸®´Â °æ¿ì FINÀ» º¸³½ÃøÀº ¿ì¾ÆÇÑ Á¾·á¸¦ À§Çؼ­ ÀÏÁ¤½Ã°£ ACK¸¦ ±â´Ù¸®°Ô µÈ´Ù. ¸®´ª½ºÀÇ °æ¿ì ´ë·« 90ÃÊ Á¤µµ¸¦ ±â´Ù¸°´Ù. netstat(1)·Î È®ÀÎÇØ º¸¸é TIME_WAITÀÎ »óÅ·Π³ªÅ¸³­´Ù.

TIME_WAIT»óÅÂÀÏ °æ¿ì ÇØ´ç Æ÷Æ®¸¦ °è¼Ó Á¡À¯Çϴµ¥, ¿¬°áÀÌ ºó¹øÇÑ ³×Æ®¿öÅ© ¼­ºñ½ºÀÏ °æ¿ì ¿¬°á°ÅºÎ¿Í °ü·ÃµÈ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.

2 TIME_WAIT ¹®Á¦ ¹ß»ý »óȲ

mysqlÀÇ ¼º´ÉÁß Ã³¸®·®À» ÃøÁ¤Çϱâ À§Çؼ­ ¼ö¹é°³ÀÇ Å¬¶óÀÌ¾ðÆ®·Î µ¿Á¢»óȲÀ» ½Ã¹Ä·¹ÀÌ¼Ç ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î¼­ Å×½ºÆ®ÇÏ´ø Áß ´ÙÀ½°ú °°Àº ¹®Á¦°¡ ¹ß»ýÇß´Ù.
  1. open ÆÄÀÏ Á¦ÇÑ °¹¼ö
    À̹®Á¦´Â /proc/sys/fs/file-max ÀÇ °ªÀ» Á¶ÀýÇÏ´Â °É·Î °£´ÜÈ÷ ÇØ°áÇß´Ù.
  2. TIME_WAIT
    ¸Å¿ì ¹Ù»Û µ¿Á¢Å×½ºÆ® ȯ°æÀ» ¸¸µé±â¸¦ ¿øÇß´Ù. ÀÌ °æ¿ì connect¿Í close°¡ ºó¹øÇÏ°Ô ¹ß»ýÇϴµ¥, TIME_WAIT°¡ °è¼Ó ´Ã¾î³ª°Ô µÇ°í °á±¹¿¡´Â ÇÒ´ç°¡´ÉÇÑ PORT¸¦ ¸ðµÎ ¼ÒºñÇØ¼­ ´õÀÌ»ó ¿¬°áÀ» ÇÒ ¼ö ¾ø´Â »óȲÀÌ ¹ß»ýÇß´Ù.

3 ¼ÒÇÁÆ®¿þ¾îÀûÀÎ ÇØ°á

3.1 ¼ÒÄÏ¿É¼Ç º¯°æ : linger

Á÷Á¢ ³×Æ®¿öÅ© ÇÁ·Î±×·¥À» Á¦ÀÛÇÑ´Ù¸é °¡Àå ÁÁÀº ¹æ¹ýÀÏ °ÍÀÌ´Ù. ±×·¯³ª ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Á¦°øÇÏ´Â API¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö¿¡´Â Àû¿ëÇÒ ¼ö ¾ø´Ù.

¿¹¸¦µé¾î Mysql DB ¼º´ÉÃøÁ¤À» À§Çؼ­, Mysql API¸¦ ÀÌ¿ëÇØ¼­ ÃøÁ¤ Ŭ¶óÀÌ¾ðÆ®¸¦ °³¹ßÇÒ °æ¿ì¿¡´Â ¼ÒÄϿɼÇÀ» Á¦¾îÇÒ ¼ö°¡ ¾ø´Ù.

´ÙÀ½Àº socket¿É¼ÇÀ» ÀÌ¿ëÇØ¼­ TIME_WAITÀÌ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÏ´Â ÄÚµå´Ù.
    ...  
    int sock 
    struct linger   ling; 
 
    ling.l_onoff = 1; 
    ling.l_linger = 0;      /* 0 for abortive disconnect */ 
 
    ... 
    ... 
 
    setsockopt(sock, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling)) 
 

3.2 ¼ÒÄÏ¿É¼Ç º¯°æ : SO_REUSEADDR

SO_REUSEADDR ¿É¼ÇÀ» »ç¿ëÇϸé, TIME_WAIT »óÅ¿¡ ÀÖ´Â PORT¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¼­¹öÇÁ·Î±×·¥ÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÇ°Ç³ª Ŭ¶óÀÌ¾ðÆ®¸¦ Á¤¸®ÇÏÁö ¾Ê°í Á¾·áµÇ¸é TIME_WAIT »óÅ·Π³Ñ¾î°¡°Ô µÈ´Ù. À̶§ ¼­¹ö ÇÁ·Î±×·¥À» ½ÇÇà½Ã۸é bind() ¿¡·¯°¡ ¹ß»ýÇϴµ¥, ÀÌ ¿É¼ÇÀ» ÀÌ¿ëÇØ¼­ bind()¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); 
 

4 Ä¿³Î·¹º§¿¡¼­ÀÇ ÇØ°á

4.1 client Port range º¯°æ

¸Å¿ì ¹Ù»Û Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÏ °æ¿ì¿¡ ´ë·®ÀÇ TIME_WAIT°¡ ¹ß»ýÇØ¼­ ÇÒ´çÇØ¾ßµÉ PORT°¡ ºÎÁ·ÇÒ ¼ö°¡ ÀÖ´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡ ÇÒ´çµÉ portÀÇ ¹üÀ§¸¦ ´Ã¸®´Â °ÍÀ¸·Î ¾î´ÀÁ¤µµ Á¶Á¤°¡´ÉÇÏ´Ù.
  • /proc/sys/net/ipv4/ip_local_port_range
º¸Åë 32768 61000·Î ÁöÁ¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. 1024 ~ 65535 ·Î º¯°æÇÏÀÚ.
# echo "1024 ~ 65535" > /proc/sys/net/ipv4/ip_local_port_range 
 

À̰ÍÀº ¾îµð±îÁö³ª ÀÓ½ÃÀûÀÎ ¹æ¹ýÀ¸·Î, ¹®Á¦¸¦ ¿ÏÀüÈ÷ ÇØ°áÇÒ ¼ö´Â ¾øÀ» °Å´Ù.

4.2 tcp_fin_timeout

¼ÒÄÏÀÌ ¿ÏÀüÈ÷ ´ÝÈú·Á¸é ¸¶Áö¸· FINÀ» ±â´Ù·Á¾ß Çϴµ¥, ÀÌ °£°ÝÀ» ÃÊ´ÜÀ§·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¾Æ¸¶ 60ÃÊ Á¤µµ·Î ¼³Á¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. 10ÃÊÀÌÇÏ·Î ÁÙ¿©º¸µµ·Ï ÇÏÀÚ.

4.3 timewait ¼³Á¤ º¯°æ

Ä¿³Î·¹º§¿¡¼­ TIME-WAITÀÚ¿ø¿¡ ´ëÇÑ »ç¿ëÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù.
  • tcp_tw_recycle
    ±âº»°ªÀº 0Àε¥, 1·Î ÇÒ°æ¿ì TIME-WAIT »óŸ¦ ºü¸£°Ô recycling Çϵµ·Ï µµ¿ÍÁØ´Ù. ÀÌ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Á¤º¸¸¦ ¾ò±â Èûµé¾ú´Ù.
  • tcp_tw_reuse
    ±âº»°ªÀº 0Àε¥, 1·Î ÇÒ°æ¿ì TIME-WAIT »óÅÂÀÇ ¼ÒÄÏÀ» Àç»ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. TIME-WAIT ¹®Á¦¸¦ ÇÇÇϱâ À§ÇÑ °¡Àå È®½ÇÇÑ ¹æ¹ýÀÌ´Ù. setsockopt()¿¡ SO_REUSEADDRÀ» »ç¿ëÇÑ °Í°ú °°Àº È¿°ú.

5 Âü°í

  1. http://www.port80software.com/200ok/archive/2004/12/07/205.aspx
  2. TIME_WAIT state vs SO_REUSEADDR option: http://kukuta.tistory.com/17
  3. ¼ÒÄÏ Á¾·á¿Í TIME_WAIT(Socket termination and TIME_WAIT): http://kukuta.tistory.com/27
  4. TCP TIME_WAIT »óÅÂ: http://chocopants.tistory.com/entry/TCP-TIMEWAIT-»óÅÂ
  5. tweaking tcp/ip Sysctl.conf: http://www.hikaro.com/linux/tweaking-tcpip-syctl-conf.html
  6. Linux Kernel Source: http://lxr.linux.no/linux+v2.6.35/net/ipv4/tcp_ipv4.c#L1335
  7. »ç·ÊºÐ¼®, Dropped connections with tcp_tw_recycle=1: http://lists.varnish-cache.org/pipermail/varnish-misc/2009-September/003108.html
  8. »ç·ÊºÐ¼®, tcp_tw_recycle broken?: http://forum.soft32.com/linux/tcp_tw_recycle-broken-ftopict470014.html
  9. PATCH networking/ip-sysctl.txt tcp_tw_recycle and tcp_tw_reuse: http://markmail.org/thread/clxtvnfzdgz3cdi4
  10. time-wait recycling vs. reuse: http://www.frameip.com/nntp/comp-protocols-tcp-ip/21912-comp-protocols-tcp-ip-time-wait-recycling-vs-reuse.htm
  11. tcp_tw_reuse, tcp_tw_recycle Àû¿ë »ç·Ê, Tuning SUSE LINUX Enterprise Server on IBM Eserver xSeries Servers, 28 Page, Figure 1-6 Parameters reuse and recycle enabled (left) and disabled (right): http://www.redbooks.ibm.com/redpapers/pdfs/redp3862.pdf

category_network
programing
category__5
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.