Application Layer ( 응용 계층 )
- 최종 목적지로, 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행 ex ) web, email 등
- 전송 단위 : 메세지 (message)
HTTP (Hypertext Transfer Protocol)
: 웹 상에서 클라이언트는 HTTP프로토콜을 이용하여
웹에 있는 object들을 볼 수 있고 필요한 동작들을 요청할 수 있음
- Application layer protocol, TCP 이용 (port# 80)
- "HTTP is stateless" : request가 오면 response하고 끝! (서버는 클라이언트의 예전 정보 기억 X)
💡 HTTP 통신
1) 클라이언트는 서버에 대한 TCP connection(port 80)을 열어 놓음
2) 서버는 클라이언트로부터 TCP커넥션을 받음
3) 웹(서버)과 브라우저(클라이언트)는 HTTP메세지를 교환함
4) TCP커넥션을 닫음
💡 HTTP 특성
비연결성 (Connectionless)
: 클라이언트와 서버가 한 번 연결을 맺은 후,
클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질
무상태 (Stateless)
: Connectionless로 인해 서버가 클라이언트를 식별할 수 없는 것
💡그렇다면, HTTP 프로토콜은 왜 한 번 맺은 연결을 끊어 버릴까?
⇒ HTTP는 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계 됨
⇒ 서버에서 다수의 클라이언트와 연결을 계속 유지하는 경우, 많은 리소스 발생
⇒ 연결을 유지하기 위한 리소스를 줄이면 더 많은 연결 가능
💡 HTTP connections
1) Non-persistent HTTP
: 하나의 object 당 한 번의 TCP connection 수립
→ response time : 2RTT + file transmission time
2) Persistent HTTP
: 한 번의 TCP connection을 통해 여러개의 object를 얻어옴
(서버는 response를 보낸 이후에도 connection을 열어 놓음) `keep-alive`
HTTP request message
HTTP response message
💡 HTTP response status codes
200 OK : 클라이언트 요청이 정상 수행된 경우 (응답에 대한 메시지가 포함)
301 Moved Permanently : 요청된 리소스가 영구적으로 이동 페이지로 이동됨
400 Bad Request : 클라이언트 요청이 부적절한 경우 (부적절한 이유를 응답 Body에 넣어야 함)
404 Not Found : 클라이언트가 요청한 리소스가 존재하지 않는 경우
505 HTTP Version Not Supported
Cookies
- 웹사이트 접속시 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 작은 텍스트 파일
- 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장
- 웹사이트는 쿠키를 통해 접속자의 장치 인식
- 사용자의 정보를 기억할 수 있는 수단 → HTTP의 단점(stateless)을 해결
- ex) 자동 로그인, 최근 검색 리스트
💡 쿠키 생성 과정
1. 클라이언트가 서버에 정보 요청
2. 서버는 쿠키 생성
3. 생성한 쿠키를 요청한 정보(HTTP 헤더)와 함께 돌려 보냄
4. 클라이언트는 로컬에 쿠키 저장
5. 서버에 재접속 시 이미 쿠키가 있는 경우, 서버에 쿠키 전달
6. 업데이트할 정보가 있다면, 서버는 해당 쿠키를 요청한 정보와 함께 돌려 보냄
💡 쿠키를 사용하는 이유
HTTP
→ 리소스를 아끼기 위해 클라이언트와 서버가 연결되지 않음 (비연결성, Connectionless)
→ 비용을줄이기 위해 클라이언트의 상태를 가지고 있지 않고,
클라이언트가 요청 시 모든 정보를 담아 보냄 (무상태, Stateless )
⇒ 사용자의 정보를 저장할 수 없기 때문에,
웹사이트는 사용자를 구별할 수 없고, 사용자는 매번 번거로운 인증을 진행해야 했음
⇒ 쿠키는 사용자의 정보를 기억할 수 있는 수단 = HTTP의 단점 해결
💡 쿠키의 장단점
장점 : 번거로운 작업(ex 로그인)의 편리화, 사용자 맞춤 설정(ex 다크모드) 가능
단점 : 개인 정보를 침해 당할 소지가 있음 (사용자의 동의 필요)
💡 쿠키에는 일반적으로 만료일 존재
세션 쿠키 : 세션 동안만 저장 (브라우저를 닫는 경우 자동으로 삭제)
지속적 쿠키 : 수동으로 삭제되기 전까지 남아있는 등 더 오랜 기간 컴퓨터에 저장
Web caches (proxy server)
- 클라이언트와 서버 사이에 위치
- 클라이언트가 서버에 직접 web object를 요청하는게 아니라 web cache를 통해 요청
- 요청하는 object가 cache 내에 있는 경우, cache에서 처리
- 요청하는 object가 cache 내에 없는 경우, server에 request
- 클라이언트 입장에서는 응답속도가 빨라짐
- 서버 입장에서는 과부하가 줄어듦
- 네트워크 소유자, 관리자 입장에서는 트래픽이 줄어 회선 사용료 감소
- 큰 비용 없이 성능 개선 가능
💡 proxy server가 필요한 이유
1. 보안 : 서버의 IP를 숨기는 것 가능 (프록시 서버 IP만 알면 됨)
2. 캐시 : 이전에 했던 요청을 proxy server에 저장해두기 때문에 속도 향상
3. 우회 : 어느 곳에서 접속한지 숨길 수 있음 (역기능이기도 함)
💡 conditional GET
: web cache가 자신이 가지고 있는 copy본이 최신 버전인지 확인할 때 유용하게 사용 가능
SMTP
- E-mail 전송을 위한 프로토콜
- 신뢰성 있는 메시지 전송을 위해 TCP를 사용 (port# 25)
- 아스키코드 형태로 메세지 전송
💡 HTTP vs SMTP
- (클라이언트 입장) HTTP가 pull이라면, SMTP는 push
- HTTP는 각각의 object들이 캡슐화되어 그차체의 메시지로 보내지는 반면,
SMTP는 여러개의 object들이 여러개의 메시지 형태로 보내짐
DNS (Domain Name System)
- 웹사이트에 접속 할 때 외우기 어려운 IP 주소 대신 도메인 이름을 사용
- 도메인 ↔ IP 주소 과정 필요
- 분산된 계층형 데이터베이스
💡 Root DNS Server : TLD 서버에 대한 정보만 가지고 있음
💡 Top-Level Domain (TLD) servers : 루트 노드와 인접해 있는 최상위 도메인
💡 authoritative DNS servers : 최종적인 hostname과 IP 주소를 보유
💡 Local DNS name servers
- cache 역할
- 오늘 날 거의 모든 네트워크에서 사용
💡 DNS records
- 총 4가지 필드 (name, value, type, ttl)
* ttl : entry 유효 시간
- type에 따라 name과 value의 의미가 정해짐
'CS > 네트워크' 카테고리의 다른 글
Transport Layer (전송 계층) (0) | 2023.02.27 |
---|---|
OSI 7 Layer (0) | 2023.02.08 |