주파수 스케쥴링

DL/UL에 대한 스케쥴링 결정은 기지국(gNB)이 한다. DL은 DownLink로 기지국에서 단말로 신호를 보내는 것을 의미하고, UL은 UpLink로 단말기에서 기지국으로 신호를 보내는 것을 의미한다. 여기서 스케쥴링이란 주파수 자원을 누구한테 나누어 줄 것인가를 의미한다. 스케쥴링 방법에는 크게 2가지로, Opportunistic Scheduling과 Proportional Fair Scheduling이 있다.

 

Opportunistic Scheduling

Opportunstic Scheduling의 개념은 채널 컨디션이 좋은 유저에게 몰아주면 그만큼 data-rate가 높아지면서 좋은 채널을 유지할 수 있다는 것이다. 이러한 Opportunistic Scheduling이 만들어지게 된 배경으로는 1990년대 2G 시절에 wireless 채널을 어떻게 극복할지가 문제였기 때문이다. wireless 채널로 전송을 하게 되면 받은 signal의 변화가 컸고, 대체적으로 성능은 worst에 의해 결정되었는데 기본적으로 좋지 않은 것들이 많았다. 따라서 채널이 나쁘면 signal을 빠르고 많이 전송하고, 채널이 좋아지면 power를 적게 써서 궁극적으로, 받은 signal을 잘 유지해서 power control할 필요성이 있었다. 채널이 좋다면 received signal이 커서 에러가 작을테니 결국 redundancy를 많이 보내지 않아도 되기 때문에 사용되었던 스케쥴링 방식이다. 하지만 이러한 스케쥴링 방식에는 채널 컨디션이 좋은 유저에게만 몰아주기 때문에 전체적인 네트워크 차원에서 채널 컨디션이 좋지 않은 유저는 signal을 전송 받기 어렵다는 단점이 있었다. 극단적으로 가면 채널 컨디션이 좋은 유저만 고르기 때문에 평균적인 throughput은 좋지만 채널이 좋지 않은(cell-edge) 유저는 무시한다는 것이다. 때문에 이를 보완하고자 나온 스케쥴링 방식이 Proportional Fair Scheduling이다.

 

Proportional Fair Scheduling

spectral efficiency와 fairness를 고려해서 만든 스케쥴러이다. spectral efficiency는 채널의 data-rate를 높이는 것이고 fairness는 data-rate가 낮은 하위권(cell-edge) 유저 또한 함께 고려하자는 것이다. 구현하는 방법은 CQI (Channel Quality Information)의 히스토리를 모아 평균적으로 어느 정도의 data-rate를 가지는지 확인하고 평균에 비해 좋은 유저들에게 signal을 주파수를 할당하는 방식이다.

OFDM이란?

OFDM은 주파수(frequency)를 직교성(orthogonality)을 이용해서 각 신호를 구분하는 방식이다. 정식 명칭으로는 직교 주파수 분할 다중 방식이라 한다. 여기서 orthogonality는 사용자가 동시에 주파수를 사용하게 되었을 때, 특정한 유저가 선택하여 주파수를 수신할 수 있도록 하는 기술이다. OFDM의 궁극적인 목표는 기지국에서 보낸 정보를 각각의 단말들이 여러 사람의 신호에 영향을 받지 않고 각 단말들이 필요로 하는 정보만 추출할 수 있도록 하는 것이다. 결국  OFDM은 orthogonality를 이용해서 기지국(DL, Down Link)이 여러 단말에 정보를 한꺼번에 보내지만 각각의 단말(UL, Up Link)은 기지국이 자신에게만 이야기하는 것처럼 느끼게 할 수 있다.

 

OFDM을 사용하는 핵심 이유는 기존에 존재하던 multipath 문제를 해결하기 위함이다. orthogonality가 잘 되지 않는 일반적인 이유는 wave form을 잘 설계하지 않으면 multipath로 인해 orthogonality가 다 깨지게 된다. 이를 해결하기 위한 방법이 OFDM이다. 아래는 5G까지의 신호 구분 방식에 대한 변화이다.

1G → Analog

2G → TDMA

3G → CMDA

4G → OFDM

5G → OFDM

6G → OFDM (예상)

 

2G에서 사용한 TDMA 방식과 3G에서 사용한 CDMA 방식도 multipath fading으로 들어왔을 때 원래 생각했던 orthogonality가 깨져서 이를 극복하기 위해 equalizer라고 하는 advanced receiver를 이용해서 어느정도 보완했다. 하지만 그럼에도 불구하고 불안정하다는 것이 특징이다. 4G에서 OFDM 방식이 도입되면서 sinusodial(사인파)를 이용해서 multipath에도 orthogonality를 유지하고 있다. 5G 또한 OFDM을 사용하며 5G를 도입하기 이전에 중요하게 언급되었던 문제는 orthogonality를 어떻게 보장할 것이냐 였다. 6G 도입이전에도 마찬가지로 OFDM와 관련한 논의가 이루어질 것으로 예상된다. 

 

OFDM의 장점은 TDMA 방식이나 CDMA 방식보다 좋다는 것이다. multipath가 있더라도 orthogonality를 유지할 수 있고 기존에 도입되었던 equalizer 또한 필요가 없다. 반면 가장 많이 언급되는 단점으로는 High Peak-to-Average Power Radio (PAPR) 문제이다. 이는 variation이 큰 amplitude를 가지는 특징이 있고, amplifier 디자인이 어렵고 전력 손실이 많다는 특징도 있다.

 

여담이지만, 1G-5G를 정의하는 대표적인 기준은 Multiple Access 기술이다. 주어진 주파수에 얼마나 많은 사용자들이 사용할 수 있는가를 의미하는 것으로 주파수 공유 방식이 핵심이라 할 수 있다. 앞서 설명했던 바와 같이, 사용자들이 시간을 쪼개거나 코드를 쪼개거나 직교하는 주파수를 사용하자는 형식으로 발전해왔다. 먼저 나왔던 CMDA 방식 구현이 OFDM 보다 구현하기 어렵다. 하지만 더 어려운 CDMA 방법이 먼저 나온 이유는 CDMA로 사업을 하고자 했던 퀄컴이 1985년에 먼저 나왔기 때문이다.

 

About SSH

AWS나 GCP와 같은 클라우드 플랫폼을 사용하다보면 주로 SSH를 통해 접속하고 작업을 진행하게 된다. SSH 사용에 대한 이해는 암호학에서 나오는 공개키와 비밀키의 관계를 이해하는 것이 핵심이다. 본 포스팅에서는 Windows 10과 Windows Server 2016간의 예시를 통해 이러한 SSH의 공개키와 비밀키가 어떻게 사용되는지를 설명하고자한다.

 

 

SSH 설치

Windows Server 2016의 경우 Windows 10과 달리 기본적으로 내장되어 있는 ssh가 없어서 별도의 OpenSSH와 같은 어플리케이션을 설치해주어야 한다. Winodws 10의 경우에도 빌드 버전에 따라 내장된 ssh가 없을 수 있으나 만약 없을 경우 설정 > 앱 > 선택적 기능 > 기능 추가 > OpenSSH 서버를 선택하여 설치하면 된다. OpenSSH에 대한 설치 과정과 환경 설정은 본 포스팅에서는 언급하지 않는다.

 

 

 

키 생성

Windows 10 : Client
Windows Server 2016 : Server

만약 Local인 Windows 10에서 Remote인 Windows Server 2016에 SSH를 접속하고 싶을 경우 접속을 위해 키 페어를 생성해야한다.

키 페어를 생성하여 SSH 통신을 하기 위해서는 실제로 작업을 진행하는 Local에서 공개키/비밀키 쌍을 생성하여 공개키를 Remote에 두어야 한다.

키 페어를 생성하기 위해 아래와 같이 ssh-keygen -t rsa 명령을 사용하면 어떠한 이름의 키 페어를 생성할 것인지를 확인하며 입력 없이 Enter를 누르게되면 default 이름인 id_rsa로 설정된다. (-t 옵션은 type을 의미하고 추가적으로 -C 옵션은 comment, -b 옵션은 bit 수를 지정이 가능. default bit수는 2048임)

 

 

이후 비밀키를 특정 passphrase로 암호화 할 것인지에 대해 확인하며 입력 없이 Enter를 누르게 되면 키 페어가 생성된다.

 

 

생성된 키 페어는 사용자 폴더 하위의 .ssh 폴더에 생성되며 아래와 같이 비밀키인 id_rsa와 공개키인 id_rsa.pub이 생성된다.

 

 

생성된 키 페어 중 공개키인 id_rsa.pub을 remote로 작업할 Windows Server 2016의 .ssh 폴더 하위에 아래와 같이 authorized_keys에 추가해주어야 한다.

 

 

authorized_keys가 없을 경우 파일을 생성하고 id_rsa.pub의 데이터를 동일하게 복붙해주면 된다.

 

SSH 사용

SSH를 사용하기 위해서는 3가지 파일이 필요하다.
Local : id_rsa, config
Remote : authorized_keys

이 중 id_rsa와 authorized_keys의 경우 키 페어 생성을 통해 얻을 수 있는 파일이며, 마지막으로 config 파일이 필요한데 별도로 존재하지 않을 경우 아래와 같이 작성해주어야 한다.

 

 

Host 명의 경우 추후 ssh 명령을 사용할 때 축약하여 사용할 수 있는 것으로 임의 설정이 가능하다. HostName의 경우 접속하고자 하는 remote의 IP이며, User의 경우 remote 환경의 사용자 계정 이름을 의미한다. 여기서는 Windows Server 2016의 사용자 계정인 Administrator라 볼 수 있다.

이후 중요한 것은 config 파일의 사용 권한 설정이다. 일반적으로는 아래와 같이 3개의 보안 주체가 있는 것을 확인할 수 있을 것이다.

 

 

여기에서 모든 보안 주체에 대해 상속을 사용하지 않음을 설정해주고 아래와 같이 모두 제거를 진행하여야 한다.

 

 

이후 아래와 같이 ssh [User]@[IP]와 같은 명령어를 작성할 경우 비밀번호 입력창이 뜨는 것을 확인할 수 있다.

 

 

이후 remote로 접속하는 비밀번호를 입력해주면 아래와 같이 접속이 완료된 것을 확인할 수 있다.

 

 

만약 비밀번호 없이 바로 접속하고 싶다면 아래와 같이 -i 옵션을 통해 비밀키인 id_rsa를 입력해주면 비밀번호 없이 remote로 접속이 가능하다.

 

 

다만 비밀번호 없이 바로 접속하기 위해서는 remote 측에서도 아래와 같이 OpenSSH가 설치된 C:\ProgramData\SSH의 폴더에서 authorized_keys 파일을 추가해주어야 비밀번호 없이 client에서 -i 옵션을 사용하여 접속이 가능하며, authorized_keys 파일은 sshd_config 파일의 맨 아래에서 경로를 설정해줄 수 있다.

 

 

만약 remote에 있는 파일을 실행하고 싶을 경우 아래와 같은 명령을 통해 파이썬 파일을 실행할 수 있다.

 

 

또한 scp 명령을 통해 remote와 local간의 데이터를 주고 받을 수 있는데 remote로부터 local로 데이터를 가져오는 명령은 다음과 같다.

 

 

아래와 같이 파이썬 스크립트를 통해서도 SSH 통신으로 명령을 내리고 결과를 받아오는 것이 가능하다.

 

 

사용한 파이썬 코드는 다음과 같다.

 

# -*- coding:utf-8 -*-
import paramiko as paramiko
from paramiko import AutoAddPolicy

server=""
username="Administrator"
password = ""
cmd_to_execute = "cd C:\\Users\Administrator\\Desktop\\test\\ & python test.py & dir"

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(AutoAddPolicy())

ssh.connect(server, username=username, password=password, sock=None, port=22)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd_to_execute)

err = ''.join(ssh_stderr.readlines())
out = ''.join(ssh_stdout.readlines())
final_output = str(out)+str(err)
print(final_output)

 

Reference

[1] How to Use SSH in Windows: 5 Easy Ways

+ Recent posts