ãã®ã¨ã³ããªã¯ã Qiita ã«æç¨¿ããã¨ã³ããªã®ãã«ããã¹ãã§ãã
tl;dr
TCP ã«ããã TIME-WAIT
ã¯æªãåã§ã¯ãªãã§ãã誤解ãããã¡ã§ããã¿ããªä»²è¯ããã¦ããã¾ãããã
ãªãããããæ¸ãã¦ããç§èªèº«ã誤解ãã¦ããå¯è½æ§ãããã®ã§ãããã«æ°ã¥ããæ¹ã¯ãææããã ããã°æãã¾ãã
ã¾ããkernel option ã®è©±ã«ã¯è¸ã¿è¾¼ã¿ã¾ããã
TIME-WAIT
ãå«ãç¶æ
é·ç§»
ss
(netstat
) ã§ TIME_WAIT
ã®ã³ãã¯ã·ã§ã³ã夿°è¡¨ç¤ºãããããã©ãã«ã§ã¯?ã¨ãããããªãã¨ãæ°ã«ãããç¾å ´ãå¤ãã¨æãã¾ãããã® TIME_WAIT
ã¨ããã®ã¯ TCP ã®ç¶æ
ã®ä¸ã¤ã§ãããããããã¨èª¤è§£ãããã¡ãªããããããªç¶æ
ã§ãããã¾ãã
ã¾ãã¯åæã¨ãã¦ãTCP ã®ç¶æ é·ç§»å³ã RFC 793 ããå¼ç¨ãã¾ãã
+---------+ ---------\ active OPEN | CLOSED | \ ----------- +---------+<---------\ \ create TCB | ^ \ \ snd SYN passive OPEN | | CLOSE \ \ ------------ | | ---------- \ \ create TCB | | delete TCB \ \ V | \ \ +---------+ CLOSE | \ | LISTEN | ---------- | | +---------+ delete TCB | | rcv SYN | | SEND | | ----------- | | ------- | V +---------+ snd SYN,ACK / \ snd SYN +---------+ | |<----------------- ------------------>| | | SYN | rcv SYN | SYN | | RCVD |<-----------------------------------------------| SENT | | | snd ACK | | | |------------------ -------------------| | +---------+ rcv ACK of SYN \ / rcv SYN,ACK +---------+ | -------------- | | ----------- | x | | snd ACK | V V | CLOSE +---------+ | ------- | ESTAB | | snd FIN +---------+ | CLOSE | | rcv FIN V ------- | | ------- +---------+ snd FIN / \ snd ACK +---------+ | FIN |<----------------- ------------------>| CLOSE | | WAIT-1 |------------------ | WAIT | +---------+ rcv FIN \ +---------+ | rcv ACK of FIN ------- | CLOSE | | -------------- snd ACK | ------- | V x V snd FIN V +---------+ +---------+ +---------+ |FINWAIT-2| | CLOSING | | LAST-ACK| +---------+ +---------+ +---------+ | rcv ACK of FIN | rcv ACK of FIN | | rcv FIN -------------- | Timeout=2MSL -------------- | | ------- x V ------------ x V \ snd ACK +---------+delete TCB +---------+ ------------------------>|TIME WAIT|------------------>| CLOSED | +---------+ +---------+ TCP Connection State Diagram Figure 6.
TIME-WAIT
ã¨ããç¶æ
ãçãã主ãªé·ç§»ã¯ãESTABLISHED
-> FIN-WAIT-1
-> FIN-WAIT-2
-> TIME-WAIT
-> CLOSE
ã¨ããä¸ååå·¦å´ããå³ä¸é
ã«è³ãé·ç§»ã§ããè¦ããã«ããã¯ã
- æ¥ç¶ä¸ã®ç¶æ
ã«ããã¦(
ESTABLISHED
)ã - éä¿¡ããã¦ãã䏿¹ã®ãã¼ããå
ã«ããã®ã³ãã¯ã·ã§ã³ã«ããéããã¼ã¿ç¡ãããã¨ä¸»å¼µã(
FIN-WAIT-1
ã¸ã®é·ç§»)ã - 仿¹ã®ãã¼ããå½è©²ãã¼ãã«ãã®ä¸»å¼µãåãåã£ããã¨ãè¿ç(
ACK
)ã (FIN-WAIT-2
ã¸ã®é·ç§»)ã - 仿¹ã®ãã¼ãããèªåã«ãéããã¼ã¿ç¡ããªã£ãããããããã³ãã¯ã·ã§ã³åæãã¦è¯ãã¨æãããã¨åæã (
TIME-WAIT
ã¸ã®é·ç§») - ä¸å®æéå¾
ã£ã¦ã³ãã¯ã·ã§ã³ãåæããã (
CLOSE
ã¸ã®é·ç§»)
ã¨ããããæåã«åæãè¦æ±ãããå´ã®ãã¼ãã®ç¶æ
é·ç§»ã示ãã¦ãããActive-Close ã¨å¼ã°ãã¾ãã
TIME-WAIT
ãå«ãç¶æ
é·ç§»ã¯ã両ãã¼ããã»ã¼åæã«åæè¦æ±ãããã¨ããã«ãèµ·ãããã¾ãããããã¯ã¾ã RFC 793 ãèªãã§ãã ããã
TIME-WAIT
ã®åå¨ç®ç
TIME-WAIT
ã誤解ãããã¡ãªã®ã¯ããã®åºç¾çã®é«ãã¨éã«èµ·å ããã¨æãã¾ãã
ã¾ã㯠TIME-WAIT
ã®ç®çãæ´çãã¾ããããã¼ãã®çè§£ãã¦ããéãã TIME-WAIT
ã®ç®ç㯠2 ã¤ããã¾ãã
- wondering duplicate åé¡ã¸ã®å¯¾ç
- TCP åæã«è³ãããã¼ã®æå¾ã® ACK ãå±ããªãã±ã¼ã¹ã¸ã®å¯¾ç
Wandering Duplicate åé¡ã¸ã®å¯¾ç
åæã¨ãã¦ãTCP ã®ã³ãã¯ã·ã§ã³ã¯ (srcAddr, srcPort, dstAddr, dstPort) ã®4 ã¤çµã§èå¥ããã¾ããããã¦ããã®ã³ãã¯ã·ã§ã³ã®ä¸ã§ããåãããããã¼ã¿ã°ã©ã ã¯ãSequence Number (SN)ã§èå¥ããã¾ãã
ããã§æèå®é¨ã¨ãã¦ã2ã¤ã®ãã¼ãéã§ç¢ºç«ãããã³ãã¯ã·ã§ã³ A ãããã以ä¸ã®ç¶æ³ã«ãªã£ããã¨ãèãã¾ãã
- ã³ãã¯ã·ã§ã³ A ã§éä¿¡ããã SN 100 ã®ã»ã°ã¡ã³ãã ãããå°çãä¸å¨ããçµè·¯ããã©ã£ã¦ãã¾ã£ã
- å°çä¸å¨ã®éã«ãã³ãã¯ã·ã§ã³Aãåæãããåããã¼ãéã§åã 4 ã¤çµã®å¤ãæã¤ã³ãã¯ã·ã§ã³ A' ã確ç«ãã
- ã³ãã¯ã·ã§ã³ A' 確ç«ä¸ã«ãå°çä¸å¨ãçµããã³ãã¯ã·ã§ã³ A ã®ã»ã°ã¡ã³ã(SN 100)ãå®å ãã¼ãã«å°çãã
SN100 ã¯ã³ãã¯ã·ã§ã³ A ã®ãã¼ã¿ãä¿æãã¦ãããæ¬æ¥ ã³ãã¯ã·ã§ã³ A' ã¨ã¯ç¡é¢ä¿ã§ããããããTCP ã«ããã¦ã¢ã³ã©ããã¼ãçºçããå ´åãããã¯æ£å¸¸ãªãã±ããã¨ãã¦åãå ¥ãããã¦ãã¾ãå ´åãããã¾ãã
TIME-WAIT
ã®ç®çã®ä¸ã¤ã¯ããããææ¢ãããã¨ã§ãã
åé¡ã®ä¸å ã¯ãã³ãã¯ã·ã§ã³ A ã®ãã¼ã¿ã°ã©ã ãæ
è¡ããã¦ããéã«ãã³ãã¯ã·ã§ã³ A ã®åæãå®äºãã¦ãã¾ããã¨ã«ããã¾ããã§ããã°ãã³ãã¯ã·ã§ã³ A ã®åæããæ
è¡ãçµããã¨èãããã妥å½ãªæéããçµéããã¾ã§çä¿ãã¦ãã¾ãã°è¯ãã TIME-WAIT
ã¯ãã³ãã¯ã·ã§ã³ãåæãããã¨ã¿ãªãåã«ãã®å¦¥å½ãªæéã ãå¾
æ©ãããã¨ã§ãä¸è¨ã®ãããªåé¡ãèµ·ãããªãããã«ãã¦ãã¾ãã
ãã®æéã£ã¦
ã»ã°ã¡ã³ãããããã¯ã¼ã¯ã®ä¸ã§æ»çããæå¤§æé㯠RFC ã®ä¸ã§ Maximum Segment Lifetime
(MSL
) ã¨ãã¦å®ãããã¦ããã RFC 793 ã§ã¯ä»¥ä¸ã®ããã«è¿°ã¹ããã¦ãã¾ãã
For this specification the MSL is taken to be 2 minutes. This is an engineering choice, and may be changed if experience indicates it is desirable to do so.
Linux ã§ã¯â¦ãã®å¤ãªãã§ãããâ¦ã¡ãã£ã¨èªä¿¡ããªãâ¦ã
https://github.com/torvalds/linux/blob/v5.1/include/net/tcp.h#L121-L122
#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT * state, about 60 seconds */
TCP åæã«è³ãããã¼ã®æå¾ã® ACK ãå±ããªãã±ã¼ã¹ã¸ã®å¯¾ç
TCP ã¯ä¿¡é ¼æ§ãããéä¿¡ãããã³ã«ã§ããã®ã§ããæ£ããåæãããã®ããããã¨ããæ£ãããªãããã¼ã§åæãããã®ããã夿ãããããã®ãããTCP ã«ããã¦ã¯ãä½ããéä¿¡ãã¦ãã¦ããç¸æã«ãå¿ ããå±ããããã¨ããéç¥ (ACK) ãè¿ãããã«ãªã£ã¦ãã¾ãã
ããã§åé¡ã¨ãªãã®ãããæå¾ã«éä¿¡ãã ACK ãç¸æã«å±ããã®ãããããªãåé¡ãã§ãã
Active-Close ã«ããã¦ã¯å ã«èªèº«(A ã¨å¼ã³ã¾ã)âéä¿¡ç¸æ(B ã¨å¼ã³ã¾ã)ã«ããã¼ã¿ããªãããåæãã¦è¯ããã¨ããéç¥ãéããB ãéä¿¡ãã¹ããã¼ã¿ããªããªãã¨ãããã A ã«ä¼ãã¾ããã¾ããã®é·ç§»ããA 㨠B ããããã§æ´çãã¦ã¿ã¾ãããã
A ã®ç«å ´
- A ã¯æ¢ã«
FIN-WAIT-2
ã«é·ç§»ãã¦ãã¾ãã - ããã§ B ãããããéããã¼ã¿ããªããã¨ããé£çµ¡ãéããã¦ããã®ã§ãããã«å¯¾ãã ACK ãè¿ãã
TIME-WAIT
ã«é·ç§»ãã¾ãã - ä¸å®æéå¾
ã£ã¦ã
CLOSED
ã«é·ç§»ãã¾ãã
B ã®ç«å ´
- B ã¯æ¢ã« A ãããéããã¼ã¿ããªããã¨ããé£çµ¡ãåãã¦ããã®ã§ã
CLOSE-WAIT
ç¶æ ã«é·ç§»ãã¦ãã¾ãã - B ã¯éããã¼ã¿ããªããªã£ãã®ã§ããéããã¼ã¿ããªããªã£ãããã¨ã A ã«ä¼ãã
LAST-ACK
ã«é·ç§»ãã¾ãã - A ãã ACK ãè¿å´ãããã¨ã
CLOSED
ã«é·ç§»ãã¾ãã
åé¡
ãA ã®ç«å ´ãã® 2ããB ã®ç«å ´ãã® 3. ã§è¿°ã¹ã ACK ãæ¶å¤±ãã¦ãã¾ã£ãå ´åãèãã¾ããããããA ã¯ããã«æ°ã¥ãè¡ã¯ããã¾ããã TIME-WAIT
ãçµã¦ CLOSED
ã«é·ç§»ããã³ãã¯ã·ã§ã³ã¯æ£å¸¸ã«åæããããã®ã¨è¦ãªãã§ãããã
A ã¯ãã³ãã¯ã·ã§ã³ãæ£ããåæãããã¨æãè¾¼ãã§ããã®ã§ãB ã«å¯¾ãåã4ã¤çµ (srdAddr, srcPort, dstAddr, dstPort) ã§ã³ãã¯ã·ã§ã³ãæ°ãã«ç¢ºç«ãããã¨ãã§ãã¾ããããããB ã¯ãã® 4 ã¤çµã®ã³ãã¯ã·ã§ã³ã LAST-ACK
ã§å¾
ã¡ç¶ãã¦ããã¨ããã« SYN
ãéããã¦ãããã¨ã«ãªãã®ã§ã䏿£ãª SYN
ã¨ãã¦ã³ãã¯ã·ã§ã³ãç°å¸¸çµäºããã¦ãã¾ãã§ãããã
䏿¹ã§ B ã¯å¾
ã£ã¦ãå¾
ã£ã¦ã ACK ãè¿ã£ã¦ããªãã®ã§ãA ã«å¯¾ã㦠åéãè¡ããã¨ã«ãªãã¾ããããã§ãããTIME-WAIT
ããªããã°ãåéã»ã°ã¡ã³ããåãåã£ã A ã¯ãCLOSED æ¸ã¿ã®ã³ãã¯ã·ã§ã³ã«ãã¼ã¿ãéä¿¡ããã¦ããã®ã§ãB ã«ã¨ã©ã¼å¿çãè¿å´ããB ã®æ¹ã®ã³ãã¯ã·ã§ã³ã¯ç°å¸¸çµäºãã¦ãã¾ããã¨ã«ãªãã¾ãã
ãããã®åé¡ãåé¿ããããã«ãã TIME-WAIT
ã¯åå¨ãã¦ãã¾ãã
ã¾ã¨ã
TIME-WAIT
ç¶æ
ã§ã®å¾
ã¡æéããããªãã«ããããããã® TIME-WAIT
㯠ESTABLISHED
ã¨ã¨ãã«è¦ãæ©ä¼ã®å¤ãç¶æ
ã§ãããWAIT
ã¨ããé¿ãããã£ã¦ããªãã§å¾
ã¡ç¶æ
ã®ã¾ã¾æ»çãã¦ãããã ããã°ã?ãã¨ããèãã«ããªããããã§ããããããä¸è¨ã®ããã«ãTIME-WAIT
ã¯æ§ã
ãªãã©ãã«ãé¿ããããã«æ¢ãã¦åå¨ãã¦ããç¶æ
ã§ããåºæ¬çã«æªãã¯ããªãã¯ããªã®ã§ããã°ããæ¸©ããç®ã§ãæ£å¸¸ã«ã³ãã¯ã·ã§ã³ãçµäºããã¾ã§è¦å®ã£ã¦ããã¦è¯ãã®ããªã¨æãã¾ãã