와이어샤크
- 와이어샤크는 대중적인 패킷 캡쳐 프로그램
- 패킷 캡쳐 프로그램은 네트워크에서 송수신되는 패킷을 모니터링하고 분석할 수 있는 프로그램
- 와이어샤크를 통해 패킷을 캡처하고, 필터를 이용해 캡처한 패킷을 필터링할 수 있다.
- 와이어샤크를 사용해서 IP, ICMP, UDP, TCP, HTTP 프로토콜의 패킷을 분석할 수 있다.
안정성을 위한 기술
- 이중화, 다중화 : 안정성을 높이기 위한 방법으로 물리적 장비나 프로그램 등을 여러 개 두는 기술
- 로드 밸런싱 : 트래픽을 고르게 분산하는 기술
가용성
안정성은 , ‘ 특정 기능을 언제든 균일한 성능으로 수행할 수 있는 특성’을 의미한다.
- 안정적인 웹 서버 : 언제든지 응답 메시지를 제공할 수 있는 서버
- 안정적인 라우터 : 언제든 지 라우팅 기능을 제공할 수 있는 라우터
- 가용성이란 ‘컴퓨터 시스템이 특정 기능의 정상적인 사용이 가능한 시간의 비율’이다.
- 안정적인 시스템은 가용성이 높다.
- 정상적인 사용 시간을 업타임, 정상적인 사용이 불가능한 시간을 다운타임으로 정의할 때 수식으로 나타내면 아래와 같다. 가용성을 높이려면 다운타임을 낮춰야한다.
- 결함 감내 (fault tolerance) : 문제가 발생하더라도 가능할 수 있는 능력
다운타임을 낮추고 가용성을 높이기 위해서는 결함을 감내할 수 있도록 서비스나 인프라를 설계하는 것이 중요하다.
이중화 / 다중화
결함을 감내하여 가용성을 높이기 위한 가장 기본적이고 대표적인 방법으로, ‘예비(백업)를 마련하는 방법’이다.
- 이중화 : 무언가를 이중으로 두는 기술
- 다중화 : 무언가를 여러 개 두는 기술, 이중화된 구성에 비해 더욱 안정적인 운영이 가능하다.
단일 장애점(SPoF: Single Point OF Failure)
이중화 및 다중화를 할 수 있는 대상들은 대부분 ‘문제가 발생할 경우 시스템 전체가 중단 될 수 있는 대상’ 이다.
- 서버 컴퓨터, 네트워크 인터페이스(NIC), 스위치와 같은 물리적 장비, 데이터 베이스 웹 서버 프로그램 등
- SPOF는 최대한 없애는 것이 좋다. 이중화/다중화를 통해 SPOF를 없애 가용성을 높일 수 있다.
이중화 구성 : 액티브/스탠바이, 액티브/액티브
- 액티브/스탠바이
- 액티브 상태인 시스템에 문제가 발생할 경우 스탠바이 시스템이 자동으로 액티브 시스템을 대신하여 동작 ⇒ 페일오버(failover)
- 두 장비가 동시에 가동되지 않고 한 번에 하나만 가동
- 액티브/액티브
- 두 시스템 모두를 가동 상태를 두는 구성 방식
- 부하를 분산시킬 수 있고, 두 시스템이 함께 가동되므로 성능상 이점
- 한 시스템에서 문제가 발생하면 순간적으로 다른 시스템에 부하가 급증할 수 있다.
로드 밸런싱
고가용성을 요구하는 호스트는 클라이언트보다는 일반적으로 서버이다.
서버를 다중화 했더라도 트래픽 분배가 필요하다.
- 트래픽(trafic) : ‘주어진 시점에 네트워크를 경유한 데이터의 양’
- 일반적으로 트래픽 측정은 노드에서 이루어지므로 일반적으로 ‘주어진 시점에 특정 노트를 경유한 패킷의 양’이라 할 수 있다.
서버에 과도 한 트래픽이 몰리면 서버의 가용성을 떨어뜨리게 된다.
- 특정 서버에만 트래픽을 몰릴 경우 가용성을 떨어뜨리게 된다. 서버를 다중화 했더라도 트래픽을 고르게 분산해야 가용성이 높아진다.
- 로드 밸런싱은 로드 밸런서를 통해 부하(트래픽)를 분산하는 방법
- 라운드 로빈 알고리즘 : 서버를 돌아가며 부하전달
- 최소 연결 알고리즘 : 연결이 적은 서버부터 우선적으로 부하 전달
- 해시 : 무작위로 고르기
암호와 인증서
암호화 : 원문 데이터를 알아 볼 수 없는 형태로 변경하는 것
복호화 : 암호화된 데이터를 원문 데이터로 되돌리는 것
대칭 키 암호화 방식과 공개 키 암호화 방식
- 대칭 키 암호화 방식
- 메시지를 암호화할 때사용 하는 키와 복호화할 때 사용하는 키가 동일
- 적은 부하 덕분에 암호화 및 복호화를 빠르게 수행할 수 있다.
- 공개 키 암호화 방식
- 암호화와 복호화 시 서로 다른 키를 쓰는 암호화 방식
- 한 키로 암호화 했다면 다른 키로 복호화 할 수 있다.
- 각각 공개 키와 개인 키라 부른다.
- 암호화 및 복호화에 시간과 부하가 상대적으로 많이 드는 편
- 키를 안전하게 공유 할 수 있다.
- 세션키
- 대칭 키 암호화 방식과 공개 키 암호화 방식을 결합
- 공개 키로 대칭키를 암호화하고, 개인 키로 암호화된 대칭 키를 복호화 한다.
인증서와 디지털 서명
- 공개 키 인증서(public key certificate)
- 공개 키의 유효성을 입증하기 위한 전자 문서
- 전달 받은 공개키가 정말 신뢰할 수있는지, 조작되지 않았는지 확신
- 공개 키 뿐만아니라, 누가 생성, 조작 여부, 유효 기간 등을 포함한 인증서
- CA라는 인증서 발급 기관을 통해 인증서를 검증할 수 있다.
- 디지털 서명
- 개인 키로 암호화된 메시지를 공개 키로 복호화함으로써 신원을 증명하는 절차
HTTPS : SSL과 TLS
- SSL과 TLS는 인증과 암호화를 가능하게 하는 프로토콜
- TLS는 SSL을 계승한 프로토콜
- SSL/TLS를 사용하는 가장 대표적인 프로토콜은 HTTPS
- TCP 쓰리 웨이 핸드세이크 : TCP 연결을 수립하기 위해 두 호수트가 SYN, SYN+ACK, ACK 플래그가 설정된 TCP 세그먼트를 주고 받음
- TLS 핸드세이크 : 암호화에 사용할 키와 인증서 송수신 및 검증이 이루어짐
- 암호화된 메시지 송수신
- ClientHello 메시지 : 암호화 이전에 맞춰 봐야 할 정보들을 제시하는 메시지
- ServerHello 메시지 : 제시된 정보들을 선택하는 메시지
- TLS 버전, 암호 스위트 등의 정보
암호 스위트 : 사용 가능한 암호화 방식과 해시함수를 담은 정보
- 키를 만들기 위해 사용한 서버의 난수
- Certificate 메시지, CertificateVerify 메시지 : 각각 인증서와 검증을 위한 디지털 서명
- 클라이언트는 이 메시지를 토대로 서버의 공개 키를 검증한다.
- Finished 메시지 : TLS 핸드세이크 종료, TSL 핸드세이크를 통해 얻어낸 키를 기반으로 암호화된 데이터 주고받으면 된다.
- Application Data : Finished 메시지와 함께 암호화된 메시지를 전송할 수 있다.
무선 네트워크
전파와 주파수
- 정보는 전파를 통해 무선으로 전달될 수 있고, 전파 통신을 위한 주파수 대역은 정해져 있다. (3kHz~ 3THz 사이의 진동수를 갖는 전자기파)
와이파이와 802.11
- IEEE 802.11은 무선 LAN의 표준 규격이고, 와이파이는 특정 IEEE 802.11 규격을 준수하는 기술이다.
- IEEE 802.11 표준은 대부분 2.4GHz, 5GHz 대역을 사용한다.
- 주파수의 회정설 떄문에, 장애물이 많다면 2.4GHz가 유용, 장애물이 적은 상황에서 속도가 필요하다면 5GHz
- 무선 통신에서의 채널 : 무선 네트워크에서 사용될 특정 주파수 대역을 나타내며, 채널 번호로 구분된다.
AP와 서비스 셋
무선 네트워크를 생성하기 위해서는 ‘무선 액세스 포인트(AP)라는 네트워크 장비 필요
- 무선 엑세스 포인트(AP) : 무선 통신 기기들을 연결하여 무선 네트워크를 구성하는장치 (가정의 무선 공유기)
- 무선 LAN에서 통신을 중개하는 역할 수행
- 서비스셋 : 무선 네트워크를 이루는 AP와 여러 장치들의 집합, 같은 서비스 셋에 속한 장비들은 같은 무선 네트워크에 속한다.
- 서비스셋 식별자(SSID) : 각기 다른 무선 네트워크를 구분짓는 수단 이자 무선 네트워크를 지칭하는 고유한 이름, 와이파이 이름
- 비컨 프레임 : AP가 자신의 존재를 알리기 위해 브로드캐스트하는 메시지, AP가 자신의 존재를 알리지 않으면 호스트는 연결 가능한 무선 네트워크 존재를 모른다.
6주차
진도: Chapter 06~07
- 기본 숙제(필수): Ch.06(06-2) 확인 문제 1번(p.379), (07-2) 확인 문제 2번(p.407) 풀고 설명하기
- 추가 숙제(선택): 와이어샤크에서 실제 TCP/UDP 패킷 확인해 보기
기본 숙제
Ch.06(06-2) 확인 문제 1번(p.379)
- 3588415413
- 순서번호(Sequence Number raw)는 3588415412
- 다음으로 받기를 희망하는 다음 Acknowledgment number(raw)는 그에 1을 더한 3588415413이다.
Ch.07(07-2) 확인 문제 2번(p.407)
- 3 ) ServerHello
- ClientHello에 대한 응답으로 ServerHello를 응답한다.
- ClientHello 메시지 : 암호화 이전에 맞춰 봐야 할 정보들을 제시
- ServerHello 메시지 : 제시된 정보들을 선택하는 메시지
추가 숙제
와이어샤크에서 실제 TCP/UDP 패킷 확인해 보기
- 추가 숙제(선택): 와이어샤크에서 실제 TCP/UDP 패킷 확인해 보기
- TCP 연결 수립 : 깃허브에 접근했다.
-
SYN : 첫 번째 패킷 (클라이언트 ⇒ 깃허브)
- 클라이언트가 서버(깃허브)에 연결을 요청하기 위해 SYN 패킷을 보낸다.
- 깃허브는 https 이기 때문에 포트번호는 443
- 상대적 순서번호 : 0
- 실제 순서번호 : 2972615756
-
SYN + ACK (깃허브 ⇒ 클라이언트)
- 서버(깃허브)는 클라이언트의 요청을 수락하기 위해 SYN과 ACK 플래그가 설정된 패킷을 보낸다.
- 상대적 순서번호 : 1
- 실제 순서번호 : 3851970539
- 확인 응답 번호 : 첫 번째 패킷의 순서번호(2972615756) + 1 === 2972615757
- Flags : 두 번째 세그먼트는 SYN 비트와 ACK 비트가 1로 설정된 세그먼트
-
ACK (클라이언트 ⇒ 깃허브)
- 클라이언트는 서버의 SYN + ACK 패킷에 대한 확인 응답(ACK)을 보낸다.
- 확인 응답 번호 : 두 번째 패킷의 순서번호(3851970539) + 1 === 3851970540
- 이로써 TCP 연결이 수립됩니다.
- TCP 연결 종료 : 내가 깃허브 창을 껐을 때
- FIN, ACK (깃허브 ⇒ 클라이언트)
- 서버가 연결을 종료하려고 할 때 FIN과 ACK 플래그가 설정된 패킷을 보낸다.
- 이 패킷은 서버가 연결을 종료하기 위한 요청
- ACK (클라이언트 ⇒ 깃허브)
- 클라이언트는 서버의 FIN 패킷에 대해 확인 응답(ACK)을 보낸다.
- 이로써 서버 측의 연결 종료가 확인된다.
- FIN, ACK (클라이언트 ⇒ 깃허브)
- 서버는 클라이언트의 FIN 패킷에 대해 마지막 ACK를 보낸다.
- 이로써 클라이언트 측과 서버 측 모두 연결이 완전히 종료된다.
회고
과제에 와이어샤크를 이용해서 TCP/UDP 확인하기가 있어서 더 자세하게 볼 수 있는 계기가 됐다.
URL에 주소를 치면 어떤 일이 일어날까요? 라는 질문에서 3핸드세이크 대답이 있을때 그냥 간단히 넘어갔는데 6주가 지나고서는 머리속에 이 과정이 그려진다는게 재밌다.