애플리케이션 계층 [ 네트워크 애플리케이션의 원리 ]
on Network
네트워크 애플리케이션 구조
애플리케이션 구조는 개발자에 의해 설계되고 애플리케이션이 다양한 종단 시스템(end system)에서 어떻게 조직되어야 하는지를 지시한다. 현대 개발자는 주로 클라이언트 서버 구조(client-server architecture) 또는 P2P 구조를 이용해 개발을 진행한다.
클라이언트 서버 구조(client-server architecture)에서 항상 켜져 있는 호스트를 서버(server)라고 한다. 대표적인 예시로 웹 서버가 있다. 웹 서버는 클라이언트 호스트로부터 객체를 요청받으면, 해당 호스트에게 객체를 보내어 응답한다. 서버는 항상 동작하므로 클라이언트는 서버 주소로 패킷을 보내서 항상 서버에 연결할 수 있다.
P2P구조에서 애플리케이션은 peer라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신하도록 한다. peer는 서비스 제공자가 소유하지 않고, 사용자들이 제어하는 PC이다.
프로세스 간 통신
2개의 다른 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지 교환으로 서로 통신한다.
클라이언트와 서버 프로세스
두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스를 클라이언트라 하거, 세션을 시작하기 위해 접속을 기다리는 프로세스를 서버라고 한다.
프로세스와 컴퓨터 네트워크 사이의 인터페이스
프로세스는 소켓(socket)을 통해 네트워크로 메시지를 보내고 받는다. 프로세스와 소켓의 이해를 돕기 위해 프로세스틑 집(house), 소켓은 출입구(door)로 비유해보자. 송신프로세스가 메시지를 만들어 출입구로 나오면 송신 프로세스의 출입구 뒤편에 전송구조가 있다고 생각하고, 메시지가 목적지 호스트에 도착하면 메시지는 수신 프로세스의 출입구를 거치고 수신 프로세스는 메시지를 처리한다.
소켓은 호스트의 애플리케이션 계층과 트랜스포트 계층간의 인터페이스다. 또한 소켓은 네트워크 애플리케이션이 인터넷에 만든 프로그래밍 인터페이스이므로, 애플리케이션과 네트워크 사이의 API(Appllication Programming Interface) 라고도 한다.
프로세스 주소 배정
특정 프로세스로 보내기 위해서는 주소가 필요한데, 수신프로세스를 식별하기 위해 (1)호스트의 주소, (2) 그 목적지 호스트 내의 프로세스를 명시하는 식별자가 필요하다.
(1) 호스트의 주소 : IP주소, 32bit로 구성되며 호스트를 유일하게 식별한다.
(2) 목적지 프로세스 : 포트 번호(port number)
애플리케이션이 이용 가능한 트랜스포트 서비스
Transport 계층 프로토콜이 그것을 이용하는 애플리케이션에게 제공할 수 있는 서비스는 넓은 범위에서 신뢰적 데이터 전송, 처리량, 시간, 보안 4가지 차원으로 분류할 수 있다.
신뢰적 데이터 전송
패킷들은 컴퓨터 네트워크 내에서 손실될 수 있다. 예를들어, 패킷은 라우터의 버퍼에서 오버플로우되거나, 패킷의 비트가 잘못되면 호스트, 혹은 라우터에 의해 버려질 수 있다. 이를 방지하기 위해 보낸 데이터가 올바르게 전달되도록 보장하는 서비스를 제공하면, 이를 신뢰적 데이터 전송을 제공한다고 한다.
처리량
처리율이란 통신에서 송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율이다. 처리량은 명시된 속도에서 보장된 가용 처리율을 제공하는 서비스이다. 만약 r bps 의 보장된 처리율을 요구할 수 있다면 어떠한 상황에서도 적어도 r bps를 보장한다. 처리율 요구사항을 갖는 애플리케이션을 대역폭 민감 애플리케이션(bandwidth-sensitive application) 이라고 한다. 현존하는 대부분의 멀티미디어 애플리케이션이 해당된다.
시간
데이터가 전송되는데 최소 시간을 보장하는 것이다. 온라인 게임이나 실시간 방송과 같은 서비스는 빠른 시간안에 데이터가 전송되야 하는 실시간 애플리케이션에서 유용하게 사용된다.
보안
Transport 프로토콜은 애플리케이션에 하나 이상의 보안 서비스를 제공할 수 있다. 예를 들어 transport 프로토콜은 송신프로세스가 전송하는 모든 데이터를 암호화할 수 있고, 그 데이터를 수신프로세스로 전달하기 전에 데이터의 암호를 해독할 수 있다. Transport 프로토콜이 제공하는 보안 서비스에는 비밀성, 데이터 무결성, 종단 인증등이 포함된다.
인터넷 전송 프로토콜이 제공하는 서비스
인터넷은 애플리케이션에게 2개의 전송 프로토콜 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)를 제공한다.
TCP 서비스
TCP 서비스 모델은 연결지향형 서비스와 신뢰적인 데이터 전송 서비스, 혼잡제어 등의 서비스를 포함한다.
연결 지향형 서비스
애플리케이션 걔층 서비스를 전송하기 위해 클라이언트와 서버가 서로 전송 제어 정보를 교환하도록 한다. 이 핸드셰이킹 과정이 클라이언트와 서버에 패킷을 받을 준비를 하라고 알려주는 역할을 한다. 핸드셰이킹이 지나면 TCP 연결이 되며 이 연결은 두 프로세스가 서로에게 동시에 메세지를 보낼 수 있는 전이중(full-duplex)연결라고 한다. 애플리케이션이 전송을 마치면 연결을 끊는다.신뢰적 데이터 전송 서비스
통신 프로세스는 데이터를 오류없이 올바른 순서로 전달한다. TCP는 애플리케이션의 한쪽이 바이트 스트림을 소켓으로 전달하면 그 바이트 스트림을 손실하거나 중복되지 않게 수신 소켓으로 전달한다.혼잡제어
통신하는 프로세스의 직접 이득보다는 인터넷 전체 성능 향상을 위해 네트워크가 혼잡상태에 이르면 프로세스의 속도를 낮춰 컨트롤 한다. 특히 TCP혼잡 제어는 각 연결이 네트워크 대역폭을 공평하게 공유할 수 있게끔 제한하려고 시도한다.
UDP 서비스
최소의 서비스 모델을 가진 가장 간단한 전송 프로토콜이다. UDP는 비연결형으로 핸드셰이킹하지 않는다. 또한 비신뢰적인 데이터 전송 서비스를 제공해 메시지 도착을 보장하지 않고, 순서가 뒤바뀔 수도있다. 혼잡제어 방식도 포함하지 않아 송신측은 원하는 속도로 패킷을 보낼 수 있다.