Connection Refused·Timeout·Reset은 무엇이 다른가
Connection Refused·Timeout·Reset은 무엇이 다른가#
1장 “연결이 안 됩니다”는 세 가지가 전혀 다르다#
1.1 사용자에게는 모두 같은 증상으로 보인다#
현장 장비가 Server에 연결되지 않는다고 가정해보겠습니다.
사용자는 보통 다음과 같이 말합니다.
장비가 연결되지 않습니다.하지만 Application Log에는 서로 다른 오류가 나타날 수 있습니다.
Connection Refused
Connection Timeout
Connection Reset겉으로는 모두:
연결 실패이지만 TCP 관점에서는 전혀 다른 사건입니다.
1.2 오류 문구보다 Packet 흐름을 봐야 한다#
세 가지를 매우 단순화하면 다음과 같습니다.
Connection Refused
→ 연결 요청에 즉시 거부 응답
Connection Timeout
→ 기다렸지만 필요한 응답이 오지 않음
Connection Reset
→ RST로 연결이 강제로 종료됨따라서 장애 분석에서는:
어떤 Error Message가 떴는가?와 함께:
실제 Packet에서는 무엇이 오갔는가?를 확인해야 합니다.
2장 정상 TCP 연결부터 다시 보자#
2.1 TCP 연결의 기본 흐름#
정상적인 TCP Connection은 일반적으로 다음 과정으로 시작합니다.
Client Server
SYN
─────────────────────────────→
SYN/ACK
←─────────────────────────────
ACK
─────────────────────────────→
ESTABLISHED이것이 3-Way Handshake입니다.
따라서 연결 장애를 분석할 때 가장 먼저 보는 것은:
SYN은 나갔는가?
Server까지 도착했는가?
SYN/ACK이 돌아왔는가?
RST가 왔는가?
아무 응답도 없는가?입니다.
3장 Connection Refused는 무엇인가#
3.1 연결 요청이 즉시 거부된 상황#
다음 흐름을 생각해보겠습니다.
Client Server
SYN
─────────────────────────────→
RST
←─────────────────────────────Client는 Server까지 연결을 시도했습니다.
그리고 상대방으로부터 즉시 연결을 받아들일 수 없다는 응답을 받았습니다.
Application에서는 흔히:
Connection refused와 같은 오류로 나타납니다.
3.2 가장 흔한 원인 — Port가 열려 있지 않다#
예를 들어 Client가:
192.168.10.100:8000으로 연결을 시도합니다.
하지만 Server에서:
TCP 8000
LISTEN 없음이라면 운영체제가 RST를 반환할 수 있습니다.
즉:
SYN
↓
Destination Host 도착
↓
해당 Port를 받는 Socket 없음
↓
RST입니다.
3.3 그래서 Refused는 오히려 중요한 단서다#
Connection Refused가 발생했다는 것은 많은 경우:
아예 아무것도 안 갔다.보다 더 많은 정보를 줍니다.
예를 들어 다음 가능성이 높아집니다.
Destination까지 Packet이 도달했다.
상대 TCP Stack 또는 중간 장비가 응답했다.따라서 우선 확인할 것은:
Service Process
Listening Port
Bind Address
Server Firewall
중간 장비 Reject Policy입니다.
4장 Connection Refused와 RST는 어떤 관계인가#
4.1 Refused는 사용자에게 보이는 결과다#
TCP Packet에는:
Connection Refused라는 Flag가 존재하지 않습니다.
실제로 Packet에서 보는 것은:
RST입니다.
즉 일반적인 경우:
SYN
↓
RST
↓
Application
"Connection Refused"같은 관계가 만들어집니다.
4.2 모든 RST가 Connection Refused는 아니다#
중요합니다.
RST는 이미 연결된 TCP Session에서도 나타날 수 있습니다.
예:
SYN
↓
SYN/ACK
↓
ACK
↓
Data
↓
RST이런 경우에는:
Connection Reset으로 보일 수 있습니다.
따라서:
RST는 TCP Reset Packet이고, Refused와 Reset은 그것이 어떤 상황에서 발생했는지를 Application에서 표현한 결과라고 이해하면 좋습니다.
5장 Connection Timeout은 무엇인가#
5.1 기다렸지만 응답이 오지 않는 상황#
다음 흐름을 생각해보겠습니다.
Client Server
SYN
─────────────────────────────→
아무 응답 없음
SYN Retransmission
─────────────────────────────→
아무 응답 없음
SYN Retransmission
─────────────────────────────→
TimeoutClient는 연결을 시도했지만 필요한 응답을 받지 못했습니다.
결국 일정 시간 후:
Connection Timeout으로 실패합니다.
5.2 Timeout은 원인이 아니라 결과다#
Timeout이 발생했다고 다음과 같이 단정하면 안 됩니다.
Server가 죽었다.가능한 원인은 매우 많습니다.
잘못된 Destination IP
Routing 오류
VLAN 문제
Firewall DROP
ACL DROP
Server Down
Return Path 문제
Packet Loss
Network 장애등입니다.
Timeout은 단지:
정해진 시간 안에 필요한 응답을 받지 못했다.
라는 결과입니다.
6장 DROP과 REJECT는 다르다#
6.1 DROP#
Firewall이 Packet을 조용히 버린다고 가정합니다.
Client
SYN
──────→ Firewall
DROP
Server에는 전달되지 않음Client는 아무 응답도 받지 못합니다.
결과:
SYN 재전송
↓
대기
↓
Timeout이 될 수 있습니다.
6.2 REJECT#
Firewall이 요청을 명시적으로 거부하도록 설정되어 있다면 조건에 따라 TCP RST 같은 응답을 생성할 수도 있습니다.
Client
SYN
──────→ Firewall
Firewall
RST
←──────이 경우 Client는 Timeout까지 기다리지 않고 빠르게 실패할 수 있습니다.
6.3 현장에서는 둘을 구분해야 한다#
따라서:
연결이 안 된다.고 할 때 다음을 봅니다.
아무 응답이 없는가?
RST가 오는가?
ICMP 오류가 오는가?이 차이가 장애 범위를 크게 줄여줍니다.
7장 Connection Reset은 무엇인가#
7.1 연결이 강제로 중단된 상황#
예를 들어 정상적으로 TCP Connection이 만들어졌다고 하겠습니다.
SYN
↓
SYN/ACK
↓
ACK
↓
ESTABLISHED이후 Data를 주고받다가:
RST가 발생합니다.
Application에서는 흔히:
Connection reset by peer같은 오류를 볼 수 있습니다.
7.2 FIN과 RST는 다르다#
정상적인 TCP 종료는 일반적으로 FIN을 사용합니다.
FIN
↓
ACK
↓
FIN
↓
ACKRST는 다릅니다.
RST
↓
Connection 즉시 중단입니다.
즉:
FIN
→ 정상적인 종료 절차
RST
→ 즉각적인 Reset으로 이해할 수 있습니다.
8장 RST는 누가 보냈는지가 중요하다#
Packet Capture에서 RST를 발견했다고 가정합니다.
가장 먼저:
Source IP가 누구인가?를 봅니다.
가능한 Sender는:
Client
Server
Firewall
Load Balancer
Proxy
기타 중간 Network 장비일 수 있습니다.
따라서:
RST 발견
=
Server Application 문제라고 바로 판단하면 안 됩니다.
9장 Server가 RST를 보낼 수 있는 상황#
9.1 닫힌 Port#
가장 대표적인 경우입니다.
Client
SYN
──────→ Server:8000
Server
TCP 8000 LISTEN 없음
RST
←──────9.2 Application이 연결을 강제 종료#
Application이나 OS의 Socket 처리 방식에 따라 Connection을 정상 FIN이 아닌 RST로 종료할 수도 있습니다.
9.3 존재하지 않는 Connection에 Packet이 도착#
TCP Stack이 유효한 Connection으로 인식할 수 없는 Segment를 받았을 때 조건에 따라 RST를 보낼 수 있습니다.
10장 중간 Network 장비가 RST를 만들 수도 있다#
Stateful Firewall이나 Load Balancer가 Connection 상태를 관리한다고 가정합니다.
Client
↓
Firewall
↓
ServerFirewall Policy나 Session 상태에 따라 중간 장비가 TCP Reset을 생성할 수도 있습니다.
예:
Session Timeout
Security Policy
Protocol Validation
Load Balancer 정책등입니다.
따라서 Packet Capture 위치도 중요합니다.
11장 세 오류를 Packet으로 비교하자#
11.1 정상#
SYN
→
←
SYN/ACK
ACK
→11.2 Connection Refused의 대표적인 패턴#
SYN
→
←
RST11.3 Connection Timeout의 대표적인 패턴#
SYN
→
응답 없음
SYN
→
응답 없음11.4 Connection Reset의 대표적인 패턴#
SYN
→
←
SYN/ACK
ACK
→
DATA
→
←
RST이 패턴을 이해하면 Application Error Message를 훨씬 쉽게 해석할 수 있습니다.
12장 Connection Refused가 발생하면 어디부터 볼까#
12.1 Server Listening Port#
Linux에서는:
ss -lnt특정 Port:
ss -lnt | grep ':8000'처럼 확인할 수 있습니다.
예:
LISTEN
0.0.0.0:8000이면 해당 Port가 Listening 중이라는 중요한 증거입니다.
12.2 Bind Address도 확인한다#
다음은 다릅니다.
127.0.0.1:8000과:
0.0.0.0:8000Application이 127.0.0.1에만 Bind되어 있으면 외부 장비에서는 접속할 수 없습니다.
따라서:
Port가 LISTEN이다.만 보지 말고:
어느 IP에서 LISTEN하는가?까지 봐야 합니다.
13장 Process가 실행 중이라고 Service가 정상인 것은 아니다#
Application Process가 살아 있다고 가정합니다.
process running하지만 Port는:
LISTEN 없음일 수 있습니다.
가능한 원인:
Application 초기화 실패
Bind 실패
Port 설정 오류
다른 Process의 Port 선점
Application 내부 오류등입니다.
따라서:
Process 상태와:
Socket 상태를 별도로 확인해야 합니다.
14장 Timeout이면 Capture 위치를 바꿔가며 본다#
14.1 Client에서는 SYN이 보인다#
Client Capture
SYN
O
SYN/ACK
X이 사실만으로 Server가 SYN을 받았는지는 알 수 없습니다.
14.2 Server에서 SYN이 안 보인다#
Server Capture
SYN
X이라면 문제 범위는:
Client
↓
Switch
↓
Router
↓
Firewall
↓
Server사이입니다.
확인 대상:
VLAN
Routing
Firewall
ACL
NAT
VPN등입니다.
14.3 Server에서는 SYN이 보인다#
Server Capture:
SYN
O인데 SYN/ACK이 나가지 않는다면:
Listening Service
Server Firewall
TCP Stack
Server Resource등을 확인합니다.
15장 Server에서 SYN/ACK이 나갔는데 Client에 안 온다면#
Server Capture:
SYN
O
SYN/ACK
OClient Capture:
SYN
O
SYN/ACK
X이라면 Return Path 영역을 확인해야 합니다.
Server
↓
Firewall
↓
Router
↓
Client확인:
Return Route
Stateful Firewall
NAT
VPN
중간 ACL등입니다.
16장 Timeout은 MTU 문제 하나로 설명하면 안 된다#
원문처럼 Timeout 원인을:
MTU 불일치부터 우선적으로 보는 것은 적절하지 않습니다.
TCP Connection 자체의 SYN에 응답이 없는 상황이라면 보통:
Route
Firewall
Server 상태
Return Path
Destination 오류같은 항목을 먼저 확인합니다.
MTU·Path MTU 문제는 Connection 이후 특정 크기의 데이터에서 이상이 발생할 때 더 관련성이 높을 수 있습니다.
17장 Connection이 된 뒤 Timeout이 발생할 수도 있다#
Timeout은 Connection 수립 단계에만 발생하는 것은 아닙니다.
예:
TCP Connection
성공
Request
전송
Response
없음
Read Timeout일 수도 있습니다.
이 경우 Network Connection은 만들어졌지만:
Server Application 응답 지연
Backend Timeout
Database Timeout
상대 Application 정지
중간 Session 문제등을 확인해야 합니다.
18장 Connect Timeout과 Read Timeout을 구분하자#
18.1 Connect Timeout#
TCP Connection 자체를
정해진 시간 안에 만들지 못함대표적으로:
SYN
↓
응답 없음같은 상황과 관련됩니다.
18.2 Read Timeout#
Connection은 이미 만들어졌습니다.
ESTABLISHED
↓
Request
↓
Response 대기
↓
Timeout입니다.
이 차이를 모르고:
Timeout
=
Network 장애라고 하면 잘못된 방향으로 분석할 수 있습니다.
19장 Application Timeout도 따로 존재한다#
예를 들어 다음 구조입니다.
Client
↓
TCP 정상
↓
HTTP 정상
↓
Application
↓
DatabaseDatabase가 30초 동안 응답하지 않는다면 Application이:
DB Timeout을 발생시킬 수 있습니다.
Client에서는:
HTTP 500
HTTP 504
Read Timeout등으로 나타날 수도 있습니다.
따라서 Timeout이라는 단어만 보고 TCP 문제라고 판단하면 안 됩니다.
20장 CLOSE_WAIT는 무엇인가#
TCP 종료와 관련하여 많이 만나는 상태입니다.
상대방이 FIN을 보냈다고 가정합니다.
Remote
FIN
──────→ LocalLocal TCP Stack은 이를 받고 ACK를 보냅니다.
이후 Local Socket은:
CLOSE_WAIT상태에 있을 수 있습니다.
20.1 CLOSE_WAIT가 의미하는 것#
쉽게 말하면:
상대는 자신의 전송을 끝냈고, 이제 Local Application이 Socket을 닫기를 기다리는 상태
입니다.
따라서 CLOSE_WAIT가 장시간 계속 증가한다면:
Application Socket close 처리를 우선 확인해야 합니다.
21장 CLOSE_WAIT가 많으면 Network부터 보지 않는다#
예:
10:00
CLOSE_WAIT 100
10:10
CLOSE_WAIT 500
10:20
CLOSE_WAIT 1500처럼 계속 증가합니다.
동시에:
File Descriptor 증가
Memory 증가
새 Connection 실패가 보인다면 Application Resource Leak 가능성을 확인해야 합니다.
Cable 교체나 VLAN 변경이 직접적인 해결책이 아닐 수 있습니다.
22장 TIME_WAIT는 무엇인가#
정상 TCP 종료 과정에서 Connection을 적극적으로 종료한 쪽은 일정 시간:
TIME_WAIT상태를 유지할 수 있습니다.
이 상태는 TCP의 정상적인 안전장치입니다.
22.1 왜 TIME_WAIT가 필요한가#
대표적인 이유는:
마지막 ACK가 유실됐을 때 대응
이전 Connection의 지연된 Segment가
새 Connection에 섞이는 것 방지등입니다.
따라서:
TIME_WAIT 존재
=
장애는 아닙니다.
23장 TIME_WAIT가 많다고 Connection Leak이라고 하지 않는다#
짧은 TCP Connection이 매우 많이 생성되고 종료되는 Service라면 TIME_WAIT가 많이 나타날 수 있습니다.
확인해야 할 것은:
Connection 생성률
Ephemeral Port 사용
File Descriptor
Application 설계
Connection Pool
Persistent Connection 사용 여부입니다.
TIME_WAIT 개수 하나만 보고 Kernel 설정부터 변경해서는 안 됩니다.
24장 Connection Leak은 무엇인가#
Connection Leak은 Application이 더 이상 필요하지 않은 Connection Resource를 적절히 정리하지 않는 문제입니다.
예:
Connection 생성
↓
사용
↓
Exception
↓
close() 누락
↓
Resource 남음이런 상황이 반복될 수 있습니다.
대표적인 징후:
CLOSE_WAIT 지속 증가
File Descriptor 증가
Memory 증가
새 Connection 실패등입니다.
25장 TIME_WAIT와 CLOSE_WAIT는 완전히 다르다#
| 상태 | 의미 | 우선 확인 |
|---|---|---|
| TIME_WAIT | 정상 종료 뒤 Connection 정보 유지 | Connection 생성 패턴 |
| CLOSE_WAIT | 상대 FIN 수신 후 Local Application close 대기 | Application Socket 종료 |
| FIN_WAIT_1 | FIN 전송 후 확인 대기 | Packet·상대 상태 |
| FIN_WAIT_2 | FIN 확인 후 상대 FIN 대기 | 상대 Application 종료 |
특히:
TIME_WAIT 많음과:
CLOSE_WAIT 많음을 같은 의미로 보면 안 됩니다.
26장 Connection Reset이 반복되면 어디를 볼까#
26.1 누가 RST를 보내는지 확인#
가장 먼저:
RST Source를 봅니다.
예:
Server → Client
RST인지:
Firewall → Client
RST인지 확인합니다.
26.2 발생 시점도 중요하다#
Handshake 시작 직후#
SYN
↓
RST이라면 Port·Listening·Reject Policy를 봅니다.
Connection 성립 직후#
Handshake
↓
Data
↓
RST이라면 Application Protocol이나 Policy를 확인합니다.
일정 Idle 시간 후#
ESTABLISHED
↓
오랫동안 Traffic 없음
↓
RST 또는 Connection 오류라면:
Firewall Session Timeout
Load Balancer Timeout
Application Idle Timeout등도 확인합니다.
27장 Protocol 오류도 RST의 원인이 될 수 있다#
예를 들어 특정 산업 장비가 정해진 Binary Protocol을 기대한다고 가정합니다.
Client가 잘못된 형식의 Payload를 전송합니다.
TCP Connection
O
Payload
InvalidApplication 정책에 따라 Connection을 즉시 닫거나 Reset할 수도 있습니다.
따라서 RST 발생 시:
Protocol Version
Payload Format
Authentication
Session 상태도 확인합니다.
28장 HTTP Keep-Alive와 TCP Keepalive는 다르다#
이 두 용어는 이름 때문에 혼동하기 쉽습니다.
HTTP Keep-Alive#
여러 HTTP Request에서 하나의 TCP Connection을 재사용하는 것과 관련됩니다.
TCP Keepalive#
오랫동안 Traffic이 없는 TCP Connection에서 Peer 상태를 확인하기 위한 TCP Stack 기능입니다.
둘은 목적과 동작 계층이 다릅니다.
29장 Firewall Session Timeout도 확인한다#
장시간 연결되는 장비가 있다고 하겠습니다.
Controller
⇄
Server양쪽 Application은 Connection이 살아 있다고 생각합니다.
그런데 중간 Firewall이:
Idle Session Timeout으로 Connection 상태를 제거합니다.
나중에 Controller가 데이터를 전송하면 예상하지 못한:
Timeout
Reset
재연결이 발생할 수 있습니다.
장시간 Persistent Connection을 사용하는 시스템에서는:
Client Timeout
Server Timeout
Firewall Timeout
Load Balancer Timeout을 함께 비교해야 합니다.
30장 NAT도 Connection 상태와 연결된다#
NAT 환경:
Device
192.168.10.20
↓
NAT
↓
ServerNAT 장비는 TCP Session Mapping을 관리합니다.
따라서:
Session Timeout
Port Mapping
Return Traffic문제가 연결 장애와 연결될 수 있습니다.
다만 무조건 NAT를 의심하기보다 Packet Capture와 Session Table을 통해 확인합니다.
31장 VLAN 장애와 Refused를 혼동하지 않는다#
예를 들어 Client의 SYN 자체가 잘못된 VLAN 때문에 Server에 도달하지 못한다면 일반적으로:
SYN
↓
응답 없음
↓
Timeout형태로 나타날 가능성이 있습니다.
반면 Connection Refused는 대개 누군가 명시적인 거부 응답을 돌려줬다는 의미입니다.
따라서:
VLAN 문제
→ Connection Refused라고 단순하게 연결하면 안 됩니다.
32장 Connection Refused 사례#
Client:
10.0.0.20Server:
10.0.0.100:8000Client Capture:
10:00:00.001
10.0.0.20:50100 → 10.0.0.100:8000
SYN
10:00:00.003
10.0.0.100:8000 → 10.0.0.20:50100
RST,ACKServer 확인:
ss -lnt | grep ':8000'결과 없음.
이 경우 Service가 해당 Port를 Listen하지 않는 것이 유력한 원인입니다.
33장 Connection Timeout 사례#
Client Capture:
10:00:00 SYN
10:00:01 SYN Retransmission
10:00:03 SYN RetransmissionServer Capture:
SYN 없음Firewall Log:
SRC=10.0.0.20
DST=10.0.0.100
TCP DPT=8000
DROP이라면 원인을 매우 명확하게 좁힐 수 있습니다.
34장 Connection Reset 사례#
정상 Handshake:
SYN
SYN/ACK
ACK후:
Client → Server
Application Data
Server → Client
RST가 관찰됩니다.
Server Application Log:
Invalid protocol version
Closing connection이 있다면 Network보다 Application Protocol 영역을 확인해야 합니다.
35장 Packet Capture는 양쪽에서 보면 훨씬 강력하다#
Client에서:
SYN 보냄을 확인했습니다.
Server에서는:
SYN 없음입니다.
그러면 두 지점 사이에서 문제를 찾습니다.
반대로:
Server
SYN 수신
SYN/ACK 전송인데 Client가 못 받으면 Return Path로 범위를 좁힙니다.
36장 tcpdump로 특정 TCP Flow 확인하기#
허가된 환경에서:
sudo tcpdump -n -i eth0 'host 10.0.0.5 and tcp port 8000'처럼 범위를 제한할 수 있습니다.
확인할 것은:
SYN
SYN/ACK
ACK
RST
FIN
Retransmission 패턴입니다.
37장 ss로 현재 TCP 상태 확인하기#
Linux:
ss -tan특정 Port:
ss -tan | grep ':8000'Process까지 볼 권한이 있다면:
ss -tanp등을 사용할 수 있습니다.
37.1 상태 개수를 보는 것도 도움이 된다#
예:
ESTABLISHED 500
CLOSE_WAIT 2
TIME_WAIT 120과:
ESTABLISHED 50
CLOSE_WAIT 3000
TIME_WAIT 20은 의미가 크게 다릅니다.
단순 총 Socket 수보다 상태별 분포와 시간에 따른 변화를 봅니다.
38장 netstat를 사용할 수도 있다#
환경에 따라:
netstat -an등을 사용할 수 있습니다.
Linux에서는 ss가 더 일반적인 최신 도구인 경우가 많지만 Windows나 오래된 시스템에서는 netstat가 여전히 유용합니다.
중요한 것은 명령 이름보다:
LISTEN
ESTABLISHED
TIME_WAIT
CLOSE_WAIT상태를 해석하는 것입니다.
39장 실습 — DROP과 REJECT 차이 확인하기#
반드시 격리된 시험 환경에서 수행합니다.
예를 들어 Test Server의 TCP 8080을 대상으로 Firewall Rule을 만들어볼 수 있습니다.
DROP:
iptables -A INPUT -p tcp --dport 8080 -j DROP개념적으로:
SYN
↓
Firewall에서 버림
↓
응답 없음
↓
Timeout이 발생할 수 있습니다.
39.1 REJECT#
시험 환경에서:
iptables -A INPUT -p tcp --dport 8081 \
-j REJECT --reject-with tcp-reset처럼 TCP Reset을 반환하도록 설정할 수 있습니다.
개념적으로:
SYN
↓
RST
↓
빠른 실패를 관찰할 수 있습니다.
실험 후 Rule은 반드시 원상 복구합니다.
40장 실습에서는 Error Message와 Packet을 함께 기록한다#
단순히:
실패했다.라고 기록하지 않습니다.
예:
Application
Connection timed out
Client Capture
SYN 3회
SYN/ACK 없음
Server Capture
SYN 없음
Firewall
DROP처럼 기록합니다.
이렇게 하면:
Error Message
+
Packet
+
Device Log의 관계를 이해할 수 있습니다.
41장 재부팅하기 전에 확보해야 할 것#
장비나 Server를 재부팅하면 일시적으로 정상화될 수도 있습니다.
하지만 동시에 중요한 증거가 사라질 수 있습니다.
재부팅 전 가능하다면:
Socket 상태
Application Log
Firewall Log
Packet Capture
Process 상태
Memory
CPU
Connection Count등을 확보합니다.
42장 Connection Leak을 확인할 때 보는 자료#
Application Resource Leak을 의심한다면:
CLOSE_WAIT 수
File Descriptor 수
Process Memory
Thread 수
Connection 생성률
Connection 종료률등을 같이 봅니다.
예:
CLOSE_WAIT 증가
+
FD 증가
+
Memory 증가가 반복된다면 중요한 단서입니다.
43장 RST를 보안 공격으로 바로 판단하지 않는다#
TCP Reset Spoofing 같은 공격 기법이 존재하지만 현장에서 RST가 보인다는 이유만으로 공격을 의심해서는 안 됩니다.
일반적인 원인이 훨씬 많습니다.
Port Closed
Application Error
Protocol Error
Firewall Policy
Load Balancer
Session Timeout등입니다.
보안 사고 판단에는 추가적인 증거가 필요합니다.
44장 안전과 개인정보를 함께 고려한다#
Packet Capture에는 다음 정보가 포함될 수 있습니다.
Device ID
차량번호
사용자 정보
Token
명령
내부 IP따라서:
필요한 Host만
필요한 Port만
필요한 시간만Capture하는 것이 좋습니다.
Capture File은 접근 권한과 보관 기간도 관리해야 합니다.
45장 장애별 우선 확인표#
| 현상 | Packet에서 보일 수 있는 특징 | 우선 확인 |
|---|---|---|
| Connection Refused | SYN 후 RST | LISTEN Port·Service·Reject Policy |
| Connect Timeout | SYN 반복·응답 없음 | Routing·Firewall DROP·Server·Return Path |
| Connection Reset | 기존 연결에서 RST | RST Sender·Application·Firewall |
| CLOSE_WAIT 증가 | 상대 FIN 수신 후 Local close 대기 | Application Socket 처리 |
| TIME_WAIT 증가 | 정상 종료 후 상태 유지 | Connection 생성·종료 패턴 |
| ESTABLISHED 장기 유지 | Connection은 존재 | 실제 Traffic·Heartbeat·Timeout |
46장 TCP 오류를 분석하는 기본 순서#
Application Error 확인
↓
Source / Destination IP 확인
↓
TCP Port 확인
↓
Client SYN 확인
↓
Server SYN 수신 확인
↓
SYN/ACK 또는 RST 확인
↓
Return Path 확인
↓
Handshake 이후 Data 확인
↓
FIN / RST 확인
↓
Socket State 확인
↓
Application Log 확인이 흐름을 따르면 단순한 Error Message에서 실제 장애 구간으로 이동할 수 있습니다.
47장 자주 발생하는 오해#
47.1 Connection Refused면 Network가 끊긴 것이다?#
오히려 상대 또는 중간 장비가 명시적인 응답을 보낸 경우가 많습니다.
Service Listening 상태를 먼저 확인합니다.
47.2 Timeout이면 무조건 Firewall이다?#
아닙니다.
Routing, Server Down, Return Path, 잘못된 IP 등 다양한 원인이 있습니다.
47.3 Reset이면 Server가 죽었다?#
아닙니다.
Application이나 Firewall, Load Balancer 등이 RST를 생성할 수 있습니다.
47.4 CLOSE_WAIT가 많으면 TIME_WAIT 설정을 줄이면 된다?#
아닙니다.
CLOSE_WAIT는 Local Application의 Socket 종료 처리를 확인해야 합니다.
47.5 TIME_WAIT가 많으면 Connection Leak이다?#
아닙니다.
정상적인 TCP 종료에서도 발생합니다.
Connection 생성 패턴과 실제 Resource 사용량을 함께 봐야 합니다.
48장 현장 담당자에게 전달할 정보#
다음처럼 전달하면 좋습니다.
장애 시각
10:31:20
Client
10.0.0.20
Server
10.0.0.100
TCP Port
8000
오류
Connection Timeout
Client Capture
SYN 반복
SYN/ACK 없음
Server Capture
SYN 없음
Firewall Log
TCP 8000 DROP반대로:
연결 안 됨이라고만 전달하면 다시 처음부터 확인해야 합니다.
49장 자기 점검#
49.1 Connection Refused의 대표적인 Packet 흐름은 무엇인가#
Client의 SYN에 대해 RST가 빠르게 돌아오는 형태입니다.
가장 먼저 해당 Port의 Listening 상태와 Reject Policy를 확인합니다.
49.2 Timeout에서 SYN이 반복된다는 것은 무엇을 의미하는가#
Client가 Connection을 계속 시도하고 있지만 필요한 응답을 받지 못하고 있다는 의미입니다.
Server 도착 여부와 중간 경로를 추가로 확인해야 합니다.
49.3 Connection Reset에서는 가장 먼저 무엇을 볼까#
RST를 누가 보냈는지와 Connection의 어느 시점에서 RST가 발생했는지를 확인합니다.
49.4 CLOSE_WAIT가 지속적으로 증가하면 무엇을 볼까#
Local Application이 상대 FIN을 받은 뒤 Socket을 정상적으로 닫는지 확인합니다.
49.5 TIME_WAIT가 많이 보인다는 것만으로 장애라고 볼 수 있는가#
아닙니다.
짧은 Connection이 많이 생성되는 Service에서는 정상적으로 많이 보일 수 있습니다.
실제 Port·Resource 고갈 여부와 Connection 생성률을 함께 확인해야 합니다.
50장 이 글을 마치며#
Connection Refused, Timeout, Reset은 모두:
연결이 안 됩니다.라는 하나의 사용자 증상으로 표현될 수 있습니다.
하지만 Packet 수준에서는 전혀 다른 사건입니다.
Connection Refused의 대표적인 흐름은:
SYN
↓
RST입니다.
Timeout의 대표적인 흐름은:
SYN
↓
응답 없음
↓
SYN Retransmission
↓
Timeout입니다.
Connection Reset은:
정상 Connection
↓
통신
↓
RST
↓
강제 종료와 같은 모습으로 나타날 수 있습니다.
따라서 Error Message를 본 뒤 바로 원인을 결정해서는 안 됩니다.
다음 순서가 중요합니다.
오류 문구 확인
↓
Packet Capture
↓
누가 SYN을 보냈는가?
↓
SYN은 어디까지 도착했는가?
↓
SYN/ACK 또는 RST가 있는가?
↓
누가 RST를 보냈는가?
↓
Socket 상태는 무엇인가?
↓
Application Log는 무엇을 말하는가?특히 다음 네 가지를 기억하면 됩니다.
Connection Refused는 대개 상대나 중간 장비가 연결 요청을 명시적으로 거부했다는 중요한 단서입니다.
Timeout은 원인이 아니라 정해진 시간 안에 필요한 응답을 받지 못했다는 결과입니다.
Connection Reset은 RST에 의해 Connection이 강제로 중단된 상황이며, RST Sender와 발생 시점이 중요합니다.
CLOSE_WAIT와 TIME_WAIT는 이름이 비슷해 보여도 전혀 다른 TCP 상태이며, 동일한 문제로 취급해서는 안 됩니다.
결국 TCP 장애를 제대로 분석하는 가장 좋은 방법은 Error Message를 외우는 것이 아니라:
어떤 Packet을 보냈고
어떤 Packet이 돌아왔으며
어느 지점에서 흐름이 달라졌는가?를 확인하는 것입니다.