오늘은 OSI 7Layer의 최상위 계층인, 응용 계층, 영어로는 애플리케이션 [Application] 계층이라고 한다. 애플리케이션? 우리가 아는 핸드폰에 다운로드 받는 그 애플리케이션과 같은 이야기인가? 맞다. 바로 그 이야기다. 우리는 친구와 연락을 하고 싶으면 카카오톡 애플리케이션을 이용하여 친구와 메시지를 주고 받는다. 즉 애플리케이션 계층은 일반 사용자와 가장 밀접하게 연관되어 있는 계층이며 개발자에 의해 개발된다.
애플리케이션 계층에서 자주 사용하는 통신 구조는 대표적으로 두가지가 있다. 클라이언트-서버 구조와 P2P 구조다.
클라이언트-서버 구조
예를 먼저 들어보자. 내가 네이버에 접속해서 "대전 맛집"를 검색하면 네이버는 대전 맛집 리스트를 보여준다. 이때 나는 정보를 요청하는 쪽은 클라이언트고 정보를 보내주는 네이버는 서버가 된다. 이 관계는 절대 변하지 않는다. 이처럼 한쪽은 정보를 요청하기만 하고 한쪽은 정보를 주기만하는 이러한 관계를 클라이언트-서버 관계라고 한다.
우리가 흔히 사용하는 웹 엔진, 스트리밍 서비스, 메일 서비스, 원격 로그인 등이 클라이언트-서버 구조다.
P2P [Peer to Peer] 구조
P2P의 가장 좋은 예시는 블루투스다. 우리는 블루투스를 통해 친구와 연결을 생성하여 사진을 주고 받을 수 있다. 이때 내 핸드폰에 있는 사진을 친구에게 보내줄 수도 있지만, 친구 또한 친구 핸드폰 사진을 나에게 보내줄 수 있다. 즉, 나는 정보를 요청할 때도 있고 정보를 제공할 때도 있다. 이처럼 정보 요청자/제공자가 따로 구분된 것이 아니라 언제든지, 누구나 요청자/제공자가 될 수 있는 방식을 P2P 방식이라고 한다.
누군가 A라는 파일을 요청했다. 이때 클라이언트-서버 구조에서 해당 파일을 전송할 수 있는 것은 오직 "서버" 뿐이다. 그러나 P2P에선 파일 A를 가지고 있는 그 누구나 서버가 되어 파일을 전송할 수 있다. 따라서 P2P는 클라이언트-서버 구조보다 통신속도와 확장성[Scalability] 측면에서 우수하다.
우리가 이용하고 있는 P2P의 가장 좋은 예시엔 토렌트도 존재한다. 토렌트에서 내가 파일 A 다운로드를 요청한다면, 나는 A를 다운로드를 받고 있음과 동시에 파일 A를 요청하는 또 다른 사용자에게 A를 전송하는 구조이다.
클라이언트-서버 | P2P |
서버는 항상 켜져있기[ON] 때문에 클라이언트는 언제든지 통신할 수 있다. | 임시적으로 연결된 호스트 쌍이 서로 통신한다. |
서버는 잘 알려진 고정된 IP/도메인 주소를 갖는다. (예: naver.com) | 자가 확장성을 가진다. 각 피어들이 파일을 요구함으로써 작업 부하를 만들어내지만 각 피어는 파일을 또 다른 피어들에게 분배함으로써 시스템에 서비스 능력을 추가한다. |
웹, 전자메일, | 토렌트, 블루투스 |
애플리케이션 계층은 계층 자체에 대한 이해도보다는 해당 계층에서 동작하는 서비스나 프로토콜을 이해하는 것이 더욱 중요하다. 해당 계층을 대표하는 서비스 및 프로토콜은 다음과 같다.
- 웹과 HTTP (웹 쿠키와 웹 캐시)
- SMTP [Simple Mail Transfer Protocol]
- DNS [Domain Name System]
- CDN [Content Distribution Network]
- Dash [Dynamic Adaptive Streaming Over HTTP]
'전공 > 네트워크' 카테고리의 다른 글
애플리케이션 계층 - 웹의 모든 것(HTTP, Cookie, Cash, Proxy) (0) | 2020.12.27 |
---|---|
전송 계층 - TCP 의 모든 것 #2. 흐름제어, ARQ, Sliding Window (0) | 2020.12.19 |
전송 계층 - TCP 의 모든 것 (#1. 핸드세이킹, 혼잡제어) (0) | 2020.10.29 |
전송 계층 - UDP와 TCP의 모든 것 (0) | 2020.10.29 |
전송 계층 - 전송 계층 개요 #1. 다중화, 포트, 소켓 (0) | 2020.10.29 |