데이터통신

데이터통신 11.1 데이터 링크제어

공부승식 2021. 6. 4. 01:05
728x90

11.1 DLC서비스

 

데이터 링크 제어(DLC, data link control)는 링크가 전용이거나 방송용인거나 상관 없이 두 인접한 노드 사이의 통신을 위한 절차를 다룬다.(Node-to-Node)

데이터 링크 제어 기능은 Framing, FlowControl, ErrorControl을 포함하고 있다. 

Framingdp 대해 공부해보자.

 

11.1 Framing

물리층에서의 데이터 전송은 발신지로부터 목적지로 데이터를 신호의 형태로 이송하는 것을 의미한다. 

물리층은 송신자와 수신자가 동일한 비트 기간과 시간을 사용하게 하기 위해 비트 동기화를 시킨다.

 

하지만!! 데이터 링크층은 다르다. 

데이터링크층은 비트들을 프레임 안에 만들어 넣어 각 프레임이 다른 프레임과 구분되도록 해야한다. 

(우편물에서 봉투에 편지를 넣어 각각의 편지를 구분하는것과 같다. 다자간 전송기능을 하므로 각 봉투는 송신자와 수신자의 주소를 규정한다고 생각할 수 있음.) 

 

데이터링크층의 Framing으로 인해 송신자와 수신자의 주소를 넣음으로써 발신지로부터 목적지로의 메시지를 분리한다. 

목적지 주소는 패킷이 가야할 곳을 규정하여 송신자는 수신자로 하여금 받았다는 것을 응답할 수 있도록 도와준다.

전체 메시지를 1개의 프레임에 다 끼워 넣을 수 있지만 보통은 그렇지 앟ㄴ다. 

그 이유중 하나는 프레임이 매우 커지게 되면 Flow, error Control이 비효율적이다. 

메시지를 여러 작은 프레임으로 나누는게 좋다. 그래야 단일 비트 오류는 해당 프레임에만 영향을 미치니까

 

 

프레임 크기

프레임은 일정 크기가 될 수도 있고 가변 크기가 될 수도 있다. Fixed-size framing (고정크기의 프레임)에서는 프레임의 경계가 필요없다. 

-> 왜 프레임의 경계가 필요 없냐면, 크기 자체가 경계 역할을 하기 때문에!

ATM 광역 네트워크를 예시로 들어보자면, ATM은 cell이라 불리는 고정 크기의 프레임을 사용한다. 

이 장의 주요 논의는 Variable-size framing(가변 크기의 프레임 짜기)에 관한 것으로 주로 LAN에 관련된 것이다. 

가변크기 프레임 짜기에서는 프레임이 끝나는 곳과 다음 프레임이 시작하는 곳을 정의해야한다. 

문자중심, 비트중심 두가지 방법으로 프레임을 짤 수 있다.

 

 

문자중심 프레임 짜기 (Character-oriented framing)
문자중심(또는 바이트 중심) 프레임 짜기( Character-oriented framing)에서는 전달된 데이터는 ASCII와 같은 코딩 시스템으로부터의 8비트 문자이다. 

보통 발신지와 목적지 주소와 다른 제어정보를 담고있는 헤더와 오류 검출 또는 정정을 위한 중복 비트를 담고있는 트레일러 또한 8비트의 정수배로 되어있다. (헤더 - 데이터- 트레일러) 

프레임을 다른 프레임으로부터 분리하기 위해서는 8비트짜리 플래그(Flag)가 프레임의 시작점과 마지막에 추가된다. 

(플래그-헤더-데이터-트레일러-플래그)

프로토콜에 의해 좌우되는 특별 문자로 구성된 플래그는 프레임의 시작이나 마지막을 알린다.

 

문자중심 프레임 짜기는 데이터링크층에서 오직 문자열들만 교환되었을때에 인기가 있었다. 

문자열 통신에 사용하지 않는 임의의 문자를 플래그로 사용할 수 있었다. 

그러나 요즘은 문자열 뿐만 아니라 그래프, 오디오, 비디오같이 다른데이터도 전송을 많이 한다.

그래서 플래그로 사용하는 어떤 패턴도 정보 자체에 들어있을 확률이 있다. 만약 들어있다면 수신자는 그런 패턴을 프레임의 마지막으로 오인한다.

이 문제를 해결하기 위해 바이트 채우기 전략을 문자중심 프레임 짜기에 추가하였다. 

바이트 채우기(byte stuffing) 에서는 데이터 내부에 플래그와 동일한 패턴의 데이터가 생기면 특별한 바이트를 더해 넣는다. 

데이터 부위가 추가 바이트로 채워지는것이다. 

이러한 바이트를 보통 탈출문자(ESC, escape character)라고 하며 미리 정해진 비트 패턴을 갖는다. 

수신자는 ESC문자를 보게 되면 데이터부위에서 그 문자를 제거하고 다음 문자를 플래그가 아닌 데이터로 취급한다.

 

탈출문자를 사용하는 바이트채우기를 하면 프레임의 데이터부분에 플래그와 같은 패턴의 데이터가 있어도 되지만, 이는 또다른 문제를 낳는다. 

문자열속에 1개나 그 이상의 ESC가 있고 그 뒤에 플래그가 오게 되면? 

수신자는 ESC는 제거하지만 플래그를 데이터로 오인할 것이다. 

이 문제를 해결하기 위해 문자열의 일부가 되는 ESC를 또다른 ESC를 사용하여 표시한다. 

(ESC가 문자열의 일부라면 ESC를 또넣는다. )

문자중심 프로토콜에는 통신상 다른 문제도 야기한다.

오늘날 사용하는 유니코드와 같은 범용 코드는 16비트나 32비트 워드를 사용하므로 8비트 문자와는 상충한다. 비트중심프로토콜이 유행

 

 

 

비트중심 프로토콜

비트중심 프로토콜에서는 프레임의 데이터부위는 상위계층에서 문자열,그래픽,등등의 데이터중 하나로[ 인식되어 있도록 되어있는 단지 비트열일 뿐이다.]

그러나 헤더(트레일러)이외에도 프레임들을 구분할 경계가 필요하다. 대부분의 프로토콜은 01111110의 8비트 패턴의 플래그를 프레임의 경계로 삼고 있다.

만약 이 플래그패턴이 데이터속에 나타난다면? 수신자로 하여금 그것이 프레임의 끝이 아니라는 것을 알릴 필요가 있다. 

해결방법: bit stuffing 1개의 단일비트(1바이트 말고)를 채워 넣어서 그 패턴이 플래그처럼 보이지 않도록 만든다. 

bit stuffing에서는 0과 그 뒤로 연속하는 5개의 1을 만나게 되면 추가로 0을 더해 넣는다. 

이 추가로 채워진 비트는 마지막에는 수신자가 데이터에서 제거한다. 

여기에서 0 뒤에 5개의 1이 연속되면 그 뒤의 비트값에 무관하게 0비트를 채운다. 이렇게하면 플래그 패턴은 데이터속에서는 나타나지 않는다.

(01111110을 011111010으로 바꾼다.)

진짜플래그 01111110은 비트 안채워진다.

 

 

11.1.2 Flow Control, Error Control

Flow Control

개체가 아이템을 생성하고 다른 개체가 그것을 소모할 때마다 생산과 소모 사이의 균형을 맞춰야 한다. 

생산이 소모보다 빠르면 (생산>소모) 소비자는 어쩔줄 모르게 되고, 일부 아이템은 폐기해야될 수 도 있다.

만약 소모>생산 이라면. (소모할 수 있는것 보다 느리게 생산된다면) 소모자는 기다려야 하고, 시스템의 효율성이 떨어진다.

흐름제어는 생산>소모 일때 아이템이 손실되는것을 예방해야 한다. 

Data link layer의 통신에서, 송신노드에서 네트워크 및 데이터링크층, 수신노드에서 네트워크 및 데이터링크층 의 총 4가지 개체들에 대해서 다룬다.

하나 이상의 생산자 및 소비자와 복잡한 관계를 가질 수 있지만, 

두 데이터 링크층 사이에서의 관계에만 집중해보자.

 

만약 송신노드에서 데이터링크층이 수신노드의 데이터링크층으로 프레임을 보낸다면, 

수신노드가 도착한 프레임과 같은 비율로 패킷을 처리하거나 전달하지 못한다면, 프레임은 어쩔줄 모른다.

이 경우에 Flow control은 프레임을 보내는 것을 멈추거나 느리게 하기 위해, 수신노드에서 송신노드로 피드백 할 수 있다.

 

 

버퍼

흐름제어의 구현 방법중 하나이다.

흐름제어는 여러가지 방법으로 구현할 수 있지만, 그 방법 중 하나는 보통 2개의 버퍼(buffer)를 사용한다.

첫번째 버퍼는 송신 데이터링크층

두번째 버퍼는 수신 데이터링크층 에서 사용한다.

버퍼는 송신자 및 수신자에서 패킷을 가질 수 있는 메모리의 집합이다. 

Flow control Communication은 소비자에서 생산자로 신호를 보내면 발생한다.

수신 데이터링크층의 버퍼가 가득 차 있을 때, 그것은 송신 데이터링크층이 프레임 전달을 멈추도록 알린다.

 

 

오류제어(Error control)

물리층에서 기본 기술이 완전히 믿을 수 없기 때문에, 네트워크층에서 손상된 패킷을 손상된 수신노드로 전달할 수도 있다.

그것을 방지하기 위해 데이터링크층에서 오류제어를 구현해야한다. 

데이터링크층에서 오류제어는 2가지 방법중 하나를 사용해 구현한다. 두가지 방법 모두 CRC는 송신자가 프레임 헤더에 추가되고, 수신자에 의해 검사된다.

첫번째 방법: 프레임이 손상되면 손상된 패킷을 폐기한다. 만약 손상되지 않으면 패킷은 네트워크층으로 전달된다. Ethernet, 유선LAN에 사용됨.

두번째 방법: 프레임이 손상되면 손상된 패킷은 폐기된다. 만약 손상되지 않으면 흐름과 오류 제어 목적을 위해 송신자에게 확인 응답이 보내진다.

 

 

흐름과 오류제어의 조합

흐름과 오류제어는 동시에 사용할 수 있다. 

간단한 상황에서 흐름 제어를 위해 보내지는 확인 응답은 손상되지 않은 패킷이 도착했다고 송신자에게 말하기 위한 오류제어에도 사용될 수 있다.

확인응답의 결핍은 전송프레임에 문제가 있다는 것을 의미한다. 확인응답은 ACK라고 부른다.

 

11.1.3 

비연결지향 및 연결지향

Data link control protocol은 비연결지향 또는 연결지향이다. 

비연결지향 프로토콜

비연결 지향 프로토콜에서 프레임은 프레임들 사이에서 어떠한 관계도 없이(각각의 프레임이 독립이라는말)

하나의 노드에서 다음 노드로 보내진다.

비연결지향(connectionless)이라는 말이 노드들 사이에 물리적 연결이 없는게 아님!

->프레임 사이들 사이에 connection이 없다는 것을 의미한다. 프레임들은 번호가 매겨져있지도 않고 순서도 없다.

LAN을 위한 대부분의 데이터 링크 프로토콜들은 비연결 지향 프로토콜이다.

 

연결지향 프로토콜

연결지향 프로토콜에서 두 노드 사이에 논리적인 연결은 첫번째로 수립되어야 한다.(설정 단계)

서로 어떻게든 관련된 모든 프레임들이 전송된 후에(전송단계)

논리적인 연결은 종료된다(해제단계)

이 통신의 종류에서, 프레임은 번호가 매겨지고 순서대로 매겨진다. 

그들이 순서대로 수신되지 않는경우, 수신자는 동일한 집합에 속하는 모든 프레임이 수신된 후 네트워크층에 순서대로 제공될 때까지 기다려야한다. 유선LAN에서 연결 지향 프로토콜은 드물다. 하지만 몇 가지 점-대-점 프로토콜, 무선LAN및 WAN에서 그들을 볼 수 있다.