혼자 정리

[네트워크이론] 2.1 네트워크 애플리케이션 원리 본문

네트워크

[네트워크이론] 2.1 네트워크 애플리케이션 원리

tbonelee 2023. 12. 24. 02:22

(Computer Networking a top-down Approach 7th 내용입니다)

네트워크 앱의 특성

  • (서로 다른) End system 위에서 동작 & 네트워크를 통해 통신
    • ex) 브라우저, 웹 서버 프로그램
  • 네트워크 코어 장치에서 동작하는 프로그램이 아님

네트워크 애플리케이션 아키텍쳐

  • '네트워크 아키텍쳐'와 헷갈리지 않게 주의
    • 네트워크 5 layer
  • 네트워크 애플리케이션 개발자 입장에서 '네트워크 아키텍쳐'는 고정되어 있고 '네트워크 애플리케이션 아키텍쳐'를 설계(or 선택)할 수 있음.클라이언트-서버 아키텍쳐
  • 서버
    • 항상 켜져 있는 호스트
    • 클라이언트의 요청을 핸들링
  • 클라이언트
    • 서버에게 요청
  • 특징 :
    • 클라이언트끼리 직접적으로 통신하지 않음
    • 서버는 고정 IP 주소를 가짐 (well-known)
  • ex)
    • Web FTP
    • Telnet
    • E-mailP2P 아키텍쳐
  • _Peer_들이 직접 통신
  • 피어는 서비스 제공자가 아니라 유저가 소유하고 있는 데스크톱 등의 장치
  • ex) BitTorrent
  • 특징 :
    • Self-scalability : 개별 피어가 요청을 통해 서비스에 부담을 주는만큼 다른 피어에게 서비스 캐패시티를 제공
    • 경제성 : 서버 인프라와 서버 대역폭을 필요로 하지 않기 때문
    • 분산 구조 특성으로 보안, 성능, 신뢰성 이슈가 크게 존재

Process Communicating

  • process : 호스트 위에서 돌아가는 프로그램
    • 같은 호스트 위의 두 프로세스 간의 통신은 inter-process communication이라 하고 OS가 주관
    • 서로 다른 호스트 위의 통신은 컴퓨터 네트워크 위에서 메시지를 교환하는 것으로 이루어짐클라이언트 프로세스, 서버 프로세스
  • 클라이언트 프로세스와 서버 프로세스의 구분은 보통 다음과 같이 정의(P2P에서도 마찬가지)
    • 클라이언트 프로세스 : 통신을 초기화하는(접속을 초기화하는) 프로세스
    • 서버 프로세스 : 접속을 기다리는 쪽의 프로세스

소켓 : 프로세스 <-> 컴퓨터 네트워크 사이의 인터페이스

  • 프로세스는 네트워크에 메시지를 보내기 위해 소켓에 메시지를 보내고, 소켓을 통해 네트워크로부터 메시지를 받음
  • 소켓은 호스트 내부에서 '애플리케이션 계층'과 '트랜포트 계층'의 인터페이스
    • 애플리케이션과 네트워크 사이의 Application Programming Interface(API) 라고도 부름
  • 애플리케이션 개발자는 소켓의 애플리케이션 계층 사이드에 대해서는 모든 제어권을 갖지만 트랜스포트 계층 사이드에 대해서는 다음의 두 가지 제어권만을 가짐
    1) 어떤 트랜스포트 프로토콜을 사용할 것인지
    2) 몇 가지 트랜스포트 계층 파라미터 조정(ex. 최대 버퍼, 최대 세그먼트 크기, etc.)

프로세스 주소 배정(Addressing Processes)

  • 하나의 호스트 위에서 작동하는 프로세스가 다른 호스트 위에서 작동하는 프로세스에 패킷을 보내기 위해 수신 프로세스는 주소가 필요
  • 프로세스를 식별하기 위해서는 다음의 두 가지 정보가 필요
    1) 호스트의 주소
    2) 해당 호스트에서 수신 프로세스의 식별자
  • 호스트의 주소 -> IP 주소로 식별
  • 프로세스 식별자 -> 포트 번호로 식별

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

  • 트랜스포트 계층 프로토콜은 소켓을 통해 전달받은 메시지를 수신 프로세스의 소켓으로 전달할 책임이 있다
  • 여러 트랜스포트 계층 프로토콜은 각기 다른 서비스를 제공한다. 애플리케이션 개발자는 이를 비교하여 적합한 프로토콜을 선택
  • 트랜스포트 계층 프로토콜이 애플리케이션에 제공 가능한 서비스는 크게 네 가지로 분류한다.
    • 신뢰 가능한 데이터 전송(Reliable data transfer), 처리량(Throughput), 시간(Timing), 보안(Security)신뢰 가능한 데이터 전송(Reliable data transfer)
  • 패킷은 라우터의 버퍼 오버플로우로 손실되거나, 패킷의 비트가 잘못되면 호스트나 라우터에 의해 버려질 수 있음
  • 트랜스포트 프로토콜이 신뢰 가능한 데이터 전송을 보장하면 송신 프로세스는 소켓으로 보낸 데이터가 오류 없이 수신 프로세스의 도착할 것을 확신할 수 있음
  • 손실 허용 애플리케이션(loss-tolerant application) 은 약간의 데이터 손실을 감수할 수 있다.
    • ex) 실시간 오디오/비디오 전송처리량(Throughput)
  • 네트워크 경로 상 두 프로세스 간의 통신 세션에서 송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율을 의미
  • 여러 다른 세션들이 네트워크 경로 상에서 대역폭을 공유하고, 세션들은 생겼다 사라졌다 하기 때문에 가용 처리율은 시간에 따라 변화
  • 트랜스포트 프로토콜은 $r$ bits/sec의 보장된 처리율을을 보장할 수도 있다.
  • 보장된 처리량이 필요한 예시 :
    • 인터넷 전화 애플리케이션이 32kbps로 음성을 인코딩하면 이 속도로 네트워크에 보내고 수신 애플리케이션에 도착해야 함
    • 이거보다 낮은 속도로 전달된다면 수신 프로세스에서 의미가 없기 때문
    • 이와 같은 요구 사항을 갖는 애플리케이션을 대역폭 민감 애플리케이션(bandwith-sensitive application) 이라고 한다.
  • 탄력적 애플리케이션(elastic application) 은 가용 처리율을 있는 그대로 사용해도 괜찮다.
    • ex) 메일, 파일 전송, 웹 전송시간(Timing)ex) 송신자가 소켓으로 보내는 각각의 비트가 수신자의 소켓에 100 msec안에 도착하도록 보장보안(Security)비밀성(Confidentiality), 데이터 무결성(Data integrity), 엔드포인트 인증(End-point authentication) 등.
  • ex) 트랜스포트 프로토콜은 데이터 암호화를 통해 비밀성을 보장할 수 있음

인터넷이 제공하는 트랜스포트 서비스

TCP 서비스

  • 연결 지향형 서비스(Connection-oriented service)
    • 클라이언트와 서버가 애플리케이션 수준의 메시지를 주고 받기 전에 핸드쉐이킹을 통해 트랜스포트 계층 제어 정보를 교환
    • 핸드쉐이킹 이후에 두 프로세스의 소켓 사이에 TCP 커넥션이 존재한다고 얘기한다.
    • 이 커넥션을 통해 서로에게 동시에 메시지를 보낼 수 있으므로 전이중(full-duplex) 연결이라 한다.
  • 신뢰 가능한 데이터 전송 서비스(Reliable data transfer service)
    • 1) 오류 없이 2) 올바른 순서로 데이터를 보내는 것을 보장
  • 혼잡 제어 메커니즘도 포함
    • 통신하는 프로세스의 직접적인 이득보다는 인터넷 전체 성능 향상을 위한 목적
    • 네트워크가 혼잡한 경우
      • throttle(속도 제한)
      • 네트워크 대역폭(bandwidth)을 공평하게 공유할 수 있도록 커넥션 제한UDP 서비스
  • 경량화된 최소한의 서비스
  • 커넥션 존재 x
    • 핸드쉐이킹 x
  • 비신뢰적인 데이터 전송 서비스 : 메시지가 제대로 도달할지, 순서대로 도달할지 보장할 수 없음
  • 혼잡 제어 메커니즘을 갖지 않음
    • 송신 프로세스는 데이터를 원하는 속도로 덤프할 수 있음
    • 하지만 실제 엔드포인트간 처리율은 중간 링크의 전송 속도 캐패시티나 혼잡으로 인해 줄어들 수 있다

* TCP 보안

  • TCP, UDP는 암호화 제공 x
  • 따라서 그 자체로는 보안에 취약
  • Transport Layer Security(TLS) 를 통해 보안을 강화
  • TLS-강화-TCP는 전통적인 TCP의 기능을 포함하고 프로세스 대 프로세스 보안을 제공
    • 암호화
    • 데이터 무결성
    • 엔드포인트 인증
  • TLS는 TCP, UDP와 별개의 트랜스포트 프로토콜이 아니라 애플리케이션 계층 구현을 통해 TCP를 강화한 것
    • 예를 들어 애플리케이션이 TLS 서비스를 이용하려면 (라이브러리, 클래스 등)TLS 코드를 클라이언트, 서버 코드에 포함해야 한다.
  • TLS는 전통적인 TCP 소켓 API와 유사한 자체 소켓 API를 지님
    • 애플리케이션이 평문 데이터를 TLS 소켓에 전달하면 TLS는 데이터를 암호화하여 TCP 소켓으로 전달
    • 수신 프로세스의 TCP 소켓은 TLS로 암호화된 데이터를 전달하고, TLS는 암호를 풀고 TLS 소켓을 통해 애플리케이션으로 평문 데이터를 전달

인터넷 트랜스포트 프로토콜이 제공하지 않는 서비스

  • TCP나 UDP는 처리율이나 시간 보장을 제공하지 않음
  • 시간 민감 프로세스는 몇 가지 설계를 통해 이를 잘 대처할 수 있도록 되어 있기 때문에 동작할 수 있다.
    • 하지만 네트워크 상황이 혼잡한 경우 한계를 가질 수 밖에 없다.

애플리케이션 계층 프로토콜

애플리케이션 계층 프로토콜은 다음 내용을 정의

  • 교환 메시지 타입(ex. 요청 메시지, 응답 메시지)
  • 각 메시지 타입의 syntax(ex. 메시지의 필드, 필드 간 구별 방법)
  • 필드의 semantics. (필드에 있는 정보의 의미)
  • 언제, 어떻게 프로세스가 메시지를 전송하고, 메시지에 응답하는지 결정하는 규칙
  • Public Domain 애플리케이션 프로토콜
    • ex) HTTP
  • Public domain에서 사용 불가능한 애플리케이션 계층 프로토콜
    • ex) 스카이프가 사용하는 비개방 애플리케이션 계층 프로토콜