2020년 5월 21일 목요일

5G VoNR (Voice over New Radio)

VoLTE와 같은 새로운 음성 서비스를 계획, 테스트 및 상용화하는데도 몇년이 걸렸으며 5G VoNR도 비슷한 일정을 따를 것으로 생각합니다. 그리고 4G는 5G NR 구축의 기반이므로 VoLTE는 앞으로 5G 음성 솔루션으로 남아있을 것으로 기대합니다.

5G NSA (Non-Standalone)

옵션 3을 사용한 초기 5G 설치에서는 5G EPS에 RAN에 독립형 NR이 포함됩니다. 코어 네트워크 업그레이드없이 4G 음성 (VoLTE) 및 기타 IMS 서비스가 계속 사용됩니다. IMS가 업데이트된 RAN을 인식하지 못합니다. 모든 4G VoLTE 원칙이 유지됩니다.

5G SA (Standalone)

5G 독립형 NR 설치의 경우 SA2는 RNR에서 VoNR (Voice over NR) 및 VoNR->VoLTE 폴백을 음성 솔루션으로 정의했습니다.

옵션 2를 사용하는 5G 시스템 (5GS)은 RAN에 NR 독립형을 포함합니다. 적어도 처음에는 5G 시스템 (5GS)이 전체 네트워크 범위로 배포되지 않습니다. 따라서 5GS는 기존 4G VoLTE 구축에 긴밀하게 연결되어 전체 4G + 5G 네트워크에서 원활한 음성 서비스를 우수한 성능으로 제공해야 합니다.

EPC 폴백 (Fallback)

EPS 폴백은 5GS 초기에 사용됩니다. UE는 호 설정 동안 5G RAN에서 LTE로 폴백한다. 따라서 모든 음성 관련 기능은 5G RAN, 5GC 및 IMS에서 필요하며 NG-RAN을 통한 호출을 완전히 설정하는 데 필요한 기능은 제외됩니다.

Voice over NR (New Radio)은 5G New Radio에서 음성 통화를 할 수 있음을 의미합니다. 이를 위해서는 5G의 NR이 모든 음성 기능을 지원하고 음성 범위에 맞게 조정되어야 합니다. 5GS와 5G EPS 사이의 음성 호의 핸드 오버는 UE에 의해 제공된 측정보고에 기초하여 수행될 수 있습니다.

5G는 음성 솔루션을 위한 3단계

▶ 5G NSA 단계 : 5G 서비스가 시작되면 운영자는 기본적으로 5G NSA 가입자에게 VoLTE 서비스를 활성화해야 합니다.

▶ 5G SA 초기 단계 : 3GPP R-15에 정의된 대로 5G에서 2G / 3G 로의 CS 폴백은 지원되지 않습니다. 이는 음성 통화 설정 단계에서 5G SA 네트워크가 LTE 네트워크로의 음성 폴백을 위해 EPS FB (Evolved Packet System Fallback) 기술을 사용하여 VoLTE를 통한 연결을 완료해야함을 의미합니다.

▶ 5G SA 성숙 단계 : 5G SA에 대한 터미널 지원은 주류가 되어야 하며 기본 구성은 VoNR에 대한 것이어야 합니다 (기본적으로 ON으로 설정). 통화중에 사용자가 5G 서비스 범위를 벗어나면 PSHO (Packet Switched Handover) 기술을 사용하여 세션을 NR에서 LTE로 원활하게 전환하여 VoLTE가 음성 서비스를 인수할 수 있습니다. (이것은 4G의 SRVCC와 같지만 원리는 다릅니다.)


2020년 5월 20일 수요일

파이썬에서 특이한 사칙 연산자 (제곱, 몫, 나머지) 및 문자열 연산

보통의 사칙연산자인 '+', '-', '*', '/'에 대해서는 다들 알고 있을 것이고요.

파이썬에서는 여기에 좀더 편리한 연산자를 기본 제공하고 있는데요.

어떤 수의 제곱수를 구한다거나 나눗셈을 할때 몫과 나머지를 쉽게 구할 수 있는 연산자를 제공합니다.

a = 2
b = 13

print("a의 3제곱은 ", a ** 3)

print("b 나누기 a의 몫은 ", b // a)
print("b 나누기 a의 나머지는 ", b % a)


위의 소스를 실행하면

a의 3제곱은  8
b 나누기 a의 몫은  6
b 나누기 a의 나머지는  1


너무 편한 연산자인거 같습니다.

그리고 재미있는건 문자열 연산인데요. '+'와 '*'를 사용할 수 있습니다.

'+'는 대충 상상하듯이 2개의 문자열을 붙여주는 연산자입니다.

'*'는 어떤 문자열 * 숫자를 하면 그 문자열이 숫자만큼 반복해서 붙여져서 길어집니다.

a = "Hello"
b = "World"

print("문자열 a 더하기 b 연산 : ", a + b)
print("문자열 a 곱하기 2 연산 : ", a * 2)


위의 소스의 실행결과를 보면

문자열 a 더하기 b 연산 :  HelloWorld
문자열 a 곱하기 2 연산 :  HelloHello


파이썬의 문자열 연산자 '*'가 재미있네요.

5G망에서의 Control and User Plane Separation (CUPS)

CUPS (Control and User Plane Separation)는 3GPP Release 14 규격의 Evolved Packet Core (EPC)를 위해 도입되었다.

전세계의 서비스 제공 업체는 비디오, 온라인 게임 및 소셜 미디어 서비스의 소비 증가로 인해 매년 모바일 데이터 증가가 급증하고 있습니다. 5G는 더 빠른 데이터 속도를 지원해야 할뿐만 아니라 고객의 네트워크 대기 시간을 줄여야 합니다. 네트워크 대기 시간은 고객 경험에 직접적인 영향을 미치며 새로운 5G 사용 사례에서는 거의 협상할 수 없는 것입니다.

5G 설계자는 스마트 자동차, AR / VR 및 홀로그램과 같은 새로운 5G 사용 사례의 요구 사항을 충족하기 위해 고객의 네트워크 대기 시간을 줄이는 여러가지 방법을 모색하고 있습니다. 5G 아키텍처는 네트워크 슬라이싱, Massive MIMO, 스몰 셀 및 MEC (Multi-access Edge Computing)와 같은 여러 메커니즘을 통해 네트워크 대기 시간을 줄입니다. 사용자에게 더 가까운 MEC 인프라는 OTT (Over-The-Top) 및 IOT (Internet of Things) 서비스를 위한 컴퓨팅 인프라를 제공함으로써 네트워크 대기 시간을 줄이는데 중요한 역할을합니다. CUPS는 5G망을 위한 또 다른 대안으로 네트워크 대기 시간을 줄이는데 도움이 됩니다.

▲ 대량 데이터 지원 : 최근 몇년 동안 이동 통신 사업자의 사용자 데이터 트래픽이 매년 두배로 증가했으며, 이러한 트래픽 증가의 이유는 스마트 장치의 사용, 비디오 및 기타 응용 프로그램의 확산과 셀룰러 네트워크를 사용하는 USB 모뎀 동글 및 개인 핫스팟의 사용이 급격히 증가하고 있기 때문입니다.

▲ RCS (Rich Communication Services) : 전세계적으로 모바일 단말기의 보급이 증가하고 있으며 콘텐츠가 풍부한 멀티미디어 서비스 (예 : OTT 비디오 스트리밍 서비스, P2P 비디오, 콘텐츠 공유)에 대한 관심이 높아짐에 따라 데이터 트래픽이 빠르게 증가하는 추세입니다.

▲ 고객 경험 및 낮은 대기 시간 : 사용자 경험 개선에 대한 강력한 소비자 요구가 있으며, 대기 시간이 단축되는 것은 중요한 KPI중 하나입니다.

CUPS가 지원하는 다중 배치 옵션은 서비스 제공 업체에게 뛰어난 유연성을 제공하고 고객 서비스의 대역폭 및 대기 시간 요구 사항을 충족시키기 위해 하나이상의 위치에 User Plane 기능을 배치합니다. 예를 들어, 서비스 제공 업체는 수백명의 학생들이 비디오를 보고 온라인 게임을 하는 대학 근처에 더많은 User Plane 기능 인스턴스를 배치해야 할 수 있습니다. 그러나 상점가에는 상점과 쇼핑 거래에 대한 정보를 확인하기 위해 인터넷을 탐색하는 수천 명의 모바일 사용자가 있습니다. 이러한 위치에서 Control Plane은 수천 개의 고객 세션을 지원하도록 확장되어야합니다. 따라서 서비스 제공 업체는 이러한 지역에 1000명의 모바일 사용자를 지원하기 위해 더 많은 Control Plane 기능을 배치해야 할 수 있습니다.

5G Core에는 4G EPC에서 SGW-U 및 PGW-U가 수행하는 모든 User Plane 기능을 처리하는 고유한 UPF (User Plane Function)가 있습니다. 5G의 제어 기능은 ASF (Authentication Server Function), UMD (User Data Management), PCF (Policy and Charging Function) 및 SMF (Session Management Function)와 같은 다양한 네트워크 기능에 분산되어 있습니다. 이는 서비스 제공 업체가 네트워크 기능을 결정할 수있는 유연성을 제공합니다.

5G는 클라우드 네이티브 네트워크 서비스를 지원하기 때문에 공급 업체와 서비스 제공 업체는 5G 네트워크 아키텍처 (4G 네트워크와 비교할때)에서 CUPS를 구현하기가 쉬워집니다.

CUPS 아키텍처 장점은 아래와 같습니다.

▲ 애플리케이션 서비스 대기 시간 감소 (예 : Control Plane 노드의 수를 증가시키지 않으면서 의도된 UE 사용 유형에 대해 RAN에 더 가깝거나 더 적합한 User Plane 노드를 선택
▲ 네트워크에서 SGW-C, PGW-C 및 TDF-C의 수를 변경하지 않고 User Plane 노드를 추가할 수 있으므로 데이터 트래픽 증가 지원
▲ EPC 노드의 Control Plane 및 User Plane 리소스를 독립적으로 찾고 확장
▲ Control Plane과 User Plane 기능의 독립적 진화.
▲ 소프트웨어 정의 네트워킹을 활성화하여 User Plane 데이터를 보다 효율적으로 제공



2020년 5월 19일 화요일

파이썬 소스코드 작성시 주의점 - 코딩룰

파이썬 소스코드를 작성시 주의할 점이 있는데요.

보통의 C 언어나 Java 언어에서도 대부분이 코드 실행문이 한줄로 되어 있죠.

파이썬에서도 마찬가지이고요.

그러나 간혹 코드 실행문이 길다보면 한줄에 코드를 다 작성이 안될때가 있죠.

if ((a == 0) && (b == 1) && (c == 2) && (d == 3)
   (e == 4))
   printf ("%d %d %d %d %e\n", a, b, c, d, e);


C 언어에서는 위의 코드와 같이 여러 줄에 걸쳐 코드를 작성할 수가 있죠.

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1


위의 코드가 하나의 예입니다.

위의 코드에서 '#'로 시작되는 부분은 Comment입니다.

C 언어에서 Comment를 시작할때 '/*'로 시작하고 Comment를 끝나는 부분에 '*/'를 붙여야 하죠.

그리고 괄호로 묶이는 코드의 경우에는 '\'를 붙이지 않아도 여러 줄에 걸쳐 하나의 코드로 인식이 되는 경우가 있는데, 아래의 코드가 그 예입니다.

month_names = ['Januari', 'Februari', 'Maart',      # These are the
               'April',   'Mei',      'Juni',       # Dutch names
               'Juli',    'Augustus', 'September',  # for the months
               'Oktober', 'November', 'December']   # of the year


그다음 중요한 점은 들여쓰기인데요.

다른 언어들도 다른 프로그래머들이 분석하고 읽어보기 쉽게 하기위해 들여쓰기를 강력 권고하고 있죠.

하지만 굳이 들여쓰기를 하지 않아도 컴파일후 실행을 시키는데는 별 문제가 없죠.

파이썬에서는 들여쓰기에 따라 전혀 다른 결과를 보여주는데, 아래의 2가지 코드가 그 예입니다.

a = 2

for b in range(2,5):
    print (a," X ",b," = ",a*b)
    print ("----------")




a = 2

for b in range(2,5):
    print (a," X ",b," = ",a*b)
print ("----------")




들여쓰기에 따라 마지막 부분의 print ("----------")의 실행되는 위치가 다르죠.

그래서 파이썬에서 반드시 들여쓰기 규칙을 잘 체크해야 합니다.

DNS (Domain Name Server)와 DNS over HTTPS (DoH)

DNS (Domain Name Server) 정의 :

DNS는 도메인 이름 서버 (Domain Name Server)를 나타내며 컴퓨터 네트워크가 다양한 정보를 각 웹 도메인에 연결하도록 도와줍니다. 간단히 말해서 모든 도메인 네임 서버는 기본적으로 인터넷 주소록입니다.

그러나 사람들은 도메인 이름을 쉽게 기억할 수 있지만 컴퓨터를 이해하려면 숫자가 필요합니다. 그렇기 때문에 DNS 시스템은 각 도메인 이름을 IP 번호로 '번역'하고 이 정보를 다른 세부 정보와 함께 할당합니다.

DNS 트래픽 필터링 솔루션은 기업과 소비자 모두에게 중요한 보안 계층입니다.

DNS 및 DNS 필터링을 정의했으므로 사이버 보안 뉴스의 새로운 전문 용어인 DNS over HTTPS (DoH)에 대해서는 아래에 설명되어 있습니다.

DNS over HTTPS (DoH) 정의 :

IETF가 발표한 새로운 표준은 HTTPS 연결 (보다 안전한 HTTP 형식)을 통해 DNS 프로토콜을 사용할 수 있도록 합니다.

DNS over HTTPS (DoH로 약칭)는 HTTPS 연결을 통해 암호화된 방식으로 도메인 이름 서버 정보를 통신하는 인터넷 보안 프로토콜입니다.

HTTPS를 사용하여 사이트를 방문하더라도 DNS 쿼리는 암호화되지 않은 연결을 통해 전송됩니다. 즉, https://www.naver.com을 탐색하더라도 네트워크에서 패킷을 수신하는 모든 사람은 사용자가 www.naver.com을 방문하려고 한다는 것을 알고 있습니다.

암호화되지 않은 DNS의 두번째 문제는 Man-In-The-Middle이 DNS 응답을 변경하여 의심없는 방문자를 피싱, 맬웨어 또는 감시 사이트로 쉽게 라우팅할 수 있다는 것입니다. DNSSEC는 DNS 응답의 유효성을 검사하는 메커니즘을 제공하여 이 문제를 해결하지만 한자리 수의 도메인만 DNSSEC를 사용합니다.

이 문제를 해결하기 위해 HTTPS 엔드 포인트를 통해 DNS 확인을 제공합니다. 모바일 애플리케이션, 브라우저, 운영 체제, IoT 디바이스 또는 라우터를 빌드하는 경우 사용자의 보안 및 개인 정보 보호를 위해 일반 텍스트를 통해 DNS 쿼리를 보내는 대신 DNS over HTTPS 엔드 포인트를 사용하도록 사용자를 선택할 수 있습니다.

2020년 5월 17일 일요일

Man in the middle (MITM) 공격

MitM (Man in the Middle) 공격은 가해자가 사용자와 응용 프로그램간의 대화에서 자신을 도청하거나 당사자중 하나를 가장하여 일반적인 정보 교환처럼 보이게 하는 일반적인 용어입니다.

공격의 목표는 로그인 자격 증명, 계정 세부 정보 및 신용 카드 번호와 같은 개인 정보를 도용하는 것입니다. 대상은 일반적으로 금융 애플리케이션, SaaS 비즈니스, 전자 상거래 사이트 및 로그인이 필요한 기타 웹사이트 사용자입니다.

공격중에 얻은 정보는 신원 도용, 승인되지 않은 자금 이체 또는 불법적인 비밀번호 변경을 포함하여 많은 목적으로 사용될 수 있습니다.

또한 APT (Advanced Persistent Threat) 공격의 침투 단계에서 보안 경계 내부에서 발판을 확보하는데 사용할 수 있습니다.

대체로 MitM 공격은 우체부가 은행 계좌 명세서를 개설하고 계좌 정보를 기록한 다음 봉투를 다시 봉인하여 문으로 전달하는 것과 같습니다.


man-in-the-middle attack

MitM 공격 진행

성공적인 MitM 실행에는 Interception와 Decryption이라는 두가지 단계가 있습니다.

Interception

첫번째 단계는 공격자가 의도한 대상에 도달하기 전에 공격자의 네트워크를 통해 사용자 트래픽을 가로챕니다.

가장 일반적이고 간단한 방법은 공격자가 공개적으로 악의적인 WiFi 핫스팟을 무료로 제공하는 수동 공격입니다. 일반적으로 해당 위치에 해당하는 방식으로 이름이 지정되며 비밀번호로 보호되지 않습니다. 피해자가 그러한 핫스팟에 연결되면 공격자는 온라인 데이터 교환에 대한 완전한 가시성을 얻습니다.

보다 적극적으로 차단에 접근하려는 공격자는 다음 공격중 하나를 시작할 수 있습니다.

▲ IP Spoofing은 IP 주소의 패킷 헤더를 변경하여 공격자가 자신을 응용프로그램으로 위장하는 것을 포함합니다. 결과적으로 응용프로그램에 연결된 URL에 액세스하려는 사용자는 공격자의 웹사이트로 전송됩니다.

▲ ARP Spoofing은 가짜 ARP 메시지를 사용하여 공격자의 MAC 주소를 근거리 통신망에 있는 합법적인 사용자의 IP 주소와 연결하는 프로세스입니다. 결과적으로 사용자가 호스트 IP 주소로 보낸 데이터는 대신 공격자에게 전송됩니다.

▲ DNS Cache Poisoning이라고도 하는 DNS Spoofing에는 DNS 서버에 침투하여 웹사이트의 주소 레코드를 변경하는 작업이 포함됩니다. 결과적으로 사이트에 액세스하려는 사용자는 변경된 DNS 레코드를 통해 공격자의 사이트로 전송됩니다.

Decryption

Interception후 사용자 또는 응용프로그램에 알리지 않고 양방향 SSL 트래픽을 해독해야 합니다. 이를 달성하기위한 여러가지 방법이 있습니다.

▲ HTTPS Spoofing은 보안 사이트에 대한 초기 연결 요청이 이루어지면 피해자의 브라우저로 가짜 인증서를 보냅니다. 브라우저는 손상된 응용프로그램과 관련된 디지털 지문을 가지고 있으며 브라우저는 기존의 신뢰할 수 있는 사이트 목록에 따라 확인합니다. 그런 다음 공격자는 응용프로그램으로 전달되기 전에 피해자가 입력한 모든 데이터에 액세스할 수 있습니다.

▲ SSL BEAST (SSL / TLS에 대한 브라우저 악용)는 SSL의 TLS 버전 1.0 취약점을 대상으로 합니다. 여기서 피해자의 컴퓨터는 웹 응용프로그램에서 보낸 암호화된 쿠키를 가로채는 악성 JavaScript에 감염되었습니다. 그런 다음 쿠키와 인증 토큰을 해독하기 위해 앱의 암호화 블록 체인 (CBC)을 가로채도록 됩니다.

▲ SSL 하이재킹은 TCP 핸드 셰이크 중에 공격자가 위조된 인증키를 사용자와 응용프로그램 모두에 전달할때 발생합니다. 이것은 실제로 중간에 있는 사람이 전체 세션을 제어할때 안전한 연결로 보이는 것을 설정합니다.

▲ SSL Stripping은 애플리케이션에서 사용자에게 전송된 TLS 인증을 차단하여 HTTPS 연결을 HTTP로 다운그레이드합니다. 공격자는 응용프로그램과의 보안 세션을 유지하면서 응용프로그램 사이트의 암호화되지 않은 버전을 사용자에게 보냅니다. 한편, 사용자의 전체 세션은 공격자가 볼 수 있습니다.

2020년 5월 16일 토요일

for문 대신 while문을 사용한 구구단 출력하기

for문과 비슷한 while문을 사용해서 구구단을 출력할 수 있습니다.

같은 반복문이지만 사용법은 조금 다른데요.

우선 아래 소스코드를 보면

a = 2
b = 2

while (b<10):
    print (a," X ",b," = ",a*b)
    b = b + 1



for문과 달리 b의 값을 while문 안에서 1씩 증가시켜 주어야 합니다.

while문의 조건에서 b가 9가 될때가지 아래 실행 코드가 수행되고 b가 10이 되면 조건이 False가 되어 while문을 빠져 나오게 됩니다.

실형 결과는 아래와 같이 됩니다.