DNS
- 사람이 기억하기 쉬운 도메인 이름과 호스트의 주소를 매핑
네트워크 주소
- MAC 주소 : NIC 의 주소
- IP 주소
DNS server
- 계층적 도메인 구조
서브 도메인( 하위 도메인 )
- example.com
blog
.example.comshop
.example.comsupport
.example.comforum
.example.com
- 도메인의 일부인 도메인
각 도메인을 담당하는 도메인 서버
- ROOT 네임 서버
- TLD(Top-Level Domain) 서버의 위치 정보를 포함
- TLD 서버
- Top-Level Domain
- Authoritative DNS 서버 : 찾고자 하는 도메인의 IP주소를 저장하는 최종 서버
- local DNS 서버 : 클라이언트가 가장 먼저 찾는 DNS 서버 (DNS Resolver)
local DNS 서버 주소
- 명시적 설정
- Public DNS
- 자동 설정
- ISP
DNS 서버 동작
- 반복적 질의
- 재귀적 질의
DNS 에 저장 된 정보
- DNS 레코드( 자원 레코드 )
- A 레코드 : 도메인에 대한 IPv4 주소
- 도메인에 대한 1:1 매칭
- AAAA 레코드 : 도메인에 대한 IPv6 주소
- 도메인에 대한 1:1 매칭
- CNAME 레코드
- 하나의 도메인이나 하위 도메인을 다른 도메인으로 전달
- IP 주소를 제공하지 않음
- MX 레코드
- 이메일을 이메일 서버로 전송
- NS 레코드
- 네임 서버 주소
- SOA 레코드
- 도메인에 대한 관리자 정보
- TXT 레코드
- 관리자가 레코드에 텍스트 메모를 저장할 수 있음
- 이 레코드는 종종 이메일 보안에 사용됨
- SRV 레코드
- 특정 서비스에 대한 포트를 지정
- PTR 레코드
- 리버스 조회에서 도메인 이름을 제공함
DNS 캐시
- TTL 기간동안 DNS 저장
자원과 자원의 식별
네트워크 상에서 자원
이란?
- 네트워크로 주고 받을 수 있는 모든 정보
- file,Image,HTML,XML,JSON
URI
- Uniform Resource Identifier
- 자원을 식별 할 수 있는 문자열
URI 분류
- URL
- Uniform Resource Locator
- 위치 기반 자원 식별 ( Locator )
- URN
- Uniform Resource Name
- 이름 기반 자원 식별 ( Name )
URL
- scheme
- https://
- ftp:
- http:
- 일반적으로 프로토콜 이름
- authority
- 사용자 이름을 이용한 인증 가능 - 생략 가능
- 호스트 이름 ( 도메인 이름 혹은 IP주소 )
- 포트 번호 - 생략 가능
[userinfo "@"] host [":"port]
- path
- query
- key:value 형태로 서버에 전달할 문자 형태의 파라미터
- ?로 시작 , & ( 혹은 ; )로 다수의 query 구분
- @https://www.google.com/search`?q=fastcampus&hl=ko`
- fragment
- 자원의 조각(fragment)를 가리키는 데에 사용(
#
으로 구분) - 서버에 전달되는 정보는 아님
- @https://docs.python.org/ko/dev/howto/sockets.html`#creating-a-socket`
- @https://docs.python.org/ko/dev/howto/sockets.html`#ipc`
- 자원의 조각(fragment)를 가리키는 데에 사용(
웹 브라우저의 개발자 도구의 네트워크 탭에서 확인 할 수 있음
- Window
- F12
- Mac
- command + option + i
웹 서버와 웹 어플리케이션 서버
서버 : 대답하는 대상 ( Response ) 클라이언트 : 요청하는 대상 ( Request )
서버가 응답해야 하는 자원
-
정적인 자원 : 언제 / 어디서 / 누가 봐도 변하지 않는 정보 (e.g. HTML , Image …)
-
동적인 자원 : 언제 / 어디서 / 누가 보는지에 따라 변할 수 있는 정보
- 사용자 이름 , DB
-
웹 서버
- 정적인 자원을 응답
- APACH , MS IIS , NGINX
-
웹 어플리케이션 서버
- 동적인 정보를 생성해 응답
- Apache Tomcat , JBoss , IBM WebSphere
웹서버 , 웹 어플리케이션 서버를 사용할 때 장점
- 과부하 방지
- 정적 자원 , 동적 자원에 따라 다른 서버에 할당
- 보안 상의 이점
- 웹서버를 거쳐서 어플리케이션 서버에 접속할 때 보안이 유리?
- 여러 웹 어플리케이션 서버 연동 용이
HTTP의 특성
HTTP의 기본 특성
- 요청-응답 기반 클라이언트-서버 구조 프로토콜
- HTTP 클라이언트 ( HTTP 요청메세지 )
- HTTP 서버 ( HTTP 응답 메세지 )
- 서버 간에도 HTTP 메세지를 주고 받을 수 있음
- 미디어-독립적 프로토콜
- 어떤 형태의 데이터도 HTTP 메세지를 보낼 수 있음
- HTML, IMAGE , JSON , XML , FILE , etc
- 비연결성 프로토콜
- HTTP 1.0 , HTTP 1.1 , HTTP 2.0 은 TCP 기반
- TCP 는 연결성 프로토콜
- 현재 HTTP는 비연결성 프로토콜
- 이유
- 다수의 클라이언트가 연결을 시도할 경우
- 연결을 유지하는 동안 서버의 자원 소모가 너무 큼
- 스테이트리스 프로토콜
- 스테이트리스 : 클라이언트의 상태를 기억하지 않음
- 스테이트풀 프로토콜일 경우
- 클라이언트는 한 서버에 종속됨
- 여러 요청을 보내야 할 경우 한 서버에만 요청해야 함
- 서버의 IP가 바뀌거나
- 요청을 보낸 서버에 장애가 생기거나
- 서버가 여러대 있다면 이런 문제를 해결 할 수 없음
- 위의 이유로 한 서버에 종속될 필요가 없어짐
- 여러번 요청을 보내야 할 경우 여러 서버에 요청할 수 있음
- 서버 확장이 용이해임
- 지속 연결 프로토콜
- 지속 연결 (Keep-Alive)
- 하나의 연결을 사용해 여러 개의 HTTP 요청/응답 주고 받음
HTTP 버전별 특성
-
HTTP 0.9
- 단일한 요청 방법( GET 메소드 ), 비지속 연결 , 별다른 기능X
-
HTTP 1.0
- 다양한 요청 방법과 헤더 추가
-
HTTP 1.1
- 지속 연결 기능 추가
-
HTTP 2.0
- 요청 순서대로 응답을 반환할 필요 없음, 헤더 압축
-
HTTP 3.0
- UDP 기반 프로토콜인 QUIC로 변경
-
헤더 정보 예시