⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.
[네트워크] 7-1. Wireless Network #1
이 글에서는 무선 네트워크의 특징에 대해 다룬다.
Decreased signal strength
: 무선 신호는 매질을 통과하면서 전파됨에 따라 점점 감쇠한다. Interference from other source
: 주파수 대역을 많은 디바이스들이 사용하다 보면 서로 간섭이 발생할 수 있다.Multipath propagation
: 무선 신호는 여러 object들로 전파되며, 각각의 object들에게 도착하는 시간은 조금씩 다를 수 있다.SNR (Signal-to-Noise ratio)는 노이즈 대비 신호의 비율을 의미한다. SNR이 클수록 노이즈와 신호를 구분하는 것이 쉽다. 즉 SNR은 클수록 좋다.
SNR과 반대되는 개념으로 BER (Bit Error Ratio)
라는 것이 있다. SNR과 BER은 서로 반비례 관계에 있다.
BER이 커지면 오류를 줄이기 위해 bit rate를 낮춘다. 반대로 BER이 낮은 경우에는 bit rate를 더 높여도 무리가 없다.
위와 같은 상황에서, A의 네트워크 바운더리 안에 B가 속해 있다. C의 입장에서도 마찬가지.
그런데 A의 바운더리 안에 C는 속하지 않는다. 따라서 CSMA를 통해서 C가 데이터를 보내고 있는지 아닌지 알 수가 없다. C의 입장에서도 마찬가지이다. 그래서 서로 B에게 데이터를 보낼 때의 충돌 가능성을 고려하지 못하게 된다. 그 결과 B에서 충돌이 발생할 수 있다.
이러한 문제점을 Hidden Terminal Problem
이라고 한다. 이 문제는 RTS/CTS 기법을 사용함으로써 해결할 수 있다.
RTS/CTS/ 기법이란 송신자가 수신자에게 "나는 데이터를 보낼 준비가 되었다" 라는
RTS (Ready To Send 또는 Request To Send)
메시지를 보내면, 수신자가 "나도 데이터를 받을 준비가 되었다" 라는CTS (Clear To Send)
메시지를 보냄으로써 충돌을 예방하는 방법이다.
코드 분할 다중 접속 (Code-Division Multiple Access, CDMA)은 이동 통신에서 코드를 이용한 다중접속 기술의 하나이다. (위키백과)
이전에 다중 분할 접속에 대해서 알아볼 때는 시간 단위로 나누는 TDMA, 주파수 단위로 나누는 FDMA가 있다고 하였는데, CDMA는 각 사용자들에게 코드
를 할당해 주는 방식이다. 좀 더 엄밀히는 각각의 사용자는 chipping sequence
를 가지고 있다. 그리고 사용자가 보내고자 하는 데이터를 chipping sequence를 가지고 분할해서 보낸다.
그렇게 되면 여러 사용자가 동시에 신호를 보내어 신호가 중첩되어 있는 상황이어도 섞여 있는 데이터들 사이에서 본인이 보낸 데이터를 추출해 낼 수 있다.
다음의 예시를 보면서 이해하면 쉽다. (설명 유튜브 영상 및 사진 출처 : 링크)
사용자 1은 0 0
의 데이터를 보내고자 하고, chipping sequence는 0 1 0 1
이다.
이제 데이터를 비트 단위로 chipping sequence의 길이만큼 적고 XOR
연산을 (같으면 0, 다르면 1) 수행한다.
seq : 0 1 0 1 | 0 1 0 1
data: 0 0 0 0 | 0 0 0 0
XOR ======================
0 1 0 1 | 0 1 0 1
사용자 1은 0101 0101
이라는 신호를 보낸다.
사용자 2는 1 0
의 데이터를 보내고자 하고, chipping sequence는 0 0 1 1
이다. 똑같이 연산을 수행한다.
seq : 0 0 1 1 | 0 0 1 1
data: 1 1 1 1 | 0 0 0 0
XOR ======================
1 1 0 0 | 0 0 1 1
사용자 2는 1100 0011
이라는 신호를 보낸다.
사용자 3은 1 1
의 데이터를 보내고자 하고 chipping sequence는 0 0 0 0
이다. 똑같이 연산을 수행한다.
seq : 0 0 0 0 | 0 0 0 0
data: 1 1 1 1 | 1 1 1 1
XOR ======================
1 1 1 1 | 1 1 1 1
사용자 3은 1111 1111
이라는 신호를 보낸다.
이 세 명의 사용자가 동시에 신호를 보내어 3개의 신호가 모두 겹쳤다고 가정한다.
여기서 0 비트는 1V
, 1 비트는 -1V
로 보낸다.
그럼 각 신호는 위 그림과 같은 형태를 띠고 있다. 이제 이 세 신호를 모두 더한다.
그 결과, 위 그림과 같은 모양의 신호가 만들어진다.
위 그림과 같은 신호에서 각 사용자의 chipping sequence를 가지고 원래 데이터를 추출한다.
0 비트는 1V
, 1 비트는 -1V
로 보낸다고 하였다.
중첩된 신호와 본인의 chipping sequence의 V 값
을 서로 곱한다.
사용자 1의 chipping sequence는 0 1 0 1
이었다. 이를 V로 바꾸면 1 -1 1 -1
이다.
아래 숫자가 곱한 결과이다. 이제 이 곱한 숫자들을 chipping sequence
더하고 비트당 평균을 내어 최종 V 값을 구한다.
1 1
이라는 볼트 값을 얻었다. 1V는 0 비트라고 했으므로 원래 데이터는 0 0
이다.
마찬가지로 사용자 2에 대해서도 해 보자. 사용자 2의 chipping sequence는 0 0 1 1
이었다. 이를 V로 바꾸면 1 1 -1 -1
이다.
composite waveform : -1 -3 +1 -1 | +1 -1 -1 -3
user 2 code's v : +1 +1 -1 -1 | +1 +1 -1 -1
곱 =============================================
-1 -3 -1 +1 | +1 -1 +1 +3
-1-3-1+1 = -4 / 4 = -1
1-1+1+3 = 4 / 4 = 1
-1 1
이라는 V 값을 얻게 되었고 0 비트는 1V
, 1 비트는 -1V
이니까
원래 데이터는 1 0
이다.
이런 식으로 데이터가 여러 사용자들에 의해 중첩이 발생해도 자기가 보낸 데이터를 잘 찾을 수 있다.