컴퓨터 네트워크 - Application 계층
K-MOOC에서 부산대학교 유영환 교수님의 “컴퓨터 네트워킹” 강의를 수강하며 적은 노트
Principles of Application
애플리케이션: 응용 프로그램, 컴퓨터를 사용할 때 직접적으로 다루는 프로그램
네트워크 응용
- 클라이언트 서버 모델(Client-server model): 각 클라이언트들은 서버에 데이터를 요구하고 서버는 거기에 대한 응답으로 데이터를 전달. 서버가 유일하게 데이터 제공, 나머지는 모두 클라이언트로서 소비
- 서버
- 서버가 항상 켜져 있어야 함
- 서버는 반드시 고정된 IP주소를 가지고 있어야 함
- 안정적인 서비스를 위해 데이터 센터에 서버를 여러 개 두고 서비스
- 클라이언트
- 클라이언트 프로그램: 서버와 통신을 위해 사용하는 프로그램
- 사용자가 필요할 때만 서버에 접속
- 주소가 변동되어도 됨. 항상 클라이언트가 먼저 데이터를 요청하고 서버가 응답하기 때문에, 데이터를 요청할 때 자신의 주소를 전송함
- 클라이언트끼리 통신 X
- 서버
- P2P 모델: 네트워크에 참여하는 모든 디바이스들이 데이터 소비자이자 데이터 제공자
- 특정한 하나의 서버 X. 항상 켜져 있는 서버 X
- 개별 피어들은 필요할 때만 접속, 주소도 변동
- self scalability: 클라이언트 수가 많아지더라도 서비스를 계속 지속적으로 안정적으로 유지
애플리케이션 레이어 프로토콜
- 기본 구조
- syntax: 문법. 문장 구조
- 메시지에 어떤 필드들이 존재하는지. 메시지 타입이 request인지 response인지, 요구하는 데이터는 무엇인지 등을 처음 몇 byte에 기재하는 등
- semantics: 단어마다 가지는 의미
- 실제 담긴 데이터를 어떻게 해석할 것인가
- pragmatics: 순서
- 언제 어떻게 데이터를 보내고 받는가. 어떤 순서로 응답하는가
- syntax: 문법. 문장 구조
- 종류
- Open protocols: 프로토콜의 전체 규칙이 표준화되어서 공개됨. 누구나 특정한 허가 없이 규칙에 맞게 데이터를 보내면 응답함. HTTP, SMTP 등
- skype(스카이프): 고유의 프로토콜을 가짐
애플리케이션의 requirement
- 이메일, 텍스트 메시징: 데이터 전송의 신뢰성 요구. 전송량은 변해도 됨(elastic)
- 오디오, 비디오: 데이터 로스가 있어도 됨(loss-tolerant)
- 트랜스포트 레이어의 프로토콜이 관리
- TCP: connection-oriented protocol
- error control: 보내는 데이터의 에러를 검사하고 재전송 요구
- flow control: sender가 receiver가 받을 수 있는 용량 이상의 데이터를 한꺼번에 보내지 않도록 조절
- congestion control: 중간에 있는 라우터나 스위치에 데이터가 쌓이지 않게 제어
- TCP 개발될 당시 멀티미디어 데이터나 보안 문제가 없었기 때문에 이와 관련된 것은 없음(지연 시간, 최소 전송량, 시큐리티 보장 X)
- UDP
- unreliable함, 데이터가 깨지면 그대로 애플리케이션에 전달
- TCP보다 전반적으로 속도가 빠르므로 기본적으로 멀티미디어 프로그램에 사용
- HTTP, SMTP, FTP 등은 TCP 사용. contents provider network으로 서버들이 물리적으로 사용자들 위치와 가까워져 멀티미디어도 TCP 사용하기도 함
- TCP: connection-oriented protocol
Web and HTTP(WWW, HTTP Overview)
world wide web: 팀 버너스 리(Tim Berners-Lee)가 1990년에 처음 제안
HTML을 사용해 URL(Uniform Resource Locator)로 오브젝트들(문서, 이미지, 오디오 데이터 등)을 나타냄
- ex) www.someschool.edu/1.jpg
- someschool.edu: 호스트 네임(존재하는 서버 이름)
- 1.jpg: 패스 네임(path name, 오브젝트의 파일명)
HTTP(HyperText Transfer Protocol): 데이터를 주고받는 프로토콜
- 하이퍼링크(Hyperlink): 클릭하면 특정한 데이터를 읽어올 수 있는 링크
- 하이퍼텍스트: 하이퍼링크가 포함된 텍스트. 즉 HTTP는 하이퍼텍스트를 전달하는 프로토콜
- stateless함, 클라이언트의 상태를 저장 X
HTTP response time
- 웹 프로그램: client/server model이므로 유저가 먼저 개인 기기로 HTTP request message를 보내고 서버가 거기에 응답함
- HTTP로 서버 접속 전 트랜스포트 레이어에서 TCP 연결을 먼저 함
- TCP 연결을 먼저 수립하기 위해서 1 RTT(Round-Trip-Time) 필요
- 그 후 request와 response가 오는 데 1 RTT 필요
Cookies and Web Caching
쿠키(cookies): 클라이언트의 state를 저장함
- 클라이언트는 HTTP request message를 가지고 서버에 접속
- 사용자가 접속하는 순간 서버는 자동으로 ID를 만들고 임의의 번호를 유저에게 할당하여 데이터베이스에 저장
- response를 보낼 때 set-cookie 필드에 생성한 쿠키 아이디를 담아서 전송
- 브라우저가 set-cookie 명령을 발견하면 자신의 쿠키 파일에 이것을 저장
- 다음에 다시 클라이언트가 서버에 접속할 때, 브라우저는 자기 쿠키 파일을 확인
- request message를 보낼 때 쿠키 아이디를 같이 전송
- 서버는 request message에 담긴 쿠키 아이디를 데이터베이스에서 찾아 정보 제공
웹 캐싱(web caching): 한 기관에 많은 사람들이 같은 사이트에 접속하면 오버헤드가 생기므로, 중간에 프록시 서버(proxy server)를 둠
- 클라이언트가 특정 사이트에 접속하기 위해서 request message를 전송
- 처음에는 오리진 서버(origin server)에 갔다가 응답을 받음, 중간의 프록시 서버가 이를 보관
- 이후 같거나 다른 클라이언트가 같은 사이트 정보를 request하면 프록시 서버가 바로 response 가능
- 클라이언트: request가 오리진 서버에 갔다 오지 않으므로 응답 시간이 짧아짐
- 서버: 용량 오버헤드 줄어듦
- 로컬 네트워크 운영: local area network의 용량은 보통 충분하지만, 로컬 ISP에서 인터넷으로 연결되는 부분이 bottleneck 생김. 프록시 서버로 외부 인터넷과 local area network를 연결하는 링크의 용량을 쓸 필요 없어져 원활함
SSL/TLS
TCP와 UDP는 암호화, 보안 없이 데이터가 그냥 인터넷에 뿌려지므로, TCP 연결에 암호화를 제공하며 데이터 무결성을 보장하고, 연결된 디바이스가 스스로를 인증 가능한 프로토콜인 SSL, TLS을 제작함. 애플리케이션 레이어에 해당
SSL(Secured Socket Layer), TLS(Transport Layer Security): SSL은 1995-2.0, 1996-3.0 연구되었고 TLS는 3.0을 더 발전시켜 강한 보안 제공, 속도는 좀 더 느림
- 클라이언트가 서버에 접속하기 위해 request를 전송
- 서버는 자신의 인증서를 제공함, 특정한 암호 코드가 들어 있어 그 암호화 데이터는 해당 서버만 풀어 볼 수 있음
- 클라이언트는 자신들이 사용할 비밀 키를 certificate 정보로 암호화해서 서버에 전달
- 따라서 서버만 암호화 키를 알아볼 수 있음
- 이후 클라이언트-서버 통신 시 해당 키를 사용해 데이터 전송, 외부 침입자는 해독 불가
- HTTPS: HTTP에 SSL 또는 TLS를 더해 암호화된 TCP 연결 사용
Domain Name System
IP 버전 주소: 32-bit, 4개의 숫자 단위, 각 숫자는 0~255 DNS 서비스: 호스트 네임(hostname) ‘Google.com’, ‘Pusan.ac.kr’을 실제 IP 주소로 변환해 줌.
- 각각의 클라이언트에 요구하는 로드를 분산
- 데이터 센터의 여러 서버들은 모두 IP주소가 다르지만 호스트 네임은 같음
- DNS 서비스가 IP 주소를 번갈아 줌으로써 리퀘스트 로드를 여러 서버에 분산
전 세계에 도메인 네임 시스템 서버들이 분산된 이유: scalable
- 중앙 집중될 경우 single point of failure: 하나가 고장 나면 전체가 마비. 트래픽도 너무 많아 서비스가 원활하지 못함. 집중 지역을 빼면 많은 유저들은 지연 시간을 겪음
계층
- Root DNS 서버: 전세계 13개
- TLD(Top-Level Domain) DNS: 여러 기관의 도메인 서버들로 나누어짐
- .com: 네트워크 솔루션 회사에서 관리
- .org: 공공기관
- .edu: 대학
- authoritative domain: 각각의 기관에서 자기 내부에 있는 서버들의 주소를 관리하는 데이터베이스들 존재
- 클라이언트는 Root DNS 서버에게 amazon.com 서버의 IP 주소를 요청
- Root DNS 서버: .com을 관리하는 DNS 서버의 주소(TLD DNS의 주소)를 클라이언트에게 알려줌
- TLD DNS 서버: amazon.com을 대표하는 DNS 서버의 주소(authoritative DNS의 주소)를 클라이언트에게 알려줌
- authoritative DNS 서버: amazon.com의 DNS 서버가 특정한 서버의 주소를 클라이언트에게 알려줌
- Local DNS server: 클라이언트 입장에서 처음 접속하는 서버
- Local DNS가 모르면 root나 TLD에게 쿼리 요청
- 캐시 저장
Iterated query
- 로컬 DNS 서버에 쿼리 보냄
- 로컬이 모르면 로컬이 루트에게 쿼리 보냄
- 루트가 모르면 로컬이 TLD에게 쿼리 보냄
- TLD가 모르면 로컬이 authoritative에게 쿼리 보냄
- 캐시가 있을 경우 로컬->TLD 등 건너뛰는 작업 가능
Recursive query
- 로컬 DNS 서버에 쿼리 보냄
- 로컬이 모르면 로컬이 루트에게 쿼리 보냄
- 루트가 모르면 루트가 TLD에게 쿼리 보냄
- 반복
- recursive의 경우 상위 계층으로 갈수록 더 많은 일을 해야 하므로 권장 X. DoS에 취약
DNS에 가해지는 공격 유형
- DDoS(Distributed Denial of Service) attack
- 웬만한 DNS 서버는 캐시에 의해 root에 직접 가지는 않아 공격 대상은 주로 TLD
- Amplification attack
- 공격자가 다른 컴퓨터들을 감염시켜 희생자의 IP주소로 DNS 서버에 쿼리 보냄
- 서버들은 쿼리 response를 희생자에게 다 보냄
- Pharming attack: private data + farming
- domain hijacking: 공격자가 로컬 DNS에 침투해 클라이언트가 물은 주소 대신 가짜 웹사이트의 IP주소를 전송
- 클라이언트는 가짜 웹사이트에 개인 정보 제공
Peer-to-Peer Application
P2P: 항상 켜져 있는 특정한 하나의 서버가 존재하지 않고 각 peer들이 직접 통신
ex) BitTorrent, KanKan. Skype 등
BitTorrent
- 각 파일들은 chunk라는 작은 데이터 단위(256 kb)로 나누어짐. A에게서 파일을 받다가 A가 접속이 끊겨도 B에게서 나머지 조각들을 받을 수 있음
- Tracker: 처음 사용자는 접속했을 때 상대 peer들의 IP 주소들을 모르기 때문에, Tracker라는 서버에 접속해 다른 peer들의 정보를 받음
- 주기적으로 A는 어떤 peer가 특정 chunk를 가지고 있는지 조사함. rarest first 정책으로 데이터를 받음
- Free-rider Problem: 사용자가 다운만 하고 업로드는 안 함
- tit-for-tat: 사용자가 업로드를 잘 할수록 좋은 peer를 얻어 다운을 잘 함
- 각각의 peer들은 주기적으로 자기한테 가장 데이터를 잘 주는 4개의 top 4 peer를 매 10초마다 선정
- top 4에게는 서비스를 잘 해주어서, 나와 상대 peer는 서로 top 4에 해당됨
- 처음 사용자는 top 4에 못 들어가므로, 매 30초마다 랜덤하게 하나의 peer 선정
- A와 B가 각각의 top 4에게 데이터 잘 전송해 줌
- A가 랜덤하게 B를 선정하여 B에게 데이터를 전송해줌
- B는 다른 노드보다 A가 더 잘 줄 경우 A에게 서비스를 잘 해 줌
- A와 B가 서로의 top 4에 들어 감
- tit-for-tat: 사용자가 업로드를 잘 할수록 좋은 peer를 얻어 다운을 잘 함
댓글남기기