네트워크 트래픽 처리 흐름 정리
개요
이 문서는 www.my-app.com에서 GET /my-app/data 요청을 보낼 때, 로컬 PC부터 Azure Load Balancer까지 이어지는 네트워크 트래픽의 처리 과정을 설명합니다.
시나리오 설정
요청 정보
- URL:
https://www.my-app.com/my-app/data - HTTP 메서드: GET
- 사용자 위치: 서울시 강남구 사무실
- 네트워크: 무선 Wi-Fi (KT 인터넷)
대상 시스템
- 클라우드: Microsoft Azure
- 최종 목적지: Azure Load Balancer
1단계: 브라우저에서 HTTP 요청 생성
브라우저는 URL을 파싱하여 프로토콜(https), 호스트명(www.my-app.com), 경로(/my-app/data)를 분석합니다. 마치 편지를 쓰기 전에 "어디로 보낼까?"를 결정하는 것과 같습니다.
HTTP 요청 생성
GET /my-app/data HTTP/1.1
Host: www.my-app.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...
Accept: text/html,application/xhtml+xml,application/xml...
Accept-Language: ko-KR,ko;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
2단계: DNS 질의 과정
브라우저는 도메인 이름을 IP 주소로 변환하기 위해 DNS 질의를 시작합니다.
DNS 질의 순서
- 브라우저 DNS 캐시 확인
- 운영체제 DNS 캐시 확인
- hosts 파일 확인
- DNS 서버(168.126.63.1)로 질의 전송
- DNS 서버에서 응답:
www.my-app.com→20.123.45.67
3단계: 네트워크 계층에서 패킷 전송
운영체제는 DNS 응답을 받은 후 HTTP 요청을 네트워크 패킷으로 변환합니다.
패킷 생성 과정
- TCP 세션 생성 (포트 443)
- TLS 핸드셰이크 수행
- HTTP 요청을 암호화된 패킷으로 변환
- IP 헤더 추가 (출발지: 192.168.1.100, 목적지: 20.123.45.67)
- 이더넷 프레임 생성 (MAC 주소 추가)
4단계: 로컬 네트워크에서 인터넷으로
라우팅 과정
- 라우팅 테이블에서 목적지 확인
- 기본 게이트웨이(192.168.1.1)로 패킷 전송
- 인터넷 공유기에서 NAT 수행 (사설 IP → 공인 IP)
- ISP 네트워크로 전송
5단계: 인터넷 라우터에서의 ARP 처리
ARP 프로토콜과 ARP 테이블
인터넷 라우터는 목적지 IP 주소를 MAC 주소로 변환하기 위해 ARP(Address Resolution Protocol)를 사용합니다.
라우터에서의 패킷 처리 과정
목적지 IP 확인: 라우터는 수신한 패킷의 목적지 IP가 자신의 IP와 같은지 확인합니다.
- 같다면: 로컬 처리 (자신이 최종 목적지)
- 다르다면: 포워딩 처리 (다른 네트워크로 전달)
라우팅 테이블 검색: 목적지 IP에 대한 최적 경로를 라우팅 테이블에서 찾습니다.
- 다음 홉(Next Hop) IP 주소 확인
- 출구 인터페이스 결정
ARP 테이블 조회: 다음 홉 IP에 대한 MAC 주소를 ARP 캐시에서 검색합니다.
- 캐시 히트: 저장된 MAC 주소 사용
- 캐시 미스: ARP 요청 생성
ARP 요청 및 응답: 캐시 미스 시 브로드캐스트로 MAC 주소를 질의합니다.
- ARP 요청: "다음 홉 IP의 MAC 주소가 누구인가요?"
- ARP 응답: 해당 IP를 가진 장비가 자신의 MAC 주소 응답
- ARP 테이블 업데이트: 응답받은 MAC 주소를 캐시에 저장
패킷 전송: 획득한 MAC 주소로 이더넷 프레임을 생성하여 전송합니다.
- MAC 주소는 다음 홉(라우터)의 MAC 주소
- OSI 데이터링크 계층에서만 사용
- 각 홉을 지날 때마다 새로운 MAC 주소로 교체 (폐기)
ARP 테이블 구조
ARP 캐시 테이블:
┌───────────────┬───────────────────┬───────────┬────────────┬───────────┐
│ IP address │ MAC address │ interface │ state │ timestamp │
├───────────────┼───────────────────┼───────────┼────────────┼───────────┤
│ 192.168.1.1 │ 00:11:22:33:44:55 │ eth0 │ REACHABLE │ 10:30:40 │
│ 203.248.252.1 │ AA:BB:CC:DD:EE:FF │ eth1 │ REACHABLE │ 10:30:35 │
│ 20.123.45.67 │ - │ eth1 │ INCOMPLETE │ - │
└───────────────┴───────────────────┴───────────┴────────────┴───────────┘
ARP 처리 과정
ARP 캐시 확인: 목적지 IP(20.123.45.67)에 대한 MAC 주소가 캐시에 있는지 확인 캐시 미스: MAC 주소가 없으면 ARP 요청 생성 ARP 요청 전송: 브로드캐스트로 "20.123.45.67의 MAC 주소가 누구인가요?" 질의 ARP 응답 수신: 해당 IP를 가진 장비가 자신의 MAC 주소 응답 ARP 테이블 업데이트: 응답받은 MAC 주소를 ARP 캐시에 저장
ARP 패킷 구조
ARP 요청 패킷:
┌──────────────────────────────────────────┐
│ Hardware Type: 1 (Ethernet) │
│ Protocol Type: 0x0800 (IPv4) │
│ Hardware Size: 6 (MAC Address Length) │
│ Protocol Size: 4 (IP Address Length) │
│ Operation: 1 (ARP Request) │
│ Sender MAC: Router MAC Address │
│ Sender IP: Router IP Address │
│ Target MAC: 00:00:00:00:00:00 (unknown) │
│ Target IP: 20.123.45.67 (Destination IP) │
└──────────────────────────────────────────┘
라우팅 테이블과 ARP의 연동
- 라우팅 테이블 검색: 목적지 IP(20.123.45.67)에 대한 최적 경로 결정
- 다음 홉 확인: 라우팅 테이블에서 다음 홉(Next Hop) IP 주소 확인
- ARP 테이블 검색: 다음 홉 IP에 대한 MAC 주소를 ARP 테이블에서 검색
- MAC 주소 획득: ARP 캐시에서 MAC 주소를 찾거나 ARP 요청으로 획득
- 패킷 전송: 획득한 MAC 주소로 이더넷 프레임 생성하여 전송
중요한 개념
- MAC 주소는 다음 홉의 것: 라우터가 전송할 때 사용하는 MAC 주소는 다음 홉(다음 라우터)의 MAC 주소입니다.
- 데이터링크 계층에서만 사용: MAC 주소는 OSI 7계층 중 데이터링크 계층에서만 사용됩니다.
- 각 홉마다 교체: 패킷이 각 라우터를 통과할 때마다 MAC 주소가 새로운 것으로 교체됩니다.
- 폐기되는 정보: MAC 주소는 각 홉에서만 사용되고, 다음 홉으로 넘어가면 폐기됩니다.
6단계: Azure Load Balancer에서 요청 처리
목적지 IP 확인 및 로컬 처리
이 단계는 라우터에서 목적지 IP(20.123.45.67)와 자신의 IP를 비교한 결과, 일치하는 경우입니다. 즉, Azure Load Balancer가 최종 목적지가 되어 로컬 처리하는 단계입니다.
Azure Load Balancer 처리
- 목적지 IP 확인: 라우터가 목적지 IP(20.123.45.67)와 자신의 IP를 비교하여 일치함을 확인
- 로컬 처리 시작: 자신이 최종 목적지임을 인식하고 로컬 처리 모드로 전환
- 공인 IP 주소로 들어온 요청 수신: Load Balancer의 공인 IP 주소로 전송된 요청을 수신
- 헬스 체크로 백엔드 서버 상태 확인: 연결된 서버들의 상태를 모니터링
- 로드 밸런싱 알고리즘으로 서버 선택: 라운드 로빈, 최소 연결 수 등 알고리즘에 따라 적절한 서버 선택
- 선택된 서버로 요청 전달: 백엔드 서버 중 하나로 요청을 전달
네트워크 장비별 역할
라우터
네트워크 간의 패킷을 전달하는 장비로, 라우팅 테이블을 기반으로 최적 경로를 결정합니다.
스위치
네트워크 내에서 패킷을 전달하는 장비로, MAC 주소를 기반으로 패킷을 전송합니다.
Load Balancer
여러 서버에 들어오는 트래픽을 분산시켜 주는 네트워크 장비로, 서버의 부하를 균등하게 분배합니다.
관련 기술 용어
DNS (Domain Name System)
도메인 이름을 IP 주소로 변환하는 분산 데이터베이스 시스템으로, 사람이 기억하기 쉬운 도메인 이름을 컴퓨터가 이해하는 숫자 IP 주소로 바꿔주는 역할을 합니다.
IP 주소 (Internet Protocol Address)
인터넷에서 각 기기를 식별하는 고유한 숫자 주소로, IPv4는 192.168.1.1과 같은 형태, IPv6는 2001:0db8:85a3:0000:0000:8a2e:0370:7334와 같은 형태를 가집니다.
MAC 주소 (Media Access Control Address)
네트워크 카드의 물리적 주소로, 00:11:22:33:44:55와 같은 형태를 가지며 전 세계에서 유일한 식별자입니다.
포트 (Port)
컴퓨터에서 실행 중인 프로그램을 구분하는 번호로, HTTP는 80번, HTTPS는 443번, DNS는 53번 포트를 사용합니다.
ARP (Address Resolution Protocol)
IP 주소를 MAC 주소로 변환하는 프로토콜로, 네트워크 계층의 IP 주소를 데이터 링크 계층의 MAC 주소로 매핑하는 역할을 합니다. 브로드캐스트를 통해 같은 네트워크 세그먼트 내의 모든 기기에 질의를 보내고, 해당 IP 주소를 가진 기기만 응답하여 MAC 주소를 획득합니다.
라우팅 테이블 (Routing Table)
패킷의 목적지까지의 경로를 결정하는 테이블로, 각 목적지 네트워크에 대한 최적 경로와 다음 홉 정보를 포함합니다. 라우터는 이 테이블을 참조하여 패킷을 올바른 방향으로 전달합니다.
다음 홉 (Next Hop)
패킷이 다음에 도달할 라우터나 장비를 의미합니다. 라우팅 테이블에서 목적지까지의 경로를 따라 다음에 거쳐야 할 장비의 IP 주소를 나타냅니다.
브로드캐스트 (Broadcast)
네트워크 세그먼트 내의 모든 기기에게 패킷을 전송하는 방식으로, MAC 주소 FF:FF:FF:FF:FF:FF를 사용하여 모든 기기가 패킷을 수신하도록 합니다. ARP 요청이나 DHCP 요청과 같이 특정 기기를 찾을 때 사용됩니다.
라우터 (Router)
네트워크 간의 패킷을 전달하는 장비로, 라우팅 테이블을 기반으로 최적 경로를 결정합니다. 서로 다른 네트워크 간의 통신을 중계하며, IP 주소를 사용하여 패킷의 목적지를 판단합니다.
스위치 (Switch)
네트워크 내에서 패킷을 전달하는 장비로, MAC 주소를 기반으로 패킷을 전송합니다. 각 포트에 연결된 기기의 MAC 주소를 학습하여 해당 포트로만 패킷을 전송하며, 브로드캐스트 패킷은 모든 포트로 전송합니다.
Load Balancer
여러 서버에 들어오는 트래픽을 분산시켜 주는 네트워크 장비로, 서버의 부하를 균등하게 분배하고 가용성을 높이는 역할을 합니다. 헬스 체크를 통해 서버의 상태를 모니터링하고, 정상 작동하는 서버로만 트래픽을 전달합니다.
Azure
Microsoft에서 제공하는 클라우드 컴퓨팅 플랫폼으로, 가상 머신, 데이터베이스, 네트워킹 등의 서비스를 제공합니다. 전 세계에 분산된 데이터 센터를 통해 안정적이고 확장 가능한 클라우드 서비스를 제공합니다.
사설 IP 주소 (Private IP Address)
인터넷에 직접 연결되지 않는 내부 네트워크에서 사용하는 IP 주소로, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 범위에 속합니다. NAT를 통해 공인 IP 주소로 변환되어 인터넷과 통신하며, 여러 네트워크에서 중복 사용 가능합니다.
공인 IP 주소 (Public IP Address)
인터넷에서 전 세계적으로 유일한 IP 주소로, ISP에서 할당받아 사용합니다. 인터넷에 직접 연결되어 전 세계 어디서든 접근 가능하며, 유료로 할당받아 사용하는 제한된 자원입니다.
NAT (Network Address Translation)
사설 IP 주소를 공인 IP 주소로 변환하는 기술로, 여러 기기가 하나의 공인 IP 주소를 공유할 수 있게 합니다. 포트 번호를 추가로 사용하여 여러 연결을 구분하며, 보안상 내부 네트워크 구조를 숨기는 효과가 있습니다.
TCP/IP 스택
인터넷에서 사용하는 표준 네트워크 프로토콜 스택으로, TCP(전송 계층)와 IP(네트워크 계층)를 기반으로 구성됩니다. 애플리케이션 계층, 전송 계층, 네트워크 계층, 네트워크 액세스 계층으로 나뉘며, 각 계층은 독립적으로 동작하면서 하위 계층의 서비스를 사용합니다.
소켓 (Socket)
네트워크 통신을 위한 프로그래밍 인터페이스로, IP 주소와 포트 번호의 조합으로 구성됩니다. TCP 소켓과 UDP 소켓으로 구분되며, 애플리케이션이 네트워크 통신을 쉽게 구현할 수 있도록 추상화된 인터페이스를 제공합니다.
TTL (Time To Live)
패킷이 네트워크에서 살아있을 수 있는 최대 홉(라우터) 수로, 패킷이 무한히 순환하는 것을 방지합니다. 각 라우터를 통과할 때마다 1씩 감소하며, 0이 되면 패킷이 폐기됩니다.
홉 (Hop)
네트워크에서 패킷이 한 라우터에서 다음 라우터로 이동하는 단계를 의미합니다. TTL은 패킷이 통과할 수 있는 최대 홉 수를 제한하여 무한 루프를 방지합니다.