웹 애플리케이션

ksh98·2024년 4월 21일

네트워크

목록 보기
4/25

클라이언트 서버 구조

  • 대부분의 서비스가 갖고 있는 구조

서버

  • 요청을 받아 처리해주는 호스트
  • 보통은 항상 켜져 있는 호스트
  • 클라이언트가 찾기 쉽게 영구적인 ip를 사용한다.
  • 대용량 요청을 처리하기 위해 서버끼리 클러스터를 이루기도 한다.

클라이언트

  • 요청을 하는 호스트
  • 서비스를 이용하다 안 하다 하면서 서버와의 연결이 됐다 안 됐다 한다.
  • 동적인 ip 주소를 가질 수 있다.
  • 클라이언트끼리는 직접 통신하지 않는다. 다른 클라이언트와 무엇을 하고 싶다면
    서버에게 요청하고 서버가 대신 처리해준다.

오버레이 네트워크

  • 개념적인 가상 네트워크
  • 실제 물리적 네트워크가 있을 때 한 호스트에서 한 호스트로 가려면 실제로는 여러 라우터를 거쳐야 한다.
  • 하지만 개념적으로는 둘이 연결되어 있다고 생각할 수 있다.
  • 예시 그림의 위에 처럼 개념적인 연결 상태를 나타낸 것이 오버레이 네트워크이다.
  • 피어 투 피어 네트워크이다.

P2P 네트워크

  • 임의의 호스트가 직접적으로 연결된다.
  • 이상적으로는 서버가 없다. 하지만 처음에 동료들을 알긴 해야 해서 서버가 있긴 있어야 한다.
  • 모든 호스트는 서버이자 클라이언트가 될 수 있다.
  • 모든 호스트가 클라이언트이자 서버이므로 피어가 많을 수록 서버가 많아진다고 생각할 수 있다. 즉 self-scalable 하다

비트토렌트

  • 특정 파일의 조각을 분산해서 갖고 있는 동료들의 집합을 토렌트라 한다.
  • 동료들끼리 주고받는 데이터의 단위가 청크이다.
  • 청크는 파일의 조각으로 보통 256 킬로바이트이다.
  • 처음에 피어가 토렌트에 들어오면 청크를 하나도 갖고 있지 않다.
  • 한 사람이 토렌트에 들어오면 트랙커에 자신을 등록하고 주기적으로 트랙커에게 자신이 있다는 것을 알려준다.
  • 이런 방식으로 트랙커는 참여중인 피어를 알 수 있다.
  • 피어는 파일을 다운로드 하는 동시에 자신이 갖고 있는 것을 업로드한다.

과정

  1. 어떤 사람이 처음 토렌트에 오면 트랙커는 랜덤으로 일부 참여자의 ip 주소를 알려준다.
  2. 참여자는 명단에 있는 사람들과 모두 tcp 연결을 한다. 이렇게 연결된 사람을 이웃이라 한다.
  3. 이 사람은 주기적으로 이웃들이 갖고 있는 청크의 리스트를 물어본다. 만약 L명의 이웃이 있다면 L개의 청크 리스트를 갖고 있다. 이 명단을 통해 자신에게 없는 청크를 알아낸다.
  4. 이 사람은 자신에게 가장 잘 응답해주고 가장 희귀한 청크를 갖고 있는 사람에게 청크를 요청한다.

프로세스 통신

  • ipc와 같이 한 호스트 내부 프로세스간 통신을 할 수 있다.
  • 네트워크를 타고 자기 자신으로 와서 자신 안에 있는 프로세스로 갈 수도 있다.
  • 네트워크를 타고 다른 호스트의 프로세스와 통신하는 것도 당연히 가능하다.
  • 문제는 한 호스트 내에서 돌아가는 프로세스가 여러개인데 어떻게 프로세스를 찾아갈 것이냐이다.
  • 이 때문에 포트번호가 생겼고 포트번호로 프로세스를 구분한다.
  • ip는 어느 인터페이스로 가야 하는지 포트번호는 어느 프로세스로 가야하는지를 말한다.

응용 계층 프로토콜

응용 계층 프로토콜은 서로 다른 호스트에서 돌아가는 응용의 프로세스가 통신할 때 어떻게 메세지를 주고 받는지를 정의한다.

서로 메세지를 주고 받기 위해서는 다음과 같은 것들이 정의되어야 할 것이다.

  • 주고 받는 메세지의 종류
    • 이 메세지가 요청 메세지인지 응답 메세지인지 알 수 있어야 한다.
  • 메세지에 어떤 항목이 어디에 들어가 있고 무엇을 의미하는지 정의되어야 한다.
  • 메세지를 보내고 받는 시점과 방법이 정의되어야 한다.

응용 계층 프로토콜은 응용과 다른 것이다. 응용은 응용 계층 프로토콜을 기반으로 만들어진 것이다. 모든 응용이 응용 계층 프로토콜 위에 만들어지는 것은 아니다. 응용 고유의 프로토콜을 만들고 이 위에서 작동을 하기도 한다.

응용에게 필요한 전송 서비스

전송 계층은 응용을 위해 다음과 같은 서비스를 제공해야 할 수 있다.

믿을만한 전송

  • 로스가 발생하거나 비트 에러가 난 경우 큰 결과를 초래할 수 있다.
  • 예를 들어 파일 전송은 하나의 비트만 틀려도 파일이 깨질 수도 있다.
  • 믿을만하다는 것은 100 모든 것이 잘 전송되는 것을 말한다.
  • 요구되는 신뢰성의 정도는 응용마다 다르다.
  • 믿을만한 전송을 위해선 로스나 에러만 생각해서는 안 된다. 순서에 맞게 왔는지도 생각해야 한다.

메세지가 오는 타이밍

  • 얼마 안에는 데이터가 온다를 보장해야 한다는 것이다.
  • 예를 들어 실시간성이 중요하다면 0.001초 안에 전송이 보장되는 프로토콜은 쓸만 할 것이다.
  • 타이밍은 지연보다는 지터와 관련이 있다.

쓰루풋

  • 주어진 시간동안 얼마나 보낼 수 있냐에 관한 것이다.
  • 네트워크 경로를 여러 프로세스가 공유하고 통신에 참여하는 프로세스도 매번 바뀌니 쓰루풋 또한 계속 바뀐다.
  • 그래서 일정 쓰루풋을 보장해주는 전송 계층 프로토콜이 의미가 있다.

보안

profile

0개의 댓글