작동 과정
1. DNS 서버에서 ip를 조회하기 전에, 캐시 계층 확인
- Browser cache : 이전에 방문했던 사이트의 기록을 일정 시간동안 보관
- OS cache : 브라우저에 없다면, system call을 통해 OS가 저장하는 캐시 확인
- Router cache : 컴퓨터에 없다면, 라우터와 통신해 확인
- ISP cache : ISP 자체 DNS 서버 확인
2. 캐시에서 못 찾은 경우, DNS 서버에서 ip 조회
- DNS에서는 도메인을 온점을 기준으로 레벨 별로 나눠 계층적으로 관리한다.
- 각 레벨을 담당하는 네임 서버는 자신의 하위 레벨의 도메인에 대한 네임 서버의 주소 밖에 모른다. 예) A는 B를, B는 C를, C는 D를 알고 있다
DNS 서버에서 IP 찾는 과정
- 브라우저가 로컬 DNS 서버에게
www.google.com
을 질의 후 없다면
- Root 네임 서버에
www.google.com
을 질의해 .com
네임 서버의 ip 주소를 받는다.
- com 네임 서버에
www.google.com
을 질의해 google.com
네임 서버의 ip 주소를 받는다.
- google.com 네임 서버에
www.google.com
을 질의해 www.google.com
의 ip주소를 로컬 DNS 서버에게 전송한다.
- 로컬 DNS 서버는 IP 주소를 캐싱하고 브라우저에게 응답한다.
위와 같이 로컬 DNS 서버가 네임 서버에게 질의하며 IP 주소를 찾는 과정을 재귀적 질의(Recursive Query)라고 한다.
3. 브라우저가 서버와 TCP/IP 연결
- ip 주소에 위치한 서버에 요청 메세지를 보내기 위해 TCP 연결을 한다. TCP는 3-way-handshake로 연결을 설정한다.
- 3-way-handshake는 클라이언트와 서버가
SYN (동기화)
, ACK (확인)
메세지를 교환하여 연결을 설정하는 3단계 프로세스이다.
3-way-handshake
- 클라이언트가 서버에게 SYN 패킷을 보내 새 연결이 가능한지 묻는다.
- 서버에 새 연결이 가능한 열린 포트가 있다면 SYN 패킷의 ACK로 응답하여 SYN/ACK 패킷을 전송한다.
- 클라이언트는 SYN/ACK 패킷을 받고 서버로 ACK 패킷을 전송한다.
- IP 프로토콜이 IP 주소(최종 목적지)를 결정하고, 라우팅(경로 결정)한다.
4. 브라우저가 HTTP 요청 메세지를 생성하고 서버로 HTTP 요청
- GET 요청으로
www.google.com
웹 페이지를 요청한다.
- 요청 시 자료나 form을 제출하는 경우 POST 요청을 사용할 수 있다.
5. 서버가 요청을 처리 후 브라우저에게 응답을 전달
- 서버에 있는 웹 서버는 브라우저에게 받은 요청을 요청 핸들러에게 전달해 요청을 읽고 응답을 생성한다.
- 요청 핸들러는 요청, 요청 헤더, 쿠키를 읽어 요청 내용을 확인한다.
- 응답은 특정 형식을 사용한다. (JSON, XML, HTML)
- 서버의 응답에는 요청한 웹 페이지, 상태 코드, 압축 유형, 페이지 캐시 방법, 설정할 쿠키, 개인 정보 등이 포함된다.
HTTP 상태 코드
- 1xx: 조건부 응답
- 2xx: 성공
- 3xx: 리다이렉션
- 4xx: 클라이언트 에러
- 5xx: 서버 에러
6. 브라우저에 HTML 콘텐츠가 표시
브라우저는 단계적으로 HTML 콘텐츠를 표시한다.
- DOM(Document Object Model) 트리 구축을 위해 HTML 파싱
- 렌더 트리 구축
- 렌더 트리 배치
- 렌더 트리 출력
DNS(Domain Name System)
도메인 이름과 IP 주소를 서로 변환하는 역할
사용 이유
길고 복잡한 ip 주소를 외울 수 없어 문자 주소를 사용하기 위해
역할
- 자신의 IP가 무엇인지 알려주고, 해당 IP가 example.com 이라는 주소를 갖도록 요청
- example.com이라는 도메인 이름이 특정 ip임을 기억
구성 요소
도메인 네임 스페이스
: 최상위에 루트 DNS 서버가 존재하고, 하위에 모든 노드가 계층 구조로 구성
네임 서버
: 도메인 이름을 IP 주소로 변환
리졸버
: DNS 클라이언트 요청을 네임 서버로 전달하고 네임 서버에게 도메인 이름과 IP 주소를 받아 클라이언트에게 제공
Domain
ip 주소를 문자열로 표현한 네트워크 호스트 이름
IP
인터넷에 연결된 장치들을 식별하고 통신하기 위해 사용하는 특수한 번호
TCP/IP
인터넷 상에서 데이터를 메세지 형태로 전달하기 위해 IP와 함께 사용되는 프로토콜
특징
- 연결 지향
- 순서 유지
- 속도 느림
- 파일 전송에 사용
- 흐름 제어 (패킷 송수신 속도 조절)
- 혼잡 제어 (패킷이 몰리지 않도록 조금씩 전송)
- 3-way Handshake 연결 설정
- 4-way Handshake 연결 해제
IP
- 인터넷에 연결된 장치들을 식별하고 통신하기 위해 사용하는 특수한 번호
- 패킷을 받아서 주소를 해석하고 경로를 결정하여 다음 호스트로 전송하는 역할
HTTP
- 인터넷에서 데이터를 주고 받을 수 있는 프로토콜
- 브라우저와 서버 간에 데이터를 주고 받기 위한 방식
특징
Stateless 프로토콜
: 상태가 없다 = 데이터 요청이 독립적이다.
- port 80번
요청 메서드
GET
: 요청
POST
: 생성
PUT
: 전체 수정
PATCH
: 부분 수정
DELETE
: 삭제