Skip to main content

브라우저의 동작과정

1. 사용자가 처음에 브라우저에 주소를 입력합니다.

2. DNS 조회

  • 브라우저는 해당 URL의 아이피 주소를 알기 위해 로컬 DNS 캐시에서 해당 도메인의 IP 주소를 찾습니다.
  • 로컬 DNS 캐시에 없을 경우, 운영 체제의 DNS 설정을 확인하여 DNS 서버로 쿼리를 보냅니다.
  • DNS 서버는 도메인 이름에 대응하는 아이피 주소를 반환합니다.

3. TCP 연결

  • HTTP/HTTPS 프로토콜은 TCP 위에서 작동합니다. 따라서 먼저 TCP 3-way handshake를 통해 연결을 설정합니다.
  • 클라이언트에서 서버로 SYN 패킷을 보냅니다.
  • 서버에서는 SYN과 ACK를 모두 설정한 패킷을 클라이언트로 보냅니다.
  • 클라이언트는 ACK 패킷을 서버로 보내 연결을 완료합니다.

4. HTTP/HTTPS 요청

  • TCP 연결이 설정되면 클라이언트는 HTTP 또는 HTTPS 요청을 보냅니다. 이 요청에는 웹 페이지, 자원, 사용자 에이전트, 쿠키 등의 정보가 포함될 수 있습니다.

5. WAS(웹 애플리케이션 서버) 처리

  • 서버는 요청을 받아 처리하며 필요한 경우 데이터베이스와 같은 백엔드 시스템과 통신합니다.
  • 처리 결과를 바탕으로 HTTP 응답을 생성하여 클라이언트에게 반환합니다.

6. 브라우저 처리

  • 클라이언트의 브라우저는 서버로부터의 응답을 받아 웹 페이지를 렌더링합니다.

7. TCP 연결 종료

  • 통신이 끝나면 TCP 연결은 일반적으로 클라이언트나 서버에 의해 종료되며 TCP 4-way handshake를 통해 연결을 종료합니다.

TCP/IP 4계층 모델

TCP/IP의 4계층 모델은 다음과 같습니다.

  • 응용 계층 (Application Layer): 특정 서비스를 제공하기 위해 애플리케이션 간 정보 교환
  • 전송 계층 (Transport Layer): 송신 데이터를 수신 측 애플리케이션에 전달
  • 인터넷 계층 (Internet Layer): 수신 측까지 IP를 확인하여 데이터 전달
  • 네트워크 인터페이스 계층 (Network Interface Layer): 네트워크에 직접 연결된 기기 간 전송

데이터가 송신 호스트에서 수신 호스트로 전송될 때, 데이터가 브라우저에서 WAS까지 이동할 때 각 계층에서 헤더가 추가되는 과정을 거치게 됩니다.

1. 응용 계층

  • 브라우저가 웹 페이지를 요청하면 HTTP 요청이 생성됩니다.
  • 이 요청은 전송 계층으로 내려갑니다.

2. 전송 계층

  • TCP 프로토콜이 사용되며, TCP 헤더가 HTTP 요청 앞에 추가됩니다. 이 헤더에는 포트 번호, 시퀀스 번호, 확인 응답 번호 등의 정보가 포함됩니다.
  • 이 패킷은 다음 계층인 인터넷 계층으로 전달됩니다.

3. 인터넷 계층

  • IP 헤더가 TCP 헤더 앞에 추가됩니다. IP 헤더에는 소스 아이피 주소, 대상 아이피 주소, 생존 시간(TTL)등의 정보가 포함됩니다.
  • 이 패킷은 네트워크 인터페이스 계층으로 전달됩니다.

4. 네트워크 인터페이스 계층

  • Ethernet 헤더(또는 해당 네트워크 환경에 맞는 프레임 헤더)가 추가됩니다. 이 헤더에는 MAC 주소와 같은 정보가 포함됩니다.
  • 패킷은 네트워크를 통해 전송됩니다.

수신 호스트에서 패킷을 받을 때는 위의 과정을 과정이 반대로 진행되며 각 계층에 맞는 헤더를 제거하는 디캡슐레이션 과정을 거치게 됩니다.

브라우저에서 웹 서버까지 인터넷 흐름

브라우저는 URL 정보로 해당 도메인에 연결된 IP 주소를 알아내기 위해 DNS 조회를 수행합니다. 이 때, 클라이언트의 운영체제는 먼저 /etc/hosts 파일에 저장된 정보를 확인합니다. 만약 해당 도메인에 대한 IP 주소 정보가 /etc/hosts에 없다면, 그 다음으로 운영체제의 DNS 캐시나 로컬 DNS 캐시를 확인합니다. 여기서도 정보가 존재하지 않는 경우 재귀적 DNS 쿼리를 시작해 DNS 서버 체인을 통해 최종적으로 IP 주소를 반환 받습니다.

반환 받은 IP 주소와 함께 클라이언트는 TCP 연결을 시작합니다. 이후 HTTP 요청을 TCP 세그먼트로 감싸고, 이 세그먼트에 IP 헤더를 붙여 IP 패킷으로 만듭니다. 이제 클라이언트는 자신의 LAN에 있는 게이트웨이의 MAC 주소를 ARP를 통해 알아냅니다. 이 정보를 바탕으로 클라이언트는 이더넷 프레임을 생성합니다. 이 프레임의 목적지 MAC 주소는 자신의 로컬 컴퓨터와 연결된 게이트웨이의 MAC 주소로, 출발지 MAC 주소는 클라이언트 자신의 MAC 주소로 설정됩니다.

이 프레임은 물리적 네트워크(Wi-Fi or 이더넷 케이블)를 통해 게이트웨이 라우터까지 전송됩니다. 라우터는 이 프레임을 수신하여 소스 IP를 사설 IP 주소에서 공인 IP 주소로 NAT 변환 후, 목적지 IP 주소를 확인하고 해당 패킷을 인터넷을 통해 목적지로 전달합니다.

목적지 라우터에 전달되기 전까지 IP 주소를 MAC 주소로 매핑하고 있는 ARP 테이블을 참조하여 프레임의 도착지 MAC 정보만 계속 변하면서 여러 개의 스위치와 라우터를 거쳐 최종 목적지 라우터까지 전달되게 됩니다.

최종 목적지 라우터는 수신된 패킷의 아이피 주소를 확인하고, 해당 라우터의 NAT 설정 또는 포트 포워딩 규칙에 따라 패킷은 적절한 사설 아아피 주소를 가진 장치로 전달됩니다. 라우터는 ARP 테이블을 참조하여 사설 IP 주소와 연관된 MAC 주소를 알아냅니다. 라우터는 IP 패킷을 새로운 이더넷 프레임에 포장합니다. 이때 이더넷 헤더의 목적지 MAC 주소는 앞서 알아낸 MAC 주소로 설정되며 출발지 MAC 주소는 라우터의 LAN 인터페이스 MAC 주소로 설정됩니다. 이후 이 프레임은 라우터의 로컬 네트워크에 있는 특정 컴퓨터나 장치로 전송됩니다.

특정 컴퓨터나 장치는 이더넷 헤더를 확인해서 목적지 MAC 주소를 확인한 뒤 자신에게 온 것이 맞는지 확인한 후에 이더넷 헤더를 제거하고 상위 레이어에 전달합니다. 상위 레이어의 장치에서는 아이피 헤더를 확인하여 목적지 아이피 주소를 확인한 뒤 자신에게 온 것이 맞는지 확인한 다음 아이피 헤더를 제거하고 다음 상위 레이어에 전달합니다. TCP 세그먼트를 전달받은 장치는 TCP 헤더를 확인해서 목적지 포트 번호를 확인한 뒤에 목적지 포트 번호를 사용하고 있는 웹 서버에 데이터(HTTP 요청)를 전달합니다.