일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 스프링
- 포두부 보쌈
- dp
- BFS
- Servlet
- 스프링 MVC
- 2638
- 프로그래머스
- 2020 KAKAO BLIND
- 설탕 배달
- 1로 만들기
- 동적 프로그래밍
- 백준
- 2589
- 다이나믹 프로그래밍
- 쓰레드 풀
- 서블릿
- 2839
- 문자열 압축
- 호유동
- HTTP API
- 고모네 콩탕
- 완도산회
- 투어
- 양꼬치
- 맛집 투어
- Spring
- mvc
- 알고리즘
- 맛집
- Today
- Total
프로그래밍 공방
애플리케이션 계층 : Application Layer 본문
네트워크 애플리케이션 개발
서로 다른 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것
애플리케이션 구조
- 클라이언트 서버 구조 : 서버가 항상 켜져 있으면서 클라이언트라는 다른 호스트들의 요청을 받는 구조
- P2P 구조 : 피어(peer, 간헐적으로 연결된 호스트 쌍)들이 서로 직접 통신하도록 하는 구조
프로세스 간 통신
2개의 다른 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지 교환으로 서로 통신한다.
클라이언트와 서버 프로세스
- 클라이언트 : 두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스
- 서버 : 세션을 시작하기 위해 접속을 기다리는 서버
ex) 웹(브라우저 - 클라이언트, 웹 서버 - 서버) / P2P(파일을 내려받는 피어 - 클라이언트, 파일을 올리는 피어 - 서버)
소켓 : Socket
프로세스와 컴퓨터 네트워크 사이의 인터페이스
애플리케이션과 네트워크 사이의 API(Application Programming Interface)
* 애플리케이션 개발자는 소켓의 애플리케이션 계층에 대한 모든 통제권을 갖니만 트랜스포트 계층에 대한 통제권은 거의 갖지 못한다.
(트랜스포트 프로토콜 선택 / 최대 버퍼, 최대 세그먼트 크기 등 약간의 계층 매개변수 설정)
포트 번호 : Port Number
수신 프로세스를 식별하기 위한 식별자(호스트는 IP 주소로 식별하고 포트 번호는 목적지 호스트 내의 수신 프로세스를 구분하는데 사용된다.)
애플리케이션 계층 프로토콜
다른 종단 시스템에서 실행되는 애플리케이션 프로세스가 서로 메시지를 보내는 방법을 정의한다.
- 교환 메시지 타입(ex : 요청 메시지, 응답 메시지)
- 여러 메시지 타입의 문법(메시지 내부의 필드와 필드 간의 구별 방법
- 필드의 의미, 즉 필드에 있는 정보의 의미
- 언제, 어떻게 프로세스가 메시지를 전송하고 메시지에 응답하는지 결정하는 규칙
HTTP : HyperText Transfer Protocol
웹의 애플리케이션 계층 프로토콜
메시지의 구조 및 클라이언트와 서버가 메시지를 어떻게 교환하는지에 대해 정의한다.(TCP를 전송 프로토콜로 사용)
웹 용어
- 객체(object) : 단일 URL로 지정할 수 있는 하나의 파일(HTML, JPEG, GIF, 오디오 등)
- 웹 페이지(web page) : 객체들로 구성된 문서. 대부분의 웹 페이지는 기본 HTML 파일과 여러 참조 객체로 구성된다.
- 웹 브라우저 : Explorer, 크롬 같은 HTTP의 클라이언트
- 웹 서버 : URL로 각각을 지정할 수 있는 웹 객체를 가지고 있는 서버
HTTP의 특징
1. TCP를 전송 프로토콜로 사용한다.
- TCP가 HTTP에게 신뢰적인 데이터 전송 서비스를 제공하므로 HTTP는 데이터의 손실에 대해 걱정할 필요가 없다.
2. HTTP는 비상태 프로토콜(stateless protocol)
- HTTP 서버는 클라이언트 서버에 대한 정보를 유지하지 않으므로, 동일한 요청이 와도 반복 수행한다.
비지속 연결과 지속 연결
비지속 연결 : 각 요구 / 응답 쌍이 분리된 TCP 연결을 통해 보내진다.
지속 연결 : 모든 요구와 해당하는 응답들이 같은 TCP 연결상으로 보내진다.
* 애플리케이션의 타입에 맞춰 개발자가 결정할 문제이다.
비지속 연결 HTTP
연결 수행 과정
1. HTTP 클라이언트는 HTTP의 기본 포트 80을 통해 서버로 TCP 연결을 시도한다. (TCP 연결과 관련하여 클라이언트와 서버에 각각 소켓이 있게 된다.
2. HTTP 클라이언트는 1단계에서 설정된 TCP 연결 소켓을 통해 서버로 원하는 객체에 대한 경로를 포함하여 HTTP 요청 메시지를 보낸다.
3. HTTP 서버는 1단계에서 설정된 연결 소켓을 통해 요청 메시지를 받는다. 또한 요청받은 경로에 존재하는 객체를 추출하여 응답 메시지에 캡슐화한다. 그리고 응답 메시지를 소켓을 통해 클라이언트로 보낸다.
4. HTTP 서버는 TCP에게 TCP 연결을 끊으라고 한다.
5. HTTP 클라이언트가 응답 메시지를 받으면 TCP 연결이 중단된다. 클라이언트는 응답 메시지로부터 파일을 추출한다.
6. 나머지 객체에 대해 위 과정을 반복한다.
비지속 연결 HTTP는 위와 같이 서버가 객체를 보낸 후에 각 TCP 연결이 끊어진다.(각 TCP 연결은 하나의 요청 메시지와 하나의 응답 메시지만 전송한다.)
* 동시성 정도를 브라우저에서 조절할 수 있다.
비지속 연결 HTTP의 수행 시간
RTT(round-trip time) : 패킷이 클라이언트에서 서버까지 가고, 다시 클라이언트로 되돌아오는 데 걸리는 시간
1. 클라이언트에서 웹 서버에 요청을 보내면 둘은 TCP 연결을 시도하게 된다.(세방향 핸드셰이크)
2. 클라이언트가 TCP 메시지를 서버로 보내고, 서버는 응답하고(핸드셰이크의 처음 두 과정, 1RTT) 마지막으로 클라이언트가 다시 서버에게 응답한다.(이때 HTTP 요청 메시지를 TCP 연결로 보내면서 핸드셰이크의 세 번째 응답을 함께 보낸다.
3. 요청 메시지가 서버에 도착하면 서버는 HTML 파일을 TCP 연결로 보낸다. (1RTT + HTML 파일을 서버가 전송하는데 걸리는 시간)
비지속 연결의 단점
1. 각 요청 객체에 대해 새로운 연결이 설정되고 유지되어야 한다.(TCP 버퍼 할당, TCP 변수들이 클라이언트와 서버에 유지되어야 한다. -> 여러 클라이언트의 요청을 처리하는 서버에서는 큰 부담이 될 수 있다.)
2. 각 객체는 2RTT를 필요로 한다.
지속 연결 HTTP
서버가 응답을 보낸 후에 TCP 연결을 그대로 유지하며 이 연결을 통해 이후 요청도 처리한다.
* 일반적으로 HTTP 서버는 일정 기간 사용되지 않으면 연결을 닫는다.
DNS : Domain Name Service
호스트 네임을 IP 주소로 변환해 주는 디렉토리 서비스
호스트를 식별하는 2가지 방법
- 호스트 네임 (www.~~~.com 등등)
- IP 주소
DNS의 특징
1. DNS 서버들의 계층구조로 구현된 분산 데이터베이스이다.
2. 호스트가 분산 데이터베이스로 질의하도록 허락하는 애플리케이션 계층 프로토콜이다.
3. DNS 프로토콜은 UDP 상에서 수행되고 포트 번호 53을 사용한다.
DNS의 수행 과정
사용자가 브라우저에서서 URL www.~~~.com을 수행할 때,
1. 사용자 컴퓨터는 DNS 애플리케이션의 클라이언트 측을 수행
2. 브라우저는 URL 로부터 호스트 네임 www.~~~.com을 추출하고 그 호스트 네임을 DNS 애플리케이션의 클라이언트 측에 넘긴다.
3. DNS 클라이언트는 DNS 서버로 호스트 네임을 포함하는 질의를 보낸다.
4. DNS 클라이언트는 호스트 네임에 대한 IP 주소를 가진 응답을 받는다.
5. 브라우저가 DNS로부터 IP 주소를 받으면, 브라우저는 그 IP 주소와 그 주소의 80번 포트에 위치하는 HTTP 서버 프로세스로 TCP 연결을 초기화한다.
* 보통 위 과정은 DNS를 사용하는 인터넷 애플리케이션에게 추가 지연을 가져오지만 보통 가까운 DNS 서버에 캐시되어 있어서 큰 문제가 되지는 않는다.
DNS의 다른 서비스
- 호스트 엘리어싱 : 별칭 호스트 네임으로 정식 호스트 네임을 얻기 위해 사용
- 메일 서버 엘리어싱 : 위와 동일
- 부하 분산 : 중복 웹 서버의 경우, 여러 IP 주소가 하나의 정식 호스트 네임과 연관되어 있기 때문에, DNS 데이터 베이스에 이 IP 주소 집합을 넣어두고 서버는 IP 주소 집합 전체를 순환식으로 보낸다.
'개발 > 네트워크' 카테고리의 다른 글
트랜스포트 계층 : Transport Layer / UDP (0) | 2021.02.08 |
---|---|
Spanning Tree Protocol / 스패닝 트리 프로토콜 (0) | 2021.01.10 |
IP Address (0) | 2021.01.02 |
유니캐스트, 브로드캐스트, 멀티캐스트 (0) | 2020.12.06 |
MAC address (0) | 2020.12.05 |