[네트워크] 프로토콜의 이해

hi·2022년 10월 1일
0

네트워크 컴퓨팅

목록 보기
5/6

⭐ 프로토콜

네으워크에 연결된 시스템은 정해진 규칙(프로토콜)에 따라 순차적으로 데이터를 주고 받음.



⭐ 계층적 모듈 구조

복잡하고 큰 시스템의 기능은 특정 단위의 모듈로 나누어 설계됨. 그리고 모듈과 모듈은 인터페이스를 통해 연동됨


✔️ 모듈화

복잡한 시스템을 기능별로 모듈화하면 시스템 구조가 단순해지고 이해하기 쉬움. 또한 각 단위의 모듈이 독립적인 기능을 수행하기 때문에 고장이나 업그레이드 등 상황에 손쉽게 대처 가능.

  • 하드웨어 측면에서
    CPU, 메모리, 하드디스크, LAN 카드 등으로 모듈화되어 있음
  • 소프트웨어 측면에서
    함수 개념을 사용해 전체 프로그램을 모듈화함. 함수는 특정 기능을 독립적으로 수행하며, 함수의 파라메타값으로 인터페이스가 이루어짐.

아래 그림은 시스템 모듈화의 장점을 보여줌

B는 A, B와 C와는 톱니 모양의 인터페이스로 연결됨. 그리고 A와 C는 직접 연결되는 인터페이스가 없으며, B를 통해 간접적인 관계를 유지함. 그리고 B 모듈에 오류가 생겼따면 A나 C에 손댈 필요없이 B만 수정하면 됨.


✔️ 계층 구조

모듈 구조는 서로 서비스를 주고받을 수도 있고 (동등한 위치), 특정 모듈이 다른 모듈에 서비스를 제공하는 형식 (계층 구조)을 이룰 수도 있다. 네트워크에선 각 모듈들이 상하 계층 구조로 연결되어 동작한다.

계층 구조에선 상위 계층이 하위 계층에 특정 서비스를 요청한다. 요청을 받은 하위 계층은 해당 서비스를 실행하여 결과를 상위 계층에 돌려준다.

하위 계층의 실행 결과는 상위 계층에 결과 값을 전달하는 방식이 될 수도 있고 주변 환경 값을 변경하는 부수 효과 (Side Effect) 방식일 수도 있다.

네트워크에서 통신하는 시스템드른 계층 구조로 모듈화된 기능이 각각 동작하며, 둘 사이의 같은 계층끼리 데이터를 전달한다. 그리고 이때 데이터를 전달하는 규칙을 프로토콜이라고 함. (수직은 인터페이스, 수평은 프로토콜).

네트워크에서 계층화된 모듈 구조의 장점은 아래와 같다

✏️ 복잡하고 큰 시스템을 기능별로 작게 분류해서 간단하고 작은 시스템으로 재구성할 수 있음. 따라서 전체를 이해하기 쉽고, 시스템 설계와 구현이 편리
✏️ 상하 계층에 인접한 모듈 사이의 인터페이스를 포함하여 분할된 모듈이 연동할 수 있는 표준 인터페이스를 제공.
✏️ 전송 매체 양단의 호스트가 수행하는 프로토콜은 좌우 대칭 구조임.
✏️ 각 계층의 기능 오류를 수정하거나 향상시켜야 하는 경우 전체 시스템을 재작성하지 않고 해당 계층 모듈만 교체하면 됨.


⭐ 프로토콜 설계 시 고려 사항

계층 구조의 통신 프로토콜을 설계할 때는 대표적으로 호스트의 주소 표현 방법, 데이터 전송 과정의 오류 제어(분실, 변형), 통신 양단의 전송 속도를 제어하는 흐름 제어를 고려해야 함.


✔️ 주소 표현

시스템을 구분하여 지칭하기 위해 이름을 부여하는 것을 주소 체계라고 한다. 보통 호스트마다 하나의 주소를 부여하며, 다수 호스트를 묶어 하나의 그룹 주소로 표기하기도 함. 1:n 통신의 대표적인 유형으론 브로드캐스팅 (Broadcasting) 표기 방법과 특정 사용자를 묶어서 지칭하는 멀티캐스팅 (Multicasting) 표기 방법이 있다. 예를 들어 카카오톡 앱에서 단체 전송을 하는 기능이나 줌에서 온라인 화상 회의 진행하는 기능은 멀티캐스팅 표기법에 해당함. 브로드캐스팅은 특정 x, 그냥 뿌림 (ex, kbs 방송)


✔️ 오류 제어

네트워크에선 데이터 송수신 과정 중 데이터가 깨져서 도착하는 데이터 변형 오류와 데이터가 도착하지 못하는 데이터 분실 오류가 발생할 수 있다.

데이터 변형 오류는 일반적으로 물리 계층의 전송 매체에서 발생하며 전송 과정에서 데이터 내용이 바뀌게 되어 발생한다. 그리고 이는 데이터 링크 계층에서 해결한다.

프로토콜의 수행 과정 중 데이터를 분실하는 논리적 오류가 발생할 수 있다 (데이터 분실 오류).

네트워크의 오류 제어는 오류의 발생을 인지하고, 데이터 재전송을 통해 이루어진다.

위 그림은 송신 호스트에서 보낸 데이터가 수신 호스트에 도착했을 때 발생할 수 있는 현상을 나타낸 것이다.
(b)는 데이터가 수신 호스트에 도착하지 못하는 데이터 분실 오류이며,
(c)는 데이터의 내용이 변경되어 도착하는 데이터 변형 오류이다.

  • 데이터 분실
    데이터 분실은 전송 경로가 잘못되어 데이터가 엉뚱한 방향으로 전달되거나, 상위 계층의 논리적 처리 과정에서 데이터를 분실하는 등의 이유로 발생한다. 따라서 이를 해결하기 위해선 오류가 발생하였다는 사실을 인지하여야 한다. 그러나 (b)의 경우는 수신 호스트가 자신에게 데이터가 보내졌다는 사실을 인지하는 것이 쉽지 않음. 따라서 송신 호스트에 타임아웃 등의 기능으로 오류를 감지하는 방법을 사용한다.

  • 데이터 변형
    데이터 변형 오류는 수신 호스트가 CRC 방식 등의 오류 검출 기법을 통해 검출할 수 있다.

정리하자면, 데이터 분실 오류는 송신 호스트 주도로 이루어지고, 데이터 변형 오류는 수신 호스트 주도로 이루어진다. 그리고 네트워크에서 전송 오류를 해결하는 일반적인 방법은 송신 호스트가 원래 데이터를 재전송 (Retransmission) 하는 것이다.

물리적인 오류 외에도 통신 프로토콜에서 사용하는 알고리즘의 성격에 의해 오류가 발생하기도 한다. 예를 들어, 송신 호스트가 순차적으로 전송한 데이터의 순서가 뒤바뀌어 도착하는 경우인데, 이 경우 수신 호스트에서 도착 순서를 바로잡기 위해선 데이터의 논리적인 순서를 의미하는 순서 번호 기능이 필요함.


✔️ 흐름 제어

전송 매체에서 물리적 오류가 없었는데도 데이터를 분실하는 경우가 있음. 이는 송수신 호스트 사이의 데이터 전송/처리 속도 차이 때문에 발생함. 일반적이로 수신 호스트에 데이터가 도착하면 내부 버퍼에 보관했다가 처리하는데 이 내부 버퍼 공간을 충분히 확보하지 못하면 데이터를 논리적으로 분실할 수 있음.
따라서 일반적으로 수신 호스트의 버퍼 처리 속도보다 송신 호스트의 데이터 전송 속도가 빠르면 논리적인 데이터 분실 오류가 발생함. 이 문제를 송신 호스트의 전송 속도 조절 flow control을 통해 해결할 수 있다.

flow control의 예시를 살펴보자면, 송신 호스트가 데이터를 전송하려면 반드시 수신 호스트로부터 명시적인 전송 허가를 받아야함. 아래 그림과 같이 (a)에서 송신 호스트가 i번째 데이터를 보내고 수신 호스트는 이를 받는다. 이후 송신 호스트가 i+1번째 데이터를 보내려면 수신 호스트의 전송 허가가 필요하다. (b)에서처럼 전송 허가가 났을 경우 송신 호스트는 i+1번재 데이터를 전송한다. 그러나 실제 통신 환경에선 아래와 같은 전송 속도는 너무 느리므로 일반적으로 송신 호스트는 속도를 높이기 위해 동시에 여러 개의 전송 데이터를 송신할 수 있으며, 수신 호스트가 데이터 개수를 통제한다.


✔️ 데이터 전달 방식

데이터를 전달하는 방식에는 3가지가 있다.

  • 단방향 방식 (Simplex): 데이터를 한 방향으로만 전송함
  • 전이중 방식 (Full Duplex): 양방향에서 데이터를 동시에 전송함
  • 반이중 (Half Duplex): 특정 시점에 한 방향으로만 전송 (동시 전송 불가능), 따라서 데이터 사이의 전송 우선순위를 설정하는 방법 등을 고려해야 함.

일반적으로 통신 프로토콜들은 모두 전이중 빙식을 지원한다.



⭐ 서비스 프리미티브

프로토콜은 계층 구조로 이루어져 있고, 하위 계층이 상위 계층에 서비스를 제공하는 방식으로 동작함.
이러한 서비스는 Primitive 형태로 구현되며, 계층 구조 프로토콜에서 하위 계층이 상위 계층에 제공하는 서비스의 종류에는 연결형과 비연결형이 있음.

  • 연결형 서비스
    연결형 서비스의 동작 원리는 전화 시스템을 이용한 통화 절차와 유사하다. 연결형 서비스는 아래 절차를 통해 이루어짐
단계설명
연결 설정 단계데이터 전달 경로를 설정
데이터 전송설정된 경로를 따라 데이터를 전달
연결 해제 단계모든 데이터의 전송이 완료된 후 데이터 전송 단계를 끝내려면 연결을 해제해야 함
  • 비연결형 서비스
    비연결형 서비스는 우편 시스템의 동작 원리와 비슷함. 연결을 설정하고 해제하는 단계가 필요없고, 전송할 데이터를 독립적으로 목적지 호스트로 전송하면 됨. 따라서 데이터는 독립적인 경로 선택 과정에 의해 전달되므로 도착 순서가 보낸 순서와 일치하지 않을 수 있다.

클라이언트 서버에 비유하면 서비스 프리미티브는 다음과 같이 나타낼 수 있다

  • Request
    클라이언트가 서버에 프리미티브의 기능을 수행하도록 요청. 클라이언트에선 상위 프로토콜이 하위 프로토콜에 요청을 전달하고, 이 요청은 가장 아래의 물리 계층을 통해 서버에 전달됨.

  • Indication
    물리 계층을 통해 Request 요청을 수신한 서버는 이 요청을 물리 계층 위에 있는 하위 프로토콜에 전달. 이후 Indication을 사용해 상위 프로토콜에 프리미티브 요청이 발생함을 알림.

  • Response
    클라이언트로부터 프리미티브를 받은 서버에선 Response를 이용해 클라이언트에 응답함.

  • Confirm
    서버에서 보낸 응답은 Confirm 형태로 클라이언트에 회신됨.

0개의 댓글