[Network] Application Layer 1

chxghee·2024년 9월 19일

Application Layer의 프로토콜은 다음의 정보들을 정의한다.

  1. 교환되는 메시지 유형(요청/응답 메세지 인지?)
  2. 메시지 구문
  3. 메시지의 필드 및 필드 설명 방법
  4. 메시지 의미
  5. 프로세스가 메시지를 보내고 응답하는 시기 및 방법에 대한 규칙

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

[서버]

  1. 항상 켜져있다.
  2. 고정 IP 주소를 갖는다.
  3. 서버가 클라이언트로부터 오는 모든 요청에 더 응답하는 것이 불가능할 때,
    많은 수의 호스트를 갖춘 데이터 센터가 강력한 가상의 서버를 생성하는 역할로 사용된다.

[클라이언트]

  1. 서버를 거쳐 다른 클라이언트와 통신한다.
  2. 항상 켜져있지 않음(필요할 떄만 on demand)
  3. IP가 변할수 있다.

P2P 구조

  1. 항상 켜져 있는 서버 없음(서버가 있긴 하지만 최소한의 작업만 한다)

  2. 엔드 시스템끼리 직접 통신한다. (서버 개입 없이 직접 파일 송수신)

  3. 피어는 다른 피어에게 서비스를 요청하고 다른 피어에게 서비스를 제공.

    • 자체 확장성 - 새로운 피어는 새로운 서비스 용량과 새로운 서비스 수요를 제공합니다
  4. 피어가 간헐적으로 연결되고 IP 주소가 변경.

  5. 복잡한 관리
    예: P2P 파일 공유(토렌트)


프로세스 간 통신

실제 통신하는 것은 프로그램이 아니라, 실행되고 있는 프로그램인 프로세스이다.

한 호스트 여러 다양한 프로세스가 동시에 실행된다.
(이때 같은 호스트의 프로세스끼리의 통신은 os가 관리)

요청을 보내는 쪽의 프로세스를 보통 클라이언트라고 하고, 요청을 받는 쪽을 서버라고 한다.
(p2p에서는 클라이언트는 서버 프로세스가 될 수 있고, 클라이언트 프로세스도 될 수 있다.)

소켓

프로세스는 소켓(socket)을 통해 네트워크로 메시지를 보내고 받는다.

  • 소켓은 호스트의 애플리케이션 계층과 트랜스포트 계층간의 인터페이스다.(혹은 API)

  • 전송 프로세스는 수신 프로세스의 소켓에 메시지를 전달하기 위해 문 반대편의 트랜스포트 인프라에 의존한다.

  • 애플리케이션 개발자는 소켓의 애플리케이션 계층에 대한 모든 통제권을 갖지만, 소켓의 트랜스포트 계층에 대한 통제권은 거의 갖지 못한다.
애플리케이션 개발자의 트랜스포트 계층에 대한 통제

트랜스포트 프로토콜을 선택
최대 버퍼와 최대 세크먼트 크기 같은 약간의 매개변수 설정

프로세스 주소 배정

프로세스가 다른 프로세스로 패킷을 보내려면 수신 호스트의 IP 가 필요하다.

하지만 하나의 호스트에서는 여러 프로세스가 실행되는데, 이 프로세스를 구별하기 위해 port 번호를 사용한다.

HTTP SERVER: 80
mail SERVER: 25

어플리케이션에서 transport 서비스를 선택하는 기준

어플리케이션의 종류는 여러 가지이다.
종류도 여러가지이므로 각 어플의 요구 조건 혹은 특성에 따라 필요한 transport 서비스도다를 것이다. 이 때 고려할수있는 것이 아래 4 가지 이다.

  1. 신뢰성(data integrity)
  • transport 프로토콜이 데이터를 송신자에서 수신자로 100% 전달을 보장한다.
  • ex) 파일 전송, 이메일..
  1. 처리율(throughput)
  • 어떤 어플이 최소 요구 처리율이 있다면, 이 처리율을 보장해야 어플 서비스가 가능하다.
  • 처리율 요구사항을 갖는 애플리케이션은 대역폭 민감 애플리케이션이라 하고, 현존하는 많은 멀티미디어 애플리케이션은 대역폭에 민감하다.
    (너무 처리율이 낮으면 전화같은 서비스가 불가능하다.)
  • 반대로 요구사항이 없는 애플리케이션을 탄력적 애플리케이션(elastic apps)이라고 한다.
  1. 시간보장(timing)
  • 실시간 보이스챗 같은 경우 짧은 시간 내에 데이터의 도착시간을 보장해야한다.
  1. 보안(security)
  • 송신 호스트에서 트랜스포트 프로토콜은 모든 데이터를 암호화할 수 있고, 수신 호스트에서 트랜스포트 프로토콜은 모두 해독할 수 있다.
  • TCP를 애플리케이션 계층에서 강화하여 TLS로 보안 서비스를 제공한다.
    ( 기본적으로 TCP는 암호화를 제공하지 않는다.)
TSL
1.	암호화된 TCP 연결 제공:
	•	TLS는 TCP(Transmission Control Protocol) 위에서 작동하여 통신 데이터를 암호화합니다. 
    	이를 통해 네트워크 상에서 전송되는 데이터가 도청되거나 변조되지 않도록 보호합니다. TLS는 인터넷에서 HTTPS(HTTP Secure)와 같은 보안 프로토콜을 제공하는 중요한 요소입니다.
        
2.	데이터 무결성:
	•	TLS는 데이터가 전송되는 동안 변경되지 않았음을 보장합니다. 
    	데이터를 송신자가 전송한 그대로 수신자가 받을 수 있도록 확인하는 무결성 검사를 수행하여, 중간에서 데이터가 손상되거나 악의적으로 수정되는 것을 방지합니다.
        
3.	종단 간 인증:
	•	TLS는 통신하는 양쪽(클라이언트와 서버)이 서로 신뢰할 수 있는 존재인지를 확인하는 인증을 제공합니다. 
    	주로 디지털 인증서를 사용하여 서버의 신원을 확인하고, 필요할 경우 클라이언트의 신원도 확인할 수 있습니다. 이로써 가짜 서버나 중간자 공격을 방지할 수 있습니다.

인터넷 transport 프로토콜 서비스

크게 TCPUDP 두가지가 있다.
UDP는 TCP의 최소한의 기능(에러체크, port넘버 구분)을 갖춘 것이고,
때문에 TCP가 보다 복잡하다.

TCP

  1. reliable transport : 데이터 전송의 신뢰성 보장.

    • 송수신시 에러나 손실이 나면 다시 전송해서 신뢰성 보장
  2. flow control : 순서 보장

    • 송신자가 데이터를 빠른 속도로 보낼 때, 수신자의 버퍼가 넘칠 정도로 빨리 오면 송신자의 data 전송속도를 늦춰서 순서를 보장.
  3. congestion control : 네트워크 트래픽이 심한 상황

    • 트래픽이 심할때 송신자가 자신의 데이터 전송을 늦춰 순서 및 신뢰성 보장.
  4. connection-oriented : 연결 지향형 서비스

    • 전송 전 클라이언트와 서버의 연결을 구축하고(전송 제어 정보를 교환하고), 데이터를 주고 받는다. (3 way handshaking)
  5. TCP가 보장하지 않는 것들...

    • timing (데이터를 주고 받기 전에 연결을 하고 전송을 하기 때문에 늦다)
    • 최소 throuput (congestion시 전송속도를 보장하지 못함)
    • 보안

UDP

  1. unreliable transport : 데이터 전송 신뢰성 보장 X
    • 데이터 통신 시 손실 및 에러 발생시 다시 전송 X
    • 클라이언트 서버 사전 연결 X
  2. UDP 보장하지 않는 것들...
    • 신뢰성
    • 사전 연결
    • 위에 설명한 TCP가 하는 것들..

그럼에도 UDP를 종종 사용하는 것은 효율적 data통신이 가능하기 때문이다.
(TCP는 복잡해서 오버헤드 크고, 시간이 오래걸리고 헤더가 크고....)

TCP와 UDP의 차이점 비교

특징TCPUDP
연결 방식연결 지향적 (3-way handshake를 통한 연결 설정)비연결적 (연결 설정 없이 데이터 전송)
신뢰성신뢰성 보장 (재전송, 패킷 순서 보장)신뢰성 없음 (재전송 없음, 패킷 손실 가능)
전송 속도비교적 느림 (연결 설정 및 오류 처리 과정 포함)매우 빠름 (연결 설정 및 오류 처리 과정 없음)
데이터 순서데이터 순서 보장 (수신 측에서 패킷 순서 재조립)데이터 순서 보장 안됨 (패킷이 순서대로 도착하지 않을 수 있음)
혼잡 제어혼잡 제어 및 흐름 제어 지원혼잡 제어 없음
주요 사용 사례웹 브라우징, 이메일, 파일 전송 (신뢰성 중요)실시간 스트리밍, 온라인 게임, DNS (속도 중요)

TCP와 UDP 선택 기준

  • TCP를 사용하는 경우:

    • 데이터의 신뢰성이 중요한 경우 (데이터가 손실되거나 손상되면 안 되는 경우).
    • 데이터 순서가 중요한 경우 (데이터가 정확하게 순서대로 전송되어야 하는 경우).
    • 예: 웹 브라우징(HTTP), 파일 전송(FTP), 이메일 전송(SMTP) 등.
  • UDP를 사용하는 경우:

    • 속도가 중요한 경우 (빠른 전송이 필요하며, 약간의 데이터 손실이 문제되지 않는 경우).
    • 실시간 응답성이 중요한 경우 (실시간 스트리밍, VoIP 등).
    • 예: 실시간 스트리밍(음성, 동영상), 온라인 게임, DNS 조회 등.

요약

  • TCP신뢰성이 중요한 네트워크 통신에서 사용되며, 데이터의 무결성과 전송 순서를 보장. 연결을 설정한 후 데이터 전송이 이루어지므로 더 안전하지만, 속도는 상대적으로 느림
  • UDP빠른 전송이 중요한 경우에 사용되며, 연결 설정 없이 데이터를 전송. 신뢰성을 보장하지 않지만 속도가 매우 빠름.
profile
다 같이 화이팅! 🙋‍♂️

0개의 댓글