데이터 전송

박정빈·2024년 2월 17일

네트워크와 통신

목록 보기
5/10

데이터 전송 방식

컴퓨터 네트워크는 독립적인 호스트들을 서로 연결해 하나의 통신망을 구성한 것이다. 이를 통해 자원공유, 그에 따른 정보 신뢰성 향상, 병렬처리에 의한 성능 향상등의 효과를 얻을 수 있다.

전송과 교환

컴퓨터 네트워크에는 전송매체로 연결된 호스트 들이 있다. 송신 호스트가 수신 호스트에게 데이터를 전달 하려면 전송과 교환 과정을 거쳐야 한다. 전송은 물리매체로 데이터를 전달하는 것이고, 교환은 경로가 갈라질때, 어느 방향으로 전달할지 결정하는 것이다.
전송 방식에는 점대점, 브로드캐스팅 방식이 있다.

점대점 방식

점대점 방식에서 호스트들은 전송매체를 이용해 1:1로 직접 연결되기도 하며, 다른 호스트의 중개 과정을 거쳐 간접 연결되기도 한다.
점대점 방식은 전체 연결 개수가 많아지면 성능면에서 유리하지만 비용이 많이 든다. 반대로, 연결 개수가 적어지면 공유하는 전송 매체가 많아져 네트워크 혼잡도가 증가한다.
점대점 방식 연결 종류

  • 스타형
    중앙 호스트 주위로 여러 호스트를 연결한다. 중앙 호스트의 신뢰성과 성능이 전체 네트워크의 신뢰성과 성능에 영향을 준다. 트리형으로 개별 호스트에서 단계적으로 확장도 할 수 있다.
  • 링형
    데이터를 한 방향으로만 전달 하도록 설계한다. 데이터 충돌을 막기위해 토큰을 사용한다. 한 호스트가 고장나면 전체 호스트가 고장날 수 있다.
  • 완전형
    교환 기능이 필요 없지만 비용 측면에서 비효율적이다.
  • 불규칙형
    필요에 따라 호스트들을 연결하여 모양이 불규칙하다.

브로드캐스팅 방식

송신 호스트가 전달한 데이터가 모든 호스트에게 전달된다. WAN에서는 연결의 단계와 경로가 중요하지만, LAN에서는 데이터 전달 효율이 중요하기에 브로드캐스팅 방법을 사용한다.

  • 버스형
    모든 호스트가 한 버스에 연결되어있다. 송신 데이터는 모든 호스트에 수신되며, 수신 목적이 있는 호스트를 제외한 호스트는 데이터를 버린다.
    둘 이상의 호스트가 데이터를 보내는, 충돌을 막기 위해 각 호스트의 전송 권한을 제한할 수 있다. 데이터를 전송할 수 있는 시간대를 나누거나 토큰을 순환적으로 부여하여 전송 권한을 제한한다. 충돌을 허용할 수도 있다. 충돌을 허용한뒤, 이를 감지하고 해결하는 과정이 필요하다. 이더넷이 충돌허용을 한다.
  • 링형
    송신 호스트는 한쪽 방향으로 데이터를 전달하고, 데이터는 링을 순회하며 다시 돌아온다. 수신 목적이 있는 호스트는 데이터를 내부 버퍼에 저장하며, 나머지 호스트들은 그냥 통과시킨다. 충돌을 막기위해 토큰도 순회한다.

멀티포인트 통신

컴퓨터 통신의 가장 기본적인 형식은 두 호스트 사이의 데이터 전송을 의미하는 유니캐스팅Unicasting 방식이다. 텔넷,FTP,웹 검색 같은 대부분의 서비스는 유니캐스팅 방식을 사용한다.

1:n 형식 뿐만 아니라 n:n 형식의 멀티포인트 서비스가 많이 출시되었다. 송신 호스트를 기준으로 수신 호스트 하나와 연결되면 유니포인트, 다수의 수신호스트와 연결되면 멀티포인트이다.
송신 호스트가 한번의 전송으로 수신 호스트 하나에만 데이터를 전송할수 있으면 유니캐스팅, 다수의 수신 호스트에 전송할 수 있으면 멀티캐스팅이다.

오류 제어

데이터 링크 계층은 오류 발생 여부를 인지할 수 있어야한다. 오류는 프레임 변형과 프레임 분실이 있다. 오류를 감지하면 오류복구를 진행하는데, 일반적으로 송신 호스트가 원래 데이터를 재전송한다.

다음과 같은 기본 기능을 이용해 오류 복구 기능을 제공해야한다.

  • 수신 호스트의 응답 프레임
    응답 프레임에는 긍정 응답 프레임과 부정 응답 프레임이 있다.
    데이터 프레임이 깨진 프레임 변형 오류를 확인한 수신 호스트는 송신 호스트에게 부정 응답 프레임을 전송해 원래 데이터 프레임을 재전송 하도록 요구할 수 있다.

  • 송신 호스트의 타이머 기능
    프레임 분실이 일어나면 수신 호스트는 프레임을 받지 못했기에 감지할 수 없다. 그래서 일정 시간내에 긍정 응답 프레임을 받지 못하면 타임아웃기능을 동작시켜 원래 데이터 프레임을 재전송한다.

  • 순서 번호 기능
    긍정 응답 프레임이 분실 되었을 경우, 데이터 재전송이 일어나 중복 수신하는 상황이 발생한다. 중복 프레임을 가려내기 위해 프레임 내부에 순서 번호를 기록한다.

흐름 제어

데이터 링크 계층은 흐름제어 기능도 제공한다.
송신 속도가 너무 빠르면, 수신 호스트의 내부 버퍼에 데이터 프레임을 보관할 수 없어 프레임 분실이 일어난다. 따라서 수신 호스트가 감당할 수 있을 정도의 전송속도를 유지하면서 데이터 프레임을 전송해야한다.
흐름제어의 기본 원리는 수신 호스트가 다음에 수신할 프레임의 전송 시점을 송신 호스트에 통지하는 방식이다.

프레임

데이터 링크 계층에서는 전송 데이터를 프레임이라는 단위로 처리한다. 전송 프레임에는 상위 계층에서 보낸 전송 데이터에 오류 확인을 위한 체크섬, 송수신 호스트의 주소,제어코드 같은 정보가 포함된다.
프레임을 받은 수신 호스트는 먼저 체크섬을 확인해 프레임 변형 오류를 확인한다.
프레임의 내부 정보는 프로토콜 용도에 따라 다양한데, 일반적으로 문자프레임, 비트프레임 방식이 있다.

문자 프레임

프레임의 내용이 문자로 구성되므로 문자 데이터를 전송할때 사용한다. 8bit 혹은 ASCII 문자코드의 고정 크기로 동작한다.

하나의 프레임 단위를 구분하기 위해 프레임 앞뒤에 ASCII코드 특수문자를 이용한다. 아래 그림의 (a) 처럼 프레임의 처음에 DLE,STX문자를, 끝에 DLE,ETX문자를 추가한다. 그림의 (b)처럼 특수문자가 잘못 배치 되면 프레임의 처음과 끝을 알 수 없게 된다.
문자 프레임 구조

문자 스터핑 Character Stuffing

문자프레임의 DATA에 DLE가 포함되며 발생되는 혼란을 예방한다.
DLE문자 다음에 DLE문자를 한번 더 포함하여 혼선을 없앤다. 단, 네트워크 계층에 데이터를 전달하기 전에 제거해야한다. 이와 같이 문자 프레임의 전송 과정에서 제어 문자를 추가하는 기능을 문자 스터핑이라고 한다.
문자 스터핑

비트 프레임

임의의 비트 패턴 데이터를 전송할때 사용한다. 프레임의 시작과 끝에 플래그라는 비트패턴(01111110)을 사용해 프레임 단위를 구분한다. 송신호스트는 플래그를 처음과 끝에 붙여서 전달하고, 수신 호스트는 플래그를 제거해서 상위 계층에 전달한다.
비트 프레임 구조

비트 스터핑 Bit Stuffing

송신 호스트가 DATA에 1이 5번 연속으로 발생하면 0을 추가해 전송한다. 플래그에 1이 6개 있으므로 혼선을 방지하는 것이다.

다항 코드

프레임 전송 과정에서 오류를 극복하는 방법은 두가지이다.

첫번째는, 전송 프레임에 오류 검출 코드를 넣어 수신 호스트가 전송과정의 오류를 검출하도록 하는 것이다. 복구는 보통 재전송으로 이루어진다.
간단한 오류 검출 코드 방법은 패리티 비트를 추가하는 것이고,
컴퓨터 네트워크에서는 일반적으로 다항 코드 방식을 사용한다.

두번째는, 프레임에 오류 복구 코드를 넣어 수신 호스트가 오류 검출과 복구기능을 모두 수행하는 것이다. 이런 방식을 순방향 오류 복구(FEC,Forward Error Correction)라고 한다.

오류 검출

네트워크에서 일반적으로 FEC는 사용하지 않고 재전송을 해서 오류 복구를 한다. 이를 역방향 오류 복구(BEC,Backward Error Correction) 또는 ARQ(Automatic Repeat reQuest)라고 한다. 재전송을 하려면 오류가 있는지 판단할 수 있어야 한다. 이를 위해 오류 검출 코드를 송신 하는데, 오류 검출 코드에는 패리티 비트,블록 검사,다항 코드 등이 있다.

패리티 비트 Parity bit

패리티 비트는 1Byte(8bit)에서 7bit의 ASCII코드를 제외한 1bit이다. 1 비트 오류를 검출하는 것으로 홀수나 짝수개가 되도록 하여 변화를 감지한다.

예를 들어 1101001은
짝수 패리티 방식에서 11010010이 되어 1의 개수가 짝수개가 되고,
홀수 패리티 방식에서 11010011이 되어 1의 개수가 홀수개가 된다.
송신 과정에서 비트 변화가 생기면, 홀짝이 바뀌게 되어 감지할 수 있다.
하지만, 비트 변화가 있지만 홀짝의 변화가 없을때는 감지할 수 없다.

블록 검사 Block sum Check

패리티 비트 방식을 개선한 방법이다.
여러개의 바이트를 하나의 블록으로 구성한 후 교차 검사를 한다. 수평과 수직 방향에 모두 패리티 비트를 두는 방식이다.
블록 검사
하지만, 이 방법도 검출 할 수 없는 오류가 있다.

다항 코드 Polynomial Code

CRC(Cyclic Redundancy Code)이라고도 알려진 다항코드방식은 통신 프로토콜에서 가장 많이 사용된다. 일반 네트워크에서 주로 발생하는 오류는 특정위치에서 집중적으로 발생하는 버스트 에러형태인데, 다항 코드 방식은 이런 오류를 검출하는 확률이 높다.

생성 다항식

다항 코드 방식은 다항식을 기반으로 한다. 예를 들어, 100101은
1×x5+0×x4+0×x3+1×x2+0×x1+1×x01\times x^5 + \,0\times x^4+ \,0\times x^3+ \,1\times x^2+ \,0\times x^1+ \,1\times x^0
즉, x5+x2+1x^5+x^2+1 이다.

체크섬의 예

송신 호스트는 전송 데이터를 생성 다항식으로 나누어 체크섬을 얻는다.
나머지를 보관할 n비트의 공간을 0으로 채운후 나누기를 하여 얻은 나머지를 체크섬이라 하며, 체크섬을 전송 데이터 뒤에 추가하여 수신 호스트에게 전달한다.
수신호스트는 전송 오류가 발생했는지 판단하기 위해 수신 데이터를 다항식으로 나누고, 나머지가 0이면 전송 오류가 없다고 판단한다.

예를 들어 다항식이 G(x)=x5+x2+1G(x)=x^5+x^2+1이고 101101001를 보낼때,
나머지가 00010 이므로 송신 데이터는 10110100100010이 된다.
체크섬의 예

0개의 댓글