Protocol Stack - Physical Layer

2023. 4. 29. 22:46Computer Science/Network

 

Overview

클라이언트에서 서버로 데이터를 전송한다고 했을 때, Application에서 전송하는 데이터는 JSON 객체이거나 protocol buffer와 같은 메시지인 것처럼 보이지만, 실제로 이 데이터는 더 작은 데이터들로 쪼개져 네트워크의 여러 추상화 계층을 거쳐 물리적 매체를 통해 아날로그 시그널의 형태로 전달됩니다. 보통 웹 애플리케이션을 개발할 때는 Application Layer만 이해하고 있어도 큰 문제가 없지만, 개인적으로 한국에서 미국으로 json 객체를 보낼 때, 혹은 파일을 업로드하거나 다운로드할 때 이 데이터들이 어떤 형태로 어떤 과정을 거쳐 전달되는지, 그리고 중간에 에러가 발생했을 때 어떻게 이를 처리하는지를 이해하고 싶었습니다. 또한 단순히 애플리케이션 개발을 위한 지식이 아닌 무언가 새로운 것들을 만들어내고 이해하고 사고하기 위해서는(이를테면 gRPC나 blockchain과 같은) 데이터 통신의 이런 추상화를 벗겨내야 한다고 생각했고, 이를 조금 더 구체화하기 위해 Network Protocol Stack을 한 단계씩 쫓아가 보기로 했습니다. 

 

Protocol Stack 각 시리즈에서는 5 Layered Protocols(보통은 OSI 7 Layer로도 알려져 있지만 Session Layer와 Presentation Layer를 Application Layer의 일부분으로 생각하고 5 Layer로 나누는 경우도 많은 것 같습니다.)를 기준으로 각 Layer에 대한 고수준의 개요를 소개하려 합니다. 고수준의 개요라는 것은 각 레이어가 담당하고 있는 역할과, 이들의 연결관계에 대한 전체적인 그림을 그리는 데에 이 글의 목적이 있으며, 각각의 레이어가 담당하는 역할을 수행하기 위한 구체적인 여러 방법론은 자세히 설명하지 않고 소개하는 정도만 언급하겠다는 것을 의미합니다.

 

 

5 layered protocols overview

 

Physical Layer

The physical layer covers the physical interface between a data transmission device (e.g., workstation, computer) and a transmission medium or network. This layer is concerned with specifying the characteristics of the transmission medium, the nature of the signals, the data rate, and related matters.

 

Overview에서 언급한 것 처럼 우리가 HTTP Request를 다른 호스트로 전송한다고 했을 때 전송되는 HTTP Header, Body와 같은 의미 단위의 데이터들은 결국 011011100.. 과 같은 비트 스트림으로 표현되며, 이 비트 스트림은 이더넷 케이블이나 셀룰러 네트워크, 혹은 전화선을 통해 Signal(Analog Signal, or Digital Signal)의 형태로 전달됩니다. Physical Layer는 이렇게 상위 레이어인 Data Link Layer에서 내려오는 비트 스트림을 Signal의 형태로 인코딩하여 매체(medium)를 통해 전송하고, 수신받은 이 Analog Signal을 다시 디코딩하여 비트 스트림의 형태로 Data Link Layer로 올려 보내는 역할을 담당합니다. 또한 CRC(Cyclic Redundancy Check)와 같은 FEC(Forward Error Correction) 기법을 사용해서 수신된 데이터의 오류를 어느 정도 수정하고,  Interleaving을 사용해서 연속된 비트 에러가 발생했을 때, 에러 수정의 효율을 높이는 역할도 담당합니다.

 

 

Encoding

비트 스트림을 케이블과 같은 매체(medium)를 통해 전달하기 위해서는 이 비트스트림을 시그널(Analog or Digital)의 형태로 인코딩 해야 합니다. 비트스트림을 인코딩하는 데에 한 가지 방법이 아닌 두 가지 방법이 존재하는 이유는 전송 매체의 특성 때문인데, 광섬유나 구리 도선의 경우는 이산적인(Discrete) 전압의 형태로 이루어진 디지털 데이터를 전송하는 것이 용이하지만, 초창기의 전화선이나 무선 전송의 경우 디지털 데이터보다는 연속적인 아날로그 데이터(Sinusoidal)로 전송하는 것에 더 적합하게 설계되었기 때문입니다. 따라서 비트스트림(Digital Data)을 인코딩하는 두 가지 방식을 모두 알아두어야 합니다.

 

 

Digital Data to Digital Signal

A digital signal is a sequence of discrete, discontinuous voltage pulses. Each pulse is a signal element. Binary data are transmitted by encoding each data bit into signal elements

 

Digital Signal은 이산적인(비연속적인) 전압의 순열을 의미합니다. 여기서 전송하려는 데이터(bit)와 Signal Element를 구분해야 하는데, 하나의 데이터는 어떤 Encoding Scheme을 사용하느냐에 따라서 다양한 형태의 Signal Element로 인코딩 될 수 있습니다. 아래는 "01001100011" 이라는 데이터가 서로 다른 encoding scheme에서 어떻게 signal element로 변환되는지에 대한 예시입니다. 예를 들어 가장 간단한 방식 중 하나인 NRZ-L(Non Return to Zero - Level) 방식은 0이라는 비트를 양의 전압(positive voltage)으로,  1이라는 비트를 음의 전압(negative voltage)으로 인코딩합니다. 

 

 

각 Encoding Scheme은 각자 그 장단점이 있는데, 연속되는 비트가 나타났을 때, 수신측에서 이를 정확하게 구분해 낼 수 있는지(Self-clocking capability)와 평균 전압이 너무 높아져서 0과 1을 구분할 수 없게 될 가능성은 없는지(Existence of DC Component)의 여부를 주로 평가하게 됩니다. (참고로 예시로 든 NRZI는 두 기준 모두에서 단점을 갖고 있습니다.)

 

Digital Data to Analog Signal

We turn now to the case of transmitting digital data using analog signals. The most familiar use of this transformation is for transmitting digital data through the public telephone network.
For the telephone network, modems are used that produce signals in the voice-frequency range. The same basic techniques are used for modems that produce signals at higher frequencies

 

디지털 데이터를 전화선과 같은 매체를 통해 전달하기 위해서는 Analog Signal로 변환해야 합니다. Analog Signal은 연속적인 주파수의 형태를 띠기 때문에 Digital Signal과는 다르게 데이터를 Sinusoidal Carrier Signal에 실어서 전송하게 됩니다. 이는 Sinusoidal Carrier Signal이 변형되는 것을 의미하며, 어떤 부분이 변형되느냐에 따라 ASK(Amplitude, 진폭), FSK(Frequency, 주파수), PSK(Phase, 위상)으로 나누어지게 됩니다. 아래는 "00110100010"이라는 디지털 데이터가 Sinusoidal Carrier Signal에 실려 변형된 모습입니다.

 

 

QPSK(Quadratic Phase Shift Keying)

각각의 개념을 일일이 설명할 수는 없기 때문에 위의 여러 방법 중 Phase Shift Keying, 즉 위상을 변경하는 방법에 대해서만 간략하게 살펴보겠습니다. Quadratic Phase Shift Keying은 디지털 데이터를 2bit씩 묶은 뒤, 0을 -1로, 1은 그대로 1로 변환하여 좌표를 만들고, 해당 좌표가 평면에서 차지하는 각을 위상으로 하여 Carrier Signal을 변조하는 방식입니다. 2bit씩 묶으면 표현가능한 값이 4개가 되고, 이 때문에 Quadratic이라는 단어가 앞에 붙었으며 3bit씩 묶으면 8개를 표현할 수도 있습니다. 

 

 

이렇게 연속된 2개의 비트를 통해 위상을 찾아내고, 해당 위상만큼 Carrier signal을 변조하는 방식을 modulation이라고 하며 QPSK modulator는 아래와 같이 생겼습니다. 이렇게 전송된 carrier signal은 수신측에서 demodulator를 통해 다시 Digital Data로 변환되는데, 이때는 해당 시그널을 특정 시간 T에 대해 적분한 후, 1이나 0으로 변환해서 얻어내게 됩니다. 

 

 

 

 

Error Detection & Error Correction

Physical Layer는 위에서 살펴본 것처럼 Digital Data를 Digital Signal이나 Analog Signal로 변환하고, 시그널을 다시 Digital Data로 변환하는 역할을 합니다. 하지만 그 외에도, Error Detection & Error Correction을 사용해서 전송 과정에서 전파간섭등의 문제로 비트 에러가 발생한 경우 어느 정도는 이를 감지하고 수정해서 Data Link Layer로 올려 보내는 역할도 합니다. (참고로, 전송된 데이터가 사용할 수 없을 정도로 망가졌을 경우에는 retransmission을 요청하게 되는데, 이는 Physical Layer가 아닌 그 위의 Data Link Layer에서 수행하게 됩니다.)

 

Error Detection

Error Detection은 크게 Parity Check와 Cyclic Redundancy Check(CRC)의 2가지 방식을 통해 수행할 수 있습니다. (자세한 내용은 이번 포스팅에서는 다루지 않으려 합니다. 대신 원서의 설명으로 간단한 소개를 대신합니다.)

 

Parity Check

The simplest error-detecting scheme is to append a parity bit to the end of a block of data. A typical example is character transmission, in which a parity bit is attached to each 7-bit IRA character. The value of this bit is selected so that the character has an even number of 1s (even parity) or an odd number of 1s (odd parity).

Note, however, that if two (or any even number) of bits are inverted due to error, an undetected error occurs. Typically, even parity is used for synchronous transmission and odd parity for asynchronous transmission.

 

 

Cyclic Redundancy Check(CRC)

One of the most common, and one of the most powerful, error-detecting codes is the cyclic redundancy check, which can be described as follows. Given a k-bit block of bits, or message, the transmitter generates an (n - k)-bit sequence, known as a frame check sequence (FCS), such that the resulting frame, consisting of n bits, is exactly divisible by some predetermined number. The receiver then divides the incoming frame by that number and, if there is no remainder, assumes there was no error.3

 

 

Error Correction

Error Correction은 송신측에서 전송하려는 데이터에 대해 충분한 추가정보(Redundacny)를 제공해서 재전송(Retransmission) 없이 수신 측에서 데이터를 수정하는 방식을 제공합니다. 즉 수신 측에서 데이터를 받았을 때, Error Detection을 통해 이 데이터가 오류가 있음을 발견했더라도, 적절한 Error Correction 방식을 통해 재전송 없이 이 데이터를 수신 측에서 수정해서 상위레이어로 올려 보내는 것입니다. Error Correction의 방법으로는 BCH Code, Hamming Code, Reed-Solomon Code, Convolutional Code, Turbo Code 등 굉장히 여러 가지 방법이 있으나, 마찬가지로 이 포스팅에서 다루려는 범위를 벗어나므로 BCH Code를 통해 Error Correction이 진행되는 예시만 언급하도록 하겠습니다.

 

 

Interleaving

 

 

데이터를 인코딩하여 전송하다 보면 감쇠, 간섭등의 이유로 Signal Element가 손상되어 bit error가 나는 경우가 있습니다. 이를 하나의 비트만 손상되는 Single-bit error와 연속적으로 비트가 손상되는 Bust Error로 구분할 수 있는데 single-bit error의 경우 burst error에 비해 감지되기도 쉽고, FEC(Forward Error Control)에 의해 수정되기도 쉽습니다. 따라서 burst error의 경우를 최소화하기 위해 송신측에서 데이터를 전송할 때, 비트의 순서를 적절한 기준으로 섞어서 보내고 수신 측에서 이를 다시 조합하는 Interleaving 방식을 사용합니다.

 

이렇게 Interleaving을 사용하면, burst error가 발생했을 떄, 이를 여러 개의 single bit error로 분산시켜 Error Detection & Error Correction의 효율을 높여줄 가능성을 확률적으로 높여줍니다.

 

 

Conclusion

지금까지 조금은 긴 호흡으로 Physical Layer가 무엇이고, 어떤 역할을 하는지에 대해 살펴보았습니다.

 

Physical Layer는 데이터 링크 레이어로부터 내려오는 비트 스트림을 시그널(아날로그 신호 또는 디지털 신호)로 인코딩하여 매체(medium)를 통해 전송하고, 수신된 아날로그 신호를 다시 디코딩하여 비트 스트림으로 데이터 링크 레이어로 전달하는 역할을 담당합니다.

 

인코딩에는 디지털 데이터를 디지털 신호로 변환하는 방식과 아날로그 신호로 변환하는 방식이 있으며, 에러 검출 및 수정을 위해 에러 검출 기법(Parity Check, CRC 등)과 에러 수정 기법(BCH 코드, 해밍 코드 등)을 사용합니다. 이 외에도 연속된 비트 에러를 줄이기 위해 인터리빙(Interleaving)을 사용하여 데이터 전송의 효율을 높입니다.

 

다음 포스팅에서는 Data Link Layer에 대해서 살펴보도록 하겠습니다.

 

Reference

 

Data and Computer Communications

 

www.pearson.com

 

반응형