애플리케이션 계층은 하위 계층인 transport layer와 연관이 있다.
애플리케이션 계층에는 HTTP, FTP, SMTP, DNS등 다양한 프로토콜이 존재한다. 프로토콜은 서비스에 따라서 정해지며 새로운 서비스에 맞는 프로토콜을 우리가 만들 수 있다.
<aside> 👨🏻💻 네트워크 애플리케이션의 원리
</aside>
네트워크 애플리케이션 개발의 중심은 다른 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것이다.
따라서 우리가 새로운 애플리케이션을 개발할 때는 여러 종단 시스템에서 실행되는 소프트웨어를 작성할 필요가 있다.
중요한 것은 우리가 라우터나 링크 계층 스위치와 같이 네트워크 코어 장비에서 실행되는 소프트웨어를 작성할 필요가 없다는 것이다. → 종단 시스템에만 애플리케이션 소프트웨어가 존재한다.
네트워크 애플리케이션 구조
네트워크 관점에서 애플리케이션 구조는 크게 2가지 → 서버-클라이언트 구조, P2P 구조
항상 켜져 있는 호스트(서비스를 제공)를 서버(server)
라고 부르는데, 이 서비스는 클라이언트(client)
라는 다른 많은 호스트의 요청을 받는다.
고전적인 예는 클라이언트 호스트에서 실행되는 브라우저가 항상 켜진 웹 서버로 서비스를 요청하는 웹 어플리케이션이다. 웹 서버가 클라이언트 호스트로부터 객체를 요청받으면 웹서버는 클라이언트 호스트로 요청된 객체를 보내어 응답한다.
클라이언트-서버 구조에서 클라이언트는 서로 직접적으로 통신하지 않는다.
서버는 고정 IP주소라는 잘 알려진 주소를 갖는다.
클라이언트-서버 구조를 가지고 더 잘 알려진 애플리케이션으로는 웹, 파일 전송, 원격 로그인, 전자메일이 있다.
때때로 클라이언트-서버 애플리케이션에서 하나의 서버 호스트가 자신의 클라이언트로부터의 모든 요청에 응답하는 것은 불가능하기 때문에 많은 수의 호스트를 갖춘 **데이터 센터(data center)
**가 강력한 가상의 서버를 생성하는데 사용된다.
피어(peer)라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신
"자가 확장성"
**이 있다는 것이다. 피어는 새로운 서비스 요구 만큼 새로운 서비스 용량을 제공한다.프로세스간 통신(IPC)
프로세스 간의 통신(IPC)는 공유메모리, 페시지 패싱, 파이프 등 OS(운영체제)에 의해서 제공된다.
IPC는 한 호스트 안 프로세스(active한 entity로 프로그램이 메모리로 올라와 CPU시간을 할당받으면 실행되는 상태)
끼리의 통신을 이야기한다.
2개의 다른 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지 교환으로 서로 통신한다.
네트워크 애플리케이션은 네트워크에서 서로 메시지를 보내는 두 프로세스로 구성된다.
클라이언트 프로세스는 웹 서버 프로세스와 메시지를 교환한다. P2P 파일 공유 시스템에서는 한 피어의 프로세스에서 다른 피어의 프로세스로 파일을 전송한다. 통신하는 프로세스 각 쌍에 대해 일반적으로 클라이언트의 프로세스와 서버의 프로세스 중 하나로 이름 짓는다. (역할로 구분)
클라이언트와 서버 프로세스를 다음과 같이 정의 가능하다.
→ 두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스를 '클라이언트'라 하고, 세션을 시작하기 위해 접속을 기다리는 프로세스를 '서버'라고 한다.
대부분의 애플리케이션은 두 프로세스가 메시지를 서로에게 보내는 통신 프로세스 쌍으로 구성된다.
프로세스는 **'소켓(socket)'**을 통해 네트워크로 메시지를 보내고 받는다.
→ 소켓이란 응용계층과 통신 계층 사이의 인터페이스 네트워크에서 동작하는 프로세스간 통신의End Point
→ 애플리케이션 프로세스와 트랜스포트 프로토콜 간의 인터페이스(네트워크에서 프로세스로 데이터를 전달하며 또한 프로세스로부터 네트워크로 데이터를 전달하는 출입구 역할)
→ 소켓은 애플리케이션과 네트워크 사이의 API
인터넷에서 호스트는 'IP주소'
로 식별된다.
IP주소는 32비트로 구성되며, 호스트를 유일하게 식별한다.
메시지가 전달되어야 하는 호스트의 주소를 아는 것과 더불어 송신 호스트는 수신 호스트에서 수행되고 있는 수신 프로세스(수신 소켓)도 식별해야 한다.
→ 이 정보는 일반적으로 한 호스트가 많은 네트워크 응용을 수행할 수 있기 때문이다.
→ 목적지 포트 번호(port number)
(한 PC에서 여러 프로세스가 돌아가기 때문에 그 프로세스들을 구분)가 이 목적을 위해 사용된다.