[SU 2016] Computer Networks — 2
Chapter 2 : Application Layer
통신 역할 분담 방식 (Roll & Responsibility)
인터넷 어플리케이션의 기능은 이메일 전송, 파일 전송, 웹 페이지 등으로 다양하다.
- client-server architecture : 항상 동작하는 고정 IP의 서버와 간헐적으로 연결되는 변동 IP의 클라이언트로 이루어져 있다. 클라이언트 간의 직접적 연결은 없다.
- pure P2P architecture : 서버가 없고, 임의의 end system들이 직접적으로 통신한다. 상당히 scalable하지만 관리가 어렵다.
- Hybrid of 1 & 2 : 스카이프나 채팅 등의 어플리케이션은 기본적으로 P2P 방식으로 소통이 이루어지며, 중앙 서버는 사용자의 상태와 IP 주소 등을 관리하는 역할을 한다.
프로세스 간 통신
여러 host 안에서 많은 프로세스들이 실행되며, 이들 간의 통신은 네트워크 어플리케이션의 핵심이다. 동일한 host 내의 프로세스는 IPC(Inter-Process Communication)를 통해서 소통한다.
서로 다른 host 내의 프로세스끼리는 message를 교환하는데, 이는 소켓(socket)이라는 인터페이스를 통해서 주고 받을 수 있다. 각 프로세스는 소켓을 통해 OS가 관리하는 TCP 통신에 연결할 수 있다.
모든 host device는 unique한 IP 주소를 가지고 있지만, 하나의 host 내에서도 여러 프로세스가 돌아가기 때문에 프로세스를 특정하기 위해서는 IP 주소와 함께 port number도 필요하다.
Application Layer Protocol
어플리케이션 레이어의 프로토콜은 메세지의 종류(type), 문법, 의미, 그리고 소통 규칙 등을 명시한다.
어플리케이션에 따라 데이터 손실, 시간 지연, throughput, security에 대한 요구사항은 다를 수 있다. Internet transport protocols services에는 TCP와 UDP가 있는데, 요구사항에 맞추어 둘 중 하나를 선택하여야 한다.
TCP 서비스는 connection-oriented 방식이며 통신을 위한 사전 setup이 필요하다. sender와 receiver가 소통하여 전송량을 조절, congestion을 방지할 수 있으며 reliable한 통신이 가능하다. (timing, minimum throughput, security가 안된다는데 무슨 말인지? TODO)
UDP 서비스는 기본적으로 unreliable하다. (왜 쓰지? TODO)
Web and HTTP
HTTP는 HyperText Transfer Protocol의 약자로, 웹의 Application Layer Protocol에 해당한다. Client-Server 모델을 차용하며 TCP 통신을 사용한다. 웹 브라우저(client)가 80번 포트로 TCP 통신을 요청하면 서버가 이를 수용한 뒤 HTTP message를 주고 받는 방식이다. 그리고 HTTP는 stateless, 즉 클라이언트가 이전에 보낸 요청을 기억하지 않는다는 특징이 있다.
하나의 object(html, jpg 등)를 받을 때마다 일일히 TCP 통신을 새로 해야 하는 경우 이를 Nonpersistent HTTP라 부르며, 하나의 TCP 통신으로 여러 object를 받을 수 있는 경우 Persistent HTTP라 부른다. 다음은 Nonpersistent HTTP의 소통 방식의 예이다.
client : TCP 하자!
server : 그래!
client : 내가 원하는 object를 request message에 적어서 내 소켓에 넣을게!
server : 그렇구나. 너가 요청한 object를 response message에 적어서 내 소켓에 넣었어.
server : 이제 TCP 그만하자.
client : ㅠㅠ 다시 하자 (반복)
HTTP message의 생김새

위 그림은 request message의 general format을 설명한다. HTTP 1.0에는 GET, POST, HEAD method가 있으며, 1.1부터 PUT, DELETE가 추가되었다.
- GET : input을 URL field에 담음
- POST : input을 entity body에 담음
- HEAD : message body를 제외하고 header만 달라는 요청
response message의 경우 status code를 반환하는데 200(OK), 301, 400, 404(Not Found), 505 등 여러 종류가 있다.
Cookies
HTTP의 stateless한 특성상, 유저와 서버 간의 편리한 소통을 위해서 쿠키를 활용하면 좋다. 쿠키는 서버에서 해당 유저를 위해 발급한 unique key를 의미한다. 서버에서는 backend database에 해당 key와 연관된 정보를 저장하고, 클라이언트는 이 key를 기억해두고 HTTP 통신을 보낼때 항상 같이 보낸다.
Web Cache(Proxy Server)
Origin Server와의 통신을 최소로 줄이기 위하여 cache처럼 작동하는 서버를 의미한다. Response time과 traffic 등을 줄여주는 이점이 있다. Web Cache는 최신 상태를 효율적으로 유지하기 위하여 conditional GET method를 사용한다(If-modified-since 태그).
FTP, SMTP, DNS
귀찮아~