LabHub

네트워크 트러블슈팅 · 소켓과 포트 · 실습

소켓과 포트 진단

LabHub 에서 이어서 보기

목표

리슨 소켓을 읽고, 바인딩 주소가 원격 접속에 미치는 영향을 직접 재현하고, Connection refused 와 정상 연결의 차이를 확인합니다.

왜 중요한가

127.0.0.1:8080 으로 리슨하는 프로세스는 같은 호스트에서는 완벽히 동작하지만 바깥에서 오는 연결은 커널이 RST 로 거절합니다 — 즉 refused 가 납니다. 그래서 "로컬에서는 되는데 원격만 안 된다" 는 신고를 받으면 ss -ltnpLocal Address 열 한 칸만 보면 절반이 끝납니다. 반대로 그 주소가 0.0.0.0 인데도 바깥에서 timeout 이면 그때부터 방화벽과 네트워크 정책을 봅니다. 이 갈림이 조사 범위를 절반으로 줄입니다.

단계

1. /root/sock 디렉터리를 만들고, 현재 리슨 중인 TCP 소켓 목록을 /root/sock/listen.txt 로 저장하세요. :2222 가 포함돼야 합니다.
2. 0.0.0.0:8080 에서 듣는 HTTP 서버를 백그라운드로 띄우세요. 채점 시점에도 살아 있어야 합니다.
3. 127.0.0.1:8081 에서만 듣는 두 번째 서버를 띄우고, 두 소켓의 Local Address:Port 를 각각 한 줄씩 /root/sock/bind.txt 에 적으세요. (예: 0.0.0.0:8080127.0.0.1:8081)
4. 127.0.0.1:8080 으로 연결이 되는지 확인한 결과를 /root/sock/nc-open.txt 로 저장하세요.
5. 아무도 듣고 있지 않은 127.0.0.1:9999 로 연결을 시도한 결과를 /root/sock/nc-refused.txt 로 저장하세요. 출력에 refused 를 뜻하는 문구가 있어야 합니다.
6. /proc/net/tcp 에서 8080 포트의 LISTEN 소켓 줄을 찾아 그대로 /root/sock/proctcp.txt 에 저장하세요.
7. 자기 인터페이스 IP(루프백 아님)로 8080 과 8081 을 각각 두드리고, 결과를 /root/sock/scope-test.txt 에 두 줄로 적으세요.
8080=<open|closed> / 8081=<open|closed>
8. /root/sock/report.csv 를 만드세요. 첫 줄은 port,bind,proto 헤더이고, 그 아래에 2222, 8080, 8081 세 포트에 대해 각각 한 줄씩 적으세요. bind 는 실제 리슨 주소, prototcp 입니다.

참고

단계 8개

  1. 리슨 소켓 확인
  2. 테스트 서버 띄우기
  3. 바인딩 범위가 다른 두 서버
  4. 열린 포트 확인
  5. 닫힌 포트 확인
  6. /proc/net/tcp 직접 읽기
  7. 바깥 주소에서 두드려 보기
  8. 리슨 소켓 표 만들기