[네트워크] Chapter 2 - 애플리케이션 계층
▣ 네트워크 어플리케이션
■ 애플리케이션 계층:
- 애플리케이션 계층 프로토콜
- 클라이언트와 서버
- 프로세스
- 트랜스포트 계층 인터페이스
대부분의 애플리케이션은 두 프로세스가 메시지를 서로에게 보내는 통신 프로세스 쌍으로 구성된다.
(Client - Server(Web), Peer - Peer(P2P))
▣ 소켓(socket)
: 프로세스는 소켓(socket)을 통해 네트워크로 메시지를 보내고 받는다.
소켓은 호스트의 애플리케이션 계층과 트랜스포트 계층간의 인터페이스(API)이다.
● 애플리케이션 개발자는 소켓의 애플리케이션 계층에 대한 모든 통제권을 갖지만 소켓의 트랜스포트 계층에 대한
통제권은 (1) 트랜스포트 프로토콜의 선택, (2) 트랜스포트 계층 매개변수 설정 만을 갖는다.
▣ 프로세스 주소 배정
: 호스트는 IP주소(32bit)로 식별된다.
▣ 애플리케이션이 이용 가능한 트랜스포트 서비스
■ 패킷들은 전송 중 컴퓨터 네트워크 내에서 여러가지 이유로 손실될 수 있다. 만약, 재무, 파일전송, 메일의 경우 손실이
발생한다면 매우 위험하다. 이를 방지하기 위해 (1)신뢰적 데이터 전송을 제공한다.
■ 반대로, 신뢰적 데이터 전송을 제공하지 않을때, 손실 허용 애플리케이션의 경우 비디오,오디오 등에서 사용되어질 수
있다. 손실 데이터는 비디오, 오디오의 품질의 영향을 준다.
■ (2)보장된 처리율 서비스(송신 프로세스가 수신 프로세스로 비트를 전달할 수 있는 비율) +
(3) 시간 보장 서비스(송신자가 소켓으로 내보내는 모든 비트가 수신자의 소켓에 ~ms내에 도착하게 하는 것
(전화, 게임...등에서 엄격하게 작용)
■ (4)보안: 송신 프로세스가 전송하는 모든 데이터를 암호화할 수 있으며 수신 프로세스에서 해독이 가능하다
▣ 인터넷이 제공하는 어플리케이션
: 인터넷은 애플리케이션에게 2개의 전송프로토콜 TCP, UDP를 제공한다. 개발자는 애플리케이션을 만들때
UDP와 TCP 중 어느것을 사용할지 결정해야한다.
■ TCP 서비스
● 연결지향형 서비스: 애플리케이션 계층 메시지를 전송하기 전에 TCP는 클라이언트와 서버가 서로 핸드셰이킹(전송
제어 정보 교환)을 통해 준비를 한다. 메시지 전송을 마치면 연결이 해체된다.
● 신뢰적 데이터 전송: 통신 프로세스는 모든 데이터를 오류 없이 올바른 순서로 전달한다.
● 혼잡 제어 방식을 포함한다.
→ 네트워크가 혼잡 상태에 이르면 프로세스(클라이언트 or 서버) 속도를 낮춘다.
※ 통신하는 프로세스의 이득보다 인터넷 전체의 성능 향상을 위한 서비스
■ UDP 서비스
● UDP는 비연결형이므로 TCP처럼 통신전에 핸드셰이킹을 하지 않는다.
● 비신뢰적 데이터 전송 서비스를 제공한다.
● TCP와 달리 혼잡 제어 방식을 포함하지 않는다.
→ 송신측에서 데이터를 원하는 속도로 보낼 수 있다.
▣ HTTP개요
: 웹페이지 요청시 브라우저는 페이지 내부 객체에 대한 HTTP요청 메시지를 서버에게 보내고, 서버가 객체를 포함하는 HTTP응답 메시지로 응답한다.
■ HTTP는 TCP전송 프로토콜을 사용한다.
■ HTTP서버는 클라이언트에 대한 정보를 유지하지 않으므로 비상태 프로토콜이라고 한다.
□ 비지속연결, 지속연결
: 클라이언트-서버 상호작용이 TCP상에서 발생할 때 개발자는 요구 및 응답이 분리된 TCP연결을 보내야하는지,
모든 요구와 응답들이 같은 TCP연결상으로 보내져야 하는지 결정해야한다.
○ 비지속 연결
1) HTTP클라이언트는 HTTPP의 기본 포트 번호 80을 통해 TCP연결을 시도.
2) 1)에서 설정된 TCP연결 소켓을 통해 서버로 HTTP요청 메시지 전송.
3) 서버에서 클라이언트로 응답메시지 전송
4) 메시지를 올바로 받으면 TCP연결 해제 (비지속 연결)
5) 10개의 JPEG가 필요하다면 이 과정을 각각의 JPEG객체마다 위의 4단계를 반복.
- 작은 패킷이 클라이언트 - 서버를 왕복하는데 걸리는 시간을 RTT(round-trip time)이라고 한다. - 브라우저와 웹 서버사이에서의 TCP연결시 three-way handshake를 한다. 첫 두 부분이 경과하면 RTT가 계산되고, 세번째에 요청메시지를 함께 보낸다.
따라서 총 응답시간은 2RTT + HTML파일을 서버가 클라이언트에게 전송하는 데 걸리는 시간이다.
○ 지속 연결
: 연속해서 객체를 받을 수 있다. 일정기간 미사용시 연결을 닫는다.
□ HTTP 메시지 포맷
○ HTTP요청 메시지
- 대표적으로 GET과 POST방식이 있다.
○ HTTP응답 메시지
□ 쿠키
: 사이트가 사용자를 추적하게 해주는것.
○ 사이트 접속시 HTTP응답에 식별번호를 담고 있는 쿠키 헤더가 들어있다.(Set - cookie: 1678)
→ 사이트를 돌아다닐때 HTTP요청에 식별번호를 포함하는 쿠키 헤더 파일을 넣는다.(Cookie:1678)
→ 사이트는 1678 사용자의 접속기록, 접속한 페이지를 확인할 수 있거나 쇼핑 카트와 같은 서비스를 제공할 수 있다.
□ 웹 캐싱(Web cache, = proxy server)
: 최근 호출된 객체의 사본을 저장 및 보존한다.
○ 사용자의 모든 HTTP요구는 웹 캐시에 가장 먼저 보내진다. (설정에 따라 다름)
○ 1. 브라우저는 웹캐시와 TCP연결을 설정하고 HTTP요청을 보낸다.
○ 2-1. 웹 캐시는 객체의 사본이 자신에게 저장되어있는지 확인하고 응답메시지를 전송한다.
2-2. 웹 캐시가 객체의 사본이 없다면 서버간의 TCP연결을 진행 후 HTTP요청을 보내고 응답을 받은후 그 객체를 저장 하고 그 객체의 사본을 (미리 설정된 TCP연결을 통하여)브라우저에게 전달한다.
→ 웹 캐시는 서버이자 클라이언트이다.
○ 보통 ISP(인터넷 서비스 제공자)가 구입하고 설치한다.
○ 클라이언트 요구에 대한 응답시간을 줄일 수 있다.
○ 한 기관에서 인터넷으로 접속하는 웹 트래픽을 대폭으로 줄일 수 있어, 모든 애플리케이션 성능을 개선한다.
▣ 소켓 프로그래밍 : 네트워크 애플리케이션
: 클라이언트와 서버 프로그램으로 구성되어있다. 두 프로그램을 수행하면 클라이언트와 서버 프로세스가 생성되고
두 프로세스가 소켓으로부터 읽고 쓰기를 통해 서로 통신한다.
■ RFC에 정의된 표준 프로토콜을 구현하는 클라이언트-서버 애플리케이션을 개방형(open) 애플리케이션이라 한다.
■ 소켓이 생성됭때 포트번호(port Number)라고 하는 식별자가 소켓에 할당된다.
→ 패킷의 목적지 주소는 목적지 호스트의 IP주소 + 소켓의 포트번호로 구성된다.
■ TCP Server Process
● 클라이언트 프로세스와 서버 프로세스가 세방향 핸드셰이크를 하기 위한 환영주소(welcoming socket)
직접적인 통신은 파이프(pipe)가 연결되어있는 Client socket ↔ Connection socket 사이에서 이루어진다.