[Data Communication] 물리 계층에서의 데이터 전송
디지털 통신은 컴퓨터가 이해할 수 있는 비트를 주고받는 일인데.. 소리나 영상 같은 아날로그 데이터를 전송하려면 데이터를 비트로 변환해야 한다.
이 과정에서 물리 계층이 개입되고, 이 계층은 전기 신호 / 소리 / 빛 등 아날로그 신호를 비트로 표현하는 역할을 수행한다.
물리 계층에서는 유선 케이블을 사용할 때와 무선랜을 사용할 때 비트를 변환하는 방식이 다르다.
유선 케이블을 사용할 때는 라인코딩을, 무선랜을 사용할 때는 사인파를 조작한다.
무선에서도 라인코딩을 전혀 사용하지 않는 건 아니지만, 통신 특성 상 유선에서는 디지털 비트를 다른 디지털 신호로 변환하는 라인코딩이 중요하다.
주파수는 두 가지 방식에서 모두 사용하지만.. 무선랜에서 좀 더 중요하게 다뤄진다.
아날로그에서의 대역폭 - 주파수 범위
디지털에서의 대역폭 - 비트전송률
PCM (Pulse Code Modulation)
아날로그 소리를 디지털로 변환하는 디지털 오디오의 표준으로, 샘플링 / 양자화 / 인코딩을 수행한다.
소리는 시간에 따라 연속적으로 변하니 연속 신호라고 할 수 있는데, ADC는 소리를 디지털로 변환하는 장치이며, PCM은 그 장치 중 하나라고 생각하면 된다.
샘플링 - 아날로그 신호를 일정 간격으로 끊어서 값을 측정. (1초에 8000번 측정 = 8kHz)
양자화 - 샘플링으로 얻은 아날로그 값(전압)을 정해진 수치로 반올림해서 정수로 표현. (비트 수가 많을수록 정밀)
인코딩 - 양자화된 정수 값을 2진수 비트열로 변환. (256 -> 100000000)
샘플링은 아날로그 형태의 연속된 곡선에 점을 찍는 작업이라고 생각하자.
샘플링이 너무 빠르면 데이터 양이 커지고, 너무 느리면 정보가 손실된다.
Nyquist Sampling Theorem - 최대 주파수의 2배 이상으로 샘플링해야 아날로그 신호를 완벽하게 복원할 수 있다.
여기서 주파수는 Hz단위로, 1초에 몇 번 반복되는지를 의미한다.
소리가 1초에 몇 번 진동하는지, 전자파에서는 1초에 전기신호가 몇 번 진동하는지를 주파수를 통해 표현한다.
소리의 주파수는 소리 자체의 진동수를, 전자파의 주파수는 신호를 운반하는 파형의 진동수라고 생각하면 된다.
진동수를 의미하는 주파수라는 개념을 사용하는 건 같지만, 컴퓨터가 인식하는 방식은 전혀 다르다.
가청 주파수는 20Hz ~ 20,000Hz이고
블루투스는 2.4GHz / 와이파이는 2.4GHz 5.0GHz / LTE는 700MHz ~ 수십 GHz 를 사용한다.
같은 주파수를 사용하면 전파가 서로 섞여서 혼선이 발생할 수 있고, 낮은 주파수는 멀리 전달될 수 있고 높은 주파수는 속도가 빠르지만 거리가 짧다는 단점이 있다.
양자화 표현 비트가 클수록 신호를 세밀하게 표현할 수 있어 음질이 좋아진다.
음악을 제작할 때는 16bit로 양자화해서 음질을 높이고.. 전화같이 단순 음성 전달이 목적인 경우 8bit로 양자화한다.
소리를 섬세하게 표현하는 기준 중 하나는 dB로 표현되는 Dynamic Range인데, 오디오의 가장 조용한 소리와 가장 큰 소리의 비율을 의미한다.
8bit에선 약 256:1, 16bit에선 약 65,536:1의 비를 가지므로 이를 dB로 변환하면..
(dB) = 20 × log10(256) 혹은 (dB) = 20 × log1 0(65, 536)의 Dynamic Range를 갖게 된다.
통신사는 주파수 면허를 구매해 해당 대역을 사용한다.
전자기기에는 기기가 사용할 주파수 대역이 정해져 있고, 그 주파수만 인식하고 주파수에 해당하는 방식으로만 통신한다.
아날로그를 디지털 신호로 변환하는 작업도 물리 계층에서 수행하고, 디지털 신호를 아날로그로 바꾸는 작업도 역시 물리 계층에서 수행한다. (각각 복조, 변조를 의미)
변조와 복조를 수행하는 기기를 MODEM 이라고 부른다. (MOdulation + DEModulation)
LTE / WIFI / 전화선 모두 내부적으로 모뎀을 사용한다.
디지털 데이터는 비트로 구성되어있고, 현실로 데이터를 보내려면 아까와는 반대로 전기 신호 / 소리 등의 아날로그 신호 형태로 데이터를 변환해야 한다.
ASK (Amplitude Shift Keying) - 진폭으로 0과 1을 구분하는 방식. (RFID, 초기 모뎀 / 파형의 높이)
FSK (Frequency Shift Keying) - 주파수로 0과 1을 구분하는 방식. (무선 리모컨, 모뎀 / 진동수)
PSK (Phase Shift Keying) - 위상으로 0과 1을 구분하는 방식. (위성통신, 와이파이, 고속 모뎀 / 파형의 시작 위치)
QAM (Quadrature Amplitude Modulation) - 진폭과 위상을 동시에 사용해 더 많은 비트를 전송하는 방식. (LTE, 케이블 모뎀)
사인함수의 특성을 통해 함수를 비트로 변환한다.
모뎀이 저걸 전부 다 쓰는건 아니고.. 통신 환경과 목적에 따라 선택해서 사용한다.
옛날 전화 모뎀은 FSK, PSK 기반으로 만들어졌고, 현대 와이파이 LTE 모뎀 등 최신 통신기술들은 QAM을 사용한다.
QAM은 ASK와 PSK를 합친 변조 방식으로 16QAM은 진폭 4단계 위상 4단계를 사용해 각 조합으로 4비트를 표현한다.
(256QAM은 8비트 표현)
하나의 사인파에 1비트만 실으면 느리지만, QAM은 여러 위상과 진폭을 조합해 1심볼에 여러 비트를 실을 수 있어 빠르게 통신할 수 있다.
주어진 대역폭에서 많은 데이터를 보내려면 심볼에 최대한 많은 데이터를 담아야 하는데, 이를 위해 진폭과 위상을 동시에 조절하는 QAM을 사용한다.
변조/복조의 속도가 곧 통신의 속도이고.. QAM의 성능이 곧 통신의 성능이다.
WiFi의 속도가 빨라지는 이유도 QAM이 하나의 심볼에 더 많은 비트를 보낼 수 있기 때문이다.
퀄컴이 QAM을 잘 구현하고.. 모뎀을 잘 뽑는다.
심볼 간 거리가 좁아질수록 잡음에 민감한데, 퀄컴은 에러 보정 알고리즘 / 고성능 회로 설계를 통해 이런 문제를 극복했다.
위의 네 가지 방식은 소리에도 사용되고 전자기파에도 사용되는 범용적인 변조 기법이니.. 소리에만 사용된다고 생각하지 말자.
GibberLink로 스마트폰끼리 삐~ 소리나 사람이 듣지 못하는 소리로 서로 정보를 교환하는 작업은 디지털 - 아날로그 - 디지털 순서로 데이터를 교환하는 예시로 볼 수 있다.
지금까지는 디지털 비트를 아날로그 신호에 실어서 보내주는 변조를 다뤘고, 이제 아날로그 정보를 아날로그 파형으로 변환하는 아날로그 변조를 살펴보자.
여기서 변조는 데이터를 전송 가능한 파형에 실어서 보내는 작업을 의미한다.
라디오 방송국에서 사람의 목소리를 전파에 실어서 공중에 쏘는 작업을 변조라고 할 수 있다.
AM (Amplitude Modulation) - 정보 신호에 따라 사인파의 크기(진폭)를 바꾼다.
FM (Frequency Modulation) - 정보 신호에 따라 사인파의 진동 속도(주파수)를 바꾼다.
PM (Phase Modulation) - 정보 신호에 따라 사인파의 시작 위치(위상)를 바꾼다.
Carrier Frequency는 정보를 실어 보내기 위해 사용하는 기본 파형으로 정보를 운반하는 역할을 수행해 반송파라고 불린다.
전파는 주파수가 높을수록 멀리 감지되니 정보를 높은 주파수의 Carrier에 실어서 보낸다.
Modulating Signal은 실제로 보내고 싶은 정보로 반송파를 통해 전달하게 되는 정보를 의미한다.
Modulated Signal은 위의 두 가지를 합친 실제 전송형 파형으로 이 신호가 실제 전선으로 전송된다.
고속 푸리에 변환(ffft)은 시간 영역의 신호를 주파수 영역으로 바꿔주는 알고리즘이다.
물리 계층에서 핵심적으로 사용되고, 디지털 신호를 입력받아 이 신호 안에 어떤 주파수 성분이 있는지 출력한다.
실제 통신에서는 신호가 사인파들의 합성으로 구성된다.
사람의 말 / 전파 / 소리 / 모든 신호는 기본적으로 여러 사인파 주파수의 조합이고, 해당 신호가 어떤 주파수로 구성되어있는지 분석해야 변조 / 복조 / 에러 보정을 수행할 수 있다.
오케스트라 곡을 입력받으면.. 이 안에 피아노는 몇 Hz에 있고 바이올린은 몇 Hz에 있는지 찾아준다고 생각하면 된다.
당연히 모뎀에도 사용되는데.. LTE / 5G 신호를 복조할 때 중요한 역할을 수행한다.
사인파가 하나 뿐이면.. fft 쓸 필요도 없이 분석할 수 있겠지만 현실에서는 모든 신호가 사인파들의 합성 신호로 구성되니 신호를 사인파로 쪼개서 이해하고 필요한 주파수를 추출하는 fft가 필요하다.
송신 측에서 디지털 비트를 아날로그 신호로 바꿀 때는 QAM ASK FSK 등 변조 기술을 사용하고, 수신 측에서 아날로그 신호를 디지털 비트로 변환할 때는 푸리에 변환을 사용한다.
통신에서는.. 오류 처리가 매우 중요하다.
Reed-Solomon 코드는 통신 / 저장 매체에서 자주 사용되는 에러 정정 코드로 여러 통신에서 유용하게 사용된다.
데이터에 일부 오류 정정용 코드를 추가해 추후 오류가 생겨도 복원할 수 있게 해 주는 기술으로, RS(7, 3) 코드는 7개의 심볼 중 3개가 원래 데이터이고 4개가 에러 정정 코드임을 의미한다.
원래 데이터 [D1, D2, D3]
추가된 정정 코드 [+C1, +C2, +C3, +C4]
전체 전송 [D1, D2, D3, C1, C2, C3, C4]
일부가 깨지더라도 2개까지는 복구할 수 있다.
(RS(N, K) 에서 (N - K) / 2 개 까지는 복원 가능)
물리 계층에서 유선 케이블을 사용할 때는 사인함수를 조작하기보다는 라인 코딩을 사용한다.
유선 통신에서는 비트를 전기 신호로 표현하고, 이 표현 방식이 라인 코딩이다.
신호 레벨을 정하고 레벨 별로 전압을 설정해둔다. (5V 1.5V -5V -1.5V...)
신호 레벨이 많아질수록 비트전송률이 높아지지만, 신호 레벨 구분이 힘들어진다.
노이즈가 없는 이상적인 채널에서의 최대 비트 전송률은 아래와 같이 Nyquist 공식을 통해 결정할 수 있다.
노이즈가 전혀 없으니 심볼을 정확하게 구분할 수 있어 신호 레벨을 무한히 늘릴 수 있다.
다만 현실에서는 노이즈가 없을 수가 없으니.. Shannon Capacity를 사용해서 최대 비트 전송률을 결정하자.
Shannon은 잡음이 있는 환경에서 얼마나 전송할 수 있는지를 제시한다.
레벨을 늘리면 SNR이 높아야 정확히 구분할 수 있다.
Shannon Capacity를 계산해 노이즈가 있는 상황에서 최적 코딩을 가정한 이론적 최대 용량을 구하고,
Nyquist 정리를 적용해 신호 레벨 수를 계산하자.
0, 1 같은 디지털 비트를 전선이나 광섬유에 보내려면 이걸 어떤 파형으로 표현할지 정해야 하는데.. 이렇게 디지털 비트의 모양을 결정하는 방식을 라인 코딩이라고 부른다.
즉, 0을 0V / 1을 5V로 보낸다는 약속으로 생각하면 된다.
이 때 DC(Direct Current) 성분을 주의해야 하는데 물리계층에서는 신호를 안정적이고 효율적으로 전송하기 위해 신호의 평균값을 0으로 설정해야 한다.
DC 성분은 신호의 평균 전압으로 평균값이 0인 경우 + - 전압을 균형 있게 오가고 있음을 의미하는데.. DC 성분이 0이 아니면 회로 내부 기준 전압을 왜곡시키고 중간 장비에서 신호가 손실되거나 왜곡될 수 있다.
그래서.. 단순하게 0을 0V / 1을 5V 이렇게 규칙을 정하고 유선 케이블으로 전압을 보낼 경우 DC 성분이 0이 아닐 수 있어 통신에 문제가 발생한다.
그래서 라인 코딩을 사용한다.
라인 코딩은 단순히 디지털 비트를 아날로그 신호로 변환하는 역할을 수행할 뿐 아니라, 전압을 계속 고정하지 않도록 일정 주기로 전압을 변환하는 방식도 함께 수행한다.
라인 코딩을 사용하면 전압의 표현 방식은 달라지지만, 송신기와 수신기 모두 같은 라인 코딩 방식으로 동작하기에 통신에는 문제되지 않는다.
전압 자체가 중요한게 아니고, 전압 변화의 "약속"이 중요하다.
Unipolar - 전압이 한 방향으로만 표현된다. (1 -> V / 0 -> 0V)
Polar - 전압이 두 가지 방향으로 표현된다. (1 -> V / -1 -> -V)
Bipolar - 0은 항상 0V, 1은 +V와 -V를 번갈아가면서 사용한다.
MultiLevel - 심볼 하나에 여러 비트를 담기 위해 전압 레벨을 2개 이상 사용한다.
Multitransition - 전압 변화 패턴 자체를 이용해 비트로 표현한다.
NRZ
Non-Return to Zero의 약자로 디지털 비트를 전송할 때 전압 신호가 비트를 유지하는 동안 그대로 유지되고, 중간에 0V로 돌아가지 않는 방식을 의미한다. (비트를 보낼 때 전압이 그대로 유지)
기본적으로 비트 값에 따라 전압을 바꾸지만, 비트 구간 사이에 0V로 돌아가지는 않는다.
NRZ-L 은 전압 자체가 의미를 가지는 방식이고
NRZ-I 는 전압의 변화가 의미를 가지는 방식을 의미한다. (비트가 1일 때만 변화)
모두 Non Return to Zero이니.. 0V상태는 가지지 않는다.
구현이 쉽고 낮은 주파수를 사용하지만 동기화가 어렵고 에러 감지가 어렵다.
Manchester Encoding
비트마다 반드시 중간 시점에 전압이 바뀌는 방식이다.
1비트를 전압의 변화 패턴으로 표현해, 전압 변화의 위치를 통해 0과 1을 구분한다.
1: L -> H / 0: H -> L (IEEE 기준)
클럭 동기화가 뛰어나고 에러 감지가 쉽다. 대역폭을 2배로 사용하고 전력 소모가 많다. (1bit당 2번 변화하기 때문)
1111111으로 입력이 들어오더라도 Manchester Encoding은 전압이 계속 반전되니 NRZ 방식보다 DC 성분을 0으로 유지하기 쉽다.
2B1Q
Two Binary One Quaternary로 2비트의 정보를 1개의 4레벨 전압 신호로 표현하는 방법이다.
NRZ처럼 1비트당 1심볼이면 대역폭이 많이 필요하지만 2비트를 1심볼로 보내면 대역폭을 반으로 줄일 수 있다. (노이즈에 민감)
수신 측은 이 전압 값을 감지해서 2비트씩 디코딩한다.
3비트를 한 번에 보내면 레벨8개를 다룰 수 있어 당연히 더 좋겠지만..
전압 레벨 구분이 어렵고 노이즈에 약하다.
라인 코딩의 한계를 보완하기 위해 블록 코딩을 사용한다.
동기화 문제, DC 성분 문제, 에러 검출 문제를 해결해 주는 기술으로 전송 전에 일정 비트 블록 단위로 데이터를 변환해 더 좋은 전송 특성을 가지는 코드로 바꾸는 방식이다.
Manchester Encoding을 사용하면 문제가 해결되지만... 대역폭 낭비가 커서 실전 고속 통신에는 합리적이지 않고, 블록 코딩을 좀 더 나은 대안으로 사용한다.
클럭 복구가 중요하면 맨체스터를, 단순한 회로에서 속도가 중요할 때는 NRZ를, 속도와 신뢰성 모두가 중요할 때는 블록코딩 방식을 사용한다고 생각하자.
디지털 데이터를 전송하기 좋게 일정한 블록 단위로 인코딩해 신호 품질을 높이고 에러를 방지한다.
라인 코딩 전에 일어나는 단계로, 실제 전송 흐름은 아래와 같다.
4비트 그룹을 5비트로 변환 - 라인코딩 - 전기 신호 전송 (5비트로 변환할 때 DC 성분이 적고 전압 변화가 많은 코드만 선택한다)
마지막에만 라인 코딩을 사용하고 그 전 단계까지는 블록 코딩을 사용한다.
블록 코딩으로 전송에 적합한 비트로 패턴 자체를 바꾸고, 라인 코딩으로 바꾼 비트를 전압 신호로 변환한다.
블록 코딩은 비트를 다듬는 과정이고.. 라인 코딩은 실제로 비트를 전압으로 바꿔서 선으로 보내는 물리적 작업이다.
그러니 전송 직전에는 실제로 비트를 케이블로 보내는 라인 코딩이 필요하다.
4B/5B 블록 코딩으로 4비트 데이터를 5비트 코드로 매핑해서 전송해 실제로 32개의 5비트 코드 중 16개만 사용한다.
항상 신호 변화가 있도록 설계된 5비트 코드를 쓰기 위해 5비트로 늘리고, 덕분에 수신자는 5비트가 들어오면 항상 클럭을 잡아낼 수 있다.
'Computer Science > Computer Network' 카테고리의 다른 글
[Data Communication] 물리 계층에서의 다중화 (0) | 2025.04.16 |
---|---|
[Data Communication] Layer Packet Signal (0) | 2025.04.01 |
[Nginx] nginx.conf (1) | 2023.12.28 |
[Nginx] Timeout (0) | 2023.12.24 |
[Network] 백엔드 아키텍처 (0) | 2023.12.21 |
댓글
이 글 공유하기
다른 글
-
[Data Communication] 물리 계층에서의 다중화
[Data Communication] 물리 계층에서의 다중화
2025.04.16 -
[Data Communication] Layer Packet Signal
[Data Communication] Layer Packet Signal
2025.04.01 -
[Nginx] nginx.conf
[Nginx] nginx.conf
2023.12.28 -
[Nginx] Timeout
[Nginx] Timeout
2023.12.24