계층들 중에 가장 위의 계층이다.
Application Layer에는 두가지의 application architecture이 존재한다.
대부분의 앱들은 client-server 구조를 따른다.
client와 server가 존재하여 둘 사이에 데이터가 이동한다.
client가 데이터를 요청하고, server가 데이터 요청을 받아서 보내준다.
동등한 peer(end system)끼리 직접 통신한다. 새로운 peer가 나타나면 규모가 늘어난다.
항상 켜져있는 서버가 없다. 보통 작은 서버가 있는데 이는 통신을 위함이 아니라 peer에 대한 정보를 저장한느 서버이다.
peer끼리 서비스를 요구하고 제공한다. 이는 self-scalability라고 한다.
peer들이 있었다가 없어지고 하니까 IP 주소가 바뀌는 것을 고려하여 프로그램을 구성해야 해서 관리가 복잡하다.
실질적인 통신은 Process가 진행한다. 같은 Host 내에서 실행되고 있는 프로세스가 메시지를 보내면 OS가 알아서 처리해준다. 서로 다른 Host의 프로세스들은 메시지를 통해 소통한다.
소켓은 프로세스 간 메시지를 주고 받는 인터페이스를 말한다. Application Layer와 Transport Layer 사이의 인터페이스라고 볼 수 있다. 전체적으로 보면, Application Layer 사이의 메세지를 보내는 인터페이스라고 볼 수도 있다.
메시지를 받기 위해서는 프로세스들은 identifier를 가지고 있어야 한다. 서버의 host 디바이스는 32bit짜리 ip 주소를 가지고 있다. port number(16bit)를 통해 같은 호스트에서 돌아가는 많은 프로세스들을 구별할 수 있다. IP 주소와 Port number을 알아야 웹 서비스로 접근이 가능하다.
메시지를 주고 받기 위해서는 프로토콜이 필요하다.