본문 바로가기

CS/Network

[네트워크] Ch2 - 네트워크의 원리 및 Application Layer

[네트워크] Ch1 - 인터넷과 프로토콜, network edge

[네트워크] Ch1 - Delay, loss, throughput in networks, Protocol layers, service models, Networks under attack: security, Internet history


👨🏻‍💻 Application Layer

앞서 배운 프로토콜 계층들을 조금 더 세부적으로 알아본다.

가장 먼저 살펴볼 계층이 Application Layer이다.

✳️ 목표

  • network application protocols의 구현 및 개념
  • popular한 application-level protocols를 알아보기
  • network application을 만들기(socket API)

✨ 2.1.1 Principles of network applications

📌 개요

✅ 네트워크 앱의 종류

우리가 사용하고 있는 수많은 program들이 network applications에 속한다.

예시) e-mail / web / multi-user game / streaming stored video(youtube) / voice over IP(Skype) / social networking / search

✅ Application architectures

이러한 네트워크 앱을 만들기 위해 가능한 구조는 아래 두가지이다.

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

지금부터 Application Architectures에 대해 알아보자.

📌 Application architectures

1️⃣ Client-server architecture

✅ Server

  • 항상 켜져있는 host이다. 일시적으로 꺼질 수 있지만 개념적으로 항상 켜져있다.
  • 영구적으로 할당된 permanent IP address를 가진다.
  • scaling을 위한 data centers의 역할을 하기도 한다.

✅ clients

  • 서버와 통신한다.
  • 클라이언트끼리는 직접 통신하지 않는다.
  • intermittently(연결 됐다가 안됐다가)하게 서버에 연결된다.
  • 변경이 가능한 dynamic IP addresses를 가진다.

결론적으로, client-server 모델에서 host끼리 소통하는 것이 아니라 client의 process와 server의 process 간에 소통을 한다.

2️⃣ P2P architecture

  • 항상 켜져있는 서버를 가지지 않는다.
  • 모두 유저 호스트에 seating하고 있다. 따라서, 각각의 end systems가 arbitrary하게 연결된다.
  • peers가 다른 peers에게 서비스를 요청하거나, 다른 피어에게 서비스를 제공한다.
  • → 대표적인 장점이 ⁉️ self scalability ⁉️ 이다. 별도의 서버가 없이 피어들끼리 서로 서비스를 제공하기 때문에 새로운 피어가 시스템에 조인해도 스스로가 capability를 증가시킬 수 있기 때문에 용량 문제가 없다.
  • 유저가 호스트이기 때문에 intermittently하게 연결되고, IP 주소가 바뀔 수 있다.

📌  Process communicating

⭐ Process란?

정의 : 호스트에서 현재 실행중인 프로그램이 프로세스이다.

같은 호스트에서라면, OS에 의해 정의된 inter-process communication을 통해 두 프로세스가 소통한다.

그런데 server-cleint 모델에서와 같이 다른 호스트에 있는 프로세스들은, messages를 주고받으며 소통한다.

  • client process : communication을 시작하는 프로세스
  • server process : 응답을 해주기 위해 기다리는 프로세스

Client-Server 아키텍쳐가 아닌 경우, 즉 P2P의 경우에는 client process와 server process를 모두 가지고 있게 된다.

📌 Sockets

⭐ 소켓이란?

network socket은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점이다. 통신의 대부분이 인터넷 프로토콜을 기반으로 하기 때문에 대부분의 소켓은 인터넷 소켓이다. 네트워크 통신 과정에서 프로그램들은 소켓을 생성하고, 소켓을 통해서 서로 데이터를 교환한다.

 

소켓은 인터넷 프로토콜(TCP, UDP 등등), 로컬 IP 주소, 로컬 포트, 원격 IP 주소, 원격 포트로 이루어져 있는데, 본 강의에서는 IP 주소 및 포트를 통한 설명을 메인으로 하고 있다.

 

소켓이 네트워크 통신의 ‘종착점'이라고 정의되어 있는 것은 IP 어드레스와 포트 번호를 조합하여 새로운 네트워크 주소의 속성을 가지기 때문이다.

 

이러한 인터넷 소켓은 프로토콜을 기준을 크게 두 타입, UDP 프로토콜을 사용하는 경우와 TCP 프로토콜을 사용하는 경우로 나눌 수 있다.

아래 그림을 보면서 이해해보자.

위의 protocol 계층에서, application process는 개발자에 의해 컨트롤되고, 나머지 계층은 OS에 의한 것임을 알 수 있다. appication 계층과 transport 계층 사이에 socket이 존재하여 두 계층 사이에 문처럼 존재한다.

이처럼 프로세스는 Socket에 메시지를 보내고, 소켓을 통해 메시지를 받는다.

📌 Addressing processes

앞서 소켓에 대해 설명하며 Port Number에 대한 이야기를 했다. Port Number가 필요한 이유는 프로세스 간의 통신에서 IP 주소 이상으로 더 정확한 address가 필요하기 때문이다.

 

예를 들어, 클라이언트와 서버라는 호스트 간에 통신이 이뤄지는 것이 아니라, process 간에 통신이 진행된다. 이러한 과정을 위해 process는 identifer를 필수적으로 가지고 메시지를 수령한다.

 

호스트의 IP 주소만을 가지고는 어떤 process를 실행해야 할지 완벽히 식별할 수 없다. 하나의 호스트에서 여러 process가 존재할 수 있기 때문이다. 따라서 port numbers라는 것을 가져서 정확한 address를 지정하는 데에 사용한다.

추가적으로, 어떤 웹 서비스인지에 상관 없이 HTTP server의 port numbers는 80이고, mail server의 경우는 25로 정해져 있는 것처럼 일관적으로 정해진 포트 번호들을 ⁉️ well known port # ⁉️라고 부른다.

✨ 2.1.2 Transport Layer(TCP / UDP)

📌 App들이 필요로 하는 transport service는 무엇인가?

application Layer에서 만들어진 message들은 transport Layer를 통해서 전달된다. transport Layer에서는 어떠한 기능을 제공해야 할까?

⭐ tranport layer에서 요구되는 특징들

data integrity(데이터 무결성) : 데이터가 얼마나 완전하고, 일관되며, 정확한지를 나타내는 것이다. 쉽게 말해 데이터 완전성이라고 생각하면 된다.

timing : 몇몇 앱들은 효율을 위해 낮은 딜레이를 요구할 수 있다. (internet telephony, interactive games)

throughput : 몇몇 앱들은 효율을 위해 최소한의 throughput을 요구할 수 있는데, multimedia 앱들이 대표적이다. multimedia에서 최소한의 throughput이 보장되지 않는다면 media의 재생에 치명적인 결점이 되기 때문이다.

security : 보안이 잘 되어야 한다.

⭐ 예시

📌 Internet transport protocols services

네트워크의 계층들 중에서 전송 계층(transport layer)은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층이다. 즉, 데이터의 전달을 담당하는데, 실제 인터넷에서 transport를 제공하는 protocols는 아래와 같이 크게 TCP와 UDP로 나뉜다.

1️⃣ TCP란?

✅ 정의 : Transmission Control Protocol, 전송을 제어하는 프로토콜이라는 뜻이다. 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이기 때문에, TCP/IP라는 이름으로 짝지어 불리기도 한다. TCP의 가장 큰 특징은 연결형 서비스로 신뢰성을 보장한다는 것이기 때문에, 연속성보다 신뢰성 있는 전송이 중요할 때에 사용하는 프로토콜이다.

✅ 특징

  • reliable transport : application에서 TCP라는 프로토콜을 전송하면 사용자는 transport의 결과를 확신할 수 있다.
  • connection-oriented : 상대방의 TCP와 connection을 해서 hand-shake를 setup한다.
  • flow control(흐름 제어) : 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것. 두 TCP가 있을 때, application protocol이 읽어나가는 속도보다 sendting TCP가 보내는 속도가 더 빠른 경우, receiving TCP는 sending TCP에게 속도를 낮추라는 정보를 전달할 수 있다. 이렇게 속도를 조절한다.
  • congestion control(혼잡 제어) : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것. network의 congestion을 제어하기 위한 control이다. hop by hop으로 건너갈 때 버퍼가 많이 차있는 경우 sending TCP에 보내는 양을 줄이라고 할 수 있다.
  • 단점 : timing(UDP보다 속도가 느리다), minimum throughput guarantee(최저 throughput이 보장되지 않는다), security를 제공하지 않는다.

⁉️ PCO가 무엇인가요?

TCP에서는 connection을 setup하기 위해 handShaking을 하고, 커넥션을 관리하는 리소스가 필요하게 된다. 여기에 드는 비용을 PCO(protocol control overhead)라고 한다. TCP는 PCO를 가지기 때문에 UDP에 비교하여 timing, throughput과 같은 단점을 가진다.

2️⃣ UDP란?

✅ 정의 : User Datagram Protocol, 사용자 데이터그램 프로토콜이라는 뜻인데, 데이터를 데이터그램 단위로 처리하는 프로토콜이라고 생각하면 된다. 여기서 데이터그램은 독립적인 관계를 가진 패킷이라는 뜻으로 TCP와 달리 connection을 위한 논리적인 경로가 존재하지 않기 때문에 각각의 데이터그램들이 독립적인 경로를 통해 전송된다.

✅ 특징

  • unreliable data transfer : 데이터 전달의 확실함을 신뢰할 수 없다. 흐름 제어가 없기 때문에 패킷이 제대로 전송되고 오류가 없는지 확인할 수가 없다. 하지만 연속적인 데이터의 전달에서 강점을 가진다.
  • 소켓 대신 IP를 기반으로 데이터를 전송한다. UDP에는 연결 자체가 없어서 서버 소켓과 클라이언트 소켓의 구분이 없기 때문이다.
  • 단점 : reliability, flow control, congestion control, timing, throughput guarantee, security, connection setup을 제공하지 않는다.

✅ UDP를 사용하는 것이 더 나은 경우

  • one time transaction인 프로세스의 경우에는 UDP가 더 유리할 수 있다. setup을 하는 비용도 없고, PCO도 없기 떄문이다.
  • data integrity가 극히 중요한 application의 경우, transport protocol을 믿지 않고 application 자체가 스스로 integrity를 확인할 수 있다. 만약 이런 경우 동일한 과정을 반복하는 TCP service보다 UDP를 사용하는 것이 효율적일 수 있다.
  • TCP의 flow control과 congestion control이 문제가 될 수 있다. multemedia의 경우 throughput이 최소 보장되어야 하는데, flow control로 인해 이러한 최저 기준을 채우지 못할 수 있다.

▶️ 실제 Internet apps에서 application, transport protocols의 사용

SMTP, Telnet, HTTP, FTP는 Data integrity와 relible transport가 중요하기에 TCP를 사용한다.

multemeida나 internet telephony의 경우 throughput을 위해 UDP를 사용하는 경우가 많다.

📌 App-layer protocol의 역할 및 개방성

1️⃣ App-layer protocol이 정의하는 것

  • 교환하는 메시지의 종류를 정의한다 : request, response
  • 메시지의 syntax를 정의 한다 : 메시지에 무슨 필드가 있고, 어떻게 존재하는지
  • message의 semantics를 정의한다 : 각 field들의 정보를 해석하는 방법
  • 언제 어떻게 process가 message를 보내고 반응하는지에 대한 규칙을 정의한다

2️⃣ Protocol의 개방성으로 분류한 app-layer protocol

✅ open protocols(개방형 프로토콜)

  • ex) HTTP, SMTP
  • 인터넷 표준을 담은 RFCs에 모두 정의되어 있다.
  • interoperability가 좋다

✅ proprietary protocols(독점 프로토콜)

  • 오픈되지 않았기 때문에 실제로 어떻게 동작하는지 알 수 없다.
  • ex ) Skype