Application Layer
- 통신하며 일련의 업무를 처리할 수 있도록 필요한 서비스를 제공
- 각각의 애플리케이션에 대응되는 데이터 전송을 담당
- 서비스를 요청할때 사용하는 애플리케이션(클라이언트)과 서비스를 제공하는 애플리케이션(서버)으로 분류
여기서는 응용계층에 세션계층과 표현계층을 포함해서 설명한다.
클라이언트 측 애플리케이션이 서버 측 애플리케이션과 통신하기 위해서 프로토콜을 사용합니다.
프로토콜 종류
HTTP(Hyper Text Transfer Protocol)
웹 서비스에서 클라이너트와 서버간에 데이터를 주고 받기위해 사용하는 프로토콜
FTP(File Transfer Protocol)
서버와 클라이언트간에 파일을 전송하기위한 프로토콜
- 21(제어 용도), 20번(전송 용도) 포트 사용
SMTP(Simple Mail Transfer Protocol)
메일을 송신하는데 사용하는 프로톹콜
- SMTP를 지원하는 서버 : SMTP 서버
- 25번 포트 사용
POP3(Post Office Protocol version 3)
메일을 수신하는데 사용하는 프로토콜
DNS
주소 이름을 해당하는 IP 주소로 변환해주는 시스템 (서비스)
이외에도 다양한 프로토콜이 존재
구조
Client-Server 구조
![](https://velog.velcdn.com/images/parksegun/post/a492527b-2e23-4095-8b5a-d65e7dc7bae9/image.png)
- Client
- 항상 켜져있지 않아도 됨
- 다중 Client가 Server에게 요청 가능
- Client들은 서로 소통하지않는다
- Server
- 항상 켜져있어야함
- 고정 IP 주소를 갖는다
- 스케일링을 위한 여러 개의 데이터 센터 운영
스케일링 : 클라이언트가 집중되는 경우 서버의 부하 발생을 완화시키기 위해서 서버의 개수를 늘리거나 스펙을 변경하는 방법
데이터 센터 : 컴퓨팅 시스템 및 관련 하드웨어 장비를 저장하는 물리적 위치
ex) 웹, 파일 전송, 전자 메일 등
Peer to Peer(P2P)
![](https://velog.velcdn.com/images/parksegun/post/073b497a-56fa-4581-92f9-03dd0be31913/image.png)
- 클라이언트 컴퓨터끼리 직접 통신
- 중앙 서버가 없고 데이터를 나눠 갖기에 안전하다
- 서버의 부하를 나눌 수 있음
ex) 비트토렌트, 스카이프 등
Socket
- 매번 요청-응답 구조로 통신하는 것이 비효율이라고 생각
- 채널을 항상 열어두고 지속적으로 소통
- 통신할때마다 보내는 사람, 받는 사람 기록하는 과정을 제거
WWW(World Wide Web)
- 거대한 인터넷 서버로 수많은 데이터를 갖고있음
- 언제 어디든 접근하여 정보를 주고 받는 멀티미디어 인터넷 서버
- HTML, URL, HTTP 기술이 사용
HTTP
- 80번 포트를 사용해서 통신
- 클라이언트에서 요청, 서버에서 응답
예시) (요청) GET/index.html HTTP/1.1 -> (응답) HTTP/1.1 200 OK
HTTP 버전 소개
- HTTP 1.0 : 요청을 보낼때마다 연결 끊기
- HTTP 1.1 : Keepalive 기능 추가
- 연결이 한번되면 데이터 교환을 마칠때 까지 유지
- Put, Delete 등 추가
- 순서대로 처리하기때문에 요청이 늦어지면 뒤가 밀림
- HTTP 2.0 :
- 멀티플렉싱 : 한 연결에 여러 요청과 응답가능
- 요청을 보낸 순서 상관 안함
DNS(Domain Name System)
- 사용자는 https://www.google.com(도메인 이름) URL을 검색
- DNS 서버가 해당 URL의 IP 주소를 알려줌(이름 해석)
- IP 주소로 접속
DNS서버가 도메인 주소를 모르는 경우가 있다 이럴때에는 또 다른 DNS 서버에게 질문을 던져서 얻어낸다 -> 수많은 DNS 서버들이 존재하고 계층적으로 연결되어있다
메일 서버 구조(SMTP, POP3)
클라이언트 측 메일 프로그램과 서버 측 메일 프로그램이 서로 통신 필요
메일 송수신 과정
- 메일 프로그램 1 로 부터 메일 서버1로 메일 전송(SMTP 사용)
- 메일 서버 1로부터 메일 서버 2 로 메일 전송(SMTP 사용)
- 메일 서버 2로부터 메일 프로그램 2로 메일 전송(POP3 사용)
수신 과정에서는 POP3 사용
- 사실 우리는 바로 다른 사용자에게 메일을 보내는 것이 아니고 메일 서버로 메일을 보내고 메일 서버가 다른 사용자에게 메일을 전달한다.
자세한 과정
자세한 과정을 살펴보면 메일을 송신하기전에 먼저 확인 응답을 주고 받는다
1. 세션 시작 통지
2. 송신측 메일 주소 통지
3. 수신측 메일 주소 통지
4. 메일 본문 전송 통지
5. 메일 본문 전송
6. 세션 종료를 통지
수신 과정
수신 과정에서도 송신과 비슷하게 확인 응답후 메일을 받는다
추가로 메일을 수신할때에는 메일 서버에 있는 메일 박스 라는 메일을 모아 놓는 곳에서 메일을 받아가야하고 이를 위해서 사용자 인증을 해줘야한다.
- 세션 시작
- 사용자 인증 통지
- 사용자를 확인했다는 응답 반환
- 자신의 메일이 있는지를 확인하고 서버는 '있다' 라는 응답 반환
- 사용자는 메일 전송 요청 하고 서버는 메일 박스에 있는 해당 이메일을 사용자에게 전송