Post

[Network] URL과 네트워크 송수신

📌 들어가며

이번 글에서는 브라우저에 URL을 입력한 순간부터 웹 서버와 메시지를 주고받기까지의 전체 여정을 정리한다. URL 해독 → HTTP 요청/응답 → DNS로 IP 조회 → 소켓 통신으로 이어지는 흐름을 따라간다.

URL이란? Uniform Resource Locator — 웹 서버에 어떤 기능(정보 가져오기·보내기)을 요청하는 하나의 문장. 구성은 프로토콜 + 도메인 + 경로다. 예: http://localhost:8080/dir/file1.html

flowchart LR
    URL["URL 입력"] --> Req["HTTP 리퀘스트"]
    Req --> DNS["DNS로 IP 조회"]
    DNS --> Sock["소켓 통신"]
    Sock --> Res["리스폰스 수신"]

1. URL 해독 & HTTP 메시지

브라우저는 URL을 해독해 리퀘스트 메시지를 만든다. 파일명을 생략하면(.../dir/) index.html·default.html 같은 기본 파일로 요청이 간다.

개념설명
URI액세스 대상(‘무엇을’) — URL 포함
메소드GET·POST 등 ‘어떻게’를 담당

HTTP 리퀘스트 메시지 구조:

1
2
3
① 리퀘스트 라인: <메소드> <URI> <HTTP 버전>
② 메시지 헤더:  키: 밸류 형태의 헤더 필드
③ 메시지 본문:  송신 데이터(바이너리)

응답(리스폰스)은 첫 행에 스테이터스 코드(200·404 등)가 온다는 점만 다르다.

💡 리퀘스트-리스폰스는 짝꿍이고, 하나의 리퀘스트에 URI는 1개다. 그래서 페이지에 여러 파일(이미지·CSS)이 있으면, 파일마다 요청을 따로따로 보내야 한다.


2. IP 주소와 DNS

브라우저는 직접 네트워크 송신을 하지 않고 OS에 의뢰한다. 그 전에 도메인명을 IP 주소로 변환해야 한다.

왜 도메인명과 IP를 나누나? 전화번호를 다 외울 수 없어 이름으로 저장하는 것과 같다. DNS(Domain Name System)가 사람이 읽는 도메인(localhost)과 기계가 쓰는 IP(127.0.0.1)를 대응시킨다.

IP는 네트워크 번호(동) + 호스트 번호(번지)로 구성된다.

리졸버(resolver)의 동작:

1
2
3
4
① 앱이 IP 조회 요청 → 잠시 일시정지(제어가 리졸버로)
② 리졸버가 프로토콜 스택 호출 → DNS 서버로 조회 메시지 송신
③ DNS 서버가 답변 → 리졸버가 해독해 IP 추출
④ 제어가 다시 앱으로 → OS에 송신 의뢰

💡 리졸버는 Socket 라이브러리 안의 부품화된 프로그램이다. 앱은 IP를 직접 찾지 않고 리졸버에 위임하며, 이 사이 앱은 잠시 멈춰 응답을 기다린다.


3. DNS 서버의 동작

DNS 서버는 클라이언트로부터 이름·클래스·타입 3가지를 받는다.

항목설명
이름서버/메일 배송 목적지
클래스네트워크 종류(현재는 IN만)
타입A=IP 주소, MX=메일 배송지

도메인 계층 조회 — 도메인은 뒤에서부터 최상위다(com > cyber > lab > www). 요청은 가장 가까운 DNS → com DNS → naver.com DNS 순으로 타고 올라가 최종 IP를 가진 서버까지 도달한다.

💡 DNS는 한 번 조사한 도메인을 캐시에 저장해 다음 조회를 빠르게 한다. 단 등록 정보가 바뀔 수 있어 유효 기간이 지나면 삭제한다.


4. 소켓으로 데이터 송수신

IP를 알아냈으면 양끝에 소켓이 달린 파이프라인으로 데이터를 주고받는다.

1
2
3
4
① 소켓 생성 (socket) → 디스크립터로 식별
② 서버 소켓에 파이프 연결 (connect: 디스크립터·IP·포트)
③ 데이터 송수신 (write / read)
④ 파이프 분리 + 소켓 말소 (close)
단계함수역할
생성socket()소켓 생성 + 디스크립터 발급
연결connect()서버 소켓에 연결(포트로 상대 소켓 지정)
통신write/read송신/수신(수신 버퍼 사용)
종료close()연결 끊고 소켓 말소

💡 포트 번호가 상대 소켓을 지정한다. 웹은 80, 메일은 25처럼 목적지 소켓을 포트로 식별한다. 디스크립터는 내 쪽 소켓을, 포트는 상대 쪽 소켓을 가리킨다.


📝 정리

1
2
3
4
5
URL → 웹 서버 통신
├─ URL     프로토콜+도메인+경로, 리퀘스트/리스폰스 짝꿍
├─ DNS     도메인 → IP (리졸버가 조회·캐시)
├─ 계층    가까운 DNS → com → naver.com 순 조회
└─ 소켓    socket→connect→write/read→close
개념한 줄 정의
URL/URI요청 문장 / 액세스 대상
DNS/리졸버도메인→IP 변환 / 그 부품
소켓통신 파이프의 양 끝

URL 입력 한 번 뒤에는 해독 → DNS 조회 → 소켓 연결 → 송수신이라는 정교한 과정이 숨어 있다. 이 큰 그림을 잡으면, 이후 소켓·프로토콜 스택의 세부 동작이 훨씬 자연스럽게 이어진다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.