본문 바로가기

컴퓨터 공학/컴퓨터 네트워크

[컴퓨터 네트워크] Chapter2) Application Layer : 애플리케이션 계층

Chapter2) 컴퓨터 네트워크 : Application Layer


1. Introduction

어플리케이션 계층

  • 모든 인터넷은 어플리케이션 계층에서 서비스를 제공하기 위함
  • 인터넷 사용자에게 서비스를 제공하는 계층 
  • 논리적 연결을 보여줌 

logical connection at the application layer

사용자는 내부 소통 연결을 알필요 없고 논리적인 연결만 알면 된다. 

위 그림에서 앨리스와 밥이 논리적으로 연결되어 있다. 

providing services

  • 어플리케이션과 서비스는 계속해서 인터넷에 추가됨
  • 표준 어플리케이션 계층 프로토콜이 존재한다 HTTP, FTP, SMTP, Telnet, ...
  • 비표준화 프로토콜은 인터넷 당국의 승인이 필요 없고, 커스터마이징이 가능함

2. Client-Server

서버(호스트) : 항상 호스트이며, 클라이언트에 요청 받은 서비스를 제공함, 영구적인 IP 주소를 가짐
클라이언트(게스트): 서버에 연결되어 요청을 보냄. 클라이언트간 소통은 없음

Application Programming Interface (API)

  • 두 개의 어플리케이션(클라이언트와 서버 프로세스) 간 소통을 위한 인터페이스
  • 클라이언트 : 요청을 보내 소통을 시작하는 프로그램을 실행시킴
  • 서버 : 요청을 기다리는 또 다른 프로그램
  • API : 컴퓨터 언어가 갖는 수학적 연산, 문자열 조합, 입출력 접근 등 을 위한 명령어 집합으로 연결을 열고, 데이터를 주고 받고, 연결을 끝냄.

Sockets

  • 어플리케이션에 사용되는자료구조
  • 소켓 내부에 시스템 소프트웨어 계층이 있음 
  • 계층은 운영체제에 의해 운영됨 
  • 어플리케이션은 source로 부터 read하고 sink로 write 하는데 socket은 source와 sink 역할을 모두 하는 자료구조 

  • 서버 클라이언트 프로세스간 상호소통에 사용됨
  • 서버는 소켓이 request를 가지고 있다고 생각하고, 클라이언트는 소켓이 response를 가지고 있다고 여기며 소통함. 

Server site

  • 서버 기준 로컬은 서버를 의미하고, 리모트는 클라이언트를 의미한다.
  • 소통을 위해 로컬과 리모트 모두의 소켓 주소가 필요하다.
  • 로컬 소켓 주소는 운영체제에 의해 제공되는 것으로 서버가 실행되는 컴퓨터의 IP 주소이다. 
  • 포트는 서버가 실행될 때 결정되고 할당된다.
  • 서버의 소켓 주소는 서버의 수명 주기 동안 고정된다. 

Client site

  • 클라이언트 기분, 로컬은 클라이언트, 리모트는 서버이다. 
  • 클라이언트의 소켓 주소는 서버에 연결할 때 결정되며 한 클라이언트 당 하나의 주소가 부여된다. 
  • vice versa

전송 계층의 서비스 사용 

  • 전송계층 : 어플리케이션 바로 아래 계층 
  • UDP 프로토콜 
    • connectionless : 메시지를 교환하는 양단간 논리적 연결이 없음 
    • 각 데이터 청크는 독립적인 객체로 데이터그램이라는 패킷으로 캡슐화된
    • 송수신지간 연결이 없음
    • 메시지 크기가 작은 경우, 안정성보다는 속도가 중요한 경우에 사용
    • UDP 헤더 = 8bytes (64-bit)
      1. source port number (16 bits)
      2. destination port number (16 bits)
      3. total length of UDP (header +data)
        • byte 단위
        • header는 항상 8 byte이므로 여기서 8을 뺀 값이 데이터의 길이
      4. checksum: 헤더와 데이터를 포함한 UDP 전체의 무결성을 검사하는 필드로 초기 값은 0
    • UDP 프로토콜을 사용하는 애플리케이션 프로토콜 
      • DNS (Port 53)
      • DHCP (Port 67 or 68)
      • TFTP (Port 69)
      • SNMP (Port 161)
      • NTP (Port 123)
      • RIP (Port 520)
  • TCP 프로토콜
    • connection-oriented
    • reliable
    • 양단간 논리적 연결이 있음
    • handshaking 프로세스 : 양단간 파라미터를 설정 (교환되는 데이터 패킷의 사이즈 등) 
    • 메시지 크기가 크거나 안정성이 중요한 경우 사용 
    • byte -stream
  • SCTP 프로토콜
    • UDP + TCP 
    • 양단간 연결이 있으며 안정적이지만 byte stream이 아님
    • 메시지 지향적이기도 함
    • 여러개의 네트워크 계층 연결을 제공하여 멀티스트림 서비스를 제공 
    • 안정성이 필요하거나 동시 연결이 있는 경우 사용 
    • multi-homing and streaming 

practice problem

World Wide Web (WWW)

  • 1989 CREN에서 아이디어 제안
  • 오늘날 웹페이지 문서인 정보 저장소
  • 전세계에 분산되어 있고, 관련된 문서간 연결되어 있음 
  • 목적은 연결된 문서를 찾고, 전사 쇼핑 및 게임 등의 서비스를 제공하는 것 
  • 분산 클라이언트-서버 서비스 사용 
  • 서버가 제공하는 서비스에 클라이언트가 브라우저를 이용해 접근 
  • 웹 클라이언트 (브라우저)
    • MS edge, firefox, chrome, explorer 등
    • 웬페이지를 해석하고 보여줌 
    • 컨트롤러
    • 인터프리터: 문서를 읽고 해석 
    • 클라이언트 프로토콜 : HTTP, FTP, ... 

  • 웹 서버
    • 웹 서버에 웹 페이지를 저장
    • 요청이 도착하면 일치하는 문서를 클라이언트에 보냄 
    • 효율성 향상을 위해 서버는 주로 캐시에 요청된 파일을 저장함 (메모리보다 빠른 캐시) 
    • 멀티스레딩, 멀티프로세싱을 통해 성능을 향상시킴 
    • 아파티, MS
  • Uniform Resource Locator (URL)
    • 웹페이지를 구분하기 위한 고유한 식별자 
    • 프로토콜 + 호스트 + 포트 + 경로 

  • 웹 문서 
    • 정적 문서 : 고정된 문서로 서버에서 만들고 저장함. 클라이언트는 오직 문서 복사만 가능함, HTML, XML, XSL 등
    • 다이나믹 문서 : 브라우저가 요청하면 웹 서버에서 만들어지는 문서, CGI, JSP, ASP 등, ex) 수강신청 사이트 
    • active 문서 : 클라이언트 사이트에서 실행되는 프로그램 또는 스크립트, Javascript, Java 등

HyperText Transfer Protocol (HTTP)

  • 클라이언트 서버 프로그램이 웹에서 웹 페이지를 읽고 쓰는 방법을 정의한 프로토콜 
  • HTTP 클라이언트는 요청을 보내고, 서버는 response를 반환
  • 서버는 포트 넘버 80을 사용하고 클라이언트는 임시 포트 넘버를 사용
  • TCP 서비스 사용 
  • nonpersistent connection : 영구적인 연결아 아니라 각 요청과 응답에 따라 TCP 연결 생성 
    1. 클라이언트가 TCP 연결을 열고 요청을 보냄
    2. 서버가 응답을 보내고 연결을 닫음
    3. 클라이언트가 응답으로 온 데이터를 EOF 파일까지 읽고 연결을 닫음 
  • persistent connection : 서버가 응답을 보낸 직후에 다음 요청을 위해 연결을 계속 열어둠 
    • 타임아웃 되면 연결을 닫을 수 있음
    • 자원 절약 
  • http에서 정의한 message formats (request + response)
    • request message

  • reponse message

  • cookies 
    • 웹서버가 기억해야 하는 클라이언트 정보 : 사용자 정보, 사용자 선호, 패스워크 기억하기 옵션 등 
    • 응답에 클라이언트에 대한 정보를 포함하고 보냄 
    • 클라이언트는 쿠키 저장소에 쿠키를 저장 (name-value 쌍) 
    • 클라이언트가 서버로 요청을 보낼때 브라우저는 쿠키 디렉토리를 보고 서버로 보낼게 있다면 요청에 쿠키를 포함시켜 보냄
    • 서버가 요청을 받으면 해당 클라이언트가 이전에도 요청을 보냈다는 것을 알게됨 
    • 쿠키 내용은 브라우저가 읽거나 사용자에게 공개되지 않음 (오직 서버만 읽기 가능
  • 웹 캐싱 : 프록시 서버 
    • HTTP는 프록시 서버를 지원함 
    • 프록시 서버 : 최근 요청으로 요청을 복사해 두는 것 
      1. 클라이언트는 프록시 서버로 요청을 보냄 
      2. 프록시 서버는 자신의 캐시를 확인하고 저장되어 있지 않다면 프록시 서버가 해당 서버로 요청을 보냄 
      3. 들어오는 응답도  나중에 다른 클라이언트의 요청을 위해 저장
    • 원 서버에 부하를 줄이고, 트래픽을 감소시키고, 지연시간을 줄임 
    • 프록시 서버는 보통 클라이언트 사이트에 위치함 -> 클라이언트 컴퓨터가 프록시 서버로 사용됨 
    • 업데이트가 필요한 캐시를 저장하는 전략은 다양함 

HTTP/1.1 to 2

  • 정적 웹 설계를 위한 프로토콜
  • 웹이 가지고 있는 자원이 많아져서 느려짐 
  • new features in HTTP2
    • 바이너리 프로토콜 : 요구사항의 대역폭을 줄이고, 오버헤드를 줄임, 특정 바이너라 포맷으로 인코딩하여 사전에 정의된 프로세스를 따라 프레임을 읽을 수 있음 
    • 스트림멀티플렉싱 : 각 요청응답 쌍은 스트림이라는 고유한 식별자를 가짐, 여러 개의 요청과 응답을 병렬적으로 처리 가능 
    • 스트림 우선순위 : 클라이언트는 서버에 자원 우선순위를 지정하도록 요청할 수 있음 -> 우선순위 높은 자원을 우선적으로 랜더링 등 (http2는 스트림 weight, dependency 요소에 따라 우선순위 관리하여 자원 할당)
    • 서버 푸시 : 서버는 클라이언트가 요청한 자원에 대한 사전 정보 prior knowledge 을 가질 수 있음 

  •  HTTP/1.1 : TCP에 의존하여 각 단계마다 handshake가 발생해서 지연시간이 길어진다. (매 request 마다 handshake) 
  • HTTP/2 : 스트림 개념으로 하나의 TCP 연결에서 멀티 플랙싱, 멀티 스트림이 가능하게 만들었다. 그러나 TCP는 원래 반드시 패킷을 순서대로 보내야 하고, 연결 내에서 독립적인 스트림의 존재를 모르기 때문에 전송 중 패킷이 손실되면 모든 활성화된 스트림이 멈추게 되어 그 영향이 매우 크다
  • HTTP/3 : 2에서의 TCP 문제를 해결하기 위해 QUIC라는 새로운 전송 프로토콜을 사용한다. 이것은 Quick UDP Internet Protocol을 줄인 말로, 다음 강의에서 설명하겠다. 

File Transfer Protocol (FTP) 

  • TCP/IP 에서 제공되는 표준 프로토콜
  • 하나의 호스트에서 다른 호스트가 파일을 복사하기 위해 사용 
  • HTTP로 파일을 복사하고 전달할 수 있지만 FTP가 더 큰 용량을 파일을 보내거나 다른 포맷의 데이터를 보내는데 적절한 프로토콜이다. 
  • 서버 컨트롤 프로세스 + 서버 데이터 프로세스 
  • 컨트롤 연결 + 데이터 연결 ( 두 연결은 서로 다른 라이프타임을 갖는다 ) 
    • 컨트롤 커넥션 (control connection) : FTP 세션을 시작하면 생기고, 전체 FTP 소통 과정 동안 연결을 지속 / open-send-close (더이상 보낼 파일이 없을 때 close)  // 제어 정보 보내는 연결 
    • 데이터 커넥션 (data connection) : 파일 전송이 사용되는 명령어를 할 때마다 열리고, 파일이 전송될 때 끊김 // 실제 파일 전송을 위한 연결 
  • control connection 중에 클라이언트가 서버로 보내는 커맨드 (참고) 

  • 모든 FTP command에 대한 응답 (FTP command에 대한 응답은 항상 하나 이상) 

  • data connection은 서버의 잘 알려진 포트인 20를 사용한다.
    1. 서버가 아닌 클라이언트가 특정 포트를 사용해서 passive open을 발생시킴
    2. 클라이언트가 이 포트 넘버를 PORT 커맨드를 사용해 서버로 보냄
    3. 서버가 포트 넘버를 받고, 20번 포트를 사용해서 active open을 발생시키고, 특정 포트 넘버를 받음
  • 파일 전송은 control connection를 통해 전송된 커맨드의 제어 하에 data connection을 통해 발생  
File transfer occurs over the data connection under the control of the commands sent over the control connection 
1. 서버가 클라이언트로 retrieving file
2. 클라이언트가 서버로 storing file
3. 서버가 클라이언트로 directory listing 
  • FTP가 out of band에서 control information을 보내는 이유는 ? 제어 정보는 파일을 보내는 것과 같은 연결에서 보내지는 것이 아니기 때문에 (control - data connection의 분리) 

Electronic Mail (e-mail)

  • 사용자간 메시지 교환
  • HTTP, FTP와 달리 one-way transaction
  • 매게 서버를 통해 양 단간 메시지 교환
  • 사용자들은 그들이 원할 때만 클라이언트 프로그램을 실행시킨다.
  • 매개 서버는 클라이언트/서버 패러다임을 적용한다.

  • UA (User Agent) 
    • 메시지를 구성하고 읽고 응답하고 전달하는 프로그램 
    • 사용자의 컴퓨터에서 가지고 있는 로컬 메일 박스를 다루는 프로그램 
    • command-driven : mail, pine, elm
    • GUI-based : outlook, eudora 
  • e-mail address : 메일을 보내기 위해 메일 시스템은 반드시 고유한 주소를 사용해야 한다. 
  • mailing-list, groupd list
    • 이메일은 하나의 이름 또는 별명이 여러 개의 메일 주소를 대표할 수 있는데
    • 이를 메일링 리스트라고 한다. 
  • message transfer agent
    • 세개의 클라이언트 서버 어플리케이션이 사용됨 : MTAs (두 개의 메시지 전송 에이전츠) MAAs (메시지 접근 에이전트) 
    • 프로토콜 : 
      • MTA 클라이언트 - MTA 서버 : SMTP (Simple mail transfer protocol)
      • MAA 클라이어느 - MAA 서버 : POP or IMAP

  • SMTP 메일 전송 단계
    1. 연결 생성 : 클라이언트가 25번 포트에 TCP 연결을 만든 후, SMTP 서버가 연결을 시작
    2. 메시지 전송 : SMTP 클라이언트와 서버간 연결이 생성된 후, 양단 간 메시지 교환
    3. 연결 종료 : 메시지가 성공적으로 전달되면 클라이언트가 연결 종료 

  • POP3 (Post Office Protocol ver3)
    • 간단하지만 기능이 제한적
    • 클라이언트 POP3 소프트웨어는 응답자 컴퓨터에 설치
    • 서버 POP3는 메일 서버에 설치 

  • IMAP4 (Intermet Mail Access Protocol ver 4)
    • POP3와 비슷하지만 더 기능이 많고 강력하며 복잡함
    • 사용자가 다운로드 전에 해더 확인
    • 다운로드 전에 특정 문자열로 메일의 내용을 찾을 수 있음
    • 부분 다운로드 가능
    • 메일 서버에서 사용자가 메일 박스를 생성, 삭제, 이름 변경 가능
    • 사용자가 메일 저장소 폴더에서 메일 박스 계층 구조 생성 가능 
  • MIME (Multipurpose Internet Mail Extension)
    • non-ASCII data : 이미지 등 을 에러 없이 이메일로 전송 가능하게 하는 프로토콜 
    • NVT (Network virtual terminal) 은 non-ASCII를 ASCI로 변환해서 클라이언트 MTA로 전달
    • 수신 측에서 메시지를 다시 원본으로 복구 
    • header, contetn-type (7개의 데이터 타입 ex) 텍스트, 복합자료, 메시지, 이미지, 비디오, 오디오, 어플리케이션 등) 등 함께 보내는 신호 - 자료 참고 

  • Web-based Mail 
    • Hotmail, Yahoo, Google mail
    • 웹 사이트에서 제공하는 메일 서비스 
각 프로토콜 풀네임 기억하기!!

TELNET (TErminal NETwork)

  • remote logging 프로토콜
  • 데이터 교환에 보안 매커니즘이 없음 
  • Secure Shell (SSH) : 안전하게 데이터 교환하기 위한 프로토콜 
  • local loging vs. remote logging
    • local : OS에 터미널 드라이버가 있고, 각 OS 내부에 어플리케이션 프로그램에 접근하기 위해 로그인
    • remote: 클라이언트가 터미널을 통해 텔넷 클라이언트 프로토콜로 인터넷에 정보를 보내면 텔넷 서버가 이를 받아들여 관리자 터미널 드라이버에서 이를 핸들링 

  • Network virtual termianl (NVT) : 서로 다른 컴퓨터 시스템은 문자 표현에 다른 방식을 사용하는데 원격 컴퓨터에 접근하기 위해서 원격 컴퓨터 종류가 무엇인지 파악해서 특정 터미널 에뮬레이션를 설치해야 한다. NVT가 이 문제를 해결한다. 

  • TELNET의 user interface 

SSH (Secure Shell)

  • secure application program
  • SSH-1과 SSH-2 서로 호환가능하지 않다. (SSH-1은 결함이 있었기 때문) 
  • 컴포넌트 1)  SSH Transport-Layer Protocol (SSH-TRANS) 
    • 메시지의 프라이버시, 비밀보장성 privacy confidentiality 
    • 데이터 무결성 (메시지 교환 사이에 방해꾼 X) data integrity 
    • 서버의 입증 (클라이언트는 자신이 요구하는 서버가 맞음을 확신) server authentication 
    • 메시지 압축 (시스템 효율 높임) message compression
  • 컴포넌트 2) SSH Authentication Protocol (SSH-AUTH)
    • 클라이언트와 서버간 보안 채널이 생긴 후,
    • 서버는 클라이언트에게 입증하는데 이때 SSH는 서버에 클라이언트를 입증할 수 있는 절차를 호출
  • 컴포넌트 3) SSH Connection Protocol (SSH-CONN)
    • 보안 채널이 만들어 지고, 입증을 한 뒤,
    • SSH는 SSHCONN가 구축된 소프트웨어 일부를 호출
    • 클라이언트는 여러 개의 서로 다른 목적의 논리적 채널을 만들 수 있다. 

  • SSH 적용 : remote logging, file transfer 
  • SSH port forwarding : SSH에서 제공하는 서비스 
    • 안전하지 않은 프로토콜에 보안을 제공하는 서비스 
    • 다른 프로토콜이 트래블링할 수 있는 매시지 통로를 만들어 줌 

Domain Name System (DNS)

  • TCP/IP에서 IP 주소는 인터넷에서 호스트를 식별하는데 사용하는데 이는 외우는 게 어렵다.
  • 또한 집중된 디렉토리 시스템은 모든 맵핑 정보를 가질 수 없어서 정보를 분산 해 두어야 한다. 
  • DNS를 정보 분산 방식을 효율적으로 만드는 시스템
  • TCP/IP는 DNS 클라이언트와 DNS 서버를 이름과 주소를 연결하여 사용 

  • name space
    • flat: 구조 없음
    • hierarchical : 자주 사용되는 방식 inverted-tree 구조  (128 level 0 - 127) 
  • label: 각 노드는 라벨을 가지고 있음 (최대 63 문자열) , 루트 라벨은 null 
  • 도메인: 도메인 네임 스페이스의 서브 트리 
  • zone : 서버가 책임져야 하는 부분

  • 루트 서버 : 전체 트리를 가지고 있는 zone , 어떤 정보도 가지고 있지 않지만 authority를 위임함, 분산되어 있음
  • DNS 서버
    • primary : zone 파일을 만들고 유지하고 업데이트하며, zone 파일을 저장한 서버 
    • secondary : 로컬 디스크의 파일을 저장하고 각 zone 서버에 정보를 전송하는 서버 
  • DNS in the internet : generic-country-inverse / IP 주소가 주어지면 호스트 이름을 알아내기 위해 사용 / 오늘날은 잘 사용되지 않음 
  • name-address resolution: 이름 - 주소를 맵핑하는 것 
    • recursive : 각 서버는 서로 맵핑 정보를 몰라, 재귀적으로 쿼리를 보내 목적지 호스트의 IP 주소를 아아냄
    • iterative : 로컬 서버가 모든 다른 서버에 반복적으로 물어봐서 그 중 일치하는 것 찾음 
    • caching : 주소를 캐싱해 둠 (서버가 다른 서버로 맵핍을 요청할 때 이 정보를 저장) 
  • resource records 

  • DNS resolver (DNS 클라이언트) 어플리케이션은 dns look up을 해서 주소/이름 맵핑 정보를 찾는다. (util - nslokkup) 
  • DNS Encapsulation :UDP, TCP 둘 다 사용 가능 (사이즈 작으면 UDP vice versa)  - 53번 포트 사용 
    • 메시지의 길이에 따라 512 바이트 이하면 UDP 이상이면 TCP 
  • 각 인터넷 호스트는 하나 이상의 로컬 네임 서버와 authoritaive 네임 서버를 갖는다. 
    • authoritative name server : 공식적인 hostname을 IP 주소로 변환
    • 로컬 네임 서버: DNS 시스템에 proxy/ 호스트에 먼저 맵핑을 위한 네임 서버를 묻고 반대편 호스트의 맵핑 정보를 얻음 

3. Peer-to-peer (P2P)

No always-on server : 임시적
임시 end 시스템간 연결
peer간 연결되며 IP 주소가 지속적으로 바뀜
높은 확장성과 분산성을 가지지만 관리가 어려움
파일 공유 through 네트워크 패러다임 
  • 각 컴퓨터가 다른 컴퓨터에게 클라이언트 / 서버 역할을 하는 네트워크
  • 한 네트워크에 있는 한 peer / 컴퓨터가 파일을 공유하면 해당 네트워크에 있는 다른 피어들이 해당 파일을 사용할 수 있음 

Centrailized Networks

  • 디렉토리 시스템 (센터) 사용 

Decentralized Networks

  • 컴퓨터들을 overlay network 에 정렬함 = 논리적 네트워크를 물리적인 네트워크 최상단에 위치시킴
  • unconstructured 
    • 노드들이 랜덤으로 연결됨
    • 파일 탐색을 위한 query가 네트워크 전체를 돌아다녀야 하기 때문에 검색이 비효율적 
    • 간단한 쿼리가 네트워크 자원을 많이 소모함 
    • 권장되지 않는 방식
    • Gnutella, Freenet ...
  • structured
    • 사전 정의된 규칙을 사용해서 노드 연결 
    • 효율적으로 쿼리 사용 가능 
    • Distributed Hash Table (DHT) 기술 사용 
    • BitTorrent, ...

Distributed Hash Table (DHT)

  • 노드들 (컴퓨터, 사용자 등) 관련 데이터 파일들을 가지고 있음 
  • 사전에 정의된 규칙에 따라 분산해둠 
  • 각 데이터 아이템과 피어는 2^m 사이즈의 주소 공간으로 맵핑됨 
  • 주로 m = 160 

  • hashing peer identifier
    • 모든 피어(컴퓨터)들을 주소 공간 링 ^ 에 생성
    • 해시 함수를 이용해서 identifier 생성 
    • 보통 : node ID = hash(Peer IP 주소) (m-bit integer) 
  • hashing object identifier 
    • 파일/객체 이름 등이 같은 주소 공간에 있는 m-bit integer로 hash되어 공유됨 
    • key = hash(Object name)
  • 모든 peer 주소 공간은 사이즈가 같음 m-bit integer
  • storing object example

  • N5는 Liberty라는 파일 객체를 가지고 있는데 같은 네트워크 (주소 공간 링)에 있는 피어들에게 공유하고자 한다.
  • hash(Liberty)로 key를 만들어 k14 객체 노드 생성 / k14는 실제 파일이 아닌 파일의 식별자를 저장한 노드 
  • 해당 파일을 참조하는 것 (k14)은 파일의 hash된 key에 가장 가까운 노드에 저장됨, 즉, 시계 방향으로 N17과 가장 가까우므로 그 옆에 위치하게 됨 
  • routing : 각 노드들은 링(주소공간)에 대한 부분적 지식이 있어야 쿼리를 특정 필요한 노드로 라우팅할 수 있음 
  • 컴퓨터가 DHT 소프트웨어를 시작하면, 네트워크에 참여하게 되고, 끄면 네트워크를 떠나게 됨 
  • DHT를 구현한 프로토콜 
    • Chord : 라우팅 쿼리로 간단하고 우아한 접근 
    • Pastry : Kademlia와 비슷한 접근 전략 
    • Kademlia : 가장 많이 사용되는  파일 공유 네트워크

BitTorrent

  • 콘텐츠의 질을 높이는 것이 요점 
  • 어떻게 큰 사이즈의 콘텐츠를 잘 공유할 수 있을까?
  • peer 사이에 큰 파일을 공유하기 위한 P2P 프로토콜 
  • 토렌트라고 불리는 프로세스에서 파일 공유
  • 토렌트에 있는 각 피어들은 다른 피어로부터 큰 파일의 덩어리를 다운로드 하고 다른 피어들에게 파일 덩어리를 업로드함 
  • seed 라고 불리는 콘텐츠 파일을 가지고 있는 피어 또는 leech 거머리는 파일을 사용함 = 정보 공유로 생태계 유지  
  • tracker 또는 분산 환경에서 동작 - 트래커는 피어 사이에서 소통을 돕는 서버 

Chord (identifier space)

  • 데이터 아이템과 노드들은 2^m 크기의 고유식별자 공간으로 만들어지고, 시계 방향으로 링에 분산됨
  • 데이터 아이템의 key와 노드의 해시값을 참조 
  • 고유식별자의 범위 : 2^m-1 에서 거꾸로 0 
  • key 보다 큰 N을 가진 피어 중 가장 가까운 피어를 k의 후임자 successor라고 함
  • successor of k는 value(k,v)를 가짐 
  • 데이터 아이템을 저장하고 있는 피어 (N5) 는 (k,v) 쌍을 가진 피어 (N17)는 같은 게 아님
  • Finger table 
    • 각 노드들은 finger table이라고 하는 routing table을 가짐 
    • 쿼리에 대해 주어진 키를 찾기 위해 노드는 해당 키를 가진 노드를 찾아야 함 
    • 핑거테이블의 엔트리들은 m Successor을 저장 

N5가 k14를 찾는다고 가정하면, k14 정보를 가진 노드를 찾아야 함 
자신의 전임N5 -> N10 -> N12 -> N20 여기서 k14 정보를 찾음 
  •  

Kademlia

  • 노드간 거리를 기반으로 메시지 라우팅
  • XOR로 노드와 key의 거리 측정 

  • 주소 공간 m-bit integer 
  • 이진트리의 리프에 분산되어 있음 
  • routing table - 각 노드들은 m row가지고 m개의 서브 트리를 가짐 (하나의 column) , 서브트리 i는 i leftmost biy (prefix)를 공유하는 노드들을 가지고 있는 것
  • m=4 이면 각 노드는 서브 트리 4열에 해당하는 4개의 서브트리를 가짐 row0 은 prefix = 0 인 것들을 저장 

 

k3은 N3에 저장되어 있음 
k7은 N6에 저장 
bitwise XOR 연산으로 작은 값을 선택 (가까운 거리) 

 

  • k-buckets : 각 열은 서브트리에  최소 k개의 노드를 가진다. a개의 병렬 쿼리를 a개의 노드로 보내기 가능 k-bucket을 이용해서 

 

 

 

 


References

  • 성균관대학교 소프트웨어학과 2021-1 <컴퓨터 네트워크 개론> , 추현승 교수님 수업을 듣고 정리한 내용입니다. 
  • 2021.03.09
  • 2021.03.16
  • 2021.03.23