본문 바로가기
컴퓨터 네트워크

컴퓨터 네트워크 4장 - 계층 구조의 개념 -

by ChocoPeanut 2017. 4. 11.

컴퓨터 네트워크 4

- 계층 구조의 개념 -

 

우리는 앞선 장에서 컴퓨터 네트워크에 사용되는 용어에 대해 배워보았다. 그 중 이번 장은 프로토콜에 중점을 두고 설명할 것이다. 프로토콜이라는 것은 네트워크에 연견된 시스템이 통신하여 데이터를 주고받기 위해 따라야하는 규칙이다. 프로토콜은 전송 오류율, 데이터 전달 경로, 전송 속도 등 다양한 외부 요인의 영향을 받는다. 만약 이러한 문제들을 한 프로토콜에서 모두 처리를 하게 되면 문제가 발생하기 쉽다. 따라서 프로토콜은 모듈화라는 설계 과정을 통하여 이루어진다. 모듈화는 크고 복잡한 시스템을 작은 모듈 단위로 쪼개서 설계를 하는 것을 의미한다. 하지만 특정 단위의 모듈들은 독립적이지만 서로 상호 유기적인 관계를 가진다. 그렇기 때문에 유기적인 관계를 위해 적절한 인터페이스를 가진다.

 

계층적 모듈 구조

모듈화에 대해서 더욱 자세히 이야기를 해보자. 이해를 쉽게 먼저 예를 들어보자. 컴퓨터 하드웨어를 뜯어보면 엄청나게 다양한 도구들로 나누어진다. CPU, 메모리, 하드디스크, 키보드, 마우스 등등으로 나타낼 수 있다. 이러한 도구들은 각자가 하는 역할을 다르다. 하지만 모두 적절한 상호작용을 하고 있다. 또한 한 부분이 고장이 나도 그 도구만 고치게 되면 다른 도구들에게는 큰 영향을 끼치지 않는다. 대신에 도구를 바꿀 때에도 인턴페이스는 바뀌면 안 된다. 만약 키보드가 망가져 새로운 키보드를 구매하여 컴퓨터와 연결을 시키는데 USB 단자가 맞지 않으면 그 도구는 쓸모가 없는 도구가 되는 것이다. 따라서 서로 연결하는 인터페이스는 적절하게 맞추어야한다.

이러한 예시를 토대로 네트워크 계층구조를 살펴볼 수 있다. 우리는 앞 장에서 OSI 7계층 구조에 대해 살펴보았다. 이러한 구조도 모듈화가 된 것이라고 할 수 있다. 네트워크에서 독립적인 고유 기능을 수행하는 모듈들이 상하위의 계층 구조로 연결되어 동작한다. 각 계층들 사이에서는 인터페이스를 가지는데 네트워크에서는 상위 계층이 하위 계층에게 특정 서비스를 요청하는 방식으로 동작한다. 상위 계층은 서비스를 요청하고 하위 계층은 서비스를 제공한다.

 

따라서 모듈화 된 계층의 장점을 정리하면 이렇다.

시스템을 기능별로 간단하게 재구성하여 설계하고 구현하기 쉽게 만든다.

모듈 사이에 인터페이스가 존재해서 독립적으로 작동하지만 상호 유기적인 관계를 가진다.

오류를 수정하거나 향상시켜야 하는 경우 해당 계층의 모듈만 교체하면 된다.










프로토콜 설계 시 고려 사항

프로토콜을 설계하기 위해서 크게 세 가지를 고려해야한다. 네트워크 호스트의 주소 표현 방법, 데이터 전송 과정에서의 오류 제어, 통신 양단 사이의 전송 속도를 제어하는 흐름 제어 이렇게 세 가지이다. 이 파트에서는 그것들에 대해 공부를 해본다.

 

주소 표현 방법

주소는 호스트(시스템)를 구별할 수 있는 유일성을 가진 도구이다. 프로토콜을 설계하기 위해서는 시스템을 구분하여야 하기 때문에 주소 체계를 잡는 것이 가장 먼저 고려되어야 할 사항이다. 앞 장에서 설명한 주소가 가지는 4가지 특성(유일성, 확장성, 편리성, 정보의 압축)을 고려하여 주소를 설계해야한다. 보통은 시스템에 주소를 하나씩 부여하지만, 다수의 호스트를 묶어 하나의 그룹 주소로 표기하는 방법이 있다. 네트워크에 연결된 모든 호스트에 데이터를 전송할 수 있는 브로드캐스팅과 특정 사용자를 그룹으로 묶어서 지칭하는 멀티캐스팅이다. 이러한 표기 방법들은 나중에 예시로 또 다루어질 것이다.

 

오류 제어

네트워크상에서 데이터를 주고받을 때 오류가 발생할 수 있다. 이러한 오류를 어떻게 처리를 할 것인가를 결정하는 것이 바로 오류 제어이다. 오류 제어에도 종류가 있다. 데이터가 수신 호스트에 도착을 하지 못하는 데이터 분실 오류와 데이터의 내용이 변경되어 도착하는 데이터 변형 오류이다. 이러한 오류를 해결하기 위해서는 우선 오류가 발생한 사실을 인지해야한다. 하지만 수신 호스트에는 오류 사실 감지가 힘들기 때문에 송신 호스트에서 이를 감지한다. 방법으로는 응답과 타임아웃이 있다. 응답은 수신 호스트가 데이터를 받았을 경우 응답을 보내 송신 호스트는 데이터가 제대로 갔다는 것을 인지한다. 타임아웃의 경우 응답을 기다리는 시간이라고 할 수 있다. 특정 시간이 지났는데도 응답이 오지 않았을 경우 오류가 발생했다는 것을 인식한다. 이때는 재전송을 통해 오류를 해결한다. 이러한 과정은 데이터 링크 계층에서 제어를 한다. 또한 순서가 바뀌어 도착하는 오류가 발생하기도 한다. 이때를 처리하기 위해서 송신 호스트는 순서 번호를 붙여 보내 오류를 없앤다. 이러한 과정은 상위 계층에서 전송 오류 문제를 다룬다.

 

흐름 제어

데이터를 주고받을 때에 송신 호스트와 수신 호스트가 존재한다. 송신 호스트는 데이터를 처리하여 수신 호스트에 송신을 한다. 그리고 수신 호스트는 그것을 받아서 일을 처리한다. 그런데 송수신 호스트 사이에서 송신 호스트가 데이터를 전송하는 속도와 수신 호스트가 데이터를 처리하는 속도에서 차이가 발생하게 된다. 대체로 전송 속도 보다는 처리하는 속도가 훨씬 느리다. 따라서 수신 호스트는 내부 버퍼를 관리하여 데이터가 전송되어 오면 이곳에 보관 후 처리를 한다. 하지만 내부 버퍼에 데이터가 가득 들어와 더 이상 공간이 없어지면 데이터가 분실되는 오류가 발생할 수 있다. 이러한 점을 제어하는 것이 바로 흐름 제어이다. 흐름 제어를 사용하여 수신 호스트는 송신 호스트에게 데이터 전송 허가를 보낸다. 이러한 허가 메시지가 떨어져야 송신 호스트는 데이터를 전송할 수 있다.

 

이외에 고려해야할 사항

데이터 전달 방식 또한 프로토콜 설계 시 중요한 고려사항이다. 일대일 통신 환경에서 한쪽 방향으로 전송하는 것을 단방향, 양쪽에서 데이터를 동시에 전송하는 것을 전이중 방식이라고 한다. 또한 데이터가 양방향으로 전송되지만 특정 시점에는 한쪽 방향으로만 전송할 수 있는 반이중 방식도 있다.

 

서비스 프리미티브

우리는 앞서 상위 계층에서 하위 계층에 요청을 하는 것이 서비스라는 것을 알고 있다. 서비스 프리미티브는 서비스의 형태를 나타내는 것이다. 우선 서비스의 종류는 연결형과 비연결형으로 구별된다. 연결형은 데이터의 전달 경로를 먼저 선정한 후 데이터 전송을 하고 전달 경로를 해제하는 3단계로 나누어진다. 이에 비해 비연결형 서비스는 연결을 설정하고 해제하는 단계가 필요 없이 전송할 데이터가 독립적으로 목적지 호스트로 전송하면 된다. 이러한 서비스를 제공하는데 프리미티브 형태로 구현된다. 특히 연결형 서비스에서는 CONNECT, DATA, DISCONNECT으로 연결 설정, 데이터 전송, 연결 해제의 작업을 수행한다. 이런 각각의 프로미티브는 4가지 기능을 가지는데 Request, Indication, Response, Confirm이다. 클라이언트에서 Request가 발생하며 서버에 요청을 한다. 서버는 요청을 수신하여 Indication으로 요청이 발생했음을 알린다. 그 후 서버는 Response를 이용해 클라이언트에 응답을 보낸다. 클라이언트는 Confirm의 형태로 응답을 회신하게 된다.

위의 과정을 전화에 비유해보자. 전화번호를 누르면(Request) 전화망을 통해 해당하는 전화기로 전화벨이 울린다.(Indication) 수신자가 전화를 받기위해 통화 버튼을 누르면(Response) 이를 인지해서 발신음이 끊기고(Confirm) 통화 연결 상태가 된다.