위 내용은 주홍철 저자의 “면접을 위한 CS 전공지식 노트”를 기반으로 작성되었습니다.
네트워크란?
컴퓨터등의 장치들이 통신 기술을 이용하여 구축하는 연결망을 지칭하는 용어입니다.
네트워크는 노드와 링크로 구성되어 있습니다. 실제로 노드로는 서버, 라우터, 스위치등의 네트워크 장비등이 있으며, 링크는 무선 통신, 유선 통신으로 생각할수 있습니다.
처리량 & 지연시간
좋은 네트워크란 많은 처리량을 처리할수 있고, 지연시간이 짧고 장애 빈도가 적고 좋은 보안을 갖춘 네트워크를 말합니다.
그렇다면 좋은 네트워크를 판단하는 처리량과 지연시간이란 무엇인가?
-
처리량
처리량은 링크내에서 성공적으로 전달된 데이터의 양을 의미하고 보통 얼만큼 트래픽을 처리했는지를 의미합니다. (많은 트래픽을 처리했다 = 많은 처리량을 가진다) 단위로는 bps(bits per second)를 사용합니다.
-
지연시간
지연시간이란 요청이 처리되는 시간을 말하며 메시지가 두 장치 사이를 왕복하는데 걸린 시간을 말합니다. 보통 매체 타입 (유선, 무선), 패킷 크기, 라우터의 패킷 처리 시간에 영향을 받습니다.
네트워크 토폴로지
다음에는 네트워크를 설계할때 고려하는 토폴로지에 대해 알아보면 네트워크 토폴로지는 노드와 링크가 어떻게 배치되어있는지에 대한 방식이자 연결 형태를 의미합니다.
- 트리 토폴로지
- 버스 토폴로지
- 스타 토폴로지
- 링형 토폴로지
- 메시 토폴로지
네트워크 분류
네트워크는 규모를 기반으로 분류 할수 있는데 기본적으로 개인적으로 소유 가능한 규모인 LAN(Local Area Network), 과 서울시 등 시 정도의 규모인 MAN(Metropolitan Area Network), 그리고 세계 규모의 WAN(World Area Network)로 나뉩니다.
규모에 따라 전송속도와 혼잡도가 결정되는데 LAN의 경우 근거리 통신망을 의미하며 같은 건물등 좁은 공간에서 운영되고 이에 따라 전송속도가 빠르고 혼잡하지 않습니다.
MAN은 도시 같은 넓은 지역이며, 전송속도가 보통이며 LAN보다 혼잡합니다.
마지막으로 WAN은 광역 네트워크로 국가, 대륙같은 넓은 지역에서 운영되며, 전송속도가 낮으며 MAN보다 더 혼잡합니다.
병목 현상
네트워크의 구조라고 말하는 토폴로지가 중요한 이유는 병목 현상을 찾을 때 중요한 기준이 되기 때문입니다.
그렇다면 애플리케이션 코드상에서는 문제가 없으나 사용자가 서비스로부터 데이터를 가져오지 못하는 상황이 생기는 네트워크 병목현상을 일으키는 주된 원인은 무엇일까?
- 네트워크 대역폭
- 네트워크 토폴로지
- 서버 CPU, 메모리 사용량
- 비효율적인 네트워크 구성(토폴로지)
그렇다면 이러한 네트워크 성능 분석에 필요한 명령어는 어떤것이 있을까?
- ping
- netstat
- nslookup
- tracert
TCP/IP 4계층 & OSI 7계층
위의 그림 처럼 TCP/IP 계층과 달리 OSI 계층은 애플리케이션 계층을 3개의 세부적인 계층으로 나누는등의 차이점이 있습니다.
위 책에서는 TCP/IP 4계층으로 구성하였지만 기본적으로 OSI 7계층이 가장 대중적이기 때문에 해당 계층으로 다시 정리하였습니다.
OSI 7계층
위 그림과 이름처럼 7개의 계층으로 구성되어있으며, 각 계층마다 수행하는 기능들이 다릅니다.
데이터는 응용 계층에서 하위 계층으로 순차적으로 전송된다.
물리 계층
데이터를 전기적 신호로 변환하여 송수신하는 기능이 진행되는 계층입니다.
허브, 라우터,네트워크카드등 전송 매체를 통해 비트를 전송합니다.
전송단위 : 비트(Bit)
프로토콜 : RS-232C 등
장비 : 허브, 리피터
데이터 링크 계층
두 개의 개방 시스템들 간의 효율적이고 신뢰성있는 정보 전송을 할 수 있도록 하며 오류의 검출과 회복을 위한 오류 제어 기능을 수행합니다. 또한, 송신측과 수신측의 속도 차이를 해결하기 위해 흐름 제어 기능을 하며 프레임의 시작과 끝을 구분하기 위한 프레임의 동기화 기능을 수행합니다.
전송단위 : 프레임(Frame)
프로토콜 : 이더넷, MAC, PPP 등
장비 : 브릿지, L2 스위치
네트워크 계층
데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 담당한다.
라우터를 통해 이동할 경로를 선택하여 IP 주소를 지정하고, 해당 경로에 따라 패킷을 전달해준다.
라우팅, 흐름 제어, 오류 제어, 세그먼테이션 등을 수행한다.
전송단위 : 패킷(Packet)
프로토콜 : IP, ICMP 등
장비 : 라우터, L3 스위치
전송 계층
전체 메시지를 종단 vs 종단(End-to-End, 발신지에서 목적지)간 제어와 에러를 관리합니다. 패킷의 전송이 유효한지 확인하고 전송에 실패된 패킷을 다시 보내는 것과 같은 신뢰성있는 통신을 보장합니다. 주소 설정, 오류 및 흐름 제어, 다중화를 수행합니다.
전송단위 : 세그먼트(Segment)
프로토콜 : TCP, UDP
- TCP : 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용하여 연결을 하여 신뢰성을 구축해서 수신 여부를 확인하며 “가성회선 패킷 교환 방식”을 사용합니다.
- UDP : 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 “데이터그램 패킷 교환 방식”을 사용합니다.
장비 : 게이트웨이, L4 스위치
세션 계층
양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공합니다. 동시송수신(Duplex), 반이중(Half-Duplex), 전이중(Full-Duplex) 방식의 통신과 함께 체크 포인팅과 유후(어떠한 프로그램에 의해 사용되지 않는 상태), 종료, 다시 시작 과정 등을 수행합니다.
프로토콜 : NetBIOS, SSH, TLS
표현 계층
응용 계층으로부터 받은 데이터를 하위 계층인 세션 계층에 보내기 전에 통신에 적당한 형태로 변환하고 세션 계층에서 받은 데이터는 응용 계층에 맞게 변환하는 역할을 수행합니다. 코드 변환, 구문 검색, 데이터 압축 및 암호화 등의 기능을 담당합니다.
프로토콜 : JPG, MPEG, SMB, AFP
응용계층
응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행합니다. 응용 프로세스 간의 정보 교환, 전자메일, 파일전송 등의 서비스를 제공합니다.
프로토콜 : FTP, SSH, HTTP, SMTP, DNS
- FTP : 장치와 장치간의 파일을 전송하는 데 사용되는 표준 통신 프로토콜
- SSH : 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
- HTTP : World Wide Web을 위한 데이터 통신의 기초이자 웹 사이트를 이용하는데 쓰는 프로토콜
- SMTP : 전자 메일 전송을 위한 인터넷 표준 통신 프로토콜
-
DNS : 도메인 이름과 IP 주소를 매핑해주는 서버
Address Resolution Protocol의 약자이며 가상 주소인 IP 주소를 실제 주소인 MAC 주소로 변환한다. RARP는 반대로 실제 주소인 MAC 주소를 가상 주소인 IP 주소로 변환한다.
Broadcast
송신 호스트에서 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식
Unicast
고유 주소로 식별된 하나의 네트워크 목적지에 1:1로 데이터를 전송하는 방식
홉바이홉 통신
IP 주소를 통해 통신하는 과정을 홉바이홉 통신이라고 한다. 여기서 홉이란 영어 뜻 자체로는 건너 뛰는 모습을 의미합니다.
통신 망에서 각 패킷이 여러개의 라우터를 건너가는 모습을 비유한 것입니다.
확실한 의미로는 통신 장치에 있는 라우팅 테이블의 IP를 통해 시작 주소부터 시작하여 다음 IP로 계속해서 이동하는 라우팅 과정을 거쳐 패킷이 최종 목적지에 도달하는 통신이라고 할수 있습니다.
- 라우팅 테이블
송신지에서 수신지까지 도달하기 위해 사용되며, 라우터에 목적지 정보들과 그 목적지로 가기 위한 방법이 들어있는 리스트를 말한다. 라우팅 테이블은 게이트웨이와 다음 라우터 정보를 가지고 있다.
- 게이트 웨이
서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 관문 역할의 컴퓨터 또는 소프트웨어를 말한다.
IP주소
IPv4는 32비트를 8비트 단위로 점을 찍어 표기한다. ex) 123.45.67.89
IPv6는 64비트를 16비트 단위로 콜론을 찍어 표기한다. ex)2020:db8:f123:11:3456
클래스 기반 할당 방식
IP 주소 체계는 과거를 거쳐 발전해 오고 있으며 처음에는 A, B, C, D, E 다섯개의 클래스로 구분하는 클래스 기반 할당 방식을 사용하였습니다.
A class
- 첫 번째 비트는 0으로 고정한다.
- 0000 0000 . 0000 0000 . 0000 0000 . 0000 0000 ~ 0111 1111 . 1111 1111 . 1111 1111 . 1111 👉 0.0.0.0 ~ 127.255.255.255
8bit
: 네트워크 주소24bit
: 호스트 주소
B class
- 첫 번째 비트는 10으로 고정한다.
- 1000 0000 . 0000 0000 . 0000 0000 . 0000 0000 ~ 1011 1111 . 1111 1111 . 1111 1111 . 1111 👉 128.0.0.0 ~ 191.255.255.255
16bit
: 네트워크 주소16bit
: 호스트 주소
C class
- 첫 번째 비트는 110으로 고정한다.
- 1100 0000 . 0000 0000 . 0000 0000 . 0000 0000 ~ 1101 1111 . 1111 1111 . 1111 1111 . 1111 👉 192.0.0.0 ~ 223.255.255.255
24bit
: 네트워크 주소8bit
: 호스트 주소
D class
멀티캐스트 통신으로 사용하며 IP 주소에 할당되지 않는다.
E class
앞으로 사용할 예비용으로 사용하며 IP 주소에 할당되지 않는다.
하지만 이방식은 사용하는 주소보다 버리는 주소가 많은 단점이 있었고 이를 해소하기 위해 DHCP와 IPv6, NAT가 나오게 되었습니다.
DHCP (Dynamic Host Configuration Protocol)
IP 주소 및 기타 통신 매개변수를 자동으로 할당하기 위한 네트워크 관리 프로토콜이다. 네트워크 장치의 IP 주소를 수동으로 설정할 필요없이 인터넷에 접속할 때마다 동적으로 IP 주소를 할당할 수 있다.
NAT (Network Address Translation)
패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP 주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법이다.
현재 IPv4 주소 체계에서는 공인 IP 개수가 부족하기 때문에 NAT를 사용하여 공인 IP를 사설 IP로 변환하여 통신을 처리한다.
- 장점
- 여러 대의 호스트가 하나의 공인 IP 주소를 사용하여 통신할 수 있다.
- 공인 IP로 변경되어 통신하기 때문에 내부에 있는 IP 주소를 숨길 수 있다.
- 단점
- 여러 명이 동시에 인터넷을 사용하기 때문에 호스트 숫자에 따라 접속 속도가 느려질 수 있다.
HTTP
HTTP / 1.0
HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었습니다. 그러나 연결마다 TCP 3-way handshake을 계속 해서 열어야 되기 때문에 이는 RTT 증가를 불러오게 되었습니다.
이러한 RTT 증가를 해결하는 방법
-
- 이미지 스플리팅
-
많은 이미지가 합쳐 있는 하나의 이미지를 다운로드받고,
background-image
의 position으로 이미지를 표기하는 방법
-
- 코드 압축
-
코드를 압축하여 개행 문자, 빈칸을 업애서 코드의 크기를 최소화
-
- 이미지 Base64 인코딩
-
이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법
👉 Base64 문자열로 변환할 경우 크기가 37% 더 커지는 단점 존재
Encoding
정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리 방식
HTTP / 1.1
이러한 HTTP/1.0에서 발전한 것은 HTTP/1.1입니다.매번 TCP 연결을 하는 것이 아닌 한 번 TCP를 초기화한 후 keep-alive
옵션으로 TCP connection을 유지하도록 변경되었습니다.
- 단점
- 문서 안에 포함된 다수의 리소스를 처리하려면 요청할 리소스 개수에 비례해서 대기 시간이 길어진다.
- HOL Blocking(Head Of Line Blocking) : 네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
- 헤더에 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무겁다.
HTTP / 2
SPDY 프로토콜에서 파생된 HTTP/1.x
보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다.
-
멀티플렉싱
여러개의 스트림을 사용하여 송수신한다. 특정 스트림의 패킷이 손실되더라도 다른 스트림에는 영향을 미치지 않으며 단일 연결을 사용하여 병렬로 여러 요청을 받을 수 있다.
- HOL Blocking 문제 해결
- 헤더 압축
-
허프만 코딩 압축 알고리즘을 사용하는 HPACK 압축 형식으로 헤더를 압축한다.
Huffman coding
문자열을 문자 단위로 쪼개 빈도수를 세서 빈도가 높은 정보는 적은 비트 수를 사용하여 표현하고, 빈도가 낮은 정보는 비투 수를 많이 사용하여 전체 데이터의 표현에 필요한 비트양을 줄이는 원리
-
무거운 헤더 문제 해결
-
-
서버 푸시
클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다
HTTP / 3
TCP 위에서 돌아가는 HTTP/2와 달리 QUIC 계층 위에서 돌아가며, UDP 기반이다.
- QUIC
- TCP를 사용하지 않기 때문에 3-way handshake 과정을 거치지 않는다.
- 첫 연결 설정에 1-RTT만 소요된다. 클라이언트가 서버에 신호를 한 번 주고, 서버가 거기에 응답하기만 하면 바로 통신을 시작한다.
- 순방향 오류 수정 메커니즘(FEC, Forward Error Correction)이 적용되었다. 전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식이며 낮은 패킷 손실률을 보인다.
HTTPS
Application Layer와 Transport Layer 사이에 SSL/TLS 계층을 넣어 신뢰할 수 있는 HTTP 요청을 말한다.
HTTPS 구축 방법
- 직접 CA에서 구매한 인증서를 기반으로 HTTPS 서비스 구축
- 로드밸런서
- CDN
SSL/TLS
Transport Layer에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신할 때 제3자가 메시지를 도청하거나 변조하지 못하도록 한다.
보안 세션
보안이 시작되고 끝나는 동안 유지되는 세션을 말하며 SSL/TLS는 handshake를 통해 보안 세션을 생성하고, 이를 기반으로 상태 정보 등을 공유한다. 클라이언트와 서버는 키를 공유하고 이를 통해 인증, 확인 작업이 일어나는 1-RTT
가 발생한 후 데이터를 송수신한다.
클라이언트에서 사이퍼 슈트를 서버에 전달하면 서버는 사이퍼 슈트의 암호화 알고리즘 리스트를 제공할 수 있는지 확인한다. 제공할 수 있다면 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작되고 해싱 알고리즘 등으로 암호화된 데이터의 송수신이 시작된다.
Cypher Suites
프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 말한다.
1.
TLS_AES_128_GCM_SHA256
2.
TLS_AES_256_GCM_SHA384
3.
TLS_CHACHA20_POLY1305_SHA256
4.
TLS_AES_128_CCM_SHA256
5.
TLS_AES_128_CCM_8_SHA256
AEAD Cypher Mode
AEAD(Authenticated Encryption with Associated Data)는 데이터 암호화 알고리즘이며
AES_128_GCM
등이 있다.
AES_128_GCM
은 128비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘이다.
인증 메커니즘
인증 메커니즘은 CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어진다. 인증서는 공개키를 클라이언트에 제공하고 사용자가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다. 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있다.
암호화 알고리즘
키 교환 암호화 알고리즘은 디피-헬만 방식을 근간으로 만들어진 대수곡선 기반의 ECDHE(Elliptic Curve Diffie-Hellman Ephermeral) 또는 모듈식 기반의 DHE(Diffie-Hellman Ephermeral)를 사용한다.
Diffie–Hellman key exchange
암호키를 교환하는 하나의 방법이다.
y=gxmodp
g, x, p를 안다면 y를 구하기 쉽지만, g, y, p를 안다면 x를 구하기 어렵다는 원리에 기반한 알고리즘이다.
해싱 알고리즘
데이터를 추정하기 어렵도록 더 작고 섞여 있는 조각으로 만드는 알고리즘이다. SSL/TLS는 SHA-256
, SHA-384
알고리즘을 사용한다.
SHA-256
해시 함수의 결괏값이 256비트인 알고리즘이며 해싱할 메시지에 1을 추가하는 등의 전처리를 거친 후 해시를 반환한다.
SEO
구글은 HTTPS 서비스를 하는 사이트가 그렇지 않는 사이트보다 SEO 순위가 높을 것이라고 공식적으로 밝혔다.
SEO 관리 방법
- 캐노니컬 설정 :
<link rel="canonical" href="https://www.example.com" />
- 메타 설정 : html 파일의
<meta>
tag - 페이지 속도 개선
- 사이트맵 관리