1. 네트워크 애플리케이션의 원리

2023. 3. 22. 16:49·컴퓨터 네트워크/Ch2. 애플리케이션 계층
Reference :
컴퓨터 네트워킹 하향식 접근 [8판] / 퍼스트 북 / James F. Kurose, Keith W. Ross
건국대학교 컴퓨터 네트워크 수업 / 김기천 교수님
네트워크 애플리케이션 구조

네트워크 구조

  • 고정되어 있고 애플리케이션에 특정 서비스 집합을 제공

 

애플리케이션 구조 (application architecture)

  • 개발자에 의해 설계됨
  • 종단 시스템에서 어떻게 조직되어야 하는지 지시

 

[구조 종류 2가지]

- 클라이언트 - 서버 구조

  • 설명
  • 서버: 항상 커져 있는 호스트
  • 클라이언트: 가끔 or 항상 켜짐
  • 클라이언트에서 실행되는 브라우저가 웹서버로 서비스를 요청
  • 특징
  • 클라이언트는 서로 직접적으로 통신하지 않음
  • 서버가 고정 IP 주소를 가짐
  • 예시(이 구조로 잘 알려진 것들)
  • 웹, 파일 전송, 원격 로그인, 전자메일

 

- 데이터 센터

  • 설명
  • 많은 수의 호스트를 갖춤
  • 나타난 이유
  • 하나의 서버 호스트가 자신의 클라이언트로부터의 모든 요청에 응답하는 것은 불가능하므로
  • 기능
  • 가상의 서버 생성
  • TMI
  • 구글은 전 세계적으로 분산된 30~50개의 데이터 센터를 가지고 있음

 

- P2P 구조

  • peer라는 호스트 쌍이 서로 직접 통신하도록 한다
  • peer : 서비스 제공자가 소유하지 않고, 사용자들이 제어하는 PC
  • 특정 서버를 통하지 않고 피어가 통신하므로 이 구조를 peer to peer (P2P)라고 함

 

  • 특징
  • 자가 확장성
  • 각 피어들이 파일을 요구함으로써 작업 부하를 만들어 내지만 각 피어들은 또한 일을 다른 피어들에 분배함으로써 그 시스템에 서비스 능력을 추가한다

 

  • 비용 효율적
  • 엄청난 서버 기반구조와 서버 대역폭을 요구하지 X

 

  • 미래 P2P 애플리케이션은 고도의 분산구조로 인해 보안, 신뢰성에 문제가 생길수도 ?!

 

  • dedeicated server와 반대임
  • dedicated server : 호스트 컴퓨터가 모든 클라이언트를 전담함

 

- 하이브리드 구조

  • P2P구조와  클라이언트-서버 구조를 합친 것 

프로세스 간 통신

- 프로세스

  • 설명
  • 우리는 흔히 프로그램이 통신하는 것으로 알고 있지만 실제로 통신하는 것은 프로세스!
  • 프로세스 : 종단 시스템에서 실행되는 프로그램

 

  • 분류
  • 같은 종단 시스템에서 실행될 때
  • 프로세스 간에 통신 : 종단 시스템의 OS에 의해 좌우됨

 

  • 다른 종단 시스템에서 실해될 때
  • 컴퓨터 네트워크를 통한 메세지 교환으로 통신함

 

- 클라이언트와 서버 프로세서

  • 두 프로세스 간의 통신 세션에서
  • 클라이언트 프로세서 : 통신을 초기화 (다른 프로세서와 세션을 시작하려고 접속을 초기화)하는 프로세스
  • 서버 프로세스 : 세션을 시작하기 위해 접속을 기다리는 프로세스

 

- 프로세서와 컴퓨터 네트워크 사이의 인터페이스

  • 소켓
  • 프로세스는 소켓을 통해 네트워크로 메세지를 보내고 받는다
  • 비유 프로세스 : 집 / 소켓 : 출입구

 

  • 애플리케이션 계층과 트랜스포트 계층 간의 인터페이스
  • 애플리케이션과 네트워크 사이의 API
  • 애플리케이션 개발자는 소켓의 애플리케이션 계층에 대한 모든 통제권을 갖지만 소켓의 트랜스포트 계층에 대한 통제권은 거의 갖지 못함

 

- 프로세서 주소 배정

  • 수신 프로세스를 식별하기 위해 두 가지 정보가 명시되어야 함!
  • 호스트 주소 (IP 주소)
  • 목적지 호스트 내의 수신 프로세스를 명시하는 식별자 (포트번호)
  • 한 호스트가 많은 네트워크 응용을 수행할 수 있기 때문
  • 웹 서버 : 80번, 메일 서버: 25번

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

[트랜스포트 계층이 제공(보장)하는 서비스 4가지]

 

- 신뢰적 데이터 전송

  1. 패킷들은 컴퓨터 네트워크 내에서 손실될 수 있다 ==> 패킷은 라우터의 버퍼에서 오버플로(overflow)되거나, 패킷의 비트가 잘못되면 호스트 혹은 라우터에 의해 버려질 수 있다.
  2. 따라서 올바른 데이터를 전달하도록 보장하기 위해 조치를 취해야 한다
  3. 신뢰적인 데이터 전송 (reliable data transfer)을 해야 한다

 

- 처리율

: 두 프로세서 간의 통신 세션에서 송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율

 

트랜스포트 프로토콜은 가용한 처리율이 적어도 r bps 임을 보장함

 

대역폭 민감 애플리케이션

: 처리율 요구사항을 갖는 애플리케이션

ex) 인터넷 전화 애플리케이션

 

탄력적 애플리케이션

: 가용한 처리율을 많으면 많은대로 적으면 적은대로 이용할 수 있는 애프리케이션

ex) 전자메일, 파일 전송, 웹 전송

 

 

- 시간

트랜스포트 계층 프로토콜은 시간 보장(timing guarantee)을 제공할 수 있다

ex)

송신자가 소켓으로 내보내는 모든 비트가 수신자의 소켓에 100ms 내에 도착하게 하는 것이다 => 인터넷 전화, 가상 환경, 원격 회의 (teleconferencing), 다자간 게임과 같은 실시간 상호작용 애플리케이션에 적합

 

 

- 보안

트랜스포트 프로토콜은 애플리케이션에 하나 이상의 보안 서비스를 제공할 수 있다

ex)

  • 송신 호스트에서 트랜스포트 프로토콜은 송신 프로세스가 전송하는 모든 데이터를 암호화할 수 있다
  • 수신 호스트에서 트랜스포트 프로토콜은 그 데이터를 수신 프로세스로 전달하기 전에 데이터의 암호를 해독할 수 있다

인터넷 전송 프로토콜이 제공하는 서비스

인터넷은 애플리케이션에게 2개의 전송 프로토콜 (UDP, TCP)을 제공

 

[TCP 서비스]

- 연결지향형 서비스

  • 핸드셰이킹(handshaking), 주고받기 : 정보기술과 전기통신 및 관련 분야에서 채널에 대한 정상적인 통신이 시작되기 전에 두 개의 실체 간에 확립된 통신 채널의 변수를 동적으로 설정하는 자동화된 협상 과정
  • 애플리케이션 계층 메세지를 전송하기 전에 클라이언트와 서버가 서로 전송 제어 정보를 교환하도록 함
  • "곧 패킷이 도달할 것이니 준비하렴"을 알려줌

 

  • TCP 연결 (전이중 연결)이 두 프로세스 소켓 사이에 존재한다고 말함
  • 전이중 연결: 두 프로세스가 서로에게 동시에 메세지를 보낼 수 있음

 

- 신뢰적인 데이터 전송 서비스

  • 애플리케이션의 한 쪽이 바이트 스트림을 소켓으로 전달하면 그 바이트 스트림을 손실하거나 중복되지 않게 수신 소켓으로 전달함

 

- 혼잡제어 방식

  • 각 TCP 연결이 네트워크 대역폭을 공평하게 공유할 수 있게 제한
  • 네트워크가 혼잡상태에 이르면 프로세스 속도를 낮춤

 

- 추가 > SSL (TCP의 보안 강화 ver)

  • TCP나 UDP는 암호화를 제공하지 X
  • SSL = TCP + 암호화, 데이터 무결성, 보안 서비스

 

  • 사용 방법 in 애플리케이션
  • 애플리케이션의 클라이언트와 서버 측 모두에 SSL 코드를 포함해야 함!
  • 송신 프로세스는 평문 데이터를 SSL 소켓에 전달
  • 송신 호스트에 있는 SSL은 데이터를 암호화하고 암호화된 데이터를 인터넷을 통해 수신 프로세스에 있는 TCP 소켓으로 전달
  • 수신 소켓은 암호화된 데이터를 SSL로 전달하고, 이 SSL은 암호를 푼다
  • SSL 소켓을 통해 평문 데이터를 수신 프로세스로 전달

 

[UDP 서비스]

 

- 비연결형 서비스

두 프로세스가 통신을 하기 전에 핸드쉐이킹 X

 

- 비신뢰적 서비스

메세지가 수신 소켓에 도착하는 것을 보장 X

 

- 혼잡제어 포함 X

데이터를 원하는 속도로 하위 계층 (네트워크 계층)으로 보낼 수 O

 

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

인터넷 전화가 효과적으로 되려면 최소한의 전송속도를 필요로 함 => 많은 방화벽들이 UDP를 차단하도록 설정됨

 

=> 이를 대비하여 TCP 사용

=> TCP가 데이터 도착에 대한 신뢰성을 제공하기 때문에 TCP를 씀


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

다른 종단 시스템에서 실행되는 애플리케이션의 프로세스가 서로 메세지를 보내는 방법을 정의

네트워크 애플리케이션의 한 종류일 뿐!

ex) HTTP (웹 브라우저 - 웹 서버) / SMTP (메일 클라이언트 - 서버)


이 책에서 다루는 네트워크 애플리케이션
  • 웹 (HTTP)
  • FPT (파일 송수신)
  • 전자메일
  • DNS
  • 비디오 스트리밍
  • P2P
저작자표시 (새창열림)

'컴퓨터 네트워크 > Ch2. 애플리케이션 계층' 카테고리의 다른 글

6. 비디오 스트리밍과 콘텐츠 분배 네트워크  (0) 2023.03.22
5. P2P 파일 분배  (0) 2023.03.22
4. DNS: 인터넷의 디렉터리 서비스  (2) 2023.03.22
3. 인터넷 전자메일  (1) 2023.03.22
2. 웹과 HTTP  (0) 2023.03.22
'컴퓨터 네트워크/Ch2. 애플리케이션 계층' 카테고리의 다른 글
  • 5. P2P 파일 분배
  • 4. DNS: 인터넷의 디렉터리 서비스
  • 3. 인터넷 전자메일
  • 2. 웹과 HTTP
smile blog
smile blog
건국대 첨단바이오공학부 & 컴퓨터공학부 BT & IT 기술로 희망을 꿈 꿉니당
  • smile blog
    스마일 블로그
    smile blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (836) N
      • 일상 생각들 (3)
      • 학과에 대해 (4)
        • 첨단바이오공학부 (4)
        • 컴퓨터공학부 (0)
      • -------- 프로젝트 -------- (0)
      • [DS] 토이 프로젝트 (1)
      • [Web, Game, XR] 토이 프로젝트 (11)
      • 경진대회 (1)
      • -------- 진로 -------- (0)
      • 생물정보학자 (19)
        • 데이터 과학이란? (0)
        • 되는 방법 (9)
        • 책 추천 (2)
        • 인강 (1)
        • 대학 (2)
        • 회사 (1)
        • 학원 (2)
        • 학회 (2)
      • 디지털 헬스케어 (72)
        • 방법 (8)
        • 생각들 (10)
        • 공부법 (4)
        • 책 추천 (2)
        • 학원 (2)
        • 참고 (2)
        • 대학 (3)
        • 회사 (3)
        • 인강 (2)
        • 게임 엔진들 (1)
        • 게임 프로그래머 개론 (2)
        • 게임 프로그래머 취업 전략 가이드 (7)
        • 취업 서류 (1)
        • 애정하는 게임들 (4)
        • XR 테크니컬 아티스트 (9)
        • 영화, 애니메이션 테크니컬 디렉터 (12)
      • -------- 기초 학문 -------- (0)
      • 생명과학 이야기 (2)
        • 대학 강의 (2)
      • 화학 이야기 (0)
      • 컴퓨터과학 이야기 (0)
      • 통계학 이야기 (0)
      • 수학 이야기 (1)
        • 공학 수학 (1)
      • 영어 이야기 (1)
      • 심리학 이야기 (7)
        • 현대인과 정신건강 (7)
      • -------- 컴퓨터 언어 -------- (0)
      • Python (3)
        • 나도코딩의 파이썬 입문 (1)
        • 파이썬 관련 정보 (1)
      • SQL (0)
      • C 언어 (32)
        • 혼자 공부하는 C언어 요약 (1)
        • [책 정리] 혼자 공부하는 C언어 (31)
      • C++ (33)
        • 명품 C++ 프로그래밍 요약 (1)
        • [책 정리] 명품 C++ 프로그래밍 (27)
        • C++ STL (0)
        • 뇌를 자극하는 C++ STL (5)
      • -------- 생명과학 -------- (0)
      • 생화학 (8)
        • 대학 강의 (8)
      • 분자세포생물학 (6)
        • 대학 강의 (6)
      • 유전자치료공학 (4)
        • 대학 강의 (4)
      • 생명정보학 (7)
        • 대학 강의 (7)
      • 약리학 (2)
        • 대학 강의 (2)
      • -------- 컴퓨터과학 -------- (0)
      • 자료구조와 알고리즘 (8)
        • 자료구조와 알고리즘의 정의 (3)
        • [책 정리] C언어로 쉽게 풀어쓴 자료구조 요약 (1)
        • [인강] 자료구조와 알고리즘 (2)
        • 코딩 테스트 대비하기! (1)
      • 컴퓨터 회로 (0)
      • 컴퓨터 구조 (43)
        • 컴퓨터 구조와 운영체제 요약 (1)
        • ---------------------------------------- (0)
        • [전공 책 정리] 컴퓨터 구조 및 설계 (1)
        • Ch1. 컴퓨터 추상화 및 관련 기술 (8)
        • Ch2. 명령어 : 컴퓨터 언어 (11)
        • Ch3. 컴퓨터 연산 (8)
        • Ch4. 프로세서 (11)
        • Ch5. 메모리 계층구조 (3)
        • Ch6. 병렬 프로세서 : 클라이언트에서 클라우드까지 (0)
      • 시스템 프로그래밍 (15)
        • [책 정리] 시스템 프로그래밍 유닉스 & 리눅스 (0)
        • [인강] 리눅스 시스템 프로그래밍 (2)
        • 리눅스에서 코딩이란? (8)
        • 대학교 강의 정리 (5)
      • 운영체제 (0)
      • 컴퓨터 네트워크 (37)
        • 모두의 네트워크 요약 (1)
        • [책 정리] 모두의 네트워크 (10)
        • ---------------------------------------- (0)
        • [전공 책 정리] 컴퓨터 네트워킹 하향식 접근 8판 (1)
        • Ch1. 컴퓨터 네트워크와 인터넷 (7)
        • Ch2. 애플리케이션 계층 (7)
        • Ch3. 트랜스포트 계층 (8)
        • Ch4. 네트워크 계층 : 데이터 평면 (3)
        • Ch5. 네트워크 계층 : 제어 평면 (0)
        • Ch6. 링크 계층과 근거리 네트워크 (0)
        • Ch7. 무선 및 이동 네트워크 (0)
        • Ch8. 컴퓨터 네트워크 보안 (0)
      • 데이터베이스 (1)
      • -------- 데이터과학 -------- (0)
      • 데이터 사이언스 (8)
        • 인강 (8)
      • 데이터 분석 (2)
        • 인강 (2)
      • 머신러닝 (2)
        • 대학 수업 (2)
      • 인공지능 (11)
        • 대학교 강의 정리 (10)
        • 인공지능 관련 정보 (1)
      • -------- +a -------- (0)
      • Visual Studio Community (7)
        • 설치법 (1)
        • 단축키 (1)
        • 오류 (5)
      • Visual Studio Code (0)
      • 노션 (1)
      • 깃허브 (7)
        • 깃허브 사용법 (5)
        • 유니티, 언리얼 & 깃허브 (1)
        • 깃허브 주의사항 (1)
      • 챗GPT 활용법 (0)
      • 기타 feat. 프로그래밍 (7)
        • 프로그래머로 살아남기 (5)
        • 코딩 vs 프로그래밍 (1)
        • 애플 비전 프로 (1)
      • 메타버스 (5)
      • -------- 예술 -------- (0)
      • 음악 (1)
      • 미술 (0)
      • -------- XR -------- (0)
      • 유니티 이야기 (23)
        • 레트로의 유니티 게임 프로그래밍 에센스 요약 (4)
        • 유니티 관련 정보 (1)
        • 유니티 디버깅 (13)
        • 유니티 인강 (3)
        • 대학교 게임 프로그래밍 강의 (2)
      • 언리얼 이야기 (0)
        • 인생 언리얼 교과서 요약 (0)
      • 컴퓨터 그래픽스 (6)
        • OpenGL (6)
      • 가상현실 & 증강현실 (4)
        • 유니티 vr (4)
      • HCI 와 UI UX (7)
        • [책 정리] HCI 개론 (6)
      • -------- Design -------- (0)
      • 캐릭터 (1)
        • 모델링 (0)
        • 리깅 (1)
      • 포토샵 (3)
      • 3ds Max (7)
      • Maya (9)
        • 블로그 (1)
        • 인강 (6)
        • 대학교 (2)
      • Blender (14)
        • 책 (1)
        • 인강 (7)
        • 기타 (3)
        • 대학교 (3)
      • 아트 작업물들 (2)
      • 에셋 사이트 (1)
      • -------- 건강관리 -------- (0)
      • 건강관리 ft. 정현 (12)
        • 목 디스크 (2)
        • 눈 관리 (2)
        • 일상생활 습관 (6)
        • 일상생활 꿀팁 (2)
        • 사무직 꿀팁 (0)
      • 헬스의 정석 ft. 정현 (28)
        • 헬스와 건강 (8)
        • 헬스 구체화 정보 (6)
        • 헬스 유튜버 (1)
        • 헬스 서적 (1)
        • 도전 바디프로필! (11)
        • 헬스장 패션 (1)
      • -------- etc -------- (0)
      • 진로 관련 잡다한 글들 (34)
        • 진도율 (9)
        • 진로 관련 글들 (15)
        • 학교 강의 관련 글들 (10)
      • 인생 꿀 Tip (23)
        • 컴퓨터 초기 설정 (9)
        • 원격 데스크톱 (1)
        • 노트북 발열 (1)
        • 전자기기 (2)
        • 중고기기 팔기 (1)
        • 아이패드 필기 어플 (1)
        • 에어팟 (1)
        • 커피 (1)
        • 맥북 (1)
        • lg 그램 (1)
        • 검색엔진에서 내 티스토리 검색 (1)
        • hELLO 다크 모드 없애기 (1)
        • 인터넷 연결 문제 (1)
        • 키보드 문제 해결 (1)
      • 유튜브 (3)
      • 청춘 그리고 추억 (1)
      • 인생 계획표 (2)
        • 2024년 2학기 (1)
        • 2024년 여름방학 (0)
        • 2024년 1학기 (0)
        • 2023년 겨울방학 (1)
      • 다양한 글들 (98)
        • C++ STL (6)
        • Win32 API (24)
        • PushPush 게임 (13)
        • 컴퓨터구조 (1)
        • 자료구조와 알고리즘 (50)
        • 게임의 정의 (3)
        • 영상 회사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Dream
    • 코딩을 시작한 이유
    • 나를 소개합니다!
    • 블로그 공부법
    • IT & 가치 있는 일들
  • 인기 글

  • 태그

    컴퓨터구조
    심리학
    생명과학
    블렌더
    코딩
    AI
    유니티
    컴퓨터 네트워크
    스택
    C언어
    건국대
    배열
    함수
    알고리즘
    생물정보학
    리눅스
    데이터사이언스
    첨단바이오공학부
    인공지능
    C++
    의생명정보알고리즘
    포인터
    자료구조
    데이터과학
    의생명공학과
    명령어
    의생명공학
    연산자
    생명공학
    unity
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
smile blog
1. 네트워크 애플리케이션의 원리
상단으로

티스토리툴바