네트워크 애플리케이션 개발의 중심은 다른 위치의 End System에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것이다.

위 그림에서처럼 End System에만 애플리케이션 소프트웨어가 존재하며, 애플리케이션 개발자는 애플리케이션을 개발할 때, End System에서 실행되는 소프트웨어만 개발하면 되고 네트워크 코어 장비까지 개발할 필요는 없다. (no need to write software for network-core devices)
고정되어있는 네트워크 구조(Internet Protocol Stack)과 다르게 애플리케이션 구조는 개발자가 설계하며 애플리케이션이 다양한 End System에서 어떻게 조직되어야 하는지를 알려준다.
항상 동작하고 있는 서버가 존재하고, 클라이언트라는 다른 호스트들로부터 서비스 요청을 받는 구조
Server: 항상 동작하고 있는 호스트
Client: Server에게 서비스 요청을 하는 다른 호스트
가끔 또는 항상 켜져 있을 수 있다.
클라이언트끼리는 직접적으로 통신하지 않는다.
intermittently connected
- may have dynamic IP addresses
Data Center: 많은 수의 호스트를 갖춰 가상의 서버를 생성하는 역할을 한다.

Client-Server 구조의 예시로는 웹, 파일 전송, 원격 로그인, 전자 메일 등이 있다.
항상 켜져 있는 인프라스트럭처 서버에 최소로 의존하거나 전혀 의존하지 않는 구조

대표적인 예시로는 파일 공유 래플리케이션인 BitTorrent가 있다.
two processes communicatation within same host uses interprocess communication
process: 네트워크를 통해 데이터를 송수신하는 소프트웨어 프로그램 또는 작업 단위
2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지 교환으로 서로 통신한다.
송신 프로세스는 메시지를 만들어서 보내고 수신 프로세스는 메시지를 받고 역으로 메시지를 보냄으로써 응답한다.
네트워크 애플리케이션은 네트워크에서 서로 메세지를 보내는 두 프로세스로 구성된다.
-Server Process: 통신 세션을 시작하기 위해 접속을 기다리는 process
-Client Process: 통신을 초기화(다른 process와 세션을 시작하려고 접속을 초기화)하는 process

위 그림에서 보이듯이, Socket은 호스트의 애플리케이션 계층과 트랜스포트 계층간의 인터페이스이다.
애플리케이션의 개발자는 애플리케이션 계층에 대한 모든 통제권을 갖지만 트랜스포트 계층에 대한 통제권은 거의 갖지 못한다.
트랜스포트 프로토콜의 선택
트랜스포트 계층 매개변수의 설정
프로세스끼리 패킷을 보내기 위해서는 수신 프로세스가 주소를 갖고 있을 필요가 있다.
호스트 주소
그 목적지 호스트 내의 수신 프로세스를 명시하는 식별자
한 호스트가 많은 애플리케이션을 수행하고 있는 경우 어떻게 애플리케이션끼리 구별할 수 있을까?
Transport Protocol은 네트워크를 통해 애플리케이션 메세지를 전달해야한다. 애플리케이션 개발자는 어떤 기준을 가지고 Transport Protocol을 선택해야할까?
Transport Protocol이 신뢰적 데이터 전송 서비스를 제공하면 송신 프로세스는 데이터를 소켓으로 보내고 그 데이터가 오류 없이 수신 프로세스에 도착할 것이라는 확신을 갖는다.
송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율
Bandwidth Sensitive Application: 처리율 요구사항을 갖는 애플리케이션
Elastic Application: 가용한 처리율대로 이용할 수 있는 애플리케이션
트랜스포트 계층 프로토콜은 Timing Guarantee(시간 보장)을 제공할 수 있다.
트랜스포트 계층 프로토콜은 하나 이상의 보안 서비스를 제공할 수 있다.
애플리케이션 개발자로서, TCP와 UDP 중 어떤 트랜스포트 프로토콜을 사용할 것인가?
연결지향형 서비스(connection-oriented)
client-server process 전에 세팅하는 것.
a. 애플리케이션 계층 메세지를 전송하기 전에 클라이언트와 서버가 서로 전송 제어 정보를 교환하게 한다.(Hand-Shaking)
b. 이 핸드쉐이킹 과정이 클라이언트와 서버에 패킷이 곧 도착하니 준비하라고 알려주는 역할을 한다.
c. 핸드쉐이킹 과정을 지나면 TCP 연결이 두 프로세스의 소켓 사이에 존재한다고 말할 수 있다.
d. (c) 과정에서 TCP 연결은 두 프로세스가 서로에게 동시에 메세지를 보낼 수 있기에 full-duplex(전이중) 연결이라고 한다.
e. 메세지 전송을 마치면 연결을 끊는다.
신뢰적인 데이터 전송 서비스
혼잡 제어(congestion control) 방식
최소의 서비스 모델을 가진 간단한 전송 프로토콜
UDP는 비연결형으로 핸드셰이킹 과정이 없고, 비신뢰적인 데이터 전송 서비스를 제공하여 데이터가 전달되는 것을 보장하지 않는다.
TCP와 UDP는 처리율 혹은 시간 보장 서비스를 제공하지 않는다.
시간 민감 애플리케이션 같은 경우에는 이러한 처리율 및 시간 지연에 잘 대처할 수 있도록 설계되어 있다.
그러나 지연이 과도할 때는 보장이 없기 때문에 한계가 있다.

다른 종단 시스템에서 실행되는 애플리케이션의 프로세스가 서로 메세지를 보내는 방법을 정의하는 프로토콜

여러 애플리케이션 계층 프로토콜은 RFC에 명시되어 있어 공중 도메인에서 쉽게 찾을 수 있다.
일부 애플리케이션 계층 프로토콜은 독점적이며 공중 도메인에서 찾을 수 없다.
애플리케이션 계층 프로토콜은 네트워크 애플리케이션의 한 요소일 뿐이며, 웹 애플리케이션은 문서 포맷 표준, 웹 브라우저, 웹 서버 등 다양한 요소로 구성된다.