본문 바로가기

혼자 공부하는 네트워크

[혼공네트] Ch7. 네트워크 심화


Ch.06-1 확인문제 1

Acknowledgment number(raw)는 Sequence Number raw에 1을 더한 3588415413이다.


 

7-1 안정성을 위한 기술

안정성을 수치로 표현하는 가용성이라는 용어의 개념을 학습하고, 안정성을 높이기 위한 방법으로 물리적인 장비나 프로그램 등을 여러 개 두는 기술인 이중화, 다중화, 그리고 트래픽을 고르게 분산하는 기술인 로드밸런싱에 대해 알아보자.

가용성

안정성은 특정 기능을 언제든 균일한 성능으로 수행할 수 있는 특성이이다.안정성의 정도를 나타내는 용어로 가용성, 고가용성이라는 용어가 있다. 가용성이란 컴퓨터 시스템이 특정 기능을 실제로 수행할 수 있는 시간의 비율을 의미한다. 다시 말해 가용성은 전체 사용 시간 중에서 정상적인 사용시간을 의미한다. 이를 수식으로 나타내면 다음과 같다. 정상적인 사용 시간을 업타임, 정상적인 사용이 불가능한 시간을 다운타임으로 정의한다. 

수식의 결과값이 크다는 것은 전체 사용 시간 중에서 대부분 사용 가능하다는 말과 같다.이를 가용성이 높다라고 표현하며 가용성이 높은 성질을 고가용성이라고 한다. 고가용성은 영어로 High Availability이고 앞글자를 따서 HA라고 불여서 부른다. 일반적으로 안정적이라고 평가받는 시스쳄은 99.999%이상을 목표로 한다. 99.999%라는 수치는 9가 다섯개라는 의미에서 '파이브 나인스'라고도 한다. 이 수치를 달성하면 시스템이 정상적으로 운영되지 않는 다운타임이 대략 1년에 5.26분, 1개월로 하면 26.3초가 된다. 

 

가용성을 높이려면 다운타임을 낮추어야 한다. 다운타임의 발생원인을 모두 찾아 원천적으로 차단하는 것은 현실적으로 어렵다. 따라서 핵심은 문제가 발생하지 않도록 하는 것이 아니라 문제가 발생하더라도 계속 기능할 수 있도록 설계하는 것이다. 문제가 발생하더라도 기능할 수 있는 능력을 결함 감내라 부른다. 

 

이중화

이중화란 말 그대로 무언가를 이중으로 두는 기술이다. 이는 결감내하여 가용성을 높이기 위한 가장 기본적이고 대표적인 방법으로 쉽게 말해서 예비(백업)를 마련하는 방법이다. 이중화할 수 있는 대상은 다양하다. 서버 컴퓨터, 네트워크 인터페이스, 스위치와 같은 물리적 장비 뿐만아니라 데이터베이스, 웹 서버 프로그래밍 등도 이중화할 수 있는 대상이다. 그리고 이중화할 수 있는 대상들은 대부분 문제가 발생할 결우 시스템 전체가 중단될 수 있는 대상이라는 공통점이 있다. 이를 단일 장애점(SPOF)이라고 부른다. SPOF는 최대한 없애는 것이 좋다. 즉, 가용성을 높이기 위해서는 SPOF를 이중화하는 것이 좋다. 

 

이중화 구성에는 크게 액티브/스탠바이와 액티브/액비트가 있다. 액티브는 가동 상태를 의미하며, 스탠바이는 액티브의 백업으로서 대기하는 상태를 의미한다. 따라서 액티브/스탠바이는 한 시스템은 가동하고, 다른 시스템은 백업 용도로 대기 상태로 두는 이중화 구성 방식이고, 액티브/액티브는 두 시스템 모두를 가동 상태로 두는 구성 방식이다. 

액티브/스탠바이로 구성하면 액티브 상태인 시스템에 문제가 발생할 경우 스탠바이 시스템이 자동으로 액티브 시스템을 대신하며 동작한다. 이는 안전한 구성방식이지만, 하나의 장비를 사용할 떄에 비해 성능상의 큰 변화는 기대하기 어렵다. 액티브/액티브는 두 시스템 모두를 가동 상태로 두는 이중화 구성 방식이다. 이렇게 구성하면 부하를 분산시킬 수 있고, 두 시스템이 함께 가동되므로 성능상의 이점도 있다. 다만 한 시스템에 문제가 발생하면 순간적으로 다른 시스템에 부사가 급증할 수 있으며, 이로 인해 추가적인 문제가 발생할 수 있다. 

 

이중화 기술은 더욱 확장될 수 있다. 더욱 일반적인 개념으로 무언가를 여러 개 두는 기술도 있는데, 이를 다중화라고 한다. 이중화/다중화의 사례로 티밍(teaming)과 본딩(bonding)이 있다. 전자는 주로 윈도우, 후자는 주로 리눅스에서 사용되는 용어이다. 이 두 기술은 여러 개의 네트워크 인터페이스를 이중화/다중화하여 마치 더 뛰어나고 안정적인 성능을 보유한 하나의 인터페이스처럼 보이게 하는 기술이다. 

 

로드 밸런싱

트래픽은 서버의 가용성에 큰 영향을 끼치는 요소이다. 트래픽은 사전적 정의는 주어진 시점에 네트워크를 경유한 데이터의 양이다. 일반적으로 트래픽 측정은 노트에서 이루어지므로 일반적으로 표현하자면 주어진 시점에 특정 노드를 경유한 패킷의 양을 트래픽이라고 볼 수 있다. 

과도한 트래픽은 서버의 가용성을 떨어뜨린다. 이는 서버를 다중화해도 마찬가지다. 특정 서버에만 트래픽이 몰릴 경우 가용성이 떨어질 수 있다. 따라서 서버를 다중화했더라도 트래픽을 고르게 분산해야 가용성이 높아진다. 트래픽의 고른 분배를 위해 사용되는 기술이 로드밸런싱이다. 로드밸런싱은 부하를 의미하는 단어인 '로드'와 균형 유지를 나타내는 단어니 '밸런싱'이 합쳐진 단어이다. 로드 밸런싱은 로드 밸런서에 의해 수행된다. 로드 밸런서는 L4 스위치,  L7 스위치라 불리는 네트워크 장비로도 수행할 수 있지만, 로드 밸런싱 기능을 제공하는 소프트웨어를 설치하면 일반 호스트도 로드 밸런서로 사용할 수 있다. 

 

로드 밸런서는 일반적으로 이중화나 다중화된 서버와 클라이언트 사이에 위치한다. 클라이언트는 로드 밸런서에 요청을 보개고, 로드 배런서는 해당 요청을 각 서버에 균등히 분배한다. 이때 부하가 균등하게 분산되도록 부하 대상을 선택하는 방법을 '로드 밸런싱 알고리즘'이라 부른다. 대표적인 알고리즘으로는 단순히 서버를 돌아가며 부하를 전달하는 라운드 로빈 알고리즘이 있고, 연결이 적은 서버부터 우선적으로 부하를 전달하는 최소 연결 알고리즘도 있다. 단순히 무작위로 고르기도 하고, 해시라는 자료 구조를 이용하기도 하며 응답 시간이 가장 짧은 서버를 선택하기도 한다.

라운드 로빈 알고리즘이나 최소 연결 알고리즘에서는 서버마다 가중치를 부여할 수도 있다. 이는 알고리즘에 따라 동작하되, 가중치가 높은 서버가 더 많이 선택되어 더 많은 부하를 받도록하는 것이다. 이렇게 가중치가 부여되 알고리즘은 각각 가중치 라운드 로빈 알고리즘, 가중치 최소 연결 알고리즘이라 한다. 

 

 

7-2 안전성을 위한 기술

암호화는 원문 데이터를 알아볼수 없는 형태로 변경하는 것을 의미한다. 반대로 복호화란 암호화된 데이터를 원문데이터로 되돌리는 과정을 말한다. 암호화와 복호화는 비단 안전한 데이터 송수신뿐만 아니라 인증서 기반의 검증도 가능하게 한다. 

암호화 인증서

대칭 키 암호화 방식과 공개 키 암호화 방식

키는 언뜻 보면 무작위해 보이는 문자열처럼 생겼다. 키와 원문 데이터에 수학적 연산 과정을 거치면 암호문이 생성된다. 이 수학적 연산과저을 '암호화 알고리즘'이라 부른다. 그리고 암호문을 수신자 측에서 복호화하면 원문 메시지를 얻을 수 있다. 복호화하지 않은 암호문은 제3자가 몰래 본다해도 그 의미를 알 수 없다. 

 

주고받는 데이터를 암호화하고 복호화하는 방법에는 대칭 키 암호화와 비대칭 키 암호화하는 두 가지 방식이 있다.비대칭 키 암호화는 공개키 암호화라고도 부른다.

 

대칭 키 암호화 방식은 암호화와 복호화에 동일한 키를 사용한다. 두 호스트가 메세지를 같은 키로 암호화 및 복호화를 수행하고 있다. 하지만 대칭 키 암호화 방식에는 문제가 있다. 바로 상대방에게 안전하게 키를 전달하지 어렵다는 점이다. 대칭 키 암호화 방식은 암호화와 복호화에 동일한 키를 사용하므로 키가 유출되면 큰 문제가 발생한다. 그렇기에 상대방에게 키를 안전하게 전달하는 방법이 필요하다. 그런데 생각해보면 암호화를 사용하는 목적 자체가 '제3자의 도청과 변조를 피해 상대방에게 안전하게 정보를 전달하는 것'이다. 만약 상대방에게 키를 안전하게 전달할 수 있는 방법이 있다면 그 방법으로 메세지를 주고받으면 되지 굳이 암호화를 할 필요가 없다. 

 

그래서 등장한 것이 공개 키 암호화 방식이다. 비대칭 키 암호화 방식이라고도 불린다. 공개 키 암호화 방식에서는 암호화를 위한 키와 복호화를 위한 키가 다르다. 한 키로 암호화했다면 다른 키로 복호화할 수 있다. 이 한쌍의 키를 각각 공개키와 개인 키라 부른다.참고로 한 키만으로는 다른 키를 유추할 수 없다. 공개 키로 암호화하고 개인 키로 복호화할 수 있다면 공개 키는 이름처럼 누구에게나 공개해도 무방하다. 암호화만을 위해 사용되었기 때문에, 공개 키를 안다고 해서 원문 메세지를 유추할 수 없다. 반면 개인 키는 절대로 유출되지 않도록 보안을 유지해야한다.

만약 A가 B에게 특정 문자열을 안전하게 전송하고자 한다면 다음과 같은 과정을 거친다. 일단 A가 B의 공개키를 요청하고 B는 A에게 공개 키를 전달한다. 공개키는 누구에게나 공개해도 무방하므로 그냥 전송해도 된다. A는 전달받은 B의 공개 키로 메세지를 암호화한 뒤 그 암호문을 B에게 전송한다. 암호문이기에 제3자가 메세지를 보아도 이를 이해할 수 없다. 반면 B는 개인 키가 있으므로 암호를 복호화해서 문자열을 확인할 수 있다. 

 

대칭 키 암호화 방식과 공개 키 암호화 방식은 각각 장단점이 있다. 대칭 키 암호화는 키를 안전하게 전송하기는 어렵지만, 적은 부하 덕분에 암호화 및 복호화를 빠르게 수행할 수 있다. 반면 공개 키 암호화는 암호화 및 복호화에 시간과 부하가 상대적으로 많이 들지만 키를 안전하게 공유할 수 있다. 이러한 장단점을 고려해 대칭 키 암호화 방식과 공개 키 암호화 방식을 함꼐 사용하는 경우가 많다. 예를 들어 대칭 키를 상대에게 안전하게 전달하기 위해 공개 키로 대칭 키를 암호화하고, 개인 키로 암호화된 대칭 키를 복호화할 수 있다. 이렇게 하면 대칭 키를 안전하게 공유함과 동시에 공유한 대칭 키를 이용해 빠르게 암호화와 복호화를 수행할 수 있다. 이러한 방식으로 활용되는 대칭 키를 세션 키라고 부른다.

 

인증서와 디지털 서명

인증서와 디지털 서명의 원리에 대해 알아보자. 인증서는 말그대로 무엇인가를 증명하기 위한 문서를 의미한다. 네트워크에서 사용되는 인증서라는 용어는 일반적으로 공개 키 인증서를 일컫는다. 공개 키 인증서란 공개 키와 공개 키의 유효성을 입증하기 위한 전자 문서이다.

 

예를 들어 컴퓨터가 웹서버가 공개 키 암호화 방식으로 통신한다고 가정하자. 컴퓨터는 웹 서버로부터 공개 키를 전달받게 된다. 이때 이 공개 키가 정말 신뢰할 수 있는지, 전송 도중에 조작되지 않았는지 확신하기 어렵다. 그래서 웹 서버는 공개 키 뿐만아니라 누가 생성했는지, 조작되지 않았는지, 유효기간은 언제까지인지 등의 내용을 포함하는 인증서를 전송한다. 

이러한 인증서는 인증 기관이라는 제3의 기관에서 발급한다. 인증 기관은 인증서의 발급, 검증, 저장과 같은 역할을 수행할 수 있는 공인 기관이다. 일반적으로는 CA라고 줄여 부른다.

 

CA가 발급한 인증서에는 이 공개키 인증서를 보증한다는 서명값이 있다. 클라이언트는 이 서명 값을 바탕으로 인증서를 검증할 수 있다. 서명값은 인증서 내용에 대한 해시값을 CA의 개인 키로 암호화하는 방식으로 만들어진다. 

웹 브라우저를 통해 서버로부터 서명 값이 붙은 인증서를 전달받았다고 가정해보자. 인증서 검증을 위해 가장 먼저 할 일은 서명 값과 인증서를 분리하는 것이다. 서명값은 인증서 내용에 대한 해시값을 CA의 개인키로 암호화한 것이다. CA의 공개 키는 공개되어 있기에, 서명값은 CA의 공개 키로 복호화할 수 있다. 서명값은 CA의 공개 키로 복호화하면 인증서 내용에 대한 해시 값을 얻을 수 있다. 다음으로 인증서 데이터에 대한 해시값을 직접 구한 뒤, 이를 복호화한 값과 비교한다. 

만약 값이 일치한다면 전달받은 인증서는 확실히 CA의 개인 키로 만들어졌다고 보장할 수 있다. 개인 키로 암호화된 메세지를 공개 키로 복호화함으로써 신원을 증명하는 이러한 절차를 디지털 서명이라 부른다.

 

HTTPS: SSL과 TLS

대칭 키 암호화와 공개 키 암호화 방식 드리고 공개 키 인증서를 기반으로 동작하는 프로토콜로 SSL과 TLS가 있다. SSL과 TLS는 인증과 암호화를 수행하는 프로토콜이며, TLS는 SSL을 계층한 프로토콜이다. SSL과 TLS의 작동과정은 사용하는 암호 알고리즘과 버전에 따라 세부적인 차이가 있을 수 있으나 큰 틀에서 보면 유사하다. 

SSL과 TLS를 사용하는 대표적인 프로토콜은 HTTPS이다. HTTPS는 HTTP 메세지의 안전한 송수신을 위해  개발된 프로토콜이다.

 

오늘날 주로 사용되는 TLS 1.3을 기반으로 HTTPS가 어떻게 동작하는지 간략하게 알아보자. HTTPS 메세지는 크게 다음과 같은 단계를 거쳐 송수신된다.

1. TCP 쓰리 웨이 핸드셰이크

2. TLS 핸드셰이크

3. 암호화된 메세지 송수신

 

1번 단계는 TCP 연결을 수립하기 위해 두 호스트가 각각 SYN, SYN+ACK, ACK 플래그가 설정된 TCP 세그먼트를 주고받는 것이 쓰리 웨이 핸드셰이크이다. 

 

 

2번 단계는 TLS 핸드셰이크이다. 클라이언트가 처음으로 서버에게 요청을 보내고 인증서를 응답받는 상황을 가정하자. TLS 핸드셰이크의 핵심은 두 가지다. 하나는 암호화 통신을 위한 키를 교환한다는 점이고, 또 하나는 인증서 송수신과 검증이 이루어진다는 점이다.

가장 먼저 클라이언트는 ClientHello 메세지를 보낸다. 이 메세지는 암호화된 통신을 위해 서로 맞춰 봐야 할 정보들을 제시하는 메세지이다. 지원되는 TLS 버전, 사용 가능한 암호화 방식과 해시 함수, 키를 만들기 위해 사용할 클라이언트의 난수 등이 포함되어 있다. 이때 사용 가능한 암호화 방식과 해시 함수를 담은 정보를 암호 스위트라고 한다. 

서버는 ClientHello 메세지에 대한 응답으로 ServerHello 메세지를 전송한다. ClientHello 메세지가 암호화 이전에 맞춰 봐야할 정보들을 제시하는 메세지라면, ServerHello 메시지는 제시된 정보들을 선택하는 메세지이다. 따라서 이 메세지에는 선택된 TLS 버전, 암호 스위트 등의 정보, 키를 만들기 위해 사용할 서버의 난수들이 포함되어 있다. ClientHello 메세지와 ServerHello 메세지를 주고받으면 암호화된 통신을 위해 사전 협의해야할 정보들이 결정된다. 이렇게 결정된 정보들을 토대로 서버와 클라이언트는 암호화에 사용할 키를 만들어낼 수 있다. 이것이 TLS 핸드셰이크에서의 키 교환이다. 이 단계 이후부터 클라이언트와 서버는 키로 암호화된 암호문을 주고받을 수 있게 된다. 

또 서버는 Certificate 메세지와 CertificateVerify 메세지를 전송한다. 이는 각각 인증서와 검증을 위한 디지털 서명을 의미한다. 클라이언트는 이 메세지를 토대로 서버의 공개 키를 검증하게 된다. 이어서 서버와 클라이언트는 TLS 핸드셰이크의 마지막을 의미하는 Finished 메세지를 주고받는다.

이제 TLS 핸드셰이크를 통해 얻어낸 키를 기반으로 암호화된 데이터를 주고받으면 된다. 

 


Ch.07-2 확인문제 2

ServerHello: 제시된 정보들을 선택하는 메세지이다. 선택된 TLS 버전, 암호 스위트 등의 정보, 키를 만들기 위해 사용할 서버의 난수들이 포함되어 있다.


 

7-3 무선 네트워크

유선 네트워크와 관련된 연결 매체와 표준, 네트워크 장비가 있듯이 무선 네트워크에도 전파라는 연결 매체, 802.11이라는 표준, 그에 기반한 Wi-Fi라는 기술, AP라는 장비가 있다.

 

전파와 전파수

무선 통신의 기반이 되는 전파는 약 3krHz부터 3THz 사이의 진동 수를 갖는 전자기파이다. 쉽게 말하면 눈에 보이지 않는 전자기파의 일종 정도로 정의할 수 있다. 무선 통신기기들이 주고받는 정보는 눈에 보이지 않는 전파의 형태를 띄고 있는다. 많은 기기가 전파를 통해 통신하다면 서로 다은 전파 신호가 같은 공간에 혼재할 수도 있다. 이런 상황을 위해 서로 다른 전파 신호를 구분할 수 있는 방법으로 '주파수 대역'이 미리 정해져 있다. 어떤 주파수 대역을 어떤 용도로 사용할지는 나라마다 다르다. 방송용 주파수, 위성 통신용 주파수, 항공/해양 통신을 위한 주파수 등으로 나뉘어져 있다.

 

와이파이와 802.11

무선 통신 네트워크에서 사용되는 주파수를 알아보자. 오늘날 LAN 환경에서의 무선 통신은 IEEE 802.11로 표준화되어 있고, 802.11b, 802.11g처럼 802.11 뒤의 알파벳으로 다양한 규격을 표현한다. IEEE 802.11 표준은 대부분 2.4GHz, 5GHz 대역을 사용한다. 무선 통신 규격인 IEEE 82.11 버전에 따라 사용되는 주파수뿐만 아니라 전송 속도, 대역폭, 전송 가능한 거리, 변조 방식 등 많은 것이 달라진다. 

 

오늘날 와이파이라는 용어는 IEEE 802.11 표준을 따르는 무선 LAN 기술을 가리키는 말로 많이 사용되지만 본래는 와이파이 얼라이언스라는 비영리단체의 트레이드마크 이름이다. 와이파이는 '와이파이 4'. '와이파이 5' 등으로  구분할 수 있는 세대가 있고, 각 세대는 각기 다른 IEEE 802.11 표준 규격을 준수한다. 이러한 이유로 와이파이는 일종의 인증 마크 역할을 한다. 특정 제품에 특정 와이파이 인증 마크가 붙어 있을 경우, 해당 제품이 특정 IEEE 802.11 규격을 지켰음을 알 수 있고, 다른 제품과의 호환성도 알 수 있기 때문이다. 

 

같은 주파수 대역을 사용하는 네트워크라 할지라도 별개의 무선 네트워크들이 존재할 수 있다. 이러한 경우 같은 대역을 사용할지라도 별개의 무선 네트워크는 서로의 신호에 간섭받으면 안된다. 그래서 주파수 대역은 채널이라 불리는 하위 주파수 대역으로 또 한번 세분화되고, 해당 채널 대역에서 통신이 이루어진다. 채널에는 번호가 할당되어 있다. 동이한 2.4 GHz, 5GHz 대역의 네트워크를 사용할지라도 세부적인 주파수는 채널에 따라 달라진다.

 

채널은 일반적으로 자동으로 설정되지만, 수동으로 설정할 수도 있다. 그러나 같은 공간에서 같은 대역의 서로 다른 네트워크를 구성하거나 이용할 때는 가급적 간섭을 일으키지 않는 채널을 이용하는 것이 좋다. 

 

AP와 서비스 셋

무선 네트워크를 생성하기 위해서는 무선 네트워크 액세스 포인트(AP)라는 네트워크 장비가 필요하다. AP는 무선 통신 기기들을 연결하여 무선 네트워크를 구성하는 장치이다. 가정에 무선 공유기가 있다면, 그것이 AP역할을 수행하는 장치라 볼 수 있다. 일반적으로 AP에는 우선 연결 매체를 연결할 수 있는 지점이 함께 제공되어 유선 네트워크와 무선 네트워크의 연결을 담당하는 역할도 수행할 수 있다.

 

무선 LAN의 기기들은 AP를 경유해 인터넷에 접속하거나 서로 메시지를 주고받을 수 있다. 달리 말해 AP는 무선 LAN에서 통신을 중개하는 역할을 수행한다. 이렇게 AP를 경유하여 통신이 이루어지는 무선 네트워크 통신 방식을 인프라스트럭처 모드라 한다.

 

AP를 중심으로 연결된 여러 장치가 무선 네트워크를 형성할 때, 무선 네트워크를 이루는 AP와 여러 장치들의 집합을 서비스 셋이라 부른다. 같은 서비스 셋에 속한 장치들은 같은 무선 네트워크에 속한다고 볼 수 있다. 이때, 각기 다른 서비스 셋을 구분할 수 있는 수단이 필요하다. 그래서 서비스 셋을 식별하기 위해 서비스 셋 식별자, 줄여서 SSID를 사용한다. SSID는 무선 네트워크를 구분짓는 수단이자 무선 네트워크를 지칭하는 고유한 이름이다. 일반적으로 와이파이의 이름이 바로 SSID이다. 

 

AP는 외부에 자신의 존재를 지속적으로 알려야 한다. AP가 자신의 존재를 알리지 ㅇ낳는다면 호스트는 연결 가능한 무선 네트워크가 존재한다는 사실조차 모르기 때문이다. 따라서 AP는 불특정 다수 모두에게 자신을 알리는 브로드캐스트 메시지를 주기적으로 전송한다. 이 브로드캐스트 메시지를 비컨 프레임이라 한다. 비컨 프레임 안에는 SSID 와 AP의 MAC 주소 등이 포함되어 있다. 장치에 와이파이를 연결하고자 할때 연결 가능한 와이파이 목록이 뜨는 것은 장치가 AP로부터 비컨 프레임을 받았기 때문이다.