DNS, TCP/IP 와 TLS(SSL) 핸드셰이크

taehyung·2024년 11월 20일

이번 포스팅에서는 브라우저의 도메인에 google.com 을 검색했을 때 우리가 어떤 과정을 통해 google.com 서버에서 데이터를 내려받는지에 대해 작성하려고 합니다! 즉, 웹의 전반적인 흐름을 알아보려고 해요.

DNS

DNS는 과거에도 포스팅한적이 있으나 이번 흐름에서 빠질 수 없는 존재이기 때문에 다시 한번 복기하는 마음으로 작성해봅니다.

DNS를 사용하는 이유

브라우저의 사용자들은 간단하게 google.com 이라는 도메인 이름으로 google.com 서버에 데이터를 요청합니다. 하지만 실제로 브라우저가 google.com 라는 문자를 통해 서버에 요청하지는 않습니다.

브라우저는 google.com 을 ip 주소로 변환하여 구글 서버에 요청을 하게 됩니다.

이 때 google.com 을 ip 주소로 변환하기 위해 DNS가 필요한것입니다!

즉, DNS는 google.com 으로 입력한 주소를 IP 주소로 변환하고 획득하는데에 그 목적이 있습니다.


DNS가 작동하는 원리

google.com 을 입력하면

첫 째, 브라우저는 기본적으로 접속했던 IP 주소 를 캐싱합니다. 만약 캐싱된 IP 가 없다면 OS( window, mac )로 요청이 전달됩니다.

둘 째, OS도 이전에 요청했던 IP 를 캐싱합니다. 여기에도 캐싱된 데이터가 없다면 로컬 DNS 서버를 탐색해달라는 요청을 ISP로 보내게 됩니다. ( 인터넷 제공자의 DNS 서버에 캐싱된 도메인이 있는지 확인 )

ISP( 인터넷 제공자 )는 KT,LG,SK 등 인터넷을 제공해주는 기업을 의미합니다.

셋 째, ISP의 DNS 서버에도 캐싱된 도메인이 없다면 인터넷 상의 루트 DNS 서버 -> TLD 서버 -> 네임서버로 요청이 재귀적으로 호출되어 요청한 도메인 google.com 과 일치하는 IP 주소를 반환합니다.

🥳야호! 이제 내 브라우저에서 요청한 google.com 의 IP 주소를 알게되었어요!

이렇듯 DNS의 존재는 내 브라우저가 요청한 도메인 ( google.com ) 의 IP 주소를 브라우저가 알게하는 과정입니다!


TCP/IP

하지만, DNS만으로는 문제가 해결되지 않습니다!

왜?

DNS는 "어디로 가야 하는지(IP 주소)"를 알려줄 뿐, 실제 데이터 전송은 하지 않기 때문이에요.

데이터를 주고받기 위해선 IP 주소를 기반으로 한 네트워크 연결이 필요합니다. 여기서 등장하는 게 바로 TCP/IP 통신입니다.

TCP/IP 통신 개요

TCP (Transmission Control Protocol)

데이터 전송의 신뢰성, 순서 보장, 에러 복구를 담당합니다.

IP (Internet Protocol)

데이터를 목적지까지 전달하는 일을 담당합니다.


1. 데이터 생성 ( 애플리케이션 계층 )

여기서 말하는 데이터란 HTTP 요청 메시지를 말합니다.

브라우저가 DNS를 통해 획득한 IP주소에 데이터를 요청하는 HTTP 메시지를 생성합니다.

요청 데이터: "GET / HTTP/1.1\nHost: naver.com\n\n"


2. TCP 연결 설정 ( 전송 계층 )

TCP가 데이터를 주고받기 전에 클라이언트와 서버의 연결을 설정합니다.
3way-handshake 과정을 동해 연결을 상태를 확인합니다.

3-Way Handshake
  • SYN (Synchronize):
    • 클라이언트가 서버에 연결 요청을 보냄.
      클라이언트 : "연결할 준비 되었나요?" (SYN 패킷 전송)
  • SYN-ACK (Acknowledgment):
    • 서버가 연결 가능하다는 신호를 보냄.
      서버 : "연결 가능. 당신은 준비되었나요?" (SYN-ACK 패킷 전송)
  • ACK (Acknowledgment)
    • 클라이언트가 확인 응답을 보냄.
      클라이언트 : "준비 완료!" (ACK 패킷 전송)

최근들어 서버가 SYN-ACK 사인을 보내면서 데이터를 같이 전달하는 경우가 있다고 이야기를 들었습니다. 정확한건 아니니 알아보면 좋을거같아요 :)

이 과정이 끝나면 클라이언트와 서버는 통신 경로를 확보하게 됩니다.


3. 데이터 전송 (전송 계층 & 인터넷 계층)

데이터는 TCP를 통해 여러 패킷 단위로 분할되고, IP를 통해 목적지로 전송됩니다.

TCP 역할: 신뢰성 보장

  • 데이터를 작은 세그먼트(패킷)로 나누고 각 세그먼트에 순서 번호를 붙임.
  • 전송된 패킷이 도착하면, 서버는 이를 확인(ACK)하며 클라이언트에 응답.

IP 역할: 라우팅과 전달

  • 각 패킷에 발신자 IP와 목적지 IP를 붙임.
  • IP는 데이터를 최적 경로로 라우팅하여 목적지에 전달.

4. 패킷 전달 및 재조립 (네트워크 계층 & 데이터 링크 계층)

패킷 전달 (라우팅):

패킷은 라우터 등을 거쳐 여러 네트워크 장비를 통해 목적지로 전달됩니다.
중간에 패킷 손실이 발생할 수 있음(TCP가 이를 감지하고 재전송).

패킷 재조립:

서버는 패킷이 도착한 순서를 확인(순서 번호)하고 데이터 재조립.
손실된 패킷은 재요청하여 다시 받음.


5. 데이터 처리 및 응답 (애플리케이션 계층)

서버는 클라이언트로부터 요청 데이터를 확인하고, 응답 데이터를 생성합니다.
예: HTML 문서를 생성하여 브라우저로 전송.


6. 데이터 수신 및 표시 (클라이언트 측)

데이터 수신

클라이언트는 서버에서 전달된 패킷을 받음.
TCP를 통해 패킷을 재조립하여 원래 데이터를 복구.

화면에 표시

브라우저가 받은 데이터를 렌더링하여 화면에 표시.


7. 연결 종료 (TCP 연결 해제)

데이터 전송이 완료되면, TCP 연결을 해제하기 위해 4-Way Handshake를 수행합니다.

4-Way Handshake
  • FIN: 클라이언트가 연결 종료를 요청.
  • ACK: 서버가 요청을 확인.
  • FIN: 서버도 연결 종료 요청.
  • ACK: 클라이언트가 종료를 확인.

요약

  1. 브라우저에 입력한 도메인의 IP 주소를 DNS를 통해 브라우저가 확인
  2. 데이터 송수신 전에 TCP를 통해 서버와 통신 사전준비를 한다. 3way handshake
  3. TCP가 전송할 데이터를 패킷 단위로 분할하고 순번을 매김, IP가 송수신지 주소를 패킷에 매김
  4. 서버가 데이터를 받고 손실되거나 섞인 데이터를 재요청하여 완전한 데이터를 수신함
  5. 서버가 응답 데이터를 생성하고 브라우저에게 보냄 ( 3번 과정 )
  6. 클라이언트는 응답 데이터를 받고 4번 과정을 진행하여 완전한 데이터를 수신
  7. 연결 종료
  8. 이후는 브라우저 렌더링 파이프라인

여기까지가 기본적으로 클라이언트와 서버간에 데이터를 주고받는 방식입니다. 여기에 통신의 보안을 위해 TLS 암호화를 이용해 한단계 더 거치는것이 HTTPS 통신입니다.


브라우저의 인증과정과 TLS

HTTPS 통신을 시작하기전에 브라우저가 어떻게 HTTPS 통신을 할 수 있는지 알아보겠습니다.

인증서 발급받기

웹사이트를 제공하는 서버는 우선 CA라는 기관에 인증을 받아야합니다.

  • 인증서를 발급받아야 HTTPS 통신을 할 수 있다. ( TLS 핸드셰이크 )

중요 포인트

위 과정을 통해 웹사이트를 제공하는 서버는 인증서, 브라우저는 CA 기관의 공개키를 획득하게 됩니다.

  • 클라이언트 ( 브라우저 ) : CA 기관의 공개키를 획득
  • 서버 ( 웹 사이트 ) : CA 기관의 인증서를 획득

TLS(Transport Layer Security) handshake

TLS handshake 는 브라우저가 서버에 요청하기전 서버가 http 프로토콜을 사용하는지 https 프로토콜을 사용하는지에 따라 발생 할수도 안할수도 있습니다.

https 프로토콜을 사용하는 서버에 데이터를 요청하게 되면 TCP/IP 단계에서 데이터를 전송하지 않고 TLS handshake 가 종료된 이후에 데이터를 전송합니다.

즉 TCP 3way-handshake 로 서버와 클라이언트를 연결하고 그 이후에 TLS handshake 서로 데이터를 암호화 하는 방식에 대해 합의하게 됩니다.

이 과정이 완료되었다면 암호화된 데이터를 송수신하고 그 데이터를 복호화해서 사용하게 됩니다.

TLS handshake는 암호화된 데이터를 송수신하는데에 그 목적이 있습니다.

TLS handshake 개요

웹사이트를 제공하는 서버가 https 통신을한다면 TLS 핸드셰이크가 시작됩니다. ( CA의 인증서를 보유하고 있다는 뜻 )

https://www.domain.com 처럼 프로토콜이 https 로 시작하는 웹사이트 입니다.

위에 설명처럼 CA의 인증을 받은 웹사이트는 기본적으로 이렇게 생겼습니다.

TLS 핸드셰이크는 위 과정을 거쳐 클라이언트와 서버가 서로를 신뢰하고 앞으로 통신을 이어나감에 있어서 안전하게 데이터를 전송할 수 있게 해줍니다.

TCP/IP와 TLS 핸드셰이크 뜯어보기

naver.com 과 TCP/IP, TLS 핸드셰이크 통신한 내역입니다. 와이어샤크라는 어플리케이션을 통해 패킷단위로 전송되는 데이터를 확인해볼 수 있습니다.

profile
Front End

0개의 댓글