[컴퓨터네트워크] 12. 응용계층 소개(1)

2024. 5. 22. 23:58·Computer Science/Network

응용 계층 소개

  • 이용자, 혹은 프로그램(프로세스)에게 서비스 제공
  • 프로그램을 위한 다양한 네트워크 서비스 제공
    • 원격컴퓨터접근, 파일전송, 이메일전송, ...

서비스 제공

  • 표준(standard) 응용계층 프로토콜
    • (보통 RFC 표준 문서와 절차를 통해서 그 내용을 구현함)
  • 비표준(nonstandard, proprietary) 응용계층 프로토콜
    • (개인적인 그룹, 집단에서 자체적으로 구현한 것)

응용계층 패러다임

  • Client-server paradigm
    • Traditional paradigm
  • Peer-to-peer paradigm
    • New paradigm
  • Mixed Paradigm

 

클라이언트-서버 프로그래밍

  • 클라이언트는 통신을 시작하고, 요청을 보내는 프로그램
  • 서버는 클라이언트의 요청을 서비스하는 응용 프로그램
  • 서비스 유형
    • TCP
      • ex) 웹, 이메일...
    • UDP
      • ex) DNS, 인터넷 전화...
  • 서버 동작 구현 방법
    • 반목적(Iterative)
    • 동시적(등시적, Concurrent)
      • (대부분 서버가 동시적임)

API

  • Application Programming Interface
  • 어플리케이션을 만들기 위한 하위 함수, 프로토콜, 도구들의 집합
    • (보통 OS쪽에서 많이 제공해줌)
  • 호출 이름, 파라미터 개수, 타입, 리턴값 등이 정해져 있음
    • (==> 형식이 정해져있다)
  • 종류
    • Windows API
    • Socket API
    • OPEN API (Web)

 

 

 

전송계층 사용

  • 인터넷에서의 서비스는 한 쌍의 프로세스에 의해 제공
    • 프로세스는 인간이나 프로그램
  • 한 쌍의 프로세스는 두 응용계층 간에 직접 연결이 없으므로 전송 계층의 서비스를 필요로 함
  • 전송계층 프로토콜은 UDP, TCP, SCTP

UDP 반복적 서비스

실제로는 Concurrent가 대부분이지만 반복적으로 구현해보겠다

  • 반복적 서버는 한번에 하나의 클라이언트 요청 처리
    • 요청을 받고, 처리하고, 응답을 보내나서, 다음 요청을 처리
  • 하나의 요청을 처리하는 동안에, 다른 클라이언트의 요청이나, 같은 클라이언트의 다른 요청도, 기다려야 함
  • 수신되고, 큐에 기다리는 요청은 선입선출 방식으로 처리

 

반복적 TCP 서비스

  • 반복적 TCP 서비스는 자주 사용되지 않음
  • 동작이 간단하므로 이 섹션에서 고찰해 봄

 

동시적 통신

  • 등시 서버는 동시에 여러 클라이언트의 요청을 처리
  • 다양한 언어가 이 방식을 지원
    • C에서는 여러 자식 프로세스가 각각의 요청을 따로 처리
    • Java에서는 각각의 쓰레드(thread)가 요청을 따로 처리

C 반복적 프로그래밍

일반적 이슈

  • 소켓은 송수신 버퍼를 가지지 않는다
    • 데이터를 보내거나 받는 기능이 소켓에 있는 것이 아니다.
  • 소켓은 단지 참조 레이블이다.
    • 예)파일핸들
  • 버퍼나 변수들은 운영체제 내에 있다.

소켓 구조

  • Family
    • PF_INET : IPv4
    • PF_INET6 : IPv6
  • Type
    • SOCK_STREAM : TCP
    • SOCK_DGRAM : UDP
    • SOCK_RAW : IP
    • (일반적으로 TCP/UDP를 사용하는데, IP를 RAW로 사용할 수도 있다)
  • Protocol
    • 0 : TCP/IP

C header files

UDP 반복적 프로그래밍

여기서 Echo는 클라이언트가 서버에게 데이터를 보내면, 서버는 받은 데이터를 클라이언트에게 그대로 반향시켜 data가 잘 전달됬다는 것을 알려줌

  • Echo Client
    • Send a short string of character to server
  • Echo Server
    • Echo back to client
  • Server 프로그램 동작
    • Scoket()으로 소켓 생성
    • Bind()로 지정된 서버 주소와 포트 설정
    • Recvfrom()을 호출하면 데이터가 올 때까지 블록(block)됨
    • Sendto()로 데이터 송신
  • Client 프로그램 동작
    • Socket()으로 서버측 주소로 가는 클라이언트 소켓 생성
    • Sendto(), recvfrom()으로 데이터 송수신
      • (보내고:Sendto 데이터가 올 때 까지 기다림:recvfrom)

 

서버

 

클라이언트

'Computer Science > Network' 카테고리의 다른 글

[컴퓨터네트워크] 14. 표준 클라이언트/서버 프로토콜 (1)  (0) 2024.05.23
[컴퓨터네트워크] 13. 응용계층 소개(2)  (0) 2024.05.23
[컴퓨터네트워크] 11. 전송계층 프로토콜(2)  (0) 2024.05.22
[컴퓨터네트워크] 10. 전송계층 프로토콜(1)  (0) 2024.05.19
[컴퓨터네트워크] 09. 전송계층(2)  (0) 2024.05.18
'Computer Science/Network' 카테고리의 다른 글
  • [컴퓨터네트워크] 14. 표준 클라이언트/서버 프로토콜 (1)
  • [컴퓨터네트워크] 13. 응용계층 소개(2)
  • [컴퓨터네트워크] 11. 전송계층 프로토콜(2)
  • [컴퓨터네트워크] 10. 전송계층 프로토콜(1)
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (457)
      • Software Development (27)
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[컴퓨터네트워크] 12. 응용계층 소개(1)
상단으로

티스토리툴바