본문 바로가기
CS/컴퓨터네트워크

[하향식 접근 8판] Chapter 2 애플리케이션 계층 - 2.1~2.3

by dingwoon 2024. 10. 16.

※"컴퓨터 네트워킹 하향식 접근 8판" 책을 간단하게 정리한 내용의 글입니다.※

2.1.1 네트워크 애플리케이션 구조

애플리케이션 개발자 입장에서 네트워크 구조는 고정되어 있고 서비스를 제공해준다.
애플리케이션 개발자는 애플리케이션 구조만 설계하고 신경쓰면 된다.
우리는 그 하위 계층의 네트워크 코어 장비들의 소프트웨어를 개발할 수 없다.

애플리케이션 구조는 대표적으로 다음 두가지가 있다.

< 애플리케이션의 대표적 두 가지 구조 >

  • 클라이언트-서버 구조
    • 서버는 항상 동작하고 있어야 한다.
    • 클라이언트들을 직접 통신하지 않고, 서버를 통해 통신한다.
    • 서버는 고정 IP 주소라는 잘 알려진 주소를 갖는다.
    • 트래픽이 클 경우 하나의 서버에서 처리하지 못한다. 이 경우에는 데이터 센터가 강력한 가상의 서버를 생성하는 역할로 사용되기도 한다.(구글, 아마존, 등) 추가적으로 대역폭에 맞는 비용을 지불해야 한다.
  • P2P 구조
    • 항상 켜져 있는 서버에 의존을 최소로 하거나 서버가 없다.
    • 피어간에 서로 직접 통신한다.
    • 자가 확장성(self-scalability)이란 특징을 갖는다. 이는 네트워크 참여자(노드)가 추가될 수록 데이터가 분산되고 부하를 나눠 가지면서 네트워크 구조의 성능이 좋아진다는 특성이다.
    • 상당한 서버 인프라스트럭처와 서버 대역폭을 요구하지 않기 때문에 비용 효율적이다.
    • 분산 구조로 인한 보안, 성능, 신뢰성 면에서 넘어야할 산이 남아있다.

2.1.2 프로세스 간 통신

네트워크를 통한 메시지(message) 교환으로 서로 다른 호스트에서 실행되는 프로세스들이 서로 통신을 할 수 있다.

< 클라이언트와 서버 프로세스 >

서버-클라이언트 구조와 P2P 구조 모두 서버와 클라이언트가 존재한다. P2P 구조에서는 어떤 피어든 서버가 될 수도 있고 클라이언트가 될 수도 있다.
프로세스간 통신에서 서버와 클라이언트를 다음과 같이 정의한다.

"두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스를 클라이언트라 하고, 세션을 시작하기 위해 접속을 기다리는 프로세스를 서버라고 한다."

클라이언트-서버 구조에서는 클라이언트는 서버로 파일을 보낼 것을 요청한다. 즉 먼저 통신을 하기 위해 초기화를 한다.
P2P 구조에서는 특정 피어가 다른 피어에게 파일을 요청한다. 여기에서 요청하는 피어가 클라이언트가 되고, 상대 피어가 서버가 된다.

< 프로세스와 컴퓨터 네트워크 사이의 인터페이스 >

애플리케이션 계층에서는 소켓(socket)을 통해 메시지를 네트워크로 보내고 받는다.
소켓은 호스트의 애플리케이션 계층과 트랜스포트 계층 간의 인터페이스이다.
애플리케이션 개발자는 소켓의 애플리케이션 계층에 대한 모든 통제권을 갖는다.
통제권 -> 트랜스포트 프로토콜 선택(TCP, UDP), 최대 버퍼와 최대 세그먼트 크기 설정 등

< 프로세스 주소 배정 >

호스트 프로세스로 메시지를 전달하기 위해서는 두 가지 정보가 필요하다.

  1. 호스트의 주소
  2. 호스트 내의 수신 프로세스 식별자
    1번의 호스트 주소는 인터넷에서 IP 주소이다. IP 주소는 32비트로 구성되고, 인터넷에서 호스트를 유일하게 식별한다.
    2번의 프로세스 식별자는 호스트에 여러 네트워크 애플리케이션이 있을 수 있기 때문에 필요하다. 이는 포트 번호(port number)로 식별한다. 자주 사용하는 애플리케이션의 포트 번호는 정해져 있다. (웹 서버는 80번, SMTP 메일 서버는 25번 등이다.)

< 애플리케이션이 이용 가능한 트랜스포트 서비스 >

애플리케이션 프로세스가 소켓을 통해 메시지를 보내면, 트랜스포트 프로토콜은 그 메시지를 수신 프로세스의 소켓으로 이동시킬 책임이 있다. 여기서 트랜스포트 프로토콜에 따라 제공하는 서비스가 다르다. 이는 '신뢰적 데이터 전송', '처리율', '시간', '보안'의 네 가지 차원으로 분류할 수 있다.

  • 신뢰적 데이터 전송
    패킷은 네트워크를 통해 전달되면서 여러 이유(라우터 버퍼 오버플로우, 비트 오류 등)로 버려질 수 있다. 신뢰적 데이터 전송(reliable data transfer) 서비스는 송신 프로세스가 데이터를 소켓을 통해 네트워크로 보낼 때, 수신 프로세스에 오류 없이 도착하는 것을 보장한다.
    데이터가 수신 프로세스까지 전달되는 것을 보장하는 것보다 속도가 중요한 손실 허용 애플리케이션(loss-tolerant application)과 같은 경우 신뢰적 데이터 전송 서비스를 제공하지 않을 수 있다.
  • 처리율
    트랜스포트 서비스가 제공하는 서비스로 처리율이 있다. 이 서비스는 처리율(r bps)을 보장해주는 서비스이다.
    전화 애플리케이션이 32kbps로 음성을 인코딩 한다면 애플리케이션은 이 속도로 데이터를 네트워크로 내보낼 수 있어야 하고, 수신 애플리케이션으로 전될되어야 한다. 이를 위해 최소한의 처리율을 보장해주는 서비스가 필요하다.