본문으로 바로가기
TaeyoungKim.dev

TCP·UDP·IP·DNS·ARP 차이: 주소와 포트로 패킷 경로 읽기

리눅스작성 약 3분 읽기TaeyoungKim
LinkedInX

브라우저에서 도메인을 입력했는데 연결이 실패하면 DNS, IP, ARP, TCP, 포트를 한꺼번에 의심하기 쉽다. 각 용어가 해결하는 질문을 패킷의 이동 순서로 나누면 진단 지점이 보인다.

웹 요청 한 건을 이름 해석부터 서버 프로세스와 HTTP 교환까지 따라가면 각 용어의 책임이 겹치지 않는다.

DNS와 IP는 이름과 경로를 나눈다

DNS(Domain Name System)는 도메인 이름에 대응하는 IP 주소와 여러 레코드를 계층적·분산 방식으로 조회한다. DNS 조회가 성공했다는 것은 목적지 주소를 알아냈다는 뜻이지 그 서버의 포트가 열렸다는 뜻은 아니다.

IP(Internet Protocol)는 네트워크 사이에서 패킷을 목적지 주소로 전달하기 위한 규칙이다. IPv4는 32비트, IPv6는 128비트 주소를 사용한다. 라우터는 목적지 네트워크와 라우팅 테이블을 보고 다음 경로를 고른다.

subnet gateway ARP는 로컬 전송을 어떻게 도울까?

subnet은 주소와 마스크로 같은 네트워크 범위를 구분한다. 목적지가 같은 링크에 있는지 다른 네트워크에 있는지에 따라 직접 보내거나 기본 게이트웨이로 보낸다.

IPv4 로컬 링크에서는 ARP(Address Resolution Protocol)가 대상 IPv4 주소에 대응하는 링크 계층 주소를 알아낸다. 원격 서버의 최종 MAC 주소를 인터넷 전체에서 조회하는 것이 아니라, 현재 링크에서 다음으로 전달할 대상의 주소를 해결한다.

text
도메인 --DNS--> 목적지 IP
목적지 IP --routing--> 다음 홉
다음 홉 IPv4 --ARP(로컬 링크)--> 링크 계층 주소

TCP와 UDP는 무엇을 보장할까?

TCP는 연결을 설정하고 순서, 재전송, 흐름 제어를 제공하는 전송 프로토콜이다. 데이터 경계를 그대로 보존하는 메시지 목록이 아니라 연속된 바이트 스트림으로 다룬다.

UDP는 연결 설정과 TCP식 재전송·순서 보장을 제공하지 않는 데이터그램 전송이다. 오버헤드가 작지만 손실, 중복, 순서 변경이 중요하다면 애플리케이션이 필요한 처리를 설계해야 한다.

TCP가 항상 빠르거나 UDP가 항상 실시간인 것은 아니다. 데이터 신뢰성, 지연 허용 범위, 혼잡 처리와 애플리케이션 프로토콜을 함께 본다.

port와 socket은 어느 프로그램으로 보낼까?

port는 한 호스트 안에서 통신을 받을 애플리케이션 끝점을 구분하는 번호다. IP 주소가 건물 주소라면 포트는 어느 창구로 갈지 정하는 정보에 가깝다.

socket은 네트워크 통신 끝점을 표현하는 운영체제 인터페이스다. 보통 프로토콜, 로컬·원격 주소와 포트의 조합으로 연결을 구분한다.

서버 프로세스가 실행 중이어도 다른 주소에만 바인딩했거나 방화벽이 포트를 막으면 외부 연결은 실패한다. 반대로 포트가 열려 있어도 애플리케이션 프로토콜과 요청 형식이 맞지 않으면 정상 응답을 받지 못한다.

연결 실패를 어떤 순서로 확인할까?

  1. DNS가 기대한 IP를 반환하는지 본다.
  2. 라우팅 경로와 대상 네트워크가 맞는지 확인한다.
  3. 로컬 링크 문제라면 ARP·인터페이스 상태를 본다.
  4. 대상 주소와 포트에 서버가 실제로 대기 중인지 확인한다.
  5. 방화벽·보안 그룹·프록시의 허용 범위를 확인한다.
  6. TCP 연결 뒤에는 애플리케이션 요청과 응답을 본다.

핵심 요약

DNS는 이름을 주소로 찾고, IP는 네트워크 사이의 전달 경로를 정한다. ARP는 IPv4 로컬 링크에서 다음 전달 대상의 링크 계층 주소를 찾는다. TCP와 UDP는 전송 특성이 다르며, 포트와 소켓은 한 호스트의 애플리케이션 끝점을 구분한다. 연결 장애는 이름, 경로, 링크, 전송, 애플리케이션 순서로 좁히자.

작성자

TaeyoungKim

기초 개념을 구현과 검증, 실제 운영 판단까지 연결해 기록합니다.

함께 읽으면 좋은 글