하나 하나 알아가는 프로그래밍

TIME_WAIT 상태 본문

네트워크

TIME_WAIT 상태

Metallic 2020. 9. 28. 11:42

TCP 상태의 가장 마지막 단계로 소켓을 close()로 소멸 시켜도 클라이언트와 미처리된 전문을 마저 처리하기 위해서 커널에서 2~3분 간 유지가 됩니다. 이러한 상태를 TIME_WAIT 상태라고 표현합니다. TIME_WAIT은 꽤나 길게 설정이 되어있어 bind()된 소켓이 죽지 않은 상태에서 같은 주소, 같은 포트로 다른 소켓이 bind() 요청을 하면 에러가 나게됩니다.

 

TIME_WAIT은 마지막 패킷이 제대로 전송이 되어졌는지를 확인하기 위해서 필요합니다. 만약 TIME_WAIT이 없는 상태에서 바로 응답자가 연결을 끊어버린다면 전송 과정 중 문제가 생길 수 있고, 제대로 종료되지 않을 수 있습니다.

 

간단히 한줄로 이야기 하자면, 혹시 모를 패킷 전송 실패에 대비하기 위해 TIME-WAIT 이 존재하는 것입니다.

 

serv_sock=socket(PF_INET, SOCK_STREAM, 0);  
optlen = sizeof(option);  
option = TRUE;   // #define TRUE 1  
setsockopt(serv_sock, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));

 

출처 : https://m.blog.naver.com/PostView.nhn?blogId=cache798&logNo=130039539454&proxyReferer=https:%2F%2Fwww.google.com%2F

 

TCP TIME-WAIT 상태 이해하기

TCP TIME-WAIT 상태 이해하기 참조 : 인터넷 여기저기 작성 : 몽키몽키(cache798@naver.com) T...

blog.naver.com

상기 코드를 사용하면, TIME_WAIT 상태의 소켓도 바로 바인딩을 하여 사용할 수 있습니다.

 

위 코드에서 SO_REUSEADDR 옵션은 같은 포트에 다른 소켓이 bind()되는것을 허락해 주는 설정입니다.

'네트워크' 카테고리의 다른 글

RADIUS 인증 서버 패킷 필드 관련.  (0) 2020.11.02
Wi-Fi 6  (0) 2020.10.06
wpa_supplicant  (0) 2020.09.25
EAPHost의 컴포넌트 (구성요소)들  (0) 2020.09.24
OSI 모형 계층 1 : 물리 계층  (0) 2019.03.10
Comments