2. Application Layer
- Clinet-Server 구조
- Peer-to-Peer (P2P)
Client-Server Archtecture
Server :
- 항상 켜져 있다.
- 고정 IP 사용
- 인기 웹서버인 경우 호스트들의 클러스터 사용
Clients :
- 서버와 통신
- 간헐적으로 연결
- 동적 IP 혹은 고정 IP
- 서로 직접 통신하진 않음
순수한 P2P 구조
- 항상 켜진 서버는 필요 없다.
- P2P 직접 통신
- 피어는 간헐적으로 연결되며 IP 주소가 변경된다.
- 높은 확장성을 가지나 보안에 취약
Sockets
-
프로세스는 소켓을 통해 메세지를 송/수신 함
-
소켓은 출입구와 유사함
- 송신 프로세스는 출입구를 통해 메세지를 알아냄
- 송신 프로세스는 전송구조에 의존하여 상대편 프로세스에 메세지 전달
-
개발자의 API를 통한 선택범위
- 전송 프로토콜의 선택
- 약간의 트랜스포트 계층 매개변수 설정 (max buffer, segment size)
ex) 우체국, 우편물 보내는 다양한 방법
1. 일반우편 2. 등기우편 (빠른 등기, 일반 등기)
전송 계층 선택
신뢰적 통신 (TCP), 비신뢰적 통신 (UDP)
전송계층 요구사항
-
신뢰적 데이터 통신
- 일부 응용서비스는 100% 신뢰성 있는 통신을 요구 (ex, file transfer, telnet)
- 일부 응용서비스는 약간의 손싱을 감수할 수 있음 (ex, audio)
-
처리율
- 일부 응용은 최소 대역폭 보장이 효과적임
- 일부 응용은 얻을 수 있는 최대 대역폭을 요구함
-
시간
-
보안
라우터에는 우선순위를 컨트롤할 수 있는 기능이 없다
⭐️ 인터넷 전송 프로토콜이 제공하는 서비스 ⭐️
TCP와 UDP의 차이점은 분명하게 알아야 한다.
HTTP
HyperText Transfer Protocol
-
웹 응용 계층 프로토콜
-
Client
-
Server
-
웹 페이지 : 객체로 구성
- 객체 : 하나의 파일(html, img, 자바애플릿, 오디오클립등)
- 기본 html(객체) + 여러 참조 객체
ex) 기본 html 텍스트와 5개의 객체가 있는 경우 -> 6개의 객체
-
TCP 사용
- client 가 server, port 80에 TCP 연결 (소켓 생성) 시도
- 브라우저 (HTTP client)와 웹서버(HTTP server)간 HTTP메세지(application-layer protocol messages)교환
- 유저의 상태를 저장하지 않는데
-
HTTP는 비 상태 프로토콜
- 웹은 굉장히 많은 처리를 하기 위해서 유저의 상태를 고려하지 않는다.
HTTP 연결
-
비지속 HTTP
- 한 개의 TCP 연결에 한 개의 객체를 보냄
- HTTP/1.0은 비지속 HTTP 사용
-
지속 HTTP
- 클라이언트와 서버간 한 개의 TCP연결에 여러 개의 객체를 보낼 수 있음
- HTTP/1.1은 디폴트로 지속 연결을 사용
비지속 HTTP
응답시간 모델링
Total = 2RTT + transmit time
- Response time
- TCP연결 시도시 1RTT(Round Trip Time)소요
세 방향 핸드셰이크 1️⃣
- HTTP 요청/응답시 1RTT 소요
- 파일 전송시간 (transmit time)
1️⃣ : TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
SYN : synchronize sequence numbers, ACK : Acknowledgment
지속 HTTP
- 지속 HTTP
- Server가 응답을 보낸 후에 연결을 유지함
- Client/Server는 이 연결을 통해 계속적인 HTTP messages를 교환함
- 지속 HTTP without pipelining
- Client는 response를 수신 후에 다시 request 메세지를 보냄
- 각 참조객체에 1RTT 소요
- 지속 HTTP with pipelining
- HTTP/1.1 디폴트
- Client는 참조객체에 대한 정보를 만나면 즉시 requests를 보냄
- 모든 참조객체에 1RTT 소요
-> Pipelining : 한 번에 많은 데이터를 보내는 것
HTTP 요청 메세지
- 2 종류의 HTTP messages : requests, response
- HTTP 요청 메세지 : ASCII (human-readable format)
방식 타입
- HTTP/1.0
- GET
- POST
- HEAD
서버에 개체몸체 (Entity Body)가 없는 응답을 요구할 경우
- HTTP/1.1
- GET,POST,HEAD
- PUT
URL에 규정된 경로에 Entity body에 있는 파일
- DELETE
URL필드에 규정된 파일 삭제
폼 입력 방법
- POST 방법
- 사용자가 폼 필드에 입력할 경우에 사용
- 개체몸체 (Entity Body)에 사용자가 폼 필드에 입력한 것을 포함
- URL 방법
- GET method 사용
- request 라인의 URL field에 입력데이터를 전송
ex) www.somesite.com/animalsearch?monkey&banana
HTTP 응답 메세지
HTTP 응답 상태 코드
깔끔하게 적어주신 글 잘 읽었습니다 😀