본문 바로가기

Distributed System/이론 공부

분산시스템) 커뮤니케이션

Communication

Layered protocols

shared memory와 같은 원격에의 메모리를 접근해서 쓰는 것이 없기 때문에 모든 통신은 low level로 메세지를 주고받는 것을 기반으로 해야한다.

Agreement among communicating processes

통신을 주고받기 위해서 통신규약이 필요하다. 얼마나 센 전기신호를 1로 표시할지, 마지막 비트가 무엇인지 받는 곳은 어떻게 알지, 메세지가 손상되었는지 아닌지 받는 쪽에서는 어떻게 알지, 데이터 타입은 어떤것으로 할지 등을 정해야한다.

OSI model

동의가 필요한 부분이 다양한 레벨에서 있다. 따라서 Open System Interconnection Reference model (OSI model)이 생겼다.
애플리케이션을 만들 때 그 app의 프로토콜을 만들어야한다. 둘 사이의 주고받는 메세지를 어떤 방식으로 만들지이다. 메세지가 몇 바이트인지, 의미가 무엇인지(id), 메세지의 의미(sementic), 보내는 시점 등을 정해야한다.
컴퓨터 네트워크 상에서 통신 방식은 크게 두 가지가 있다.  

• Connection oriented protocols (ex. Telephones, TCP)
• Connectionless protocols (ex. Letters, UDP)

UDP는 전날 보낸 루트와 다음날 보낸 루트가 다를 수 있다. 또 중간에 유실될 수도 있다.

Layered Protocols

각 부분의 헤더가 붙여있는 메세지가 전기적인 신호로 보내진다. 보내지는 쪽은 상위 레이어부터 헤더를 붙여서 보내고 받는 쪽에서는 하위 레이어부터 헤더를 받아서 보고 처리 후 위로 넘긴다. 최종적으로 원래 메세지만 받을 수 있다.

Layered Message

Advantages

전체 시스템의 관리가 수월해진다.

각 레이어는 다른 레이어와는 독립적으로 그 레이어에서 담당하는 프로토콜만 고려하면 된다. 레이어에서 수정이 필요한 경우 그 레이어 프로토콜만 수정하면 된다. 특정 레이어는 상호작용하는 인터페이스만 동일하게 유지해주면 된다.

OSI model: low-level protocols

Physical layer

전기적인 신호인 비트(bit: 0, 1)를 보내는 것과 관련이 있다.

  • 0과 1을 구분하는 볼트의 기준
  • 1초에 몇 비트를 보낼 것인지
  • 단 방향 통신인지 양 방향 통신인지

Data link layer

받고 보내는 비트가 제대로 된 비트인지 검사한다.

  • 에러를 감지하고 고치는 역할을 한다.
  • checksum이란 것을 이용해서 받은 비트들이 보내는 쪽에서 보낸 것 그대로 받은 것인지 검사한다. checksum은 보내고자 하는 비트에 대해 단순 계산을 통해 나온 결과값을 나온다. 메세지를 보낼 때 데이터링크 헤더에 checksum value를 붙여서 메세지 보낼 때 같이 보낸다. 자신이 계산한 value와 받은 value가 같은지 비교해서 데이터의 무결성을 판단한다. 다른 레이어에서도 checksum을 하는 부분이 없는 것은 아니다. 그냥 데이터 링크 레이어의 주된 역할이 checksum이란 것이다.
  • 데이터 링크 레이어에서는 받은 비트들의 집합을 프레임이란 단위로 표현한다.

Network layer

인터넷 환경에서는 네트워크 레이어로 제공되는 프로토콜은 IP 하나이다. 주로 컴퓨터 뿐만 아니라 라우터에서 작동하는 프로토콜 레이어이다. 네트워크 프로토콜의 주된 역할은 라우팅이다. 어떤 보내려고 하는 메세지가 있으면 그 메세지의 목적지는 주소 즉 IP address와 포트 번호를 포함한다. 라우터는 이러한 메세지를 보통 패킷이라 하고 목적지 IP 주소를 보고 어느 길로 갈지 결정해주는 역할을 한다. 이러한 활동을 라우팅이라 한다. 네트워크 레이어는 목적지 컴퓨터까지 전달해 주는 역할을 한다.

Trasport layer

메세지를 목적지까지 전달해주는 역할을 한다.

목적지는 컴퓨터가 아니고 프로세스가 되어야한다. 목적지 컴퓨터에서 실행된 프로세스가 많이 있을 것이다. 이 중 어떤 프로세스에 전달되어야 할지는 포트 번호로 구분한다. 포트번호를 가지고 목적지 프로세스까지 전달해주는 역할을 transport layer protocol이 한다.

인터넷 시스템에서는 transport layer protocol이 두 가지가 있다. TCP나 UDP를 이용해서 애플리케이션이 메세지를 보내고 받는 것을 할 수 있다. 받는 입장에서는 OS가 수신한 메세지의 포트번호를 가지고 대상 프로세스에게 전달해준다. 이 둘의 가장 큰 차이는 메세지를 신뢰적으로 전달 해줄 것인가 비신뢰적으로 전달할 것이가 이다. TCP는 신뢰를 보장해주고 UDP는 그렇지 않다. 자신의 밑 레이어인 Network layer의 IP를 사용해서 보내야하는데 IP layer는 기본적으로 reliable하지 않다. 해당 레이어는 자신이 바쁘면 메세지를 누락할 수도 있다.

Procedure

전송 계층은 자신이 한 번에 보낼 수 있는 패킷 길이가 정해져있다. 애플리케이션이 만든 메세지가 너무 길면 메세지를 쪼개서 패킷별로 번호를 붙여서 보낸다. 이러한 번호를 sequence number라 하고 받는 쪽 TCP 프로토콜에서는 받아야 할 패킷을 순서대로 제대로 받았는지 판단할 수 있다. 누락된 것이 있다면 송신 측에 재요청 할 수 있다. 그래서 TCP에서는 신뢰적인 패킷 전송 뿐만 아니라 순서도 맞춰준다. UDP에서는 순서 또한 보장되지 않는다. UDP는 우편과 비슷해서 늘 같은 루트가 아니라 보낼 때 마다 다른 루트를 이용한다. 따라서 먼저 보낸 것이 더 긴 루트를 사용하면 더 늦게 도착할 수 도 있다. TCP는 순서가 맞지 않게 패킷이 오면 버퍼 안에 넣어서 먼저 와야할 것을 기다린다.

애플리케이션 레이어에 합쳐서 생각하기도 하지만 전송 계층과 애플리케이션 계층 사이에 두 레이어가 있다.

Session layer

전화통화를 예로 들어보면 전화통화 중에는 그 세션이 유지되는 것이고 통화가 끝나면 그 세션은 없어진다. 이와 비슷하게 통신 중에는 해당 세션이 있고 통신 이끝나면 해당 세션은 없어진다. 세션과 관련된 규약을 정의한 것이 세션 레이어 프로토콜이다. 통신하고 있는 주체가 누구인지, 둘 사이 세션과 관련된 동기화 등을 전담한다. 실질적으로 세션 레이어의 역할을 이용하는 애플리케이션이 많지도 않고 잘 쓰이지도 않았다. 세션을 관리하는 측면도 어떻게 보면 애플리케이션 레이어의 영역이라 볼 수 도 있어 지금은 잘 쓰이지 않는다.

Presentation layer

presentation은 표현한다는 의미이다. 메세지의 presentation, 즉 표현과 관련된 동작들을 담당하는 프로토콜이다. 메세지를 인코딩하는 등의 표현, 즉 메세지 포맷을 바꾸는 역할을 한다. 메세지 안에 포함된 비트의 의미와 관련된 프로토콜이다. 주된 역할을 서로 heterogeneous한 프로세스 사이에 서로 데이터를 표현하는 방식이 다른 두 노드가 통신할 때 presentation layer에서 서로 이해할 수 있는 포맷으로 중간에서 바꿔주는 것이다.

Application layer

Application layer protocol은 두 애플리케이션끼리 통신할 수 있도록 만들어진 통신 규약이다.

위의 두 레이어는 지금 application layer에서의 프로토콜이라 생각하면 된다. 분산 시스템에서 주로 다루게 될 것도 application layer에서의 프로토콜이다. transport layer는 그냥 이용하는 것이다. 분산 시스템은 애플리케이션이다. 따라서 분산시스템에서는 개발이 될 때 바로 밑의 레이어인 transport layer의 서비스를 이용해서 개발을 한다. TCP와 UDP는 그냥 이용하는 입장이다. 분산시스템은 자신 나름의 애플리케이션 레이어의 프로토콜을 만들어서 이용할 수 도 있고 아니면 기존에 만들어진 애플리케이션의 다른 프로토콜을 이용할 수도 있다.

많은 애플리케이션 프로토콜이 있지만 그 중 모든 애플리케이션이 공통으로 사용하는 표준 프로토콜이 있다.

  • FTP(File Transport Protocol)
  • HTTP(HyperText Transfer Protocol)

'Distributed System > 이론 공부' 카테고리의 다른 글

Middleware Protocol과 Communication  (1) 2020.12.21
Middleware Protocol  (0) 2020.12.21
분산시스템) 코드 마이그레이션  (0) 2020.08.21
분산시스템) 서버 클러스터  (0) 2020.08.19
분산시스템) 서버  (0) 2020.08.16