RTT 증가 = > 서버부담⬆, 사용자 응답시간 ⬆
RTT란 ?
- 패킷왕복시간 = 패킷이 목적지에 도달하고 다시 출발지로 오기까지 걸리는 시간
#icons>li>a {
background-image: url("icons.png");
width: 25px;
display: inline-block;
height: 25px;
repeat: no-repeat;
}
#icons>li:nth-child(1)>a {
background-position: 2px -8px;
}
#icons>li:nth-child(2)>a {
background-position: -29px -8px;
}
위의 코드처럼 하나의 이미지 background-image: url("icons.png");, background-position 등을 기반으로 이미지를 설정.
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
위의 코드를
const express=require("express"),app=express(),port=3e3;app.get("/",(e,p)=>{p.send("Hello World!")}),app.listen(3e3,()=>{console.log("Example app listening on port 3000")});
밑에처럼 압축한것.
인코딩
정보의 형태나 형식을 표준화,보안,처리속도향상,저장 공간 절약 등을 위해 형태나 형식으로 변환하는 처리방식.
그림을 보게 되면 3way handshake가 한번 발생후 발생하지 않는걸 볼 수 있음. 리소스 갯수에 비례해 대기시간이 길어지는 단점 o.
SPDY 비표준 개방형 네트워크 프로토콜 HTTP헤더를 해석하고 단순화 하여 압축전송.
스트림
시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 데이터 흐름.
일 연결을 사용하여 병렬로 여러 요청을 받을 수 있고 응답을 줄 수 있다. 이렇게 되면 HTTP/1.x에서 발생하는 문제인 HOL Blocking을 해결할 수 있음.
허프만 코딩
문자열을 문자단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트수 사용하여 표현
빈도가 낮은 정보는 비트수를 많이 사용하여 표현해서 전체 데이터의표현에 필요한 비트양을 줄이는 원리.
세션
운영체제가 어떠한사용자로부터 자신의 자산이용을 허락하는 일정한 기간을 뜻함. 사용자는 일정시간동안 응용프로그램 자원등을 사용할 수 있음.
사이퍼 슈트
사이퍼 슈트는 프로토콜, 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
인증메커니즘
CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어짐. CA에서 발급한 인증서는 안전한 연결을 시작하는 데 있어 필요한 ‘공개키’를 클라이언트에 제공하고 사용자가 접속한 ‘서버가 신뢰’할 수 있는 서버임을 보장. 인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있음.
참고로 CA는 아무 기업이나 할 수 있는 것이 아니고 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있으며, 대표적인 기업으로는 Comodo, GoDaddy, GlobalSign, 아마존 등이 있음.
암호화 알고리즘
키교환 암호화 알고리즘으로는 대수곡선 기반의 ECDHE또는 모듈식 기반의 DHE를 사용.
둘다 디피-헬만방식을 근간.
Y = a^x mod p
p=소수 / g=생성자/ mod= 나눗셈의 나머지를 구하는 연산.
앞의 식에서 g와 x와 p를 안다면 y는 구하기 쉽지만
g와 y와 p만 안다면 x를 구하기는 어렵다는 원리에 기반한 알고리즘.
이러한 문제는 이산 대수 문제 라고 불리며 아직까지 이를 효율적으로 계산하는 방법은 수학적으로 알려져 있지 않다.
하나하나 대입해 보거나, 아무리 효율적인 알고리즘을 사용해도 지수적 시간 복잡도를 가지게 되는데,한쪽 방향으로만 계산하기 쉬운 일방향 함수는 바로 반쪽 짜리 키로 대칭 키를 만드는데 사용할 수 있음.
A= 개인 a키 이용 g^a mod p
B= 개인 b키 이용 g^b mod p
A =========> B
( g^a mod p)
B<==========A
(g^b mod p)
A 개인키 a이용 g^ab mod p
B 개인키 b이용 g^ab mod p
g^ab mod p - 대칭키(비밀키)생성
이사이 공격자는 g^(a+b) mod p 밖에 못만든다.
송수신자는 서로 반쪽짜리 키 인 a, b 를 직접 교환한 것 이 아닌 g^a mod p 와 g^b mod p 를 교환.
따라서 중간에 다른 사람(공격자)이 g^a mod p 와 g^b mod p 를 탈취해도, 이를 통해 서로를 곱한 g^(a+b) mod p 까지 만 얻을 수 있음.
이는 앞서 살펴본 이산 대수 문제로 설명이 가능한데.
이산 대수 문제는 y = g^x mod p 에서 g, p, x 가 알려져 있을때 y 를 계산하는 건 쉽지만, g, p, y 가 알려져 있을 때 역으로 x 를 구하는 방법은 어렵다.
따라서 다른 사람이 g^a mod p 와 g^b mod p 를 탈취해도, 이를 통해 반쪽 짜리 키 인 a, b 를 알아내기 어렵기 때문에 a, b 를 가지고 있는 데이터 송수신 자가 a, b 로 만든 대칭 키인 g^ab mod p 는 만들지 못하며, 아무리 노력해봐야 g^a mod p 와 g^b mod p 로 서로를 곱한 g^(a+b) mod p 까지 만 만들수 있다 가 증명.
결국, 대칭 키 인 g^ab mod p 를 만드려면 반쪽 짜리 키 원본인 a, b 를 알아야 한다.
이처럼 디피 헬만 키 교환 알고리즘은 이산 대수 문제라는 일방향 함수의 특징을 그대로 활용하여 만난 적도, 본 적도 없는 두 사람 만이 아는 비밀의 대칭 키를 만들어 내는 마법같은 알고리즘.
또한 정보가 중간에 탈취되도, 우리의 대칭키는 이산 대수 문제로 인해 탈취한 정보 만으로 만들기 어렵다는 것이 보장
여담으로 텔레그램에 디-헬만 키교환 알고리즘이 적용 되어있다고 한다.
해시
다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한값.
해싱
임의의 데이터를 해시로 바꿔주는 일이며 해시 함수가 이를 담당.
해시 함수
임의의 데이터를 입력으로받아 일정한 길이의 데이터로 바꿔주는 함수.
<link rel="canonical" href="https://example.com/page2.php" />
사이트 link에 캐노니컬 설정해야함.
html파일 가장 윗부분인 메타를 잘설정해야함.
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://kundol.co.kr/</loc>
<lastmod>수정날짜</lastmod>
<changefreq>daily</changefreq>
<priority>1.1</priority>
</url>
</urlset>
HTTP/2에서 장점이었던 멀티플렉싱을 가지고 있으며 초기 연결 설정 시 지연 시간 감소라는 장점.
참고로 QUIC은 순방향 오류 수정 메커니즘(FEC, Forword Error Correction)이 적용. 이는 전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식이며 열악한 네트워크 환경에서도 낮은 패킷 손실률을 자랑.