[통신]

HDLC - Transparency (Bit Stuffing, AISG)

Neo Park 2012. 12. 10. 12:09

 

HDLC 프로토콜에서 Data의 Transparency를 확실히 하기 위한 방법이 여러 가지 있는데 그 중 한가지에 대해 소개하고자 한다.

결론부터 말하자면 HDLC 규격에 의거, Control-octet Transparency에 대한 소개이다.

 

가장 많이 대표적으로 쓰이는 기법이므로 만약 소프트웨어적으로 구현하고자 한다면 반드시 알아야 할 것이다.

HDLC는 프레임의 시작과 끝을 구분하기 위해 정의된 bit pattern을 사용하는 비트형 프로토콜이다. 아래 Figure 1과 같이 FLAG Field가 프레임의 시작과 끝을 구분하는 용도로 사용된다.

 

 

이때, 시작과 끝을 구분하는 두 개의 FLAG 사이에 공교롭게도 0x7E(0111 1110)가 끼어 있다고 생각해 보자. 프레임이 끝나지도 않았는데 수신자는 두번째 0x7E를 프레임의 끝을 나타내는 FLAG로 오인하게 될 것이다. 이러한 문제점을 해결하기 위한 기법이 Transparency이며 Bit Stuffing 혹은 Byte Stuffing을 참조하기 바란다.

 

일반적인 Bit Stuffing 기법은 데이터가 5개의 연속적인 "1" 비트로 이어질 때 "0" 비트를 삽입하는 방식이다. 이와 유사하게 HDLC의 Transparency도 비트 "1"이 5개 연속해서 나타나면 비트 "0"을 삽입한다고 보면 된다.

 

그럼 이에 대한 정의를 규격에서는 어떻게 설명하는지 살펴보자.

AISG 규격의 HDLC Frame에서의 Transparency를 예로 들어 설명하겠다.

원문을 그대로 올리고 이에 대한 설명을 이어가겠다.

 

 

AISG 1.1에서는 다음과 같이 기술한다.

 

Antenna Interface Standards Group

Standard No. AISG1: Issue 1.1

30 July 2004

 

7.1.2 Control octet transparency

Control octet transparency shall be implemented in accordance with ISO/IEC 13239 Para 4.3.2.2.

This requirement applies to all frame types.

 

 

ISO/IEC 13239에서는 다음과 같이 기술한다.

 

INTERNATIONAL STANDARD

ISO/IEC 13239

Third edition 2002 - 07 - 15

Information technology - Telecommunications and information Exchange between systems - High level Data link control (HDLC) procedures

 

4.3.2.2 Control-octet transparency

The following transparency mechanism shall be applied to each frame-image; a frame-image is as defined in 4.3.2.1 when SBDPT is selected, and otherwise is identical to the frame content from address field or frame format field, when present, to FCS field inclusive.

The control escape octet is a transparency identifier that identifies an octet occurring within a frame to which the following transparency procedure is applied. The encoding of the control escape octet is:

 

 

The transmitter shall examine the frame-image between the opening and closing flag sequences including the address, control, and FCS fields, as well as the frame format and HCS fields, when present, and, following completion of the FCS calculation, shall:

 

a) Upon the occurrence of the flag or a control escape octet, complement the 6th of the octet, and

b) Insert a control escape octet immediately preceding the octet resulting from the above prior to transmission.

 

The receiver shall examine the frame-image between the two flag octets and shall, upon receipt of a control escape octet and prior to FCS calculation:

a) Discard the control escape octet, and

b) Restore the immediately following octet by complementing its 6th bit.

NOTE Other octet values may optionally be included in the transparency procedure by the transmitter. Such inclusion shall be subject to prior system/application agreement.

 

 

AISG 규격과 관련 있는 3GPP 규격에서는 다음과 같이 설명한다.

ETSI TS 125 462 V9.0.0 (2010-01)

A.5 Option 15.1

 

Option 15.1 means that the serial link is not synchronous and start/stop flags are used (asynchronous serial link). The flags are coded as 0x7E and basic transparency is used.

This means that all octets between the flags are part of the frame and shall not be transmitted as 0x7E. Since the frame may contain 0x7E, basic transparency is used, which means that 0x7E is transmitted as 0x7D 0x5E and 0x7D is transmitted as 0x7D 0x5D. The receiving station converts back on reception.

All checksum calculations are done on unconverted data.

 

 

이제 위에서 언급한 규격을 요약하여 쉽게 설명하겠다.

1. 송신하고자 하는 프레임에서 FLAG Filed가 아닌 Data(Address, Control, FCS 포함)에 0x7E가 있는지를 송신자는 검사한다.

2. 0x7E가 발견되면 0x7E를 0x7D로 바꾸고 바로 뒤에 0x5E를 삽입한다.

 

-. 0x7E에서 5개의 연속 1 다음에 0을 삽입하면, 0x7D가 된다. 0x7D를 escape octet이라 한다.

 

-. 원래의 데이터 0x7E에 0x20을 Exclusive OR하면 0x5E가 된다.

 

-. 데이터 0x7E는 escape octet 0x7D + 0x5E가 되어 전송된다.

더블클릭을 하시면 이미지를 수정할 수 있습니다

 

 

3. 송신자는 0x7E 뿐만 아니라 0x7D 역시 Transparency를 위해 변환해 주어야 한다. 수신자가 0x7D를 받았을 때 이를 버리고 다음의 데이터를 취하게 하기 위해서이다. 따라서, 0x7D는 그대로 두고 그 다음에 오는 데이터는 0x7D XOR 0x20이 되므로 0x5D가 된다.

즉, 다시 말해 송신 데이터에 0x7E가 있으면 0x7D 0x5E로 변환하여 송신하고, 0x7D가 있으면 0x7D 0x5D로 변환하여 송신하면 되는 것이다.

 

4. 수신할 때는 원래의 데이터로 어떻게 복원해야 할까?

-. 수신한 데이터에 0x7D가 있는지 검사한다.

-. 0x7D가 발견되면 0x7D를 버리고 그 다음에 오는 데이터에 XOR 0x20을 한다.

-. 원래의 데이터 0x7E가 만들어 졌으므로 정확히 복원되었다.

 

 

 

 

참조 : http://kangsanggu74.blog.me/140107638926