| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- 증권투자권유자문인력 #파생투자권유자문인력 #펀드투자권유자문인력 #금융3종
- TCP
- AWS #회원가입 #AWS Developer Associate #SAA
- loadaverage #시스템부하
- #연말정산 #꿀팁 # 소득공제 # 세액공제 #고향사랑기부제 # 돈많이벌자 #세테크 #세법
- 국내상장 해외etf #해외etf #세금 #나스닥 #코스피
- 메모리사용류
- 포지션 #파생 #선물 #옵션
- 디피헬만알고리즘
- 무상증자 #유상증자 #주가영향
- Node #Zone #PageFrame
- 보안
- #리뉴올PC #중고모니터 #중고컴퓨터 #후기
- 정보보안
- VIRT #RES #SHR #메모리커밋
- cme #블룸버그 #로이터
- 시스템정보확인 #top명령어 #cpu
- 비상용메모리
- fix #프로토콜 #유래 #
- 종합과세 #분리과세 #분류과세 #세금 #공부
- 파생상품 #선물 #옵션 #증거금
- #벽걸이 에어컨 # 에어컨 청소 # 에어콘 청소 # 치킨값 벌기
- 주택임차차입금 원리금 상환액 #소득공제 #공부 #세테크
- 네트워크카드 #NIC # 인터페이스카드 #커널
- OWASP #웹취약점
- 병목확인
- RMS #리스크관리시스템 #risk
- 옵션 #콜옵션 #풋옵션 #청산
- 커널
- 옵션 #선물 #증거금 #Margin
- Today
- Total
일서방
TIME_WAIT 소켓이 서비스에 미치는 영향 본문
TCP 연결 종료 과정(4-way handshake)

Active Closure : 먼저 연결을 끊는쪽
Passive Closure : 그 반대
Active closure 쪽에 time_wait소켓이 생성된다. 주의해야할 부분은 time_wait 소켓은 서버에서 생기는 것이 아니고 먼저 연결을 끊는 쪽에서 생성된다. 클라이언트에서도 TIME_WAIT 소켓이 생길 수 있고 , 서버에서도 TIME_WAIT 소켓이 생길 수 있다.
TIME_WAIT소켓이 많아지면 로컬포트 고갈에 따른 어플리케이션 타임아웃이 발생 할 수있다.
커널에 net.ipv4.ip_local_port_range라는 커널 파라미터가 있는데, 외부와통신하기 위해 필요한 로컬포트의 범위를 지정한다. 이때 모든 로컬 포트가 TIME_WAIT 상태에 있다면 할당할 수 있는 로컬 포트가 없기 때문에 외부와 통신을 하지 못하게 되고 , 이로 인해 어플리케이션에서는 타임아웃이 발생 할 수 있다.
[TIME_WAIT 문제 해결방법]
1. net.ipv4.tcp_tw_reuse
의미 : TIME_WAIT 상태에 있는 소켓을 클라이언트 outbound 연결에서 재사용할 수 있도록 허용할지 여부
설정값 :
. 0 : 재사용 비활성화(TIME_WAIT을 일반 규칙대로 유지)
. 1 : 재사용 허용 :outbound연결(클라이언트 역할) 시 , TIEM_WAIT 소켓을 재사용 가
주의사항:
(1)서버 inbound coneection에는 적용되지않음
(2)TIME_WAIT 재사용은 안전성 < 성능을 선택하는 것이라 , 잘못 쓰면 지연된 패킷때문에 데이터 충돌위험이 생길 수 있음.
2. ConnetionPool방식 사용하기
-Connection less : 매번 소켓 연결이 필요
-Connection Pool : 소켓을 미리 열어놓고 사용
3. Keepalive사용하기
[TIME_WAIT상태의 존재 이유]
1) 지연 패킷(Delayed Packet) 제거
.TCP는 시퀀스 번호를 써서 데이터 순서를 보장한다.만약 연결을 끊자마자 같은 소켓(IP/포트 조합)으로 새로운 연결을 재사용한다면, 이전 연결에서 늦게 도착한 패킷이 새 연결로 들어올 수 있어서 데이터 혼동/충돌이 생긴다.
TIME_WAIT = 이전 연결의 잔여 패킷이 네트워크에서 사라질때까지 기다리는 시간
2) 정상 종료(4-WAY handshake) 보장
. TCP연결종료 과정은 FIN->ACK->FIN->ACK의 4단계 핸드셰이크이다.
. 이 과정에서 마지막 ACK가 상대방에게 제대로 전달되지 않았다면??
- 상대방은 FIN을 다시보낸다.
- 이때 TIME_WAIT.상태로 남아있으면 -> ACK를 재전송해준다
- TIME_WAIT상태로 남아있지않다면 -> RST패킷을 반환하며 정상적은 ACK를 받지못하기때문에 소켓이 LAST_ACK 계속 남아있게된다.
[정리]
1. TIME_WAIT 소켓은 먼저 연결을 끊는쪽에서 발생한다.
2. 클라이언트 입장에서의 TIME_WAIT소켓은 tw_reuse 파라미터를 통해 재사용할 수 있기때문에 로컬포트 고갈 문제는 발생하지 않는다.
3. 하지만 불필요한 TCP 3way handshake가 일어날 수 있기 때문에 가능하면 Connection Pool 방식을 적용해 TIME_WAIT 소켓을 줄이도록 한다.
4. 서버입장에서의 TIME_WAIT 소켓은 tw_recycle 파라미터를 통해 빠르게 회수할 수 있다. 하지만 특정환경에서는 SYN패킷이 버려지는 문제가 발생할수 있기 때문에 권하지 않는다.
5. 서버입장에서는 keepalive 기능을 켬으로써 불필요한 TCP 3 way handshake를 줄일 수 있고 TIME_WAIT소켓도 줄일 수 있다. 이를통해 서비스의 응답속도 향상이 가능해진다.
6. TIME_WAIT 소켓은 정상적인 TCP 연결해제를 위해 반드시 필요하다.
'IT공부 > 리눅스커널이야기' 카테고리의 다른 글
| TCP 재전송과 타임아웃 (0) | 2025.09.22 |
|---|---|
| dirty Page (0) | 2025.08.25 |
| NUMA(Non-Uniform Memory Access , 비균일 메모리 접근) (0) | 2025.08.19 |
| vmstat 명령어 (1) | 2025.08.19 |
| Valgrind를 이용해서 메모리 누수 잡기 (0) | 2025.08.19 |