Foundry
네트워크
중급
핵심

네트워크 장애 진단

접속이 안 될 때 어느 계층의 문제인지 좁혀가는 순서와, 진단 도구가 알려주는 것의 범위

네트워크 장애 진단

접속이 안 될 때 어느 계층에서 끊기는지 아래에서 위로 좁혀가는 방법

순서

순서확인도구실패하면
1이름이 주소로 풀리는가dig, nslookupDNS 문제
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 메시지가 방화벽에 막혀 송신 측에 안 온다

증상이 특이합니다. 연결은 되고 짧은 응답도 오는데, 큰 응답이 오다가 멈춥니다. 그래서 애플리케이션 문제로 오해하기 쉽습니다.

확인방법
크기별로 시험조각화 금지 옵션으로 크기를 바꿔가며 어디서 실패하는지 본다
인터페이스 MTUVPN 인터페이스의 설정값을 확인한다
대응MTU 를 낮추거나 최대 세그먼트 크기를 조정한다

흔한 실수: 애플리케이션 타임아웃을 늘려 해결하려는 것. 패킷이 버려지고 있으므로 기다려도 오지 않습니다. 크기를 줄여야 통과합니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

더 깊이 공부하기

읽었으면 문제로 확인해보세요

네트워크 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.