웹 통신의 큰 흐름

1. URL에 도메인 네임을 입력한다

브라우저 내부에 결정된 규칙에 따라 URL에 입력된 값을 파싱하여 의미를 조사한다

ProtocolHost NameDomain NameDirectory PathDocument

http://

www.

naver.com

/seoul/nowon/

hjoon.html

2. 브라우저는 캐싱된 DNS response에서 도메인 네임과 대응되는 IP 주소의 유무를 확인한다

브라우저는 DNS response를 4가지 캐시에서 확인한다.

  • 이유 : 네트워크 트래픽을 조절하기 위해서

  1. 브라우저 캐시 : 브라우저에서 일정 기간동안 DNS response를 캐싱하는 곳

  2. OS 캐시 : 브라우저 캐시에서 매칭되는 IP 주소를 찾지 못하면, 브라우저는 시스템콜을 통해 OS 캐시에 접근

  3. 라우터 캐시 : OS 캐시에서도 찾지 못하면, 라우터 캐시에서 찾는다

  4. ISP 캐시 : 라우터 캐시에서도 찾지 못하면 ISP 캐시에서 찾는다.

3. 4가지 DNS 캐시에서 IP 주소를 찾지 못하면, ISP의 DNS 서버가 DNS 쿼리를 날려 IP 주소를 얻는다

DNS query(DNS Request): DNS Client에서 DNS 서버로 전송되는 쿼리이다.

ISP의 DNS 서버 : 인터넷에서 여러 DNS 서버로부터 호스트 네임에 대한 IP 주소를 찾아준다.

  • ISP의 DNS 서버 = DNS Recursor 또는 Local DNS 서버

  • 다른 DNS 서버들 = Name Server

Recursive Search 과정 (www.google.com)

  1. DNS RecursorRoot DNS Server(.)에 쿼리를 날린다.

  2. Root DNS Server(.)는 호스트 네임에 대한 IP 주소를 모르기 때문에 Top-Level DNS Server(.com) 로 Redirect한다.

  3. Top-Level DNS Server(.com)도 모르기 때문에 Second-Level DNS Server(google.com)로 Redirect한다.

  4. Second-Level DNS Server(google.com) 는 www.google.com의 DNS 레코드에서 www.google.com과 매칭되는 IP 주소를 찾아 DNS Recursor에게 반환한다.

  5. DNS Recursor 는 찾은 IP 주소를 브라우저로 전송한다.

4. 브라우저는 웹 서버와 TCP connection을 수립한다

TCP 3-way handshake

  • 서버와 클라이언트 사이에 가상 회선을 수립하는 단계이다.

  • 클라이언트는 서버에게 request를 전송할 수 있는지 서버는 클라이언트에게 response를 전송할 수 있는지 확인하는 단계이다.

  1. 클라이언트는 서버에게 접속을 요청하는 SYN(x) 패킷을 전송한다

    • SYN(x) 패킷이란 TCP Header의 SYN flag bit를 1로 설정되어 있고, TCP Header의 Sequence Number 필드에 임의의 난수 x가 설정된 패킷이다.

  2. 서버는 SYN(x) 패킷에 대한 응답으로 ACK(x+1) 패킷과 서버 자신도 클라이언트와의 연결을 요청하는 의미로 SYN(y) 패킷을 보낸다

    • 서버는 클라이언트의 SYN(x) 패킷 속 Sequence Number에 1을 더한 수를 ACK 패킷의 Sequence Number로 설정한 ACK(x+1)를 클라이언트에게 보낸다.

  3. 클라이언트는 ACK(x+1), SYN(y) 패킷에 대한 응답으로 ACK(y+1) 패킷을 서버로 보낸다. 서버는 이를 받고 TCP connection 이 수립된다.

5. 브라우저가 웹 서버로 HTTP Request Message를 보내고, 웹 서버는 브라우저에게 HTTP Response Message를 보낸다

브라우저 → 웹 서버로 HTTP Request Message를 보내는 과정

  • 응용 계층부터 물리 계층까지 데이터에 각 계층의 헤더를 붙이는 캡슐화 가 일어난다.(TCP/IP updated 계층 사용)

    1. 응용 계층에서 데이터가 만들어지고 HTTP 헤더가 붙음

      • HTTP 헤더 + 데이터 = 메시지

    2. 전송 계층에서 데이터에 TCP 또는 UDP 헤더가 붙음

      • TCP 헤더 + HTTP 헤더 + 데이터 = 세그먼트

      • TCP 헤더에 출발지 포트번호, 목적지 포트번호 정보가 있다

    3. 네트워크 계층에서 데이터(세그먼트)에 IP 헤더가 붙음

      • IP 헤더 + TCP 헤더 + HTTP 헤더 + 데이터 = 패킷

      • IP 헤더에 출발지 IP 주소, 목적지 IP 주소 정보가 있다.

    4. 데이터링크 계층에서 데이터(패킷)에 Ethernet 헤더가 붙음

      • Ethernet 헤더 + IP 헤더 + TCP 헤더 + HTTP 헤더 + 데이터 = 프레임

      • Ethernet 헤더에 목적지로 가기 위해 처음 거쳐야 할 라우터의 MAC 주소 정보가 있다.

    5. 물리 계층에서 비트 데이터는 LAN 카드라는 장비를 거쳐 전기신호로 변환됨. 그리고 케이블과 물리적으로 연결된 스위치라는 장비로 전달됨

스위치 → 출발지 라우터

  • 스위치는 데이터(프레임)를 1계층 → 2계층 순서로 역캡슐화한다

    1. 2계층까지 데이터(프레임)을 역캡슐화한다

    2. Ethernet 헤더에서 목적지 라우터의 MAC 주소 정보를 알아낸다.

    3. MAC 주소 테이블을 이용하여 데이터(프레임)를 보낼 포트를 조사한다

    4. 다시 캡슐화하여 데이터(프레임)을 전기 신호로 변환하고 목적지로 가기 위해 처음 거쳐야 할 라우터로 전송한다

라우팅 과정

  • 데이터(프레임)가 라우터에 도착하면 1 → 2 → 3계층 순서로 역캡슐화가 진행된다

    1. 2계층까지 데이터(프레임)을 역캡슐화한다

    2. Ethernet 헤더속 목적지 라우터의 MAC 주소해당 라우터의 MAC 주소를 비교한다

    3. 같다면 3계층까지 역캡슐화한다

    4. IP 헤더속 목적지 IP 주소를 알아내고, 해당 라우터의 라우팅 테이블을 기반으로 목적지 IP까지의 경로를 계산한다(라우팅)

      • 출발지 IP 주소가 사설IP 주소라면, IP 헤더속 출발지 IP주소를 공인IP주소로 수정한다

    5. Ethernet 헤더의 목적지 라우터의 MAC 주소를 그 다음 hop의 라우터의 MAC 주소로 수정한다

    6. 데이터를 캡슐화하여 다음 hop의 라우터로 전송한다

마지막 라우터에 도착

  • 마지막 라우터의 라우팅 테이블을 통해 목적지 IP 주소까지의 경로를 알 수 있다.

    1. 3계층까지 역캡슐화하여 IP 헤더의 출발지 IP 주소해당 라우터 내부 IP 주소로 수정한다.

    2. 2계층의 Ethernet 헤더의 MAC 주소서버측 스위치 주소로 수정한다

    3. 데이터를 캡슐화하여 서버측 스위치로 전송한다

서버 측의 데이터 처리

  1. 스위치는 1계층 → 2계층 순서로 역캡슐화하여 Ethernet 헤더의 MAC 주소가 자신의 것과 동일한지 확인한다. 동일하면 데이터를 캡슐화하고 전기신호로 변환하여 구글 서버로 전달한다.

  2. 구글 서버의 물리 계층에서 전기 신호비트 데이터로 변환한다

  3. 데이터링크 계층에서 역캡슐화하여 Ethernet 헤더의 목적지 MAC 주소구글 서버의 MAC 주소를 비교한다. 같다면 Ethernet 헤더 & 트레일러를 분리하고 네트워크 계층으로 전달한다

  4. 네트워크 계층에서 IP 헤더의 목적지 IP 주소구글 서버의 IP 주소를 비교한다. 같다면 전송 계층으로 전달한다

  5. 전송 계층에서 TCP 헤더의 목적지 포트번호에 해당하는 포트를 사용하는 어플리케이션을 확인한다. 만약 데이터에 오류가 있다면 송신측에 재전송을 요청한다.

  6. 응용 계층에서 HTTP Request Message를 받고 HTTP Response Message를 생성하여 클라이언트에게 전송한다.

웹 서버 → 브라우저로 HTTP Response Message를 보내는 과정은 위와 역순으로 진행된다

Last updated