네트워크 CS 과제-3
IP주소
ARP
컴퓨터와 컴퓨터간의 통신은 흔히들 알고 있는 IP 주소기반의 통신이 아닌 IP주소에서 ARP 프로토콜을 사용해 MAC주소를 찾아 MAC주소를 기반으로 통신한다.
- ARP프로토콜은 논리적 주소(IP)를 물리적 주소(MAC)로 변환해주는 프로토콜이다.
- 통신하고자 하는 단말의 IP를 알고 있을 때 사용되는 프로토콜
- 결국 두 PC가 통신하기 위해서는 IP가 아닌 MAC주소를 필요로한다.
- ARP 요청시 ARP Request를 통해 브로드캐스트를 보내고 그리고나서 해당 주소에 맞는 장치 ARP reqply 유니캐스트를 통해 MAC 주소를 반환
홉바이홉 통신
IP주소를 통해 통신하는 과정을 홉바이홉 통신이라고 한다. 여기서 홉이란 여러개의 라우터를 건너가는 모습을 표현한 것이다.수많은 서브네트워크 안에 있는 라우터의 라우팅 테이블 IP를 기반으로 패킷을 전달하고 또 전달하며 최종 목적지까지 패킷을 전달한다.
즉, 통신장치에 있는 `라우팅 테이블`의 IP를 통해 시작 주소부터 시작하여 다음 IP로 계쏙해서 이동하는 `라우팅` 과정을 거쳐 최종목적지까지 도달하는 통신을 말한다.
라우팅테이블
라우팅 테이블은 송신지에서 수신지까지 도달하기 위해 사용되며 라우터에 들어가 있는 목적지 정보들과 그 목적지로 가기 위한 방법들이 들어있는 리스트를 뜻한다. 게이트웨이와 모든 목적지에 대한 해당 목적지에 도달하기 위해 거쳐야하는 다음 라우터의정보 또한 가지고 있다.
게이트웨이
게이트웨이는 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 관문역할을 하는 컴퓨터나 소프트웨어를 두루 일컫는용어
사용자는 인터넷에 접속하기 위해 수많은 게이트웨이를 거쳐야하며, 게이트웨이는 서로 다른 네트워크상의 통신 프로토콜을 변환해주는 역할도 수행한다.
IP 주소 체계
IP주소는 IPv4와 IPv6로 나뉜다. IPv4는 32비트를 8비트 단위로 점을 찍어 표기하며 IPv6는 64비트를 16비트 단위로 표기
클래스 기반 할당 방식
IP주소 체계방법중 과거에 사용되돈 방법으로 총 다섯개의 클래스로 나누어 네트워크주소와 컴퓨터에 부여하는 호스트 주소로 놓아 사용
[1](https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http://t1.daumcdn.net/brunch/service/user/5xeg/image/C5izn908iTajfhndBuTqOxpDW2g.PNG)
클래스 A,B,C는 일대일 통신으로 사용하며 클래스 D는 멀티 캐스트 통신, E 클래스는 앞으로 사용할 예비용으로 쓰는 방식이다.
DHCP
DHCP(Dynamic Host Configuration Protocol)은 IP주소 및 기타 통신 매개변수를 자동으로 할당하기 위한 네트워크 관리 프로토콜. 이 기술을 통해 네트워크 장치의 IP 주소를 수동으로 설정할 필요없이 인터넷에 접속할 때마다 자동으로 IP주소를 할당할 수 있다.
많은 라우터와 게이트웨이 장비에 DHCP 기능이 존재하며 이를 통해 대부분의 가정용 네트워크에서 IP 주소를 할당
NAT
NAT(Network Address Translation)는 패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP주소 정보를 수정하여 IP주소를 다른 주소로 매핑하는 방법
IPv4주소체계만으로는 많은 주소들을 모두 감당하지 못하는 단점이있는데, 이를 해결하기 위해 NAT으로 공인 IP와 사설 IP로 나누어 많은 주소를 처리 NAT을 가능하게 하는 소프트웨어는 ICS,RRAS,Netfliter등이 있다.
NAT을 쓰는 이유는 주로 여러대의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위함이다. 예시로 공유기에도 NAT기능이 탑재되어있어 하나의 인터넷회선에 공유기를 여러 PC에 사용할 수 있는 것이다.
또한 NAT은 실제 IP주소를 외부에 들어낼 때 다르게 드러낼 수 있어 보안이 가능해진다. 하지만 접속자가 많아지면 느려진다는 단점이 존재한다.
HTTP
우선적으로 애플리케이션 계층에서 사용되며 보통 웹 서비스 통신에 사용된다.
HTTP/1.0
HTTP/1.0은 기본적으로 한 열결당 하나의 요청을 처리하도록 설계되었다.
이는 RTT(Round-Trip-Time)증가라는 단점을 일으킨다.

서버로 부터 static한 파일들을 가져올 때마다 TCP를 연결할 때 사용하는 3-웨이-핸드셰이크가 계속해서 일어나 RTT가 증가한다.(서버에 부담이생기고, 응답시간이 길어진다)
RTT
패킷이 목적지에 도달하고 나서 다시 출발지로 돌아가기 까지 걸리는 패킷왕복시간
RTT 증가를 해결하기 위한 방법
이를 해결하기 위한 방법으로는 이미지 스플리팅 코드압축, 이미지 BASE64 인코딩등을 사용한다.
이미지 스플리팅
많은 이미지를 다운로드 받게 되면 과부하가 걸리기에 이미지가 합쳐있는 하나의 이미지를 다운받고 이를 기반으로 background-image의 position을 이용하여 이미지를 표기하는 방법
코드압축
코드압축은 코드를 압축하여 개행문자,빈칸을 없애서 코드의 크기를 최소화시킨다.
이미지 Base64 인코딩
이미지 파일을 64진법으로 이루어진 문자열로 인코딩 하는 방법
이 방법을 사용하면 서버와의 연결을 열고 이미지에 대해 서버에 HTTP 요청을 할 필요가 없다는 장점이 있다. 하지만 문자열로 변환할 경우 크기가 더 커지는 단점이 존재한다.
HTTP/1.1
HTTP/1.0에서 발전한 형태이며 매번 TCP를 연결하는 것이 아닌 한번 TCP 초기화를 한 이후 `keep-alive`라는 옵션으로 여러개의 파일을 송수신할 수 있게 바꾸었다. 참고적으로 HTTP/1.0 버전에도 존재하였지만 HTTP/1.1부터 표준화되었다

핸드셰이크는 발생하면 그다음부터 발생하지 않지만 문서안에 포함된 다수의 리소스를 처리하려면 요청할 리소스 개수에 비례해 대기시간이 늘어난다는 단점이 있다.
HOL Blocking
HOL Blocking(Head Of Line Blocking)은 네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될때 발생하는 성능 저하현상을 말한다.

HTTP/1.1은 이외에도 헤더에 쿠키 및 많은 메타데이터가 들어가 있고 압축되어 있지 않아 무거운 구조이다.
HTTP/2
HTTP/2 는 SPDY 프로토콜에서 파생된 HTTP/1.x 보다 지연시간을 줄이고 응답시간을 더빠르게 할 수 있으며 멀티플렉싱,헤더압축,서버푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다.
멀티플렉싱
멀티플렉싱이란 여러개의 스트림을 사용하여 송수신하는 것이며 , 특정 스트림의 패킷이 손실되어도 해당스트림에만 영향을 미치고 나머지 스트림은 멀쩡하게 동작할 수 있다.
HOL Blocking을 해결가능하다

헤더압축
HTTP/1.x에는 크기가 큰 헤더라는 문제가 존재한다.
이를 HTTP/2에서는 헤더압축을 통해 해결하며 허프만코딩 압축 알고리즘을 사용한다.
허프만 코딩
문자열을 문자단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용해 표현하고 빈도가 낮은 정보는 비트수를 많이 사용하여 표현해서 전체 데이터의 표현에 필요한 비트양을 줄이는 원리
서버 푸시
HTTP/1.1에서는 클라이언트가 서버에 요청을 해야 파일을 다운로드 받을 수 있었다면 HTTP/2는 클라이언트 요청없이 서버가 바로 리소스를 푸시할 수있다.
작동방식으로 HTTP/2는 html파일을 읽어내리다 그 안에 링크되어있는 css 또는 js파일을 클라이언트에게 먼저 삽입한다

HTTPS
HTTP/2는 HTTPS 위에서 동작한다.
HTTPS는 애플리케이션 계층과 전송계층사이에 신뢰 계층인 SSL/TTS 계층을 넣은 신뢰할 수 있는 HTTP요청을 말한다. 이를통해 통신을 암호화한다.
SSL/TLS
전송계층에서 보안을 제공하는 프로토콜로 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록한다.
SSL과 TLS를 통해 공격자가 서버인척하며, 사용자 정보를 가로채는 네트워크상의 `인터셉터` 를 방지할 수 있다. 또한 이 보안세션을 기반으로 데이터를 암호화하며 보안세션이 만들어질 때 인증 매커니즘,키 교환 암호화 알고리즘,해싱 알고리즘이 사용된다.
보안세션
보안이 시작되고 끝나는 동안 유지되는 세션을 뜻하며 SSL/TLS는 핸드셰이크를 통해 보안세션을 생성하고 이를 기반으로 상태 정보등을 공유한다.

1. 클라이언트와 서버와 키를 공유 2. 인증, 인증 확인 등의 작업이 일어나는 1-RTT 생성 3. 클라이언트에서 사이퍼 슈트를 서버로 전달 4. 서버는 사이퍼슈트의 암호화 알고리즘 리스트 제공 가능 유무를 확인 5. 제공 가능하면 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작> 인증 메커니즘은 CA에서 발급한 인증서를 기반 6. 해싱 알고리즘 등으로 암호화된 데이터의 송수신이 시작
사이퍼 슈트
사이퍼 슈트는 프로토콜,AEAD 사이퍼모드, 해싱 알고리즘이 나열된 규약을 말하며 총 다섯개가 존재
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA256
AEAD 사이퍼모드
AEAD 는 데이터 암호화알고리즘이며 병렬계산에 용이
CA 발급과정
자신의 서비스가 CA 인증서를 발급받으려면 자신의 사이트 정보와 공개키를 CA에 제출해야 한다.
암호화 알고리즘
- 키 교환 암호화 알고리즘으로는 대수곤선 기반의 ECDHE 또는 모듈 기반 DHE를 사용(둘다 디피-헬만 방식을 근간)
디피-헬만 키 교환 암호화 알고리즘
- g와 x와 p를 안다면 y는 구하기 쉽지만 g와 y와 p만 안다면 x를 구하기는 어렵다는 원리에 기반한 알고리즘

해싱 알고리즘
- 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘
- SSL/TLS는 해싱 알고리즘으로 SHA-256 알고리즘 사용

해시: 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값
해싱: 임의의 데이터를 해시로 바꿔주는 일이며 해시 함수가 이를 담당
해시함수: 임의의 데이터를 입력으로 받아 일정한 길이의 데이터로 바꿔주는 함수
HTTPS 구축방법
HTTPS 구축 방법은 크게 세가지이다.
1. 직접 ca에서 구매한 인증키를 기반으로 https 서비스를 구축한다 2. 서버 앞단의 https를 제공하는 로드밸런서를 둔다. 3. 서버 앞단에 https를 제공하는 CDN을 둔다.
HTTP/3
HTTP/3는 HTTP/1.1 및 HTTP/2와 함께 WWW에서 정보를 교환하는데 사용되는 HTTP의 세번째 버전
TCP위에서 돌아가는 HTTP/2와는 달리 HTTP/3은 QUIC이라는 계층 위에서 작동하며 TCP기반이 아닌 UDP 기반으로 돌아간다.

또한 HTTP/2 에서 장점이었던 멀티플렉싱을 가지고 있으며 초기연결 설정 시 지연 시간 감소라는 장점이 존재한다.
초기연결 설정 시 지연 시간 감소
QUIC은 TCP를 사용하지 않기 때문에 통신을 시작할 때 번거로운 3-웨이-핸드셰이킹 과정을 거치지 않는다.
이로인해 1RTT만을 소요하고 QUIC은 기본적으로 순방향 오류 수정 매커니즘(FEC)가 적용되어 있어 전송한 패킷이 손실할경우 수신 측에서 에러검출 후 수정하고 네트워크 환경이 열악하더라도 낮은 패킷 손실률을 자랑