네트워크 애플리케이션의 구조와 애플리케이션 계층의 프로토콜
- 네트워크 애플리케이션의 원리
- 구조
- 클라이언트-서버
- P2P
- 프로세스간 통신
- 개요
- 실제로 통신하는 것은 프로그램이 아니라 프로세스다.
- 프로세스는 컴퓨터 네트워크를 통한 메시지 교환 (요청-응답)을 통해 서로 통신한다.
- 프로세스 간의 통신을 위한 규칙은 end system의 운영체제에 의존한다.
- 클라이언트와 서버 프로세스
- 클라이언트 프로세스
- 프로세스 간의 통신 세션에서 다른 프로세스와 세션을 시작하려고 접속을 초기화(통신초기화)하는 프로세스를 의미한다.
- 서버 프로세스
- 세션을 시작하기 위해 접속을 기다리는 프로세스를 의미한다.
- 클라이언트 프로세스
- 프로세스와 컴퓨터 네트워크 사이의 인터페이스
- 프로세스는 소켓(socket)을 통해 네트워크로 메시지를 보내고 받는다.
- 소켓은 애플리케이션 계층과 트랜스포트 계층간의 인터페이스다.
- 소켓은 애플리케이션과 네트워크 사이의 API 라고도 한다.
- 개발자는 소켓의 애플리케이션 계층에 대한 모든 통제권을 갖고 활용할 수 있지만 소켓의 트랜스포트 계층은 거의 통제할 수 없다. 트랜스포트 프로토콜의 선택과 최대 버퍼와 최대 세그먼트 크기 같은 매개변수 설정 밖에 할 수 없다.
- 통신 대상 프로세스는 IP 주소와 포트번호로 식별할 수 있다.
- 트랜스포트 계층 포로토콜은 수신 프로세스의 소켓으로 네트워크를 통해 메시지를 이동시킬 책임이 있다.
- 트랜스포트 계층 프로토콜이 제공하는 서비스
- 신뢰적 데이터 전송(reliable data transfer)
- 트랜스포트 계층 프로토콜은 신뢰적 데이터 전송 서비스를 제공할 수 있다.
- 패킷이 손실되면 host 혹은 router에 의해 패킷이 버려질 수 있다.
- 패킷이 손실되면 큰일나는 애플리케이션이 존재한다. 이 경우 데이터가 오류 없이 수신 프로세스에 도착할 것이라는 확신을 제공하는 기능이 필요하다. 은행 같은 경우 이러한 기능은 무조건 필요하다.
- 신뢰적 데이터 전송 서비스는 프로토콜이 데이터 전송을 안전하게 보장하는 기능이다.
- 반면 이러한 서비스가 필요하지 않은 애플리케이션은 약간의 데이터 손실을 감수할 수 있다.
- 오디오나 비디오의 품질 저하
- 처리율
- 트랜스포트 계층 프로토콜은 처리율 보장을 제공할 수 있다.
- 처리율은 네트워크 경로를 따라 두 프로세스간의 통신 세션에서 송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율을 의미한다.
- 애플리케이션이 최소로 필요로 하는 처리율을 트랜스포트 프로토콜이 보장할 수 있어야하는 경우가 있다. 처리율 요구사항을 갖는 애플리케이션을 대역폭 민감 애플리케이션이라고 한다.
- 예) 인터넷전화
- 반면 이러한 최소한의 처리율을 보장할 필요가 없는 애플리케이션을 탄력적 애플리케이션(elastic application) 이라고 한다.
- 예) 메일, 파일 전송
- 시간
- 트랜스포트 계층 프로토콜은 시간 보장을 제공할 수 있다.
- 송신자가 소켓으로 내보내는 모든 비트가 수신자의 소켓에 특정 시간내에 도착해야만 하는 애플리케이션
- 예) 인터넷 전화, 가상환경, 원격 화상 회의, 등 실시간 상호작용 애플리케이션
- 보안
- 트랜스포트 계층 프로토콜은 애플리케이션에 하나 이상의 보안 서비스를 제공할 수 있다.
- 트랜스포트 프로토콜은 송신 호스트의 송신 프로세스가 전송하는 모든 데이터를 암호화할 수 있고 수신 호스트에서 그 데이터를 수신프로세스로 전달하기 전에 데이터의 암호를 해독할 수 있다.
- 데이터 무결성 서비스를 제공한다.
- 종단 인증 서비스를 제공한다.
- 신뢰적 데이터 전송(reliable data transfer)
- 개요
- 인터넷 전송 프로토콜이 제공하는 서비스 비교
- 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
- request line
- 응답 메시지
- status line
- HTTP 버전 필드
- 상태 코드 필드
- 해당 상태 코드 메시지 필드
- header line
- 헤더 필드 이름: 값 + CR + LF
- entity body
- status line
- HTTP 개발 역사
- HTTP/1
- 1996년
- 비지속 연결
- HTTP/1.1
- 1999년
- 동기적 지속 연결
- HTTP/2.0
- 2015년
- 비동기적 지속 연결
- HTTP/1
- 쿠키
- 무상태 프로토콜인 HTTP를 사용하지만 사용자의 접속을 제어하거나 사용자에 따라 다른 콘텐츠를 제공해야할 필요성 때문에 개발되었다.
- 서버에는 사용자의 state 를 쿠키로 저장한다.
- 웹 캐시
- 수 많은 사람들이 같은 사이트에 접속하는 경우 오버헤드가 커진다. 즉 부하가 생기고 속도가 느려진다.
- 똑같은 중복 요청의 경우 origin 서버까지 요청이 가지 않아도 동일한 결과를 응답할 수 있다. origin 서버로부터 이전에 미리 받아서 저장하고 있던 데이터로 중간의 프록시 서버가 응답한다.
- CDN 회사는 웹 캐시를 설치하여 많은 트래픽을 분산하고 있다.
- 그렇다면 복사본이 최신 버전이라는 것을 어떻게 보장할 것인가?
- HTTP 는 클라이언트가 브라우저로 전달되는 모든 객체가 최신의 것임을 확인하면서 캐싱을 하게 해주는 방식을 갖고 있다. 이 방식을 조건부 GET 이라고 한다.
- GET 방식과 if-modified-since 헤더를 사용한다.
- URL
- 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 이용
- user agent
- 구성요소
- DNS
- IP 버전 4 주소의 경우 32 bit 길이의 주소를 가지는데 사람이 읽고 기억하기가 어렵다.
- 사용자가 google.com 이라고 주소를 입력하면 해당하는 IP 주소를 알려주는게 DNS 시스템이다.
- 데이터센터에서 여러 대의 서버를 두는 경우 호스트 이름은 동일하더라도 IP 주소를 다르게 관리할 수 있어 트래픽을 분산할 수 있는 장점도 있다.
- DNS 시스템은 지역적으로도 분산되어 있고 계층적으로 역할이 나누어져있다.
- Root - Top Level - authoritative
- 구조
'Network > 컴퓨터 네트워킹 하향식 접근' 카테고리의 다른 글
| [컴퓨터 네트워킹 하향식 접근] 컴퓨터 네트워크 보안 (0) | 2023.04.01 |
|---|---|
| [컴퓨터 네트워킹 하향식 접근] 6. 무선 및 이동 네트워크 (1) | 2023.03.19 |
| [컴퓨터 네트워킹 하향식 접근] 4. 네트워크 계층 (0) | 2023.02.18 |
| [컴퓨터 네트워킹 하향식 접근] 3. 트랜스포트 계층 (0) | 2023.02.12 |
| [컴퓨터 네트워킹 하향식 접근] 1. 컴퓨터 네트워크와 인터넷 (0) | 2023.01.08 |
댓글