IP / TCP / UDP 기본
3줄 요약
- IP는 목적 host를 찾고 port는 그 host 안의 listener를 찾는다. 앱이 떠 있어도 bind address, target port, firewall이 틀리면 요청은 앱까지 오지 않는다.
- TCP는 연결, 순서, 재전송을 제공하지만 handshake, socket state, backlog, TIME_WAIT, CLOSE_WAIT 같은 운영 비용을 만든다.
- UDP는 단순하지만 DNS와 HTTP/3/QUIC의 핵심 경로다. 백엔드는 TCP 443뿐 아니라 UDP 53/443, OS socket 자원까지 볼 줄 알아야 한다.
핵심 정리
- IP 도달성과 port 도달성은 다르다.
ping이 되어도 TCP listener가 없으면 connection refused가 날 수 있고, firewall이 drop하면 timeout이 난다.
- LB 443, target 8080, container 8080, app
0.0.0.0:8080처럼 port 경로를 한 줄로 설명할 수 있어야 한다.
- TCP 상태는 장애 단서다.
CLOSE_WAIT 누적은 local app close 문제, TIME_WAIT 폭증은 짧은 연결/port 사용률, SYN-SENT 지속은 connect 경로 문제를 의심하게 한다.
- UDP는 연결 상태가 없으므로 TCP와 관찰 방식이 다르다. HTTP/3는 QUIC 위에서 동작하므로 UDP 443, CDN edge, h2 fallback을 같이 본다.
- OS 네트워크 자원에는 file descriptor, ephemeral port, accept backlog, retransmit, conntrack/NAT 한계가 있다.
- 앱 metric만으로는 부족하다.
ss, nstat, lsof, cloud NAT/LB metric을 같은 시간대에 맞춰야 한다.
헷갈리는 지점
- IP가 열려 있으면 서비스도 열린 것이라고 생각하기 쉽다. 실제 서비스는 port listener가 필요하기 때문이다.
- 핵심 판단 포인트는 IP 도달성과 TCP port 수신을 분리한다.
- timeout과 connection refused를 같은 장애로 묶기 쉽다. 둘 다 접속 실패처럼 보이기 때문이다.
- 핵심 판단 포인트는 거절은 응답이 온 것이고 timeout은 응답이 오지 않은 것이다.
- UDP는 웹 백엔드와 무관하다고 느끼기 쉽다. 그러나 DNS와 HTTP/3/QUIC이 UDP 기반이다.
- 핵심 판단 포인트는 서비스 경로에서 UDP가 쓰이는 구간을 확인한다.
- TIME_WAIT를 무조건 장애로 보기 쉽다. TCP 정상 종료 과정에서도 생기기 때문이다.
- 핵심 판단 포인트는 증가 속도, connection reuse, ephemeral port 사용률, 장애 증상과 함께 판단한다.
- CPU가 낮으면 서버 자원이 충분하다고 생각하기 쉽다. socket과 port도 자원이기 때문이다.
- 핵심 판단 포인트는 FD limit, socket state, backlog, NAT/conntrack metric을 함께 보는 것이다.
확인 질문
- connection refused와 timeout의 차이는 무엇인가?
- refused는 대상이 연결을 거절한 것이고 timeout은 응답이 돌아오지 않은 것이다.
- 백엔드에서 port와 listener를 확인해야 하는 이유는 무엇인가?
- LB나 proxy가 전달하는 port와 애플리케이션이 실제로 듣는 port가 어긋나면 502/503이 발생하기 때문이다.
- UDP가 웹 개발에서 중요한 대표 사례는 무엇인가?
- CLOSE_WAIT가 계속 쌓이면 무엇을 의심해야 하는가?
- 상대가 연결을 닫았는데 local application이나 library가 socket close를 마무리하지 못하는 상황을 의심한다.
- HTTP/3를 켰는데 특정 네트워크에서만 실패하면 무엇을 확인해야 하는가?
- UDP 443 허용, CDN edge 설정, browser protocol, h2 fallback, 사용자 네트워크의 UDP 제한을 확인한다.
- CPU와 메모리가 낮은데 connect timeout이 늘면 무엇을 봐야 하는가?
- ephemeral port, file descriptor, accept backlog, retransmit, NAT/conntrack, firewall drop 여부를 본다.