[CN] Application 레이어와 HTTP 프로토콜
Principles of network applications, Web & HTTP
Reference Computer Networking A Top-Down Approach 7th-Edition
Principles of Network Applications
Application Layer는 간단하게 말해 우리가 인터넷을 통해 사용하는 모든 서비스들을 통칭한다고 볼 수 있다. 영상통화, KakaoTalk, Skype 등의 프로그램은 모두 application layer에서 동작한다. 도대체 이 구조가 어떻게 이루어져 있길래 우리가 인터넷을 통해 웹서핑을 하고 e-mail을 주고받을 수 있는 것일까?
Creating a Network App
만약 우리가 network application을 만들고 싶다면 어떻게 해야할까? 스마트폰이나 컴퓨터 등의 end system에서 network를 거쳐 통신하는 하나의 프로그램을 만드는 것과 동일하다. 한 가지 특징이 있다면 Application layer에서는 network core에서 packet을 어디로 보내야 하는지는 설계할 필요가 없다. 아래 layer에서 알아서 잘 전달할 수 있게끔 구성되어 있기 때문이다. Network를 구성하는 모든(아래) 계층의 요소를 고려할 필요가 없기 때문에, 이는 application 시장이 급속도로 발전할 수 있는 원동력이 되었다고 볼 수 있다. 이런 layer division이 없었다면.. 아마 카카오톡은 아직도 개발 중일 수도 있지 않을까.
Application Architectures
application은 크게 다음과 같이 두 가지 구조로 나눌 수 있다.
-
Client-Server Architecture
-
Server (Always-on host)
-
Permanent IP address
서비스 요청을 항시 대기중이다.
-
Data centers for scaling
규모가 커지면 그만큼 감당해야한다.
-
-
Client
-
Communicate with server
필요할 때만 server와 통신하는 존재이다.
-
Dynamic IP address
IP 주소는 바뀔 수 있으며, Client끼리 서로 직접적인 통신은 하지 않는다.
-
-
-
P2P(peer-to-peer) Architecture
-
No always-on server. Arbitrary end systems directly communicate
필요한 상황에서만 end system끼리 통신한다.
-
Self scalability
그때그때 주위 기기들이 서로 통신하기 때문에 규모가 켜저도 통신을 분산 처리, 규모에 큰 부담이 없다고 볼 수 있다.
-
Complex Management.
관리하기는 꽤나 어렵다.
-
Processes Communicating
-
Process: Program running within a host.
컴퓨터 한 대에서 자기들끼리 통신하는 것은 Inter-process communication이라 한다. 별도의 Network가 필요 없고 OS에서 담당하게 된다.
- Client Process: Server에게 요청함으로써 통신을 개시함
- Server Process: Service 제공을 위해 client request를 계속 기다리고 있음
- P2P 구조에서는 end systems사이에서 client, server processes가 동시에 활용될 수 있다.
-
Sockets
message, information을 보내기 위한 ‘문’의 개념으로 이해하면 된다.
드라마 ‘도깨비’에는 공유가 문을 열고 가고 싶은 곳으로 어디든 다니는 장면이 나온다. 아마 공유 자기 자신도 그 통로가 어떻게 설계되는지, 내부 구성을 모를 거다. 공유는 application layer니까! 목적지까지 어떻게 가는지는 알 수 없지만 아래 계층에서 알아서 수행해주니까, 어찌 됐던 도깨비는 자기가 가고 싶은 곳으로 가기만 하면 된다.
-
Address Processes
그렇다면 목적지는 어떻게 정하는 것일까?
Messages를 받기 위해 process는 identifier가 필요하다. 이 identifier는 IP와 Port numbers를 포함한다. 일반적으로 알려진 protocols의 경우, Port number가 정해져 있다.
- HTTP server: 80 (http:// ~ port num 80번으로 요청)
- Mail server: 25
-
Appication Layer Protocol defines
Application 레이어에서 주로 하는 일은 아래와 같다.
- Types of messages exchanged. 메시지가 어떤 type인지
- Message syntax. 메시지가 어떤 구조인지
- Message semantics. 메시지가 어떤 의미인지
- Rules for when/how processes send & respond to messages. 어떤 방식으로 송수신하는지
- Open protocols. 전 세계에서 사용할 수 있게끔 표준화
- Proprietary protocols. Skype, KakaoTalk 등은 protocol이 온전히 공개된 것은 아님
-
Transport Service needed for an Application
Application을 사용할 때 요구되는 조건들은 아래와 같다.
-
Data Integrity. 데이터가 무결한가?
압축 파일 등, 몇몇 앱들은 error가 있으면 안된다. 반면 통화 등 지연시간이 더 중요한 App에서는 데이터가 어느 정도 손실되어도 괜찮다고 본다.
-
Timing. 지연 시간
전화, 게임 등이 있다. 총 게임을 하는데 총을 쐈더니 총알이 1초 뒤에 나간다고 하면 상상만 해도 끔찍하다.
-
Throughput. 전송률
동영상 등의 대용량 message를 처리하는 과정에서 중요하다.
-
Security 보안
보안은 항상 중요한 요소이다.
application data loss throughput time sensitive? File transfer/download no loss elastic no E-mail no loss elastic no Web documents no loss elastic no Real-time audio/video loss-tolerant aud: 5Kbps-1Mbps
vid: 10Kbps-5Mbpsyes, 10’s msec Streaming audio/video loss-tolerant aud: 5Kbps-1Mbps
vid: 10Kbps-5Mbpsyes, few secs Interactive games loss-tolerant Kbps+ yes, 10’s msec Text messaging no loss elastic yes and no Application에 따라 요구하는 조건들이 이렇게 다르다.
-
-
TCP, UDP
TCP는 신뢰도 높은 전송, UDP는 약간 loss가 생겨도 빨리 가야 하는 경우에 사용한다. 자세한 내용은 추후 다룰 예정이다.
어플리케이션 레이어에서 프로토콜을 만들어 전송할 때 트랜스포트에서 어떤 서비스를 가지고 어떤 프로토콜을 선택하느냐를 결정하는 것이 중요하다.
application app-layer protocol transport protocol
(underlying)E-mail SMTP [RFC 2821] TCP Remote terminal access Telnet [RFC 854] TCP Web HTTP [RFC 2616] TCP File transfer FTP [RFC 959] TCP Streaming Multimedia HTTP, RTP [RFC 1889] TCP or UDP Internet telephony SIP, RTP, proprietary TCP or UDP
Web and HTTP
HTTP는 HyperText Transfer Protocol의 약자로, Internet에서 주로 사용하는 protocol이며 여기에 암호화 기술을 적용한 것이 HTTPS이다.
Overview
-
Web page는 객체들(objects)로 구성되어 있다.
HTML, JPEG, Java applet, Audio file, JavaScript, …
-
기본적으로 어떤 문서를 보여줄거냐 하는 HTML file이 있고, 이 안에 포함된 referenced objects로 구성된다.
-
Client/Server model이다.
Client browser에서 요청하면 web server에서 해당 객체를 제공한다. 이때 HTTP protocol이 사용된다. (request-response)
-
웹서핑을 할 때는 일반적으로 TCP를 사용한다.
-
HTTP is “STATELESS”
어떤 정보를 요청한 clients의 상태를 저장하고 있지는 않는다. 요청하면 요청한 대로 응답한다.
HTTP Connections
-
non-persistent HTTP
-
한 개의 object를 보낼 때 매번 TCP connection을 만들었다가 닫았다가 함
여러 객체를 받으려면 여러 연결을 결어야 한다. 딱 봐도 비효율적이다.
-
Client가 TCP connection request → Server acception
-
Client가 request message → Server response
-
Server close
-
2RTT(per object) + File transmission time
RTT란 Round Trip Time의 약자로, packet이 client에서 server를 거쳐 다시 돌아오는 왕복 시간이다.
-
OS overhead
연결 상태를 운영체제에서 계속 관리해줘야 한다.
-
-
persistent HTTP
-
한 번 connection을 만들어 놓으면 지속적으로 유지함
기본적으로 사용하는 연결 방식이다.
-
1RTT
-
HTTP Request Message
HTTP message에는 Request, Response의 두 가지 종류가 있다. HTTP request message는 ASCII로 인코딩 된 text 정보로 구성된다.
-
Uploading form input
-
Post method
Web page에 입력 form이 있을 때 해당 form에 대한 정보를 보내줄게 ! write의 느낌이다.
-
URL method
Get method 사용, URL field에 내가 원하는 정보를 넣을게 ! read의 느낌이다.
-
-
Method types (HTTP/1.0)
-
GET
-
POST
-
HEAD
get처럼 request를 보내지만, server에서 어떤 object를 보내지는 않음. debugging 시 많이 사용한다고 한다.
-
PUT (HTTP/1.1)
file upload
-
DELETE (HTTP/1.1)
file delete
-
HTTP Response Message
Request를 받은 Server는 해당 요청에 대한 response를 보내준다.
-
Status Code
Response message의 가장 첫 줄에 나타난다.
- 200 OK
- 301 Moved Permanently
- 400 Bad Request
- 404 Not Found 페이지를 찾을 수 없습니다…
- 505 HTTP Version Not Supported
User-Server state: Cookies
앞서 설명한대로, HTTP는 stateless protocol이다. 그럼에도 불구하고 user의 활동, 상태를 저장해야 할 때가 있다. 예를 들어 온라인 쇼핑이나 장바구니, 자동 로그인, 사용자 추천 정보 제공 등이다. Cookie는 다음과 같이 사용된다.
- Cookie header line of HTTP response message
- Cookie header line in next HTTP response message
- Cookie file kept on user’s host, managed by user’s browser
- Back-end database at Web site
쿠키는 개발자 모드에서도 확인할 수 있다. 편리한 측면도 있는 반면에 privacy에 굉장히 민감하다고 할 수 있다. 그래서 외국 사이트에서는 대부분 cookies permission이 pop up된다고 한다.
다음 포스팅에서는 e-mail, DNS, P2P와 관련한 내용을 다뤄볼 예정이다.