LabHub

리눅스 네트워크 진단 · 소켓과 포트 · 실습

소켓과 포트 진단

LabHub 에서 이어서 보기

목표

리스닝 소켓의 바인딩 범위를 구분하고, ss/proc/net/tcp 두 경로로 같은 사실을 확인합니다.

왜 중요한가

"서버 안에서 curl 은 되는데 밖에서는 안 된다"는 신고의 대부분은 방화벽이 아니라 바인딩 문제입니다. 127.0.0.1:8080 에 묶인 소켓은 같은 호스트에서 온 연결만 받고, 외부 패킷은 커널이 아예 전달하지 않습니다. 이 구분은 보안 설계이기도 합니다 - 관리용 포트를 일부러 루프백에만 묶는 것이 표준 관행입니다. 그리고 리스닝 소켓의 Send-Q 는 백로그 최대치, Recv-Q 는 accept 대기 큐의 현재 길이입니다. 확립된 연결에서의 뜻과 다르기 때문에 자주 오독됩니다.

단계

/root/net 디렉터리에서 작업합니다.

1. python3 -m http.server 8080 --bind 127.0.0.1 을 백그라운드로 띄우고 PID 를 /root/net/http_pid.txt 에 적으세요.
2. python3 -m http.server 8081 --bind 0.0.0.0 을 백그라운드로 띄우고 PID 를 /root/net/all_pid.txt 에 적으세요. 8080 은 그대로 루프백 전용이어야 합니다.
3. 두 포트의 바인딩 범위를 /root/net/binding.txt 에 다음 두 줄로 적으세요. 값은 loopback 또는 all 입니다.

참고

단계 8개

  1. 루프백에만 묶어 서버 띄우기
  2. 모든 주소에 묶어 띄우기
  3. 바인딩 범위 기록하기
  4. 연결 붙잡아 두기
  5. /proc/net/tcp 직접 읽기
  6. 백로그 최대치 읽기
  7. 포트의 주인 찾기
  8. 포트 점유 확인 스크립트