네트워크 장애 진단
접속이 안 될 때 어느 계층에서 끊기는지 아래에서 위로 좁혀가는 방법
순서
| 순서 | 확인 | 도구 | 실패하면 |
|---|
| 1 | 이름이 주소로 풀리는가 | dig, nslookup | DNS 문제 |
| 2 | 그 주소에 닿는가 | ping, traceroute | 경로나 방화벽 문제 |
| 3 | 그 포트가 열려 있는가 | telnet, nc | 서비스가 안 떠 있거나 포트가 막혔다 |
| 4 | 응답이 오는가 | curl -v | 애플리케이션 문제 |
| 5 | 인증서가 유효한가 | openssl s_client | 인증서 문제 |
아래에서 위로 올라가는 이유는 아래가 안 되면 위는 반드시 안 되기 때문입니다. 순서를 지키면 후보가 빠르게 줄어듭니다.
도구가 알려주는 것의 범위
| 도구 | 확인하는 것 | 확인하지 못하는 것 |
|---|
| ping | 그 호스트까지 IP 로 닿는지 | 포트가 열렸는지, 서비스가 도는지 |
| traceroute | 어느 구간에서 끊기는지 | 방화벽이 조용히 버리는 경우 |
| telnet, nc | 그 포트로 연결이 되는지 | 응답 내용이 맞는지 |
| curl -v | 요청과 응답 전체 | 서버 내부에서 무엇이 느린지 |
ping 이 실패하는데 서비스는 정상인 경우가 흔합니다. 많은 서버가 ICMP 를 막아두기 때문입니다. ping 실패를 서버 다운으로 읽으면 오진입니다.
자주 보는 증상
| 증상 | 흔한 원인 |
|---|
| 이름을 못 찾는다 | DNS 설정, 잘못된 도메인, DNS 서버 장애 |
| 연결이 거부된다 | 서비스가 안 떠 있다. 그 포트에 아무것도 없다 |
| 연결이 시간 초과된다 | 방화벽이 조용히 버린다. 경로가 없다 |
| 포트가 이미 쓰인다 | 다른 프로세스가 점유. 또는 종료된 프로세스의 소켓이 남았다 |
| 처음엔 되다가 멈춘다 | MTU 문제나 중간 장비의 유휴 절단 |
세 번째와 두 번째의 차이가 중요합니다. 거부는 도착했지만 거절된 것이고, 시간 초과는 응답 자체가 없는 것입니다. 전자는 서비스 문제, 후자는 경로나 방화벽 문제입니다.
처음엔 되다가 멈추는 경우
작은 요청은 되고 큰 요청에서 멈춘다면 MTU 를 봅니다.
| 개념 | 내용 |
|---|
| MTU | 한 번에 보낼 수 있는 최대 크기. 보통 1500바이트 |
| 문제 | VPN 이나 터널을 거치면 헤더가 붙어 실제 여유가 줄어든다 |
| 증상 | 작은 패킷은 통과하고 큰 패킷이 버려진다. 전송이 중간에 멈춘 것처럼 보인다 |
| 원인 | 크기 초과를 알려주는 ICMP 메시지가 방화벽에 막혀 송신 측이 모른다 |
| 대응 | MTU 를 낮추거나 최대 세그먼트 크기를 조정한다 |
포트 점유
| 확인 | 내용 |
|---|
| 무엇이 쓰는지 | lsof 나 ss 로 프로세스를 찾는다 |
| 종료 후에도 남는 이유 | 연결을 먼저 닫은 쪽 소켓이 잠시 대기 상태로 남는다 |
| 대응 | 주소 재사용 옵션을 켜거나 대기가 끝나기를 기다린다 |
Q.접속이 안 될 때 어떤 순서로 확인하나요?
아래 계층부터 올라갑니다. 아래가 안 되면 위는 반드시 안 되므로 후보가 빠르게 줄어듭니다.
| 순서 | 확인 | 실패하면 |
|---|
| 1 | 이름이 주소로 풀리는가 | DNS 문제 |
| 2 | 그 주소에 닿는가 | 경로나 방화벽 |
| 3 | 그 포트가 열려 있는가 | 서비스 미실행 또는 포트 차단 |
| 4 | 응답이 오는가 | 애플리케이션 문제 |
| 5 | 인증서가 유효한가 | 인증서 만료나 체인 문제 |
각 단계가 다른 계층을 봅니다. 1번은 이름 해석, 2번은 네트워크 계층, 3번은 전송 계층, 4번과 5번은 응용 계층입니다.
거꾸로 하면 비쌉니다. 애플리케이션 로그부터 뒤지다가 실은 DNS 가 안 풀리는 것이었던 경우가 흔합니다.
흔한 실수: ping 이 안 되면 서버가 죽었다고 판단하는 것. 많은 서버가 ICMP 를 막아두므로 ping 실패는 서버 상태를 말해주지 않습니다. 포트로 직접 연결해봐야 합니다.
Q.연결 거부와 시간 초과는 어떻게 다른가요?
| 구분 | 연결 거부 | 시간 초과 |
|---|
| 무슨 일이 있었나 | 패킷이 도착했고 거절 응답이 왔다 | 아무 응답이 없다 |
| 원인 | 그 포트에 아무것도 없다 | 방화벽이 조용히 버린다. 경로가 없다 |
| 걸리는 시간 | 즉시 | 수십 초 대기 후 |
| 확인할 곳 | 서비스가 떠 있는지, 포트 번호가 맞는지 | 방화벽 규칙, 보안 그룹, 라우팅 |
이 차이가 진단 방향을 완전히 바꿉니다. 거부는 네트워크는 정상이고 서비스 문제라는 뜻입니다. 시간 초과는 그 반대입니다.
방화벽이 두 가지로 동작할 수 있다는 점도 알아야 합니다. 거절 응답을 보내면 즉시 거부로 보이고, 조용히 버리면 시간 초과로 보입니다. 보안상 후자가 선호되는데, 그래서 방화벽 문제가 시간 초과로 나타납니다.
흔한 실수: 둘을 같은 문제로 보고 방화벽부터 확인하는 것. 즉시 거부라면 방화벽은 통과한 것이므로 서비스가 그 포트에서 듣고 있는지를 봐야 합니다.
Q.포트가 이미 사용 중이라는 오류는 왜 나나요?
그 포트를 다른 프로세스가 점유하고 있거나, 종료된 프로세스의 소켓이 아직 정리되지 않은 것입니다.
| 원인 | 확인 | 대응 |
|---|
| 다른 프로세스가 쓴다 | lsof 나 ss 로 프로세스를 찾는다 | 그 프로세스를 정리하거나 다른 포트를 쓴다 |
| 이전 실행이 남았다 | 같은 이름의 프로세스가 있는지 본다 | 종료 후 재시작 |
| 소켓이 대기 상태로 남았다 | 소켓 상태를 확인한다 | 주소 재사용 옵션을 켠다 |
| 여러 인스턴스를 띄웠다 | 설정을 확인한다 | 인스턴스마다 다른 포트를 준다 |
세 번째가 개발 중에 자주 겪는 상황입니다. 연결을 먼저 닫은 쪽의 소켓이 일정 시간 대기 상태로 남습니다. 늦게 도착하는 패킷이 새 연결에 섞이지 않게 하려는 장치입니다.
주소 재사용 옵션을 켜면 대기 중인 소켓이 있어도 바인딩할 수 있습니다. 대부분의 서버 프레임워크가 기본으로 켜 둡니다.
흔한 실수: 대기 상태 소켓을 없애려고 대기 시간을 0 으로 줄이는 것. 늦게 온 패킷이 새 연결에 섞일 수 있어 데이터가 오염됩니다. 재사용 옵션이 맞는 방법입니다.
Q.VPN 접속 후 전송이 중간에 멈추는 이유는 무엇인가요?
MTU 문제일 가능성이 큽니다. 작은 요청은 되고 큰 요청에서 멈추는 것이 특징입니다.
| 개념 | 내용 |
|---|
| MTU | 한 번에 보낼 수 있는 최대 크기. 보통 1500바이트 |
| VPN 이 하는 일 | 원래 패킷을 감싸므로 헤더가 붙고 실제 여유가 줄어든다 |
| 문제 | 여유를 초과한 패킷이 중간에서 버려진다 |
| 왜 모르나 | 크기 초과를 알려주는 ICMP 메시지가 방화벽에 막혀 송신 측에 안 온다 |
증상이 특이합니다. 연결은 되고 짧은 응답도 오는데, 큰 응답이 오다가 멈춥니다. 그래서 애플리케이션 문제로 오해하기 쉽습니다.
| 확인 | 방법 |
|---|
| 크기별로 시험 | 조각화 금지 옵션으로 크기를 바꿔가며 어디서 실패하는지 본다 |
| 인터페이스 MTU | VPN 인터페이스의 설정값을 확인한다 |
| 대응 | MTU 를 낮추거나 최대 세그먼트 크기를 조정한다 |
흔한 실수: 애플리케이션 타임아웃을 늘려 해결하려는 것. 패킷이 버려지고 있으므로 기다려도 오지 않습니다. 크기를 줄여야 통과합니다.
먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.
읽었으면 문제로 확인해보세요
네트워크 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.