Chapter 6 네트워크 애플리케이션의 원리

MoonLight·2021년 10월 25일
0

컴퓨터 네트워크

목록 보기
6/10

0x01 네트워크 애플리케이션의 원리

📌 개요

application protocol을 개념적 관점, 구현의 관점에서 바라볼 것이다. 우리가 배울 것들은 다음과 같다 :

  • transport 계층의 서비스 모델 (application 계층이 transport계층의 서비스에 의존하므로)
  • 클라이언트-서버 패러다임
  • peer-to-peer 패러다임(P2P)
  • content distribution networks
  • application 계층의 인기있는 프로토콜들
    • HTTP
    • FTP
    • SMTP / POP3 / IMAP
    • DNS
  • 네트워크 application을 만들기 위한 socket API

여러 네트워크 application들

e-mail, web, 문자메시지, p2p파일공유, 원격로그인, 멀티유저 네트워크 게임, 스트리밍 영상(YouTube, Netflix), VoIP(Voice over IP,인터넷전화 e.g.,Skype), 실시간 화상회의(Zoom), SNS, 검색

💡 네트워크 app을 만드는 방법

  • end system에서 동작되는 프로그램을 작성
  • 네트워크를 통해 communication하도록 작성
    • e.g., 웹 서버 소프트웨어는 브라우저 소프트웨어와 communication되어야 함
  • 참고로 네트워크 코어 장치를 위한 소프트웨어를 만들필요 전혀 ❌
    • 네트워크-코어 장치는 user application을 작동못시킨다.

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

application에서 가능한 구조는 2가지가 있다 :

  • client-server
  • peer-to-peer (P2P)

(1) 클라이언트-서버 구조

Untitled image

서버

  • 호스트상에서 동작
  • 영구적인 IP주소
  • 확장을위한 데이터센터 역할을 한다.

클라이언트

  • 서버와 communication을 함
  • 동적 IP주소
  • 간헐적으로 접속
  • 클라이언트간 직접 communication 불가
    • P2P는 가능!

(2) P2P 구조

Untitled image

  • 항상 켜져있는 서버가 없다.

  • 각각의 개인이 서로서로간에 서버이자 클라이언트로서(peer로서) 동작한다.

  • self scalability : 새로운 peer가 서비스를 요청할 뿐만 아니라 서비스 를 제공한다.

  • peer는 간헐적으로 접속하면서 IP주소가 바뀐다

1.2 프로세스 간 통신

process : host에서 실행중인 프로그램

inter-process communication: 같은 host내에서 동작하는 다른 프로세스간 통신

message passing : 다른 호스트들 간의 프로세스는 message를 교환하며 통신

(1) client-server모델의 프로세스

  • client process : communication하기위해서 통신을 시작하는 프로세스

  • server process : 항상 동작하면서 연결을 기다리는(wait-to-be-contacted) 프로세스

  • 그럼 p2p 모델의 프로세스는??

    • client process와 server process를 모두 가지고 있는 아키텍쳐

(2) 소켓

그렇다면 프로세스간 통신하기 위해서는 어떻게 해야할까? 👉 소켓

📝 소켓 : 프로세스와 컴퓨터 네트워크 사이의 인터페이스

e.g., 전선꼽는 돼지코 모양의 콘센트가 소켓이다. 데이터 전송을 위해 왔다갔다 할수있는 입출구역할을 한다.

  • 프로세스는 socket을 통해 메시지를 주고받는다.

Untitled image

위 그림에서 애플리케이션 아래 계층은 신경쓸 필요없이 애플리케이션 계층에서 소켓에다가 그냥 집어넣으면 다른 호스트에서도 애플리케이션 계층의 소켓을 통해 데이터를 꺼낸다.

  • 송신 프로세스는 수신 프로세스에 있는 소켓에 메시지를 전달하기 위해 수신자의 소켓의 전송 인프라에 의존

(3) 프로세스 주소 배정

소켓으로 통신을 할 수 있다 치더라도 일단 기본적으로 상대방 소켓의 이름(=주소)을 알아야 소켓을 사용하건 말건 한다.

즉, 프로세스는 통신(메시지를 주고받기위해)을 하기위해 상대방이 누구인지 식별자가 필요하다. 이 식별자가 바로 IP주소(32-bit)다.

하지만, 프로세스가 실행되고 있는 호스트의 IP주소만으로는 충분치 않다. 왜냐하면 같은 호스트내에서 아주 많은 프로세스들이 실행되고 있기 때문이다.

IP주소 뿐만아니라 반드시 port가 필요하다 !! 즉 식별자는 IP주소 + 프로세스와 연관된 port번호이다!!

연관된 포트번호란 HTTP server의 port번호가 80이고, mail server의 port번호가 25인 것 처럼 각 프로세스에는 default port번호가 대부분 정해져있다.

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

(1) 애플리케이션 프로토콜이 정의하는 내용

(1). 교환되는 메시지 타입 :

  • request

  • response

(2). 메시지 문법 :

  • 필드와 필드간의 구별법(아래 두가지를 사용해서 구별)

  • 메시지의 필드가 무엇인지

  • 그 필드가 어떻게 기술되고있는지

(3). 메시지 의미 :

  • 필드내 존재하는 정보의 의미

(4). 규칙 :

  • 언제 / 어떻게 프로세스가 메시지를 송/수신해야 하는지에 대한 규칙

(2) 표준/비표준 application 프로토콜

위 4가지를 모두 이용하여 만들어지는 프로토콜 :

  • 개방 프로토콜(open protocols):

    • RFCs에서 정의된 표준프로토콜

    • 상호작용(interoperability) 허용

    • e.g., HTTP, SMTP

  • 독점 프로토콜(proprietary protocols):

    • 표준이 아닌 자체적으로 만든 프로토콜

    • e.g., Skype

1.4 전송계층이 응용계층에게 제공할 수 있는 서비스

소켓은 응용계층과 전송계층의 인터페이스이므로 전송계층의 프로토콜 중 하나를 선택해야할 필요가 있다. 그럼 전송계층의 어떤 부분을 보고 선택을 해야할까??

  • 데이터 무결성(data integrity)

    • 어떤 앱은 데이터를 주고 받을 때 데이터가 손상되지(바뀌지) 않아야함

    • 또 다른 앱은 데이터 손상이 쬐끔있어도 감내가능

  • 시간(time)

    • e-mail같은 경우 시간이 지연되어도 됨

    • 인터넷 전화, 게임같은 경우 효과적인 서비스를 위해 최소한의 지연을 요구

  • 처리율(throughput)

    • 서비스가 효율적으로 작동시키기 위한 최소한의 처리율이 필요한 앱이 있다.(멀티미디어)(이정도의 처리율은 되야 서비스작동가능한 앱)

    • 일부 애플리케이션은 덜 민감

  • 보안(security)

    • 암호화(encryption) 및 데이터 무결성 제공

1.5 실제 인터넷 상에서 전송계층 프로토콜이 제공하는 서비스들

(1) 전송계층 프로토콜의 서비스가 다 짜여진 응용계층의 서비스

아래 그림은 1.3의 이용가능한 트랜스포트 서비스가 입맛에 맞게 골라진 실제 인터넷상의 애플리케이션들이다.

Untitled image

(2) 인터넷상에서 실제 서비스가 구현되어진 transport protocol

transport protocol은 2가지가 있다.

  • TCP(Transmission Control Protocol)

    • 연결지향형(데이터 전송전 클라이언트-서버간 연결설정,확인)

      • Connection-oriented
    • 신뢰적인 데이터 전송

      • 송/수신 프로세스 간의 데이터의 손실 없이 올바른 순서로 전달

      • 패킷의 Loss 발생시 tcp는 패킷을 재요청 하여 올바른 순서로 맞춰 응용계층에 올려줌

    • 흐름 제어

      • 송수신 프로세스가 수신 프로세스의 데이터 수신 속도에 맞추어 송신
    • 혼잡 제어

      • 네트워크가 혼잡 상태에 이르면 프로세스의 전송 속도를 낮춘다.
    • ❓ 제공하지 않는 서비스? 시간 보장, 최소 처리율 보장, 보안성

  • UDP(User Datagram Protocol)

    • 비연결지향형(그냥 데이터 막 보냄)

      • Connectionless
    • 비신뢰적인 데이터 전송

      • 패킷 손실 발생 시 재전송을 요청하지 않음
    • 흐름 제어, 혼잡 제어, 시간 보장, 처리율 보장, 보안 등의 서비스도 제공하지 않음

      • 아무 것도 하지 않으므로 빠르다.

      • 따라서 실시긴 애플리케이션 들이 전송 속도 향상을 위해 udp 사용

    • 실시간 애플리케이션들의 전송 속도를 위해 UDP 사용

      • tcp의 혼잡 제어와 패킷 오버헤드 문제를 회피

      • 많은 방화벽들이 udp 트래픽을 차단하도록 설정되어 점차적으로 tcp 상에서 멀티미디어와 실시간 애플리케이션을 수행하도록 선택

        • 각각의 호스트들이 독립적으로 네트워크를 사용하게 됨

(3) 인기있는 응용계층프로토콜 그에 맞는 하위 트랜스포트 프로토콜

Untitled image

UDP를 사용하는 대표적인 응용 프로토콜 : DNS, SNMP, RIP, VoIP

* DNS(Domain Name System, 도메인 네임 시스템)

: 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터의 주소를 찾기 위해 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호로 변환해준다.

* SNMP(Simple Network Management Protocol, 간이 망 관리 프로토콜)

: 네트워크 상의 각 호스트에서 정기적으로 여러가지 정보를 자동적으로 수집하여 네트워크 관리를 하기 위한 프로토콜로 UDP 상에 정의된 응용 계층 표준 프로토콜이다.

* RIP(Routing Information Protocol, 라우팅 정보 규약)

: UDP/IP 상에서 동작하는 라우팅 규약으로 경유하는 라우터의 대수에 따라 최단 경로를 동적으로 결정하는 거리 벡터 알고리즘을 사용한다.

(4) 보안 TCP

TCP와 UDP

  • 암호화 제공 ❌

  • 즉, 소켓을 통해 평문이 그대로 전송됨

💡 해결방안?

SSL(Secure Socket Layer)

  • 암호화 된 TCP 연결을 제공

  • 데이터 무결성

  • 종단 인증

SSL은 응용계층에 있다.!

  • 애플리케이션은 SSL 라이브러리를 사용하여 암호화 된 데이터를 TCP 소켓에 전달
profile
hello world :)

0개의 댓글