생성일: 2021년 11월 28일 오후 4:18
10. 개요
- 어필리케이션 계층은 사용자에게 서비스를 제공한다.
- 통신은 논리적 연결을 사용하여 제공됨 ⇒ 두 어플리케이션 계층은 메시지를 보내고 받을 수 있는 가상의 직접 연결이 있다고 가정함
응용 계층에서의 논리적 연결
- 서비스 제공
- 프로세스간 논리적 연결 사용
- 다수의 프로토콜로 구성
- 응용층 패러다임
- Traditional Paradigm : 클라이언트 - 서버 패러다임
- 서버 프로세스 : 항상 실행
- 클라이언트 프로세스 : 서비스 필요시 시작
- WWW, HTTP, FTP, SSH, E-mail 등
- New Paradigm : 대등-대-대등 패러다임
- peer-to-peer paradigm
- 서버 프로세스가 항상 실행 중이고 클라이언트 프로세스가 연결될 때까지 기다릴 필요 X
10.2 클라이언트-서버 패러다임
- API (Application Programming Interface)
- 응용층 프로세스와 TCP/IP 프로토콜을 포함하는 하위 4개 계층을 포함하는 운영체제 사이의 명령어 집합
- 소켓 인터페이스(socket interface), 전송층 인터페이스(TLI, Transport Layer Interface), 스트림(STREAM)
소켓 인터페이스의 위치
소켓
- 컴퓨터 언어에서 파일과 같은 다른 정보원(source)과 수신부에 데이터를 읽고 쓰기를 할 수 있는 명령어들을 소켓에 읽고 쓸 때 사용
- 터미널이나 파일처럼 동작하나 물리적인 엔터티가 아닌 하나의 추상(abstraction)으로 응용 프로그램에 의해 생성되고 사용되는 데이터구조(Data Structure)이다.
- 소켓 주소
- IP주소와 포트번호의 결합
- 양방향 통신에서 로컬(local, sender)과 리모트(remote, receiver) 한 쌍의 주소가 필요
- 소켓 주소 찾기
- 서버 사이트 : 로컬(서버) 소켓 주소와 리모트(클라이언트) 소켓 주소를 필요
- 로컬(서버) 소켓 주소는 운영체제에 의해 제공
- 서버 프로세스가 인터넷 관리기관에 의해 정의된 표준이면 포트번호는 잘 알려진 포트로서 할당
- 리모트 소켓 주소는 서버로 온 요청 패킷에 포함된 클라이언트 소켓 주소
- 클라이언트 사이트 : 로컬(클라이언트)과 리모트(서버) 주소
- 로컬(클라이언트) 소켓 주소는 운영체제가 제공
- 임시 포트 번호 할당
- 리모트 소켓 주소
- 프로그램 작성자는 클라이언트 프로그램을 실행할 때 두 가지 정보를 제공
- 잘 알려진(well-known) 포트번호와 IP주소는 DNS 사용
소켓 데이터 구조
10.3 표준 응용
WWW (World Wide Web)
- 웹 클라이언트(브라우저)
-
제어기(controller), 클라이언트 프로토콜 및 해석기(interpreter)의 세 부분으로 구성됨.
-
제어기는 키보드나 마우스로부터 입력을 받아 클라이언트 프로그램을 사용하여 문서에 접속
-
해석기 중 하나를 사용하여 문서를 화면에 표현
-
클라이언트 프로토콜은 FTP나 HTTP와 같은 나중에 설명할 프로토콜 중의 하나가 될 수 있음.
-
해석기는 문서의 유형에 따라 HTML, 자바(Java) 또는 자바 스크립트(JavaScript)가 될 수 있음.
- 웹 문서
HTTP (HyperText Transfer Protocol)
- 웹으로부터 웹페이지를 가져오기위해 어떻게 클라이언트-서버 프로그램이 작성될 수 있는지를 정의
- 서버는 포트 80번을 사용하고 클라이언트는 임시 포트 번호를 사용
- TCP의 서비스를 사용
- 연결 지향의 신뢰성 있는 프로토콜
- 웹 서버
- 웹페이지는 서버에 저장됨
- 클라이언트의 요구가 도착할 때마다, 해당 문서가 클라이언트로 전송됨.
- 다른 웹페이지와 구별되는 유일한 식별자
- 웹페이지를 정의하기 위해 호스트(host), 포트(port), 경로(path)의 3개의 식별자 필요
- 웹페이지를 정의하기전에 사용하고자 하는 클라이언트-서버 응용 즉, 프로토콜을 브라우저에게 알려야 함.
- 4개의 식별자가 필요함.
- 첫 번째는 웹페이지를 가져오는데 사용되는 일종의 운송수단
- 나머지 3개는 대상 객체(웹페이지)를 정의하는 조합으로 구성
- Protocol : HTTP, FTP
- Host : IP address 또는 Domain 이름
- Port : HTTP의 경우 Well-Know Port #: 80
- Path : 파일의 위치와 이름을 표시
- 4개의 조각(pieces)들을 조합하기 위해 자원 위치 지정자(URL, uniform resource locator)가 고안되었음.
비영속적 vs 영속적 연결(Nonpersistent vs Persistent)
- 웹페이지들이 서로 다른 서버에 존재한다면 각각을 가져오기 위해 새로운 TCP 연결을 생성하는 것
- 같은 서버에 각각 존재한다면 각각을 새로운 TCP 연결을 사용
비영속적 연결
- 클라이언트가 TCP 연결을 열고 요청을 보냄
- 서버는 응답을 보내고 연결을 닫는다
- 클라이언트 end-of-lif 표시가 나타날 떄까지 데이터를 읽고, 그후 연결을 닫는다
- 서로 다른 파일에 있는 N개의 다른 그림들로의 링크를 포함한다면, 연결을 N+1번 열고 닫아야 함.
- 비영속적 연결은 서버에 큰 오버헤드를 부과하게 되는데, 그 이유는 서버가 연결을 열때마다 다른 버퍼들을 필요로 하기 때문
영속적 연결
- HTTP 버전 1.1은 영속적 연결(persistent connection)을 기본으로 지정
- 서버는 응답을 전송한 후에 차후의 요청을 위해 연결을 열어 놓은 상태로 유지
- 연결 설정과 연결 종료를 위한 왕복 시간(round trip time)이 절약
메시지 형식
- 각 메시지는 4개의 구역으로 구성
- 요청 메시지의 첫 구역 : 요청 라인 (request line)
- 응답 메시지의 첫 구역 : 상태 라인 (status line)
- 요청 메시지
- 요청 메시지의 첫 번째 라인은 요청 라인
- 3개의 필드: 메소드, URL, 버전
- 메소드 필드는 요청 메시지의 유형을 정의
- URL은 상대 웹페이지의 주소와 이름 정이
- 버전은 프로토콜의 버전
- 요청 라인 이후 0개 이상의 요청 헤더 라인을 가질 수 있음
- 응답 메시지
- 상태 라인, 헤더 라인, 공백 라인 그리고 때로 본체로 구성됨.
- 상태 라인은 3개 필드로 구성
- 버전 필드는 HTTP 프로토콜의 버전
- 상태 코드 필드는 요청의 상태에 대해 정의, 숫자 3개
- 상태 문구는 텍스트 형태로 상태 코드 설명
- 본체는 서버로부터 클라이언트로 보내지는 문서를 포함
쿠키
-
WWW는 원래 상태가 없는 개체로 설계됨
-
오늘날 웹은 클라이언트에 대한 정보를 기억해야 하는 기능 가짐
-
전자 상점(electronic store) : 사용자를 위해 cookie 사용
-
등록된 사용자 (register client) : 등록사용자로 액세스를 제한하는 사이트는 첫번째 등록시 클라이언트에게 쿠키 제공
-
웹 포털(portal) : 선호 사이트를 액세스 할 때 쿠키가 만들어짐
-
쿠키의 생성과 저장
- 서버가 클라이언트로부터 요구를 받았을 때, 클라이언트에 관한 정보를 파일이나 문자열로 저장한다. 정보에는 클라이언트의 도메인 이름, 쿠키의 내용(서버가 클라이언트에 관해 수집한 정보로써예를 들어 클라이언트 이름, 등록 번호 등), 타임스탬프, 그리고 구현에 따라 다른 정보들이 포함될 수 있다.
- 서버는 클라이언트에게 보내는 응답에 쿠키를 포함한다
- 클라이언트가 응답을 받으면, 브라우저는 도메인 서버 이름으로 정렬되는 쿠키 디렉터리에 쿠키를 저장한다.
캐시 업데이트
- 응답은 삭제 또는 교체되기 전에 프록시 서버에 얼마나 오래 유지되어야 하는가?
- 해결책 하나는 사이트 목록을 저장하고 그 정보를 일정 기간 동안 동일하게 유지하는 것
- 다른 권고는 정보의 마지막 변경 시간을 볼 수 있도록 헤더에 추가 정보를 더하는 것
HTTP 보안
- HTTP 자체는 보안 제공 x
- 안전한 소켓 계층(SSL, Secure Socket Layer) 상에서 운영 가능 ⇒ HTTPS
- HTTPS는 기밀성, 무결성 보장
FTP (File Transfer Protocol)
- 하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 프로토콜
- FTP의 기본 모델
- 클라이언트 : 사용자 인터페이스, 클라이언트 제어 프로세스, 클라이언트 데이터 전송 프로세스라는 3 가지 구성요소를 가짐
- 서버 : 서버 제어 프로세스, 서버 데이터 전송 프로세스 라는 2가지 구성요소를 가짐
- 2개의 연결 Lifetime
- FTP는 2개의 잘 알려진 TCP 포트 사용
- 포트 21 : 제어 연결 위해
- 포트 20 : 데이터 연결 위해
- 제어 연결
- 제어 연결이 연결된 동안, 명령은 클라이언트에서 서버로 보내지고 응답은 서버에서 클라이언트로 보내짐
- 데이터 연결
- 제어 연결과 다름
- 클라이언트는 반드시 전송되는 화일의 종류와 데이터의 구조, 전송 모드를 정의
- 데이터 연결을 통해 파일을 전송하기 전에 제어 연결을 통해 전송을 위한 준비
- 파일 유형, 데이터 구조, 전송 모드를 정의
- 전송 모드
- 파일 전송
- FTP 보안
- FTP가 비밀번호를 요구하더라도 비밀번호(암호화 x)는 평문으로 보내짐
- 보안을 위해 소켓 계층 추가 가능
전자우편
- 단방향 트랜잭션(one-way transaction)
- 구조
- 3개의 에이전트
- 사용자 에이전트(UA, user agent)
- 메시지 전송 에이전트(MTA, message transfer agent)
- 메시지 접속 에이전트(MAA,massage access agent)
- 주소
보안 셀
- 오늘날 보안 셀 (SSH, Secure Shell)이 원격 로그인과 파일전송과 같은 여러 목적을 위해 사용됨
SSH는 3개의 구성 요소를 가지는 응용층 프로토콜
- 교환되는 메시지의 비밀성 또는 기밀성
- 데이터 무결성
- 서버 인증
- 메시지 압축
- 패킷 형식 (필드)
- 길이 필드
- 순환 중복 검사 (CRC)
- 타입 필드
- 데이터 필드
SSH 패킷 포맷 (Length는 암호화 X)
DNS (도메인 네임 시스템)
- 다른 응용 프로그램을 도와주기 위해 만들어짐
- 이름을 주소로, 주소를 이름으로 대응시켜 주는 디렉토리 시스템
- 이름 공간 (Name space)
- 두가지 방법으로 구성 가능
- 단층적
- 이름은 주소에 할당됨
- 이름은 구조적이지 않은 문자의 연속
- 중앙에서 전체를 관리 ⇒ 인터넷과 같은 거대한 시스템에서 사용 X
- 계층적
- 각 이름은 여러 부분으로 나뉘어 만들어짐
- 첫 번째 부분 : 기관의 성격, 두번째 부분 : 기관의 이름, 세번째 부분 : 기관 내의 부서
- 이름 공간의 분산
- 이렇게 많은 양의 정보를 하나에 컴퓨터에 저장하는 것 ⇒ 비효율적, 비신뢰적
- 따라서 많은 컴퓨터에 분산시킴
- DNS 서버
변환
- 이름(domain name)을 주소(IP address)로 매핑시키는 것을 이름-주소 변환(name-address resolution)이라고 함
캐싱
- 검색 시간이 줄어듬 ⇒ 효율성 up ⇒ DNS는 이를 위해 캐싱(Caching)이라는 매커니즘 사용
- 서버가 다른 서버에게 매핑 정보를 요청하고 응답을 수신하면 이 정보를 클라이언트에게 전달하기 전에 캐시 메모리에 저장
DNS 메시지
- 질의(query)와 응답(response)의 두 가지 메시지를 사용
- 식별(identification) 필드는 클라이언트가 응답과 질의를 매칭시키는데 사용
- 플래그(flag) 필드는 메시지가 질의인지 응답인지의 여부를 정의
- 다음 4개의 필드는 메시지 안의 각 레코드 유형의 수를 정의
캡슐화 (Encapusulation)
- DNS는 UDP 또는 TCP를 사용; port #는 53.
- 응답 메시지의 크기가 512 바이트 이하일 때 UDP, 이상이면 TCP 사용
DNS 보안
- 기밀성, 무결성, 서비스 거부 공격에 대한 준비 필요
- 이를 위해 전자서명이라는 보안 서비스 사용
10.4 대등-대-대응 패러다임: 개요
P2P 네트워크
- Centralized
- Decentralized
- 비체계적 네트워크
- 노드들은 랜덤하게 링크 ⇒ 탐색은 비효율적
- 그누텔라 (Gnutella) 가 부누건적이고 비체계적인 대등-대-대등 네트워크의 예
- 체계적 네트워크
- 질의가 효과적이고 효율적으로 해결될 수 있도록 사전에 정의된 규칙 사용
- 가장 공통적인 기법은 분산 해시 테이블 (DHT, Distributed Hash Table)
분산 해시 테이블 (Distributed Hash Table: DHT) ⭐⭐
-
분산 해시 테이블(DHT, Distributed Hash Table)은 데이터(또는 데이터의 references)를 미리 정의된 규칙에 따라 일련의 노드에 분산
-
DHT-기반 네트워크에서 각 구성원은 일정 범위 내의 데이터 항목 (Items)에 대한 책임을 지게 됨
-
주소 공간 (Address Space)
-
구성원 식별자 해시 적용(Hashing Peer Identifier)
- 모든 구성원을 주소 공간 고리(address space ring) 위에 위치
- 구성원 식별자(보통 IP주소)를 노드 ID라 부르는 m비트 정수로 바꾸는 것은 보통 해시(hash) 함수로 달성
- 안전한 해시 알고리즘과 같은 암호 해시 함수를 사용하여 두개의 inputs이 동일한 output을 맵핑할 확률을 낮춤
-
객체 식별자 해시 적용(Hashing Object Identifier)
- 공유될 객체(예를 들면 파일)의 이름도 같은 주소 공간에서 m비트 정수로 해시됨
- DHT 용어로 해시된 결과는 키(key)라고 함
-
객체의 저장(Storing the Object)
- 라우팅(Routing)
- DHT의 주 기능은 한 객체에 대한 참조의 저장을 책임지는 노드로 질의 (query)를 라우팅하는 것
비트토런트(BITTORRENT)
- P2P 프로토콜로써 일련의 대등한 구성원들 사이에서 대용량 파일을 공유
- 한 그룹의 구성원들이 그 그룹의 모든 구성원에게 파일의 복사본 하나를 제공하는 과정에 참여
TCP를 이용한 통신
- TCP는 연결 지향 프로토콜임
- 데이터를 보내거나 받기 전에 클라이언트와 서버 간에 연결이 설정되어야 함
- 연결이 설정된 후 두 당사자는 데이터가 있는 한 서로에게 데이터 청크를 보내고 받을 수 있음