출처: https://chunggaeguri.tistory.com/entry/HTTP-%EB%8F%99%EC%9E%91-%EB%B0%8F-%EB%A9%94%EC%8B%9C%EC%A7%80-%ED%98%95%EC%8B%9D
- 카톡
- 게임 (스타크래프트, LoL)
- 인터넷 브라우저 상의 응용
- 구글 검색, 웹툰, 신문, 블로그, 카페, 금융
- 메일
- 토렌트
- 클라우드 (iCloud, Ndrive)
- 곰플레이어, iptv
- chrome store
- 지도
- 스카이프
- 예매
- 네트워크 응용의 구조
- client-server 구조
- peer to peer (p2p) 구조
- 하이브리드 구조
- 프로세스 간 통신
- 응용: 네트워크로 연결된 컴퓨터들이 협력하여 제공하는 서비스 (예. 구글 검색)
- 프로세스: 하나의 컴퓨터에서 독립된 메모리 공간을 가지고 실행되고 있는 프로그램의 단위
- 서버 프로세스
- 클라이언트 프로세스
- 피어 프로세스
- 프로세스 주소
- 기계 주소: IP (xxx.xxx.xxx.xxx 0~255)
- 포트 번호: 216 TCP/UDP
- 소켓 통신
$ emacs client.py server.py
# client.py
import socket
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientSocket.connect(("203.253.146.138", 9999))
clientSocket.send("Hello, Server.")
str = clientSocket.recv(100)
print str
clientSocket.close()
# server.py
import socket
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverSocekt.bind(("", 9999))
serverSocket.listen(1)
(sock, addr) = serverSocket.accept()
sock.send("Hello, Client")
str = sock.recv(100)
print str
sock.close()
serverSocket.close()
$ python server.py
$ python client.py
- 인터넷 전송 계층의 서비스
|TCP|UDP|
|—-|—-|
|연결기반 전송계층|무연결 전송계층|
|연결에 대한 관리
데이터 유실 복구|데이터 유실 가능|
|데이터 순서 보장|데이터 순서 역전 가능|
|혼잡에 민감한 패킷 전송률 조정|최대한 성능으로 패킷 전송|
- FTP (File Transfer Protocol)
- 목적: 원격 호스트에 있는 파일을 가져오거나 보내기 위한 protocol
- 가정1: client 사용자는 server의 파일을 읽을 수 있는 권한의 계정이 있다
- 가정2: 계정이 없는 경우도 접근 가능하도록
- 특징
- 세션 로그인과 종료가 존재
- 로그인을 통하여 권한 획득
- 로그인 정보를 서버가 인지
- stateful protocol
- HTTP (Hypertext Transfer Protocol)
- 세션 계층 (www)
- HTML을 기본 표현 계층으로 사용
- 목적: 전세계 인터넷에 있는 정보를 탐색
- 발명: Tim Berners-Lee가 CERN에서 1980년대 말~1990년대 초
- 동작
- Web 자료를 가져와서 (GET) 보여주기
- Web 자료에 자료를 Posting 하기 (POST)
- URL (Universal Resource Locator)
- HTTP Transaction
- client -> server (URL GET Request / POST)
- TCP 연결
- server -> client (응답 200 OK / ERROR)
- TCP 연결 종료
- Stateless Protocol
- HTTP 요청 메시지 형식
- HTTP Request Message = Request Header + 빈 줄 + Request Body
- 첫번째 줄 (start-line)
- 요청 메서드 + 요청 URI (Universal Resource Identifier) + HTTP 프로토콜 버전
- GET / background.png HTTP/1.0
- POST / HTTP 1.1
- 게시판에 글 올리기
- 사진 올리기
- 웹 브라우저를 이용해 e-mail 보내기
- 로그인
- 두 번째 줄 (http headers)
- Header 정보들 ('Header Name: Header Value' 형태)
- host: formal.kau.ac.kr
- user-agent: Mozilla/5.0
- 각 줄은 Line Feed(LF)와 Carriage Return(CR)로 구분된다.
- 빈 줄 (empty-line)
- 요청에 대한 모든 메타 정보가 전송되었음을 알린다.
- Body
- POST, PUT의 경우에만 존재
- 요청과 관련된 내용 (HTML 폼 콘텐츠)
- id = kau
- pw = kau
- action = login
- HTTP 응답 메시지 형식
- HTTP Response Message = Response Header + 빈줄 + Response Body
- 첫 번째 줄 (status-line)
- HTTP 프로토콜 버전 + 응답 코드 + 응답 메시지
- HTTP/1.1 404 Not Found.
- 두 번째 줄 (http headers)
- Header 정보들 ('Header Name: Header Value' 형태)
- 날짜, 웹 서버 이름, 웹 서버 버전, 콘텐츠 타입, 콘텐츠 길이, 캐시 제어 방식 등
- 각 줄은 Line Feed(LF)와 Carriage Return(CR)로 구분된다.
- 빈 줄 (empty-line)
- 요청에 대한 모든 메타 정보가 전송되었음을 알린다.
- Body
- 실제 응답 리소스 데이터
- 201, 202와 같은 상태 코드를 가진 응답에는 보통 body가 존재하지 않는다.
- Cookie
- 성능 향상
- 다중 Transaction
- Persistent HTTP (연결 종료가 한 번으로 줄어들음)
- Pipeline HTTP (받고 보내는 것을 반복하지 않고, 한꺼번에 받고 한꺼번에 보내기)
- TCP 연결/종결 시간
- 지연 시간: 패킷을 보내기 시작한 시점에서 패킷을 받기 시작한 시점까지 걸리는 전송 지연 시간
- 전송률: 단위 시간(s) 당 전송되는 데이터의 양
- 예) 끝단 간 지연 시간이 100ms이고, 전송률이 100MB/s인 네트워크에서 1MB를 전송하여 수신을 완료하는데 걸리는 시간? (100+10)ms
- 네트워크 구조 (Web Cache, proxy Server)
- ISP (Internet Service Provider) 에서 비용 절감을 위하여 이전에 가져온 적이 있는 문서를 DB에 임시 저장해 놓았다가 동일 문서가 다시 요청될 때 재사용
- Web cache: 중개 상인의 개념 (Server -> Client)
- Web cache가 주는 이득
- 요청에 대한 응답 시간 단축 (HDD > memory > Cache)
- 제공하는 교통량 증가 -> 더 많은 사용자 수용
- 더 적은 서버 용량으로 더 많은 사용자 지원
- client <-> cache <-> server (중간에서 엿보다가 헤더 저장, 업데이트 된 내용 있는지 서버에 물어보고 없으면 클라이언트에게 전송)
- DNS (Domain Name System)
- Internet에서의 ID (기계)
- IPv4 32bit (8bit * 4)
- IPv6 128bit (16bit * 8)
- Domain Name
- 순수하게 인간을 위한 시스템
- 응용계층 (인터넷 5계층) 에서만 관여
- 서비스
- Domain Name -> IP 주소
- Aliasing 관리
- 전 우주적으로 중앙 관리
- 분산 관리 (계층적 분산 관리)
- 계층
- Root Name Server
- Top-level domain name server (.kr / .com)
- Top-level domain server의 IP를 반환 (유효기간과 함께)
- 유효기간 동안은 동일한 top-level domain server IP 요청 X
- Authorized DNS (kau.ac.kr)
- Local DNS
- 동작
- recursive domain name resolution
- local DNS > Root NS > TLDNS > Authorized DNS > TLDNS > Root NS > local DNS
- interative
- local DNS > Root NS > local DNS > TLDNS > local DNS > Authorized DNS > local DNS
- P2P (Peer to Peer)
- 서버 없이 단말들끼리 직접 상호간 서비스를 제공하는 시스템 (물물 교환)
- 서비스 보장 X
- Peer들은 IP를 바꾸며 옮겨 다닐 수 있다.
- Hybird System
- 서비스 메타 정보는 서버가 관리
- 실제적 서비스는 peer 끼리
- Skype, Starcraft
- Pair P2P
- Torrent
- 문제
- Peer가 없다
- 신뢰할 수 없다. (해시 코드)
- 이기적
- 조각들의 쏠림 현상
- Bitcoin