본문 바로가기

Computer Science/네트워크

[쉽게 배우는 데이터 통신과 네트워크] CH4. 데이터 전송의 기초

반응형
SMALL

01. 데이터 전송 방식

네트워크를 통한 자원 공유, 병렬 처리에 의한 성능 향상, 중복 저장으로 신뢰성 향상 등의 효과를 얻을 수 있다.

 

자원 공유

  • 각 호스트에서 사용하는 논리적인 정보를 공유하는 것
  • 자원을 더 효율적으로 활용할 수 있게 해주어 네트워크를 발전시킨 1차 요인

 

병렬 처리에 의한 성능 향상

  • 시스템이 수행할 작업을 분할해 동시에 처리함으로써 처리 시간 단축
    • Ex1. 하나의 공유 시스템 버스에 다수의 메인 프로세서 장착
    • Ex2. I/O 장치의 처리 속도를 향상시키기 위해 I/O 전용 프로세서 설치
  • 네트워크 속도가 계속 향상됨에 따라 네트워크를 활용한 분산 병렬 처리의 효과가 크게 향상됨

 

중복 저장으로 신뢰성 향상

  • 네트워크에 연결된 시스템이 보관하는 정보의 신뢰성을 향상시키기 위해 중복 저장 사용
  • 데이터 손실 복구 가능
  • 신뢰성이 높아질수록 시스템 성능은 저하될 수 있음

 

1. 전송과 교환

  • 교환: 전달 경로가 둘 이상일 때 라우터에서 데이터를 어느 방향으로 전달할지를 선택하는 기능
  • 전송: 특정한 물리 매체에 의하여 일대일로 직접 연결된 두 시스템 간 신뢰성 있는 데이터 전송을 보장 (라우팅 X)

 

1.1 전송과 교환 개요

전송과 교환

  1. 호스트 a와 호스트 c 간의 직접 연결에 의한 전송
  2. 호스트 c에서의 올바른 경로 선택을 의미하는 교환
  3. 호스트 c와 호스트 d 간의 직접 연결에 의한 전송 (다른 방향은 데이터가 먼거리로 우회하기 때문에 잘못된 선택)

 

1.2 전송 방식의 종류

데이터 전송/교환 기술에 따라 네트워크를 분류하는 방식에는 각 호스트를 일대일로 직접 연결해 목적지 호스트에만 데이터를 전송하는 점대점 방식과 네트워크에 연결된 모든 호스트에 데이터를 전송하는 브로드캐스팅 방식이 있다.

 

점대점 방식

  • 호스트 간의 데이터 전달 과정에서 송신 호스트가 중개 호스트와 일대일로 연결된다.
  • 데이터를 최종 목적지 호스트까지 올바르게 전달하기 위해 인접 호스트에 전송하는 과정을 단계적으로 반복한다.
  • 원거리에 있는 시스템 사이의 통신 방식으로, WAN 환경에서 주로 사용한다.

 

브로드캐스팅 방식

  • 공유 전송 매체 하나에 여러 호스트를 연결한다. (전달 중 교환 기능 X)
  • 자신을 목적지로 하지 않은 데이터를 받은 호스트는 받은 데이터를 버려 결국 하나의 목적지 호스트만 데이터를 수신하도록 설계해야 한다.
  • LAN처럼 지리적으로 가까운 호스트 사이의 통신에서 주로 사용한다.

 


2. 점대점 방식

점대점 방식

  • 교환 호스트가 송수신 호스트의 중간에 위치한다.
  • 연결 방식은 구성 형태에 따라 스타형, 링형, 완전형, 불규칙형이 있다.
  • 네트워크 트래픽이 많이 발생하는 구간에서는 전송 매체의 수를 늘리고, 그렇지 않은 구간에서는 줄이는 것이 좋다.
    • 전체 연결 개수가 많아지면 성능 면에서 유리하지만 전송 매체의 길이가 증가하면서 비용이 많이 든다.
    • 전체 연결 개수가 적어지면 전송 매체를 더 많이 공유해 네트워크 혼잡도가 증가한다.

 

2.1 스타형

  • 중앙에 있는 하나의 중개 호스트 주위로 여러 호스트를 일대일로 연결하는 형태이다.
  • 중앙 호스트의 신뢰성과 성능이 전체 네트워크의 성능과 신뢰성에 영향을 많이 준다. (반드시 중앙의 중개 호스트를 거쳐야 함)
  • 데이터를 적절한 목적지로 전송하는 중개 기능도 중앙 호스트가 독점적으로 담당한다.
  • 다단계로 확장하면, 트리형이 된다.
    • 중앙에 있는 스타 구조 주변에 위치한 호스트들을 중심으로 새로운 스타 구조가 확장된다.
    • 주변 호스트가 중개 호스트로 확장되는 과정을 반복해 네트워크를 무한대로 펼칠 수 있다.
    • 👍 모든 데이터가 중앙 호스트를 중심으로 라우팅되므로 중개 과정이 간단하다.
    • 👎 중앙 호스트에 문제가 발생하면 전체 네트워크의 동작에 영향을 많이 준다.

 

2.2 링형

  • 호스트의 연결이 순환 고리 구조이며, 전송 데이터가 브로드캐스팅된다.
  • 송수신 호스트 간의 거리가 멀수록 데이터 전달 과정에 개입하는 중개 호스트의 개수도 증가한다.
  • 네트워크에 연결된 모든 호스트가 데이터 전송과 교환 기능을 동시에 수행한다.
  • 연결된 여러 호스트가 데이터를 동시에 전송하면 데이터 충돌이 발생할 수 있다.
    • 토큰은 데이터의 전송 권한을 의미하기 때문에 호스트가 데이터를 전송하려면 토큰을 꼭 확보해야 한다.
    • 송신 호스트는 데이터를 전송할 때 토큰을 내부적으로 저장했다가, 데이터가 한바퀴 돌아오면 링 네트워크에 토큰을 다시 돌려준다.
  • 👎 한 호스트가 고장나면 전체 네트워크가 동작하지 않을 수 있다.

 

2.3 완전형

  • 네트워크에 존재하는 모든 호스트가 다른 모든 호스트와 일대일로 직접 연결한다. (교환 기능 X)
  • 👎 사용하는 전송 매체의 개수가 증가하면 비용 측면에서 극단적으로 비효율적이다. (특별한 목적 외에는 잘 사용하지 않음)

 

2.4 불규칙형

  • 전송 매체에 의한 연결 구조를 특정 패턴으로 분류할 수 없다. (일반 네트워크)
  • 네트워크에서 고려해야 하는 여러 환경 요인에 의해 직접 연결 구조가 결정된다.
    • Ex. 특정한 두 호스트 간 통신 트래픽이 많으면 이들을 직접 연결하고, 적으면 다른 호스트의 중개 과정을 거쳐 데이터를 주고받도록 설계한다.

 


3. 브로드캐스팅 방식

브로드캐스팅 방식

  • 특정 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전달된다.
  • 버스형링형이 있다.

 

3.1 버스형

  • 다수의 호스트가 하나의 전송 매체를 공유하므로 전송 데이터를 모든 호스트에서 수신할 수 있다.
  • 둘 이상의 호스트에서 데이터를 동시에 전송하면 데이터 충돌이 발생할 수 있다.
    1. 호스트의 전송 권한을 제한함으로써 사전에 충돌을 예방한다. (서로 다른 시간대 저장, 토큰 활용)
    2. 충돌이 발생했을 때 이를 감지하고 해결한다. (충돌 허용)

 

3.2 링형

  • 전송 데이터가 링 주위를 특정 방향으로 순환하면서 전달된다.
  • 자신이 수신 호스트가 아닌 호스트는 데이터를 수신하지 않고 그냥 통과시킨다.
  • 수신 호스트로 지정된 호스트는 전송 데이터를 자신의 내부 버퍼에 보관하고, 데이터는 계속해서 링으로 순환시킨다.
  • 임의의 호스트가 데이터를 전송하고자 하면 링 주위를 순환하는 토큰을 획득하여 데이터를 전송하고, 데이터 전송이 완료되면 다시 토큰을 네트워크에 돌려준다.

 


4. 멀티포인트 통신

하나의 송신 호스트를 기준으로, 수신 호스트 하나와 연결되면 유니포인트가 되고, 다수의 수신 호스트와 연결되면 멀티포인트가 된다.

 

4.1 멀티포인트 유니캐스팅

멀티포인트 유니캐스팅

  • 유니캐스팅 방식의 프로토콜은 두 호스트 간 일대일 통신만 지원하므로, 일대다 통신을 위해 위 방식을 사용한다.
  • 송신 호스트 a가 수신 호스트 (d, e, f)에 데이터를 전송하려면 먼저 각 수신 호스트와 개별적으로 연결을 설정해야 한다. 수신 호스트가 3개이므로 연결 설정이 3개 필요하고, 데이터 전송 과정에서도 개별 수신 호스트에 별도로 3번 데이터를 전송해야 한다.
  • 송수신 호스트 사이의 흐름 제어와 수신 호스트의 응답 기능 및 재전송 기능 등을 구현하기 좋다.
  • 수신 호스트가 많아지면 성능 면에서 여러 문제가 나타날 수 있다.

 

4.2 브로드캐스팅

브로드캐스팅

  • 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식
  • 수신 데이터를 받아들일지, 폐기할지는 수신 호스트가 목적지 주소를 근거로 결정한다.
  • 호스트 수가 많을수록 네트워크 트래픽이 급격히 증가하므로 특정 서브넷 내에서 이용하는 것이 좋다.

 

4.3 멀티캐스팅

멀티캐스팅

  • 프로토콜 자체에서 일대다 전송 기능을 구현하기 때문에 통신 환경을 연결 설정 요구 한 번으로 지원할 수 있다.
  • 멀티캐스팅을 구현하기 위해 멀티캐스트 그룹을 생성하고 관리하는 기능이 필요하다.
    • Ex. 임의의 호스트가 특정 멀티캐스트 그룹에 가입하고 탈퇴하는 기능
    • 멀티캐스트 트래픽에 대한 처리 기능도 구현되어야 한다.

 


02. 오류 제어

오류의 종류에는 데이터가 깨져서 도착하는 프레임 변형과 데이터가 목적지에 도착하지 못하는 프레임 분실이 있다. 오류를 감지하면 오류를 복구하는 과정이 진행되는데, 컴퓨터 네트워크에서는 일반적으로 송신 호스트가 원래의 데이터를 재전송하는 기법을 사용한다.

 

1. 전송 오류의 유형

수신 호스트의 응답 프레임

  • 수신 호스트가 전송하는 응답 프레임의 종류에는 2가지가 있다.
    • 긍정 응답 프레임: 데이터 프레임이 정상적으로 도착했을 때 회신한다.
    • 부정 응답 프레임: 데이터 프레임이 깨졌을 때 회신한다.
  • 송신 호스트의 재전송 기능은 수신 호스트의 부정 응답 프레임 회신에 의해 이루어진다.

 

송신 호스트의 타이머 기능

  • 송신 호스트는 데이터 프레임을 전송한 후에 일정 시간 이내에 수신 호스트로부터 긍정/부정 응답 프레임 회신이 없으면 타임아웃 기능을 동작시켜 데이터 프레임을 재전송한다.

 

순서 번호 기능

  • 수신 호스트가 중복 데이터 프레임을 가려내려면 각 프레임 내부에 순서 번호를 기록해야 한다.
  • 데이터 프레임은 원래의 데이터 외에 오류 검출을 위한 정보도 함께 제공된다.
    • 수신 호스트에서 오류를 감지하는 기능만 하는 정보
    • 오류가 발생한 프레임을 복구하는 기능을 하는 정보

 

1.1 정상적인 전송

정상적인 데이터 전송

  • 송신 호스트가 전송한 프레임이 오류 없이 수신 호스트에 전송된 경우
  • 프로토콜 종류에 따라 부정 응답 프레임을 지원하지 않는다면, 타임아웃 기능에 따라 오류 복구 기능을 시작한다.

 

1.2 프레임 변셩

프레임 변형 오류

  • 데이터 프레임이 수신 호스트에 도착했으나, 전송 과정에서 프레임의 내용이 변형되는 오류가 발생한 경우
  • 오류를 인지한 수신 호스트는 송신 호스트에 부정 응답 프레임을 전송함으로써, 원래의 데이터 프레임을 재전송하는 오류 복구 과정이 진행된다.

 

1.3 프레임 분실

프레임 분실 오류

  • 송신 호스트가 전송한 데이터 프레임이 전송 과정에서 사라지는 프레임 분실 오류
  • 송신 호스트는 데이터 프레임을 전송한 후에 특정 시간까지 수신 호스트의 긍정/부정 응답 프레임이 도착하지 않으면 타임아웃 기능에 따라 원래의 프레임을 스스로 재전송한다.

 


2. 순서 번호

오류 없이 수신된 중복 데이터 프레임을 가려내기 위해 프레임 내부에 각 프레임의 고유 번호인 순서 번호를 기록한다.

 

2.1 순서 번호의 필요성

순서 번호가 없는 경우

  • (a)처럼 올바르게 수신한 데이터 프레임에 대한 긍정 응답이 사라지는 오류가 발생하면 송신 호스트의 타임아웃 기능에 따라 재전송 과정이 진행된다. 제대로 수신되면 수신 호스트는 동일한 프레임을 중복 수신하게 된다.
    • 송신 호스트는 자신이 동일한 데이터 프레임을 2번 전송했는지 서로 다른 2개의 데이터 프레임을 연속 전송했는지 구분할 수 있지만, 수신 호스트는 구분할 수 없다. 따라서 수신 호스트가 두 경우를 구분할 수 있도록 데이터 프레임별로 고유의 순서 번호를 부여하는 방식이 필요하다.
  • (b)는 긍정 응답 프레임이 올바르게 회신되고, 송신 호스트가 다음 데이터를 송신한 경우이다. 이때는 모든 프레임이 정상적으로 전송되고, 수신 호스트는 서로 다른 2개의 데이터 프레임을 수신하게 된다.

 

2.2 순서 번호에 의한 프레임 구분

순서 번호가 있는 경우

  • 수신 호스트는 (a)처럼 순서 번호에 근거하여 동일한 데이터 프레임이 중복 도착했는지, (b)처럼 서로 다른 데이터 프레임이 도착했는지 구분할 수 있다.

 


3. 흐름 제어

  • 송신 호스트가 수신 호스트가 감당할 수 있을 정도의 전송 속도를 유지하면서 데이터 프레임을 전송하도록 하는 기능
  • 수신 호스트가 다음에 수신할 데이터 프레임의 전송 시점을 송신 호스트에 통지한다.
  • 흐름 제어의 대표적인 예로 슬라이딩 윈도우 프로토콜이 있다.

 


03. 프레임

데이터 링크 계층에서는 전송 데이터를 프레임이라는 작은 단위로 나누어 처리한다. 전송 프레임에는 상위 계층에서 보낸 전송 데이터의 오류를 확인하기 위한 체크섬, 송수신 호스트의 주소, 기타 프로토콜에서 사용하는 제어 코드 같은 정보가 포함된다. 일반적으로 프레임은 내부 정보를 표현하는 방식에 따라 문자 프레임과 비트 프레임으로 구분된다.

 

1. 문자 프레임

프레임 내용이 문자로 구성되어, 문자 데이터를 전송할 때 사용한다. 8비트 또는 ASCII의 고정 크기로 동작한다.

 

1.1 프레임의 구조

문자 프레임의 구조

  • (a) 프레임의 시작과 끝 위치에 프레임 구분용 특수 문자(DLE.STX / DLE.ETX)를 사용하며, 그 사이에는 프로토콜에서 정의한 제어 정보와 전송 데이터를 포함한다.
  • (b) 데이터의 내용 중에 DLE.STX 또는 DLE.ETX 문자가 포함될 수 있다. 결과적으로 수신 호스트가 프레임의 시작과 끝 위치를 결정하는 데 혼선을 준다. (이진 코드 데이터 전송 시 발생 확률 높음)

 

1.2 문자 스터핑

문자 스터핑

  • 문자 스터핑은 문자 프레임 내부의 전송 데이터에 DLE 문자가 포함되면서 발생하는 혼란을 예방하는 방법이다.
  • (a) 송신 호스트가 전송 데이터를 미리 조작함으로써 혼선의 여지를 없앨 수 있다. (DLE 문자를 포함하면 하나 더 추가)
    • 수신 호스트는 DLE 문자가 연속해서 2번 나타나면 2번째 DLE는 송신 호스트가 임의로 추가한 문자로 판단한다.
  • (b) 수신 호스트가 인식한 결과로, 송신 호스트가 최초에 전송한 프레임과 동일한 결과가 된다.

 


2. 비트 프레임

문자 단위의 가정을 없애고, 임의의 비트 패턴 데이터를 전송할 수 있다. 프레임의 시작과 끝 위치에 플래그로 정의된 비트 패턴을 사용해 프레임 단위를 구분한다.

 

2.1 프레임의 구조

비트 프레임의 구조

  • 데이터 전송 전 프레임의 좌우에 플래그를 추가하고, 수신 호스트는 플래그를 제거해 전송 데이터와 필요한 제어 정보를 상위 계층에 전달할 수 있다.

 

2.2 비트 스터핑

비트 스터핑

  • 송신 호스트가 전송하고자 하는 데이터의 내용 중에 값이 1인 패턴이 연속해서 5번 발생하면 강제로 0을 추가해 전송한다.
  • 플래그는 1이 연속해서 6개 나오는 패턴이므로 원천적으로 데이터 내용에 플래그 패턴이 발생하는 것을 차단하기 위함이다.
  • 수신 호스트는 송신 과정에서 추가된 0을 제외하여 원래의 데이터를 상위 계층에 전달한다.

 


04. 다항 코드

1. 오류 검출

네트워크에서는 일반적으로 재전송 방식을 이용해 오류를 복구하는데, 이를 역방향 오류 복구 또는 ARQ 방식이라한다.

송신 호스트는 오류를 검출하기 위한 코드를 전송 데이터와 함께 송신해야 하는데, 오류 검출 코드는 패리티 비트, 블록 검사, 다항 코드 등을 이용해 생성할 수 있다.

 

1.1 패리티 비트

  • 패리티 비트는 7비트의 ASCII 코드를 제외한 나머지 1비트이다.
  • 전송 과정에서 1비트 오류를 검출하기 위한 것으로, 패리티 비트를 포함해 1의 개수가 짝수나 홀수 개가 되도록 한다.

 

패리티 비트

  • 1101001이라는 데이터를 짝수 패리티 방식을 사용해 전달하려면 11010010의 형태로 만들어 전송한다. (전체 1의 개수를 짝수로)
    • 데이터 전송 과정에서 1비트 오류가 발생하면 1의 개수가 홀수 개로 바뀐다.
    • 수신 호스트는 패리티 검사를 통해 1의 개수가 홀수로 변경된 사실을 알게 되어 데이터 전송 과정에서 1비트 오류가 발생했음을 확인할 수 있다.
  • 홀수 패리티 방식은 반대로, 1의 개수를 홀수로 만든다.
  • 송수신 호스트는 짝수 패리티나 홀수 패리티 중 동일한 1가지 방식을 사용해야 한다.

 

1.2 블록 검사

  • 다수의 비트에서 오류가 발생할 때 오류를 검출하는 방법으로 패리티 방식을 개선했다.
    • 패리티 방식에서 짝수 개의 비트에서 오류가 발생하면 오류가 검출되지 않는다.
    • 여러 개의 바이트를 하나의 블록으로 구성한 후 교차 검사를 한다.
    • 블록 데이터의 수평과 수직 방향에 모두 패리티 비트를 둠으로써 오류 검출 확률을 높인다.

 

블록 검사

  • 오른쪽에 표시한 패리티 비트는 수평 방향으로 짝수 패리티를, 아래쪽에 블록 검사 비트로 표시한 데이터는 수직 방향으로 짝수 패리티를 적용한 것이다.
  • 수평 방향으로 짝수 개의 비트가 깨지면 수직 방향의 블록 검사 비트로 오류를 검출하고, 수직 방향으로 짝수 개의 비트가 깨지면 수평 방향의 패리티 비트로 오류를 검출한다.
  • 👎 전송되는 데이터의 양과 비교해 오류 검출을 위한 오버헤드가 크다.
  • 👎 수평과 수직 방향에서 모두 사각형 형태로 짝수 개의 데이터 오류가 발생하면 이를 검출하지 못한다.

 


2. 다항 코드

현재의 통신 프로토콜에서 가장 많이 사용하는 오류 검출 기법이다. 특히 특정 위치에서 집중적으로 발생하는 버스트 에러 형태의 오류를 검출하는 확률이 높다.

 

2.1 생성 다항식

  • 다항 코드 방식은 계수가 0과 1인 다항식 형태를 기반으로 한다.
    • Ex. 100101의 다항 코드를 다항식으로 표현하면 (1 * x^5) + (0 * x^4) + (0 * x^3) + (1 * x^2) + (0 * x^1) + (1 * x^0)

 

생성 다항식

  • 다항 코드 방식을 이용한 오류 검사의 동작 원리이다.
  • 송신 호스트가 전송할 데이터가 m비트의 M(x)라면 데이터 전송 과정에서 n+1비트의 생성 다항식 G(x)를 사용해 오류 검출을 생성함으로써 오류 제어 기능을 수행한다.
  • 송신 호스트는 전송 데이터 M(x)를 생성 다항식 G(x)로 나누어 체크섬 정보를 얻는다.
    • 나누기 연산 과정에서는 전송 데이터 뒤에 나머지를 보관할 n비트의 공간을 확보하고, 이 자리를 모두 0으로 채운 후에 나누기 연산을 수행한다.
    • 연산에서 얻은 나머지 값을 체크섬이라 정의하며, 체크섬을 전송 데이터의 뒤에 추가해 수신 호스트에 전달한다.
    • 나누기 과정에서 발생하는 다항 연산은 덧셈의 자리 올림이나 뺄셈의 자리 빌림 현상이 발행하지 않으므로 덧셈과 뺄셈은 베타적 논리합(XOR) 연산과 동일한 결과를 얻는다.
  • 수신 호스트는 전송 오류가 발생했는지 판단하기 위해 수신한 m+n비트의 데이터를 생성 다항식 G(x)로 나누는 연산을 수행한다.
    • 연산 결과로 얻는 나머지가 0이면 전송 오류가 없다고 판단하고, 0이 아니면 오류가 발생했다고 판단한다.

 

2.2 체크섬의 예

체크섬 계산의 예

 

  • 다항식 G(x) = x^5 + x^2 + 1이 주어지고, 전송 데이터가 101101001이라고 가정하자.
  • 계산을 통해 얻은 나머지는 00010이므로, 송신 데이터는 10110100100010이 된다.
  • 수신 호스트는 수신 데이터 10110100100010을 생성 다항식 100101로 나누기 연산을 수행한다.
    • 이때 나머지가 0이면 전송 오류가 없고, 0이 아니면 오류가 발생한 것으로 판단할 수 있다.
  • 아래는 현재 국제 표준으로 널리 이용되는 생성 다항식의 일부이다.
    • CRC-12 : x^12 + x^11 + x^3 + x^2 + x^1 + x
    • CRC-16 : x^16 + x^15 + x^2 + 1
    • CRC-CCITT: x^16 + x^12 + x^5 + 1

References

 

 

반응형
LIST