wanna be dev 🧑‍💻

Cool 하고 Sick한 개발자가 되고 싶은 uzun입니다

A.K.A. Kick-snare, hyjhyj0901, h_uz99 solvedac-logo

Computer Science/Computer Network

📡 [Network] 어플리케이션층 - 네트워크 어플리케이션이 규칙 (클라이언트-서버, P2P, Socket 소켓통신, TCP, UDP 등)

Kick_snare 2022. 9. 20. 23:13
728x90

본 포스팅은 < 컴퓨터 네트워킹 하향식 접근[8판] James F. Kurose, Keith W. Ross 저/최종원, 강현국, 김기태 > 을 참고하여 작성되었습니다.

Ch02 Application Layer

1. Principles of Network Applications

네트워크 어플리케이션이 원리

네트워크 어플리케이션의 종류

  • 소셜 네트워킹
  • 문자 메세지
  • 이메일
  • 멀티유저 게임
  • 영상 스트리밍
  • P2P 파일 공유
  • 보이스오버 전화
  • 실시간 영상 회의
  • 인터넷 검색
  • 등등등….

네트워크 앱을 만든다면

  • 네트워크 앱을 만들기 위해서는…
    • 여러 종단 시스템에서 돌아가야함
    • 네트워크를 통해 통신
    • EX) 브라우저와 통신하는 웹서버 프로그램
  • 네트워크 코어 디바이스를 위한 코드가 필요없다
    • 네트워크 코어 디바이스는 유저 어플리케이션에서 다룰 수 없다
    • 개발하고 싶어도 못함

클라이언트-서버 패러다임

  • 서버
    • 항상 연결되있는 호스트
    • 영구적인 IP 주소
    • 데이터 센터에 둠
  • 클라이언트
    • 서버와 연결, 통신
    • 간헐적인 통신을 할 수 있다
    • 동적인 IP 주소를 가질 수 있다
    • 클라이언트끼리는 직접적으로 통신하지 않는다
      • 서버를 거쳐서 통신하게 됨
    • EX) HTTP, IMAP, FTP

P2P(Peer-to-Peer) 아키텍쳐

  • 항상 켜진 서버가 없음
  • 종단 시스템끼리 직접 통신
    • self scalabillity: 자가확장이 가능
  • 서버-클라이언트와 다르게 항상 켜져있지않다
  • IP가 바뀐다
  • EX) 토렌트
    • Zoom 은 P2P 서비스가 아니다

프로세스간의 통신

  • 프로세스란?
    • 호스트에서 돌아가는 프로그램
    • 같은 호스트에서의 프로세스끼리는 OS에서 IPC 통신을 한다
    • 다른 호스트에서의 프로세스들은 message를 교환함으로써 통신한다
  • 클라이언트 프로세스
    • 통신을 시작하는 프로세스
  • 서버 프로세스
    • 접속을 기다리는 프로세스
  • P2P 구조의 어플리케이션들도 하나의 peer는 클라이언트, 하나는 서버라고 볼 수 있다.

소켓 Socket 통신

  • 프로세스는 소켓으로부터 메세지를 받고, 소켓으로 메세지를 보낸다
  • 비유 : 소켓은 이다
    • 송신 프로세스는 메세지를 문 밖으로 밀어낸다
    • 송신 프로세스는 문 반대편의 transport infrastructure는 수신 프로세스 문 반대편으로 메세지 전달
    • 이 과정에서 두개의 소켓이 활용된다
  • 소켓은 어플리케이션과 네트워크 사이의 API라고도 볼 수 있다

주소 처리하기

  • 메세지를 받기위해 프로세스는 식별자를 가져야한다!
    • 호스트가 유일의 32비트 IP 주소
    • 아직 호스트의 IP 주소로 식별하기 불충분
  • 식별자는 IP 주소와 포트 번호를 가진다
    • EX) HTTP server : 80
    • EX) port number : 25
  • 시나리오 ) HTTP 메세지를 웹서버로 보낼려면?
    • 128.119.245.12:80 으로 메세지를 전송

왜 전송층의 서비스가 필요할까

  • 대표적인 전송 프로토콜 : TCP, UDP
    • app의 목적에따라 다른 프로토콜을 사용

  1. 신뢰성있는 데이터 전송
    • 몇몇 앱은 100% 신뢰성있는 데이터를 요구 (파일 전송, 웹 트랜섹션)
      • 손실된 패킷등을 다시 받는 등의 동작을 함
    • 몇몇 앱은 손실이 있어도 괜찮다 (오디오, 영상)
  2. 시간 내 도달 보장
    • 몇몇 앱은 낮은 지연시간을 요구 (인터넷 전화, 게임)
  3. 대역폭
    • 몇몇 앱은 최소한의 대역폭을 요구 (멀티미디어)
  4. 보안

인터넷 프로토콜 서비스 (TCP, UDP)

  • TCP Transmission Control Protocol
    • 신뢰성 있는 전송을 보장
    • 플로우 제어 : 수신자의 속도에 따라 제어
    • 혼잡 제어 : 네트워크가 혼잡도에 따라 제어
    • connection-oriented : 먼저 연결을 하고 전송을 함 (세션을 수립)
    • 타이밍 보장, 최소 대역폭 보장, 보안은 제공하지 않는다
  • UDP User Datagram Protocol
    • 신뢰성 없는 전송
    • 신뢰성, 플로우제어, 혼잡제어, 타이밍, 대역폭보장, 보안, 연결설정을 제공하지 않는다
💡 그렇다면 왜 UDP를 쓰는가?
➡️ 기능이 적어 가볍고 빠르다!

TCP 프로토콜 보안

  • 순수 TCP와 UDP는 보안화 하지 않는다
    • ID 비밀번호등이 순수 텍스트로 전송된다
  • TLS와 같은 보안 층을 사용하기도 한다

어플리케이션층 프로토콜이 정의하는 것들

  • 어떤 타입의 메세지들이 교환될것인가를 정의
  • 메세지의 문법을 정의
  • 메세지의 의미를 정의
  • 프로세스가 메세지를 어떻게 보내고 받을 것인지에 대한 규칙을 정의

  • 공개된 프로토콜은?
    • RFC에 정의 되어 누구가 정의를 볼 수 있다
    • 상호운용이 가능해야한다
    • EX) HTTP, SMTP
  • 공개되지 않은 (proprietary) 프로토콜은?
    • 스카이프, 또는 당신이 개발한 그저그런 프로그램…🥵
728x90