Linux 강좌 / IP 주소·DNS·포트의 관계와 연결 과정 이해하기

IP 주소는 네트워크에서 통신 상대의 주소를 나타내고, DNS는 도메인 이름에 대응하는 주소 등의 정보를 찾으며, 포트는 같은 장치 안에서 통신할 서비스를 구분합니다. 웹사이트에 연결하려면 이름 확인, 목적지까지의 경로, 해당 포트에서 응답하는 서비스가 함께 맞아야 합니다.

주소·이름·포트를 구분했다면 네트워크 연결 문제 진단에서 계층별 실패를 따로 확인할 수 있습니다.

시스템 설정 실습의 기준은 Ubuntu 26.04 LTS와 Rocky Linux 9 계열의 일반 설치 VM입니다. 컨테이너·WSL·다른 릴리스에서는 서비스와 패키지 구성이 다를 수 있습니다. 가상 머신 실습 환경 만들기에서 콘솔 복구와 버전 확인을 먼저 준비하세요.

주소·이름·포트를 웹 접속 한 번으로 구분하기

https://example.com/을 입력했다고 가정해 보겠습니다. 운영체제와 브라우저는 캐시·설정에 따라 이름의 주소 정보를 얻고, 그 주소로 패킷을 보낼 경로를 선택한 뒤 서버와 통신합니다. HTTPS는 기본적으로 443번 포트를 사용하며, 실제 웹 통신에는 TCP와 TLS 또는 QUIC 같은 전송·보안 계층이 관여합니다. DNS 응답을 받았다는 사실만으로 웹 접속 성공이 보장되지는 않습니다.

항목 역할 예시
IP 주소 패킷을 보낼 주소 192.0.2.10 또는 2001:db8::10
DNS 이름에 연결된 레코드 조회 A·AAAA·MX 등의 레코드
포트와 프로토콜 호스트 안의 통신 끝점 구분 TCP 443과 UDP 443은 서로 구별됨

표의 192.0.2.0/24와 2001:db8::/32는 설명용 주소 범위입니다. 실제 접속 실습의 서버 주소로 사용하지 마세요. 포트 번호가 같아도 TCP와 UDP는 별도의 통신 방식이므로 방화벽 규칙도 프로토콜을 구분해야 합니다.

IPv4·IPv6와 사설 주소의 의미

IPv4는 32비트 주소를 점으로 나눈 십진수로, IPv6는 128비트 주소를 콜론으로 나눈 16진수로 주로 표시합니다. 한 인터페이스에 여러 주소가 붙을 수 있고 IPv4와 IPv6가 함께 쓰이기도 합니다. 127.0.0.1과 ::1은 자기 장치로 돌아오는 루프백 주소입니다. 이 주소에만 대기하는 서비스에는 다른 컴퓨터가 직접 접속할 수 없습니다.

IPv4의 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16은 사설 주소 범위입니다. 가정·회사 내부에서 반복해서 쓸 수 있지만 인터넷 전체에서 고유한 공개 주소로 라우팅되지는 않습니다. 외부 접속에는 NAT 같은 별도 구성이 사용될 수 있습니다. IPv6를 단순히 “NAT가 없는 IPv4”로 이해하거나 IPv4 방화벽 규칙이 IPv6에도 자동 적용된다고 가정하지 마세요.

서브넷과 기본 경로를 해석하기

192.168.10.20/24의 /24는 주소 앞 24비트를 네트워크 접두사로 사용한다는 CIDR 표기입니다. 장치는 라우팅 테이블에서 목적지에 맞는 경로를 찾으며, 일반적으로 더 구체적인 접두사가 우선합니다. default via ...는 다른 더 구체적인 경로가 없을 때 사용할 다음 홉을 나타냅니다. 게이트웨이 주소와 DNS 서버 주소는 같을 수도 있지만 역할이 다릅니다.

ip -brief address
ip route
ip -6 route
getent ahosts example.com

ip는 iproute2 프로젝트의 도구이지만 배포 패키지 이름은 다릅니다. Ubuntu 26.04에서는 iproute2, Rocky Linux 9에서는 iproute입니다. 위 명령은 인터페이스 주소와 경로, 시스템 이름 서비스 설정을 통한 이름 확인을 보여 줍니다. getent는 DNS 외에 /etc/hosts 등 설정된 소스도 사용하며 주소와 인터페이스 이름은 장비마다 다릅니다.

Ubuntu에서는 dpkg-query -W iproute2, Rocky에서는 rpm -q iproute로 설치된 패키지와 버전을 확인합니다. RPM 이름은 Rocky Linux 9 공식 BaseOS 저장소에서도 확인할 수 있습니다.

DNS 조회와 서비스 접속을 따로 확인하기

DNS의 A 레코드는 IPv4 주소, AAAA 레코드는 IPv6 주소를 나타냅니다. 같은 이름에서 여러 주소가 나올 수 있고 캐시와 유효 기간 때문에 조회 시점마다 결과가 달라질 수 있습니다. 시스템이 systemd-resolved를 사용한다면 아래 첫 명령으로 인터페이스별 DNS 설정을 살펴볼 수 있습니다. 명령이 없으면 해당 시스템의 NetworkManager·resolver 설정을 확인하세요.

resolvectl status
ss -lnt
curl -I --connect-timeout 5 --max-time 15 https://example.com/

ss -lnt는 이 컴퓨터에서 대기 중인 TCP 소켓을 보여 주므로 원격 웹 서버의 포트 목록은 아닙니다. curl은 원격 HTTPS 응답 헤더를 요청합니다. curl이 없다면 Ubuntu에서는 sudo apt install curl, Rocky Linux에서는 sudo dnf install curl로 설치할 수 있습니다. 프록시, 인증서, 네트워크 정책에 따라 실패 원인이 달라집니다.

결과를 보고 다음 확인 대상을 정하기

  1. 주소가 없으면 인터페이스·가상 머신 네트워크 연결부터 확인합니다.
  2. 주소는 있는데 목적지 경로가 없으면 라우팅과 게이트웨이를 확인합니다.
  3. 이름 조회만 실패하면 DNS 설정과 시스템 이름 서비스 설정을 확인합니다.
  4. 이름과 경로가 정상인데 접속이 실패하면 포트 대기 상태, 방화벽, TLS·애플리케이션 오류를 구분합니다.

이 강의의 명령은 설정을 바꾸지 않습니다. 이름 조회 실패를 해결하려고 무조건 DNS 파일을 덮어쓰거나, 연결 실패를 해결하려고 방화벽을 끄지 마세요. 관찰한 결과가 가리키는 계층부터 좁혀 가면 다음 진단에서 불필요한 변경을 줄일 수 있습니다.

공식 문서