본문 바로가기
Network/컴퓨터 네트워킹 하향식 접근

[컴퓨터 네트워킹 하향식 접근] 2. 애플리케이션 계층

by creatingeveryday 2023. 1. 28.
네트워크 애플리케이션의 구조와 애플리케이션 계층의 프로토콜

 

  • 네트워크 애플리케이션의 원리
    • 구조
      • 클라이언트-서버
      • P2P
    • 프로세스간 통신
      • 개요
        • 실제로 통신하는 것은 프로그램이 아니라 프로세스다.
        • 프로세스는 컴퓨터 네트워크를 통한 메시지 교환 (요청-응답)을 통해 서로 통신한다.
        • 프로세스 간의 통신을 위한 규칙은 end system의 운영체제에 의존한다.
      • 클라이언트와 서버 프로세스
        • 클라이언트 프로세스
          • 프로세스 간의 통신 세션에서 다른 프로세스와 세션을 시작하려고 접속을 초기화(통신초기화)하는 프로세스를 의미한다.
        • 서버 프로세스
          • 세션을 시작하기 위해 접속을 기다리는 프로세스를 의미한다.
      • 프로세스와 컴퓨터 네트워크 사이의 인터페이스
        • 프로세스는 소켓(socket)을 통해 네트워크로 메시지를 보내고 받는다.
        • 소켓은 애플리케이션 계층과 트랜스포트 계층간의 인터페이스다.
        • 소켓은 애플리케이션과 네트워크 사이의 API 라고도 한다.
        • 개발자는 소켓의 애플리케이션 계층에 대한 모든 통제권을 갖고 활용할 수 있지만 소켓의 트랜스포트 계층은 거의 통제할 수 없다. 트랜스포트 프로토콜의 선택과 최대 버퍼와 최대 세그먼트 크기 같은 매개변수 설정 밖에 할 수 없다.
        • 통신 대상 프로세스는 IP 주소와 포트번호로 식별할 수 있다.
        • 트랜스포트 계층 포로토콜은 수신 프로세스의 소켓으로 네트워크를 통해 메시지를 이동시킬 책임이 있다.
      • 트랜스포트 계층 프로토콜이 제공하는 서비스 
        • 신뢰적 데이터 전송(reliable data transfer)
          • 트랜스포트 계층 프로토콜은 신뢰적 데이터 전송 서비스를 제공할 수 있다.
          • 패킷이 손실되면 host 혹은 router에 의해 패킷이 버려질 수 있다.
          • 패킷이 손실되면 큰일나는 애플리케이션이 존재한다. 이 경우 데이터가 오류 없이 수신 프로세스에 도착할 것이라는 확신을 제공하는 기능이 필요하다. 은행 같은 경우 이러한 기능은 무조건 필요하다.
          • 신뢰적 데이터 전송 서비스는 프로토콜이 데이터 전송을 안전하게 보장하는 기능이다.
          • 반면 이러한 서비스가 필요하지 않은 애플리케이션은 약간의 데이터 손실을 감수할 수 있다.
            • 오디오나 비디오의 품질 저하
        • 처리율
          • 트랜스포트 계층 프로토콜은 처리율 보장을 제공할 수 있다. 
          • 처리율은 네트워크 경로를 따라 두 프로세스간의 통신 세션에서 송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율을 의미한다.
          • 애플리케이션이 최소로 필요로 하는 처리율을 트랜스포트 프로토콜이 보장할 수 있어야하는 경우가 있다. 처리율 요구사항을 갖는 애플리케이션을 대역폭 민감 애플리케이션이라고 한다.
            • 예) 인터넷전화
          • 반면 이러한 최소한의 처리율을 보장할 필요가 없는 애플리케이션을 탄력적 애플리케이션(elastic application) 이라고 한다.
            • 예) 메일, 파일 전송
        • 시간
          • 트랜스포트 계층 프로토콜은 시간 보장을 제공할 수 있다.
          • 송신자가 소켓으로 내보내는 모든 비트가 수신자의 소켓에 특정 시간내에 도착해야만 하는 애플리케이션
            • 예) 인터넷 전화, 가상환경, 원격 화상 회의, 등 실시간 상호작용 애플리케이션
        • 보안
          • 트랜스포트 계층 프로토콜은 애플리케이션에 하나 이상의 보안 서비스를 제공할 수 있다.
          • 트랜스포트 프로토콜은 송신 호스트의 송신 프로세스가 전송하는 모든 데이터를 암호화할 수 있고 수신 호스트에서 그 데이터를 수신프로세스로 전달하기 전에 데이터의 암호를 해독할 수 있다.
          • 데이터 무결성 서비스를 제공한다.
          • 종단 인증 서비스를 제공한다. 
    • 인터넷 전송 프로토콜이 제공하는 서비스 비교
      • TCP 와 UDP는 애플리케이션에 서로 다른 서비스를 제공한다.
      • 애플리케이션의 요구사항을 살펴보고 결정해야한다.
        • 데이터 손실
        • 대역폭
        • 시간 민감성
      • TCP
        • 연결지향형 서비스
          • 애플리케이션 계층 메시지를 전송하기전 클라이언트와 서버가 서로 전송 제어 정보를 교환한다(핸드쉐이킹)
          • 이렇게 TCP 연결이 두 프로세스의 소켓사이에 존재하게 되고 그때부터 서로 통신을 시작한다.
          • 수신 프로세스가 받을 수 있는 용량의 데이터만 보낼 수 있다.
        • 신뢰적인 데이터 전송 서비스
          • TCP는 패킷 손실 없이 수신 소켓으로 데이터를 전송할 수 있게 보장한다.
          • 모든 데이터를 오류 없이 올바른 순서로 전달한다.
          • 에러가 발생할 경우 재전송을 요청한 후 에러가 없는 데이터가 모두 도착했을 때 애플리케이션 레이어에 전달한다.
          • HTTP, SMTP, FTP는 데이터 손실이 발생하면 안되기 때문에 TCP를 사용한다.
        • 혼잡 제어 서비스
          • 네트워크가 혼잡 상태에 이르면 프로세스 속도를 낮추어서 각 TCP 연결이 네트워크 대역폭을 공평하게 공유할 수 있게끔 한다. 
      • UDP
        • 비신뢰적인 서비스
          • 비연결형이므로 두 프로세스가 통신을 하기전에 핸드셰이킹 하지 않는다.
          • 그래서 전반적으로 TCP보다 속도가 빠르다.
          • 순서가 뒤바뀔수도 있고 데이터 손실이 발생할 수도 있다.
        • 송신 측은 데이터를 원하는 속도로 보낼 수 있지만 실제로 제한된 대역폭, 혼잡으로 인해 전송 속도가 감소할 수 있다. 
    • WEB과 HTTP
      • URL
        • 웹 페이지의 객체는 URL로 지정할 수있는 하나의 파일이다.
      • HTTP(HyperText Transfer Protocol)
        • HTTP는 메시지의 구조 및 클라이언트와 서버가 메시지를 어떻게 교환하는지에 대해 정의한다.
        • 데이터 손실이 일어나면 안되기 때문에 TCP를 전송 프로토콜로 사용한다.
        • 비상태 프로토콜(stateless)
          • 서버가 클라이언트에게 요청파일을 보낼때 서버는 클라이언트에 관한 어떠한 상태정보도 저장하지 않는다. 
        • 기본적으로 지속 연결 모드로 사용하지만 비지속 연결 모드를 사용할 수 도 있음.
          • 지속 연결: 모든 요청과 응답이 같은 TCP 연결을 통해 이루어 진다.(persistent)
          • 비지속 연결: 각 요청와 응답이 분리된 TCP 연결을 통해 이루어진다.(non-persistent)
        • HTTP 메시지 구조
          •  ASCII 텍스트로 쓰여있음. 
          • 요청 메시지
            • request line
              • method 필드: GET, POST, PUT, DELETE, HEAD...
              • url 필드
              • HTTP 버전 필드
            • header line
              • 헤더 필드 이름: 값 + CR + LF
            • entity body
          • 응답 메시지
            • status line
              • HTTP 버전 필드
              • 상태 코드 필드
              • 해당 상태 코드 메시지 필드
            • header line
              • 헤더 필드 이름: 값 + CR + LF
            • entity body
        • HTTP 개발 역사
          •  HTTP/1
            • 1996년
            • 비지속 연결
          • HTTP/1.1
            • 1999년
            • 동기적 지속 연결
          • HTTP/2.0
            • 2015년
            • 비동기적 지속 연결
      • 쿠키
        • 무상태 프로토콜인 HTTP를 사용하지만 사용자의 접속을 제어하거나 사용자에 따라 다른 콘텐츠를 제공해야할 필요성 때문에 개발되었다.
        • 서버에는 사용자의 state 를 쿠키로 저장한다.
      • 웹 캐시
        • 수 많은 사람들이 같은 사이트에 접속하는 경우 오버헤드가 커진다. 즉 부하가 생기고 속도가 느려진다.
        • 똑같은 중복 요청의 경우 origin 서버까지 요청이 가지 않아도 동일한 결과를 응답할 수 있다. origin 서버로부터 이전에 미리 받아서 저장하고 있던 데이터로 중간의 프록시 서버가 응답한다.
        • CDN 회사는 웹 캐시를 설치하여 많은 트래픽을 분산하고 있다. 
        • 그렇다면 복사본이 최신 버전이라는 것을 어떻게 보장할 것인가?
          • HTTP 는 클라이언트가 브라우저로 전달되는 모든 객체가 최신의 것임을 확인하면서 캐싱을 하게 해주는 방식을 갖고 있다. 이 방식을 조건부 GET 이라고 한다. 
          • GET 방식과 if-modified-since 헤더를 사용한다. 
    • SSL / TLS
      • TCP 데이터 전송시 암호화를 제공하는 프로토콜
      • Secured Socket Layer / Transport Layer Security
      • 애플리케이션 계층 프로토콜
      • 서버와 통신 시작 시 TCP의 핸드셰이킹처럼 SSL 연결을 먼저 확립하고 암호화된 방식으로 통신할 수 있게 한다.
      • http => +SSL/TLS => https
    • 인터넷 전자메일
      • 구성요소
        • user agent
          • 사용자가 메시지를 읽고 응답하고 전달하고 저장하고 구성하게 해준다. 
          • 예) gmail, apple mail, naver mail...
        • mail server
          • 메일 서버 내에는 mail box가 존재한다. 
          • mail box는 메일을 유지하고 관리한다. 
        • SMTP(Simple Mail Transfer Protocol)
          • 인터넷 전자 메일을 위한 애플리케이션 계층 프로토콜
          • TCP 이용
    • DNS
      • IP 버전 4 주소의 경우 32 bit 길이의 주소를 가지는데 사람이 읽고 기억하기가 어렵다.
      • 사용자가 google.com 이라고 주소를 입력하면 해당하는 IP 주소를 알려주는게 DNS 시스템이다. 
      • 데이터센터에서 여러 대의 서버를 두는 경우 호스트 이름은 동일하더라도 IP 주소를 다르게 관리할 수 있어 트래픽을 분산할 수 있는 장점도 있다. 
      • DNS 시스템은 지역적으로도 분산되어 있고 계층적으로 역할이 나누어져있다.
      • Root - Top Level - authoritative

댓글