2-1. 네트워크의 기초
네트워크란 노드와 링크가 서로 연결되어 있으며 리소스를 공유하는 집합을 말한다.
2-1-1. 처리량과 지연 시간
처리량
→ 성공적으로 전달된 데이터의 양을 말하며, 얼만큼 트래픽을 처리했는지 말한다.
트래픽
→ 특정 시점에 링크 내에 ‘흐르는’ 데이터의 양을 말한다.
대역폭
→ 주어진 시간 동안 네트워크 연결을 통해 흐를 수 있는 최대 비트 수
지연시간
→ 요청이 처리되는 시간을 말하며 메시지가 두 장치를 왕복하는데 걸린 시간을 말한다.
2-1-2. 네트워크 토폴로지와 병목 현상
네트워크 토폴로지는 노드와 링크가 배치에 대한 방식이자 연결 형태를 의미한다.
트리 토폴로지
→ 계층형 토폴로지라고도 불리며 노드의 추가, 삭제가 쉽다. 하지만 특정 노드에 트래픽이 집중될 때 하위 노드에 영향을 끼칠 수 있다.
버스 토폴로지
→ 버스 토폴로지는 중앙 통신 회선 하나에 여러 개의 노드가 연결되어 공유하는 네트워크 구성을 말하며 근거리 통신망(LAN)에서 사용한다.
설치 비용이 적고 신뢰성이 좋으며 노드의 추가, 삭제가 용이하다. 하지만 스푸핑에 취약하다는 문제점이 있다.
💡 스푸핑
→ LAN상에서 송신부의 패킷을 송신과 관련 없는 다른 호스트에 가지 않도록 스위칭 기능을 마비시키거나 속여서 특정 노드에 해당 패킷이 오도록 처리하는 것을 말한다.
스타 토폴로지
→ 노드의 추가, 제거가 용이하며 패킷의 충돌 발생 가능성이 적다. 어떠한 노드에 장애가 발생하면 에러를 쉽게 발견하며 제거할 수 있지만, 중앙 노드에 장애가 발생하면 전체 네트워크에 문제가 생긴다.
링형 토폴로지
→ 각각의 노드가 양 옆의 노드와 연결되어있다. 노드 수가 증가되어도 네트워크상의 손실이 거의 없고 충돌 발생 가능성이 적다. 하지만 네트워크 구성 변경이 어렵고 장애가 발생하면 전체 네트워크에 영향을 크게 주는 단점이 있다.
메시 토폴로지
→ 한 단말 장치에 장애가 발생해도 여러 개의 경로가 존재하므로 네트워크를 계속 사용할 수 있고, 트래픽도 분산 처리가 가능하다. 하지만 노드의 추가가 어렵고 구축비용과 운용비용이 비싸다.
병목현상
→ 병목현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다. 서비스에서 이벤트를 열었을 때 트래픽이 많이 발생하고, 트래픽을 관리하지 못하면 병목 현상이 생겨 사용자는 웹 사이트로 들어갈 수 없다.
2-1-3. 네트워크 분류
네트워크는 규모를 기반으로 분류되며 사무실과 개인적으로 소유 가능한 규모인 LAN, 서울시 등 시 정도의 규모인 MAN, 그리고 세계 규모의 WAN으로 나뉜다.
2-2. TCP / IP 4계층 모델
2-2-1. 계층 구조
TCP / IP은 4계층, OSI 는 7계층을 구성하고 있다.
이 계층들은 특정 계층이 변경되어도 다른 계층에 영향을 주지 않는다.
애플리케이션 계층
→ 애플리케이션 계층은 FTP, HTTP, SSH, SMTP, DNS 등 응용 프로그램이 사용되는 프로토콜 계층이며 웹 서비스, 이메일 등 서비스를 제공하는 층이다.
전송 계층
→ 전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공할 수 있다. 대표적인 예로 TCP와 UDP가 있다.
TCP는 패킷 사이의 순서를 보장하며 연결지향 프로토콜을 사용해서 신뢰성을 구축해 수신 여부를 확인하며 ‘가상회선 패킷 교환 방식’을 사용한다.
UDP는 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 ‘데이터그램 패킷 교환 방식’을 사용한다.
TCP 연결 성립 과정
→ TCP는 신뢰성을 확보할 때 ‘3-way handshake’ 방식을 사용한다.
- SYN 단계 : 클라이언트는 서버에 클라이언트의 ISN(Initial Sequence Numbers, 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 넘버)을 담아 SYN(SYNchronization, 연결 요청 플래그)을 보낸다. ISN은 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말한다.
- SYN + ACK 단계 : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1 을 보낸다.
- ACK 단계 : 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK(ACKledgement, 응답 플래그)를 서버에 보낸다.
이렇게 '3-way handshake' 과정 이후 신뢰성이 구축되고 데이터 전송을 시작한다. TCP는 위와 같은 과정이 있기에 신뢰성이 있는 계층이라고 하며 UDP는 없기 때문에 신뢰성이 없는 계층이라고 한다.
TCP 연결 해제 과정
→ TCP가 연결을 해제할 떄는 ‘4-way handshake’ 과정이 발생한다.
- 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
- 서버는 클라이언트로 ACK 승인 세그먼트를 보낸 후 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
- 서버는 ACK를 보내고 일정 시간 후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
- 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도 대기 후 클라이언트와 서버의 모든 자원의 연결이 해제 된다.
TIME_WAIT를 일정 시간 후 닫는 이유는?
1. 지연 패킷이 발생할 경우를 대비 → 데이터 무결성 문제가 발생할 수 있기 때문
2. 두 장치가 연결이 닫혔는지 확인하기 위해
인터넷 계층
→ 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층이다. IP, ARP, ICMP 등이 있으며 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달한다. 상대방이 잘 받았는지에 대해 보장하지 않는 비연결형적인 특징이 있다.
링크 계층
→ 전선, 광섬유, 무선 등 실질적 데이터를 전달하며 장치 간 신호를 주고 받는 규칙을 정하는 계층이며, 네트워크 계층이라고도 불린다.
전이중화 통신
→ 양 장치가 동시에 송수신할 수 있는 방식이다. 현대 고속 이더넷이 사용하는 방식이다.
반이중화 통신
→ 양 장치가 서로 통신할 순 있지만, 동시에는 통신할 수 없으며 한 번에 한 방향만 통신할 수 있는 방식이다. 만약, 둘 이상의 장치가 동 시에 전송하면 충돌이 발생해 메시지가 손실되거나 왜곡될 수 있기 때문에 충돌 방지 시스템(CSMA/CA)이 필요하다.
💡 MAC 주소
→ 컴퓨터나 노트북 등 각 장치에는 네트워크에 연결하기 위한 장치(LAN 카드)가 있는데, 이를 구별하기 위한 식별번호를 말하며 48비트로 구성된다.
계층간 데이터 송수신 과정
애플리케이션 계층에서 전송 계층으로 보내는 Request 값들이 캡슐화 과정을 거쳐 전달되며, 다시 링크 계층을 통해 해당 서버와 통신을 하고, 해당 서버의 링크 계층으로부터 애플리케이션까지 비캡슐화 과정을 거쳐 데이터가 전송된다.
캡슐화 과정
비 캡슐화 과정
2-2-2. PDU
네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위를 PDU(Protocol Data Unit)라고 한다. PDU는 제어 관련 정보들이 포함된 ‘헤더’, 데이터를 의미하는 ‘페이로드’로 구성되어 있으며 계층마다 부르는 명칭이 다르다.
예를 들어 애플리케이션 계층은 ‘메시지’를 기반으로 데이터를 전달할때, HTTP의 헤더가 문자열로 구성되어있다.
2-3. 네트워크 기기
2-3-2. 애플리케이션 계층을 처리하는 기기
L7 스위치와 L4 스위치 차이
→ L4 스위치는 전송 계층을 처리하는 기기로 스트리밍 관련 서비스에서는 사용할 수 없으며 메시지를 기반으로 인식하지 못하고 IP와 포트를 기반으로 트래픽을 분산한다. 반면 L7 로드밸런서는 IP, 포트 외에도 URL, HTTP 헤더, 쿠키 등을 기반으로 트래픽을 분산한다.
2-4. IP 주소
2-4-1. ARP
컴퓨터 간 통신방식은 IP 주소에서 ARP를 통해 MAC 주소를 찾아 MAC 주소를 기반으로 통신한다. ARP(Address Resolution Protocol)란 IP 주소로부터 MAC 주소를 구하는 IP와 MAC 주소의 다리 역할을 하는 프로토콜이다. ARP를 통해 가상 주소인 IP 주소를 실제 주소인 MAC 주소로 변환한다. 이와 반대로 RARP를 통해 실제 주소인 MAC 주소를 가상 주소인 IP주소로 변환하기도 한다.
💡 브로드 캐스트
→ 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식. 유니캐스트 → 고유 주소로 식별된 하나의 네트워크 목적지에 1:1로 데이터를 전송하는 방식.
2-4-3. IP 주소 체계
IP 주소는 IPv4와 IPv6로 나뉜다.
클래식 기반 할당 방식
→ A, B, C, D, E 다섯 개의 클래스로 구분하는 방식이다. 클래스 A-B-C는 일대일 통신으로 사용되고 클래스 D는 멀티캐스트 통신, 클래스 E는 앞으로 사용할 예비용으로 사용하는 방식이다.
NAT(Network Address Translation)
→ 패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP 주소 정보를 수정해 IP 주소를 다른 주소로 매핑하는 방법이다. IPv4 주소 체계만으로는 많은 주소들을 모두 감당하지 못하는 단점이 있는데, 이를 해결하기 위해 NAT로 공인 IP와 사설 IP로 나눠서 많은 주소를 처리한다.
2-5. HTTP
2-5-1. HTTP/1.0
HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되어있다. 이는 RTT(패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간 즉, 패킷 왕복 시간)의 증가를 불러오게 되었다.
request마다 TCP의 '3-way handshake'를 열어야 하기 때문에 RTT가 증가하는 단점이 있다.
2-5-2. HTTP/1.1
매번 TCP를 연결하는게 아닌 TCP 초기화 이후 keep-alive 라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀌었다. HTTP/1.0에서도 keep-alive가 있었지만 표준화 되어 있지 않았고 HTTP/1.1 부터 표준화가 되어 기본 옵션으로 설정되었다.
한 번 TCP '3-way handshake'가 발생하면 이후에는 발생하지 않는다. 하지만 문서 안에 다수의 리소스를 처리하려면 대기 시간이 길어진다는 단점이 존재한다. 또한 HTTP/1.1의 헤더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무거웠다는 단점도 존재했다.
HOL Blocking
→ 네트워크에서 같은 Queue에 있는 패킷이 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하를 말한다.
2-5-3. HTTP/2.0
HTTP/2.0은 HTTP1.x 보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다.
멀티플렉싱
→ 다수의 스트림을 사용해 송수신한다. 특정 스트림의 패킷이 손실되었다고 해도 해당 스트림에만 영향이 있고 나머지 스트림은 정상적으로 흐른다.
위 그림처럼 병렬적인 스트림(스트림 내 데이터들도 쪼개져 있다)을 통해 데이터를 서빙한다. 이를 통해 단일 연결을 사용하여 여러 요청을 request 혹은 response가 가능하게 되며 HTTP/1.x에서 발생하는 문제인 HOL Blocking 을 해결할 수 있다.
헤더 압축
→ 허프만 코딩을 통해 헤더를 압축하여 HTTP/1.x의 문제점을 해결할 수 있다.
서버 푸시
→ HTTP/1.x 에서는 클라이언트가 서버에 요청을 해야 파일을 다운로드 받을 수 있었지만, HTTP/2는 서버가 바로 리소스를 푸시할 수 있다.
2-5-4. HTTPS
HTTP/2는 HTTPS 위에서 동작한다. HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTPS 요청을 말한다.
SSL/TLS는 보안 세션을 기반으로 데이터를 암호화하여 보안 세션이 만들어질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 사용된다.
인증 메커니즘
→ CA에서 발급한 인증서를 기반으로 이루어진다. 공개키를 Client에게 제공하고 사용자에게는 ‘서버가 신뢰’할 수 있는 서버임을 보장한다.
암호화 알고리즘
→ 키 교환 알고리즘 (디피-헬만) 방식을 근간으로 만들어졌다.
디피-헬만 키 교환 암호화 알고리즘
→ 디피-헬만 키 교환(Diffie-Hellman key exchange) 암호화 알고리즘은 암호키를 교환하는 하나의 방법이다.
앞의 그림처럼 최초 공개 값을 공유하고 각자의 비밀 값과 혼합한 후 혼합 값을 공유한다. 그다음 각자의 비밀 값과 또 혼합한다.
이후 공통의 암호키인 PSK(Pre-Shared Key)가 생성된다.
해싱 알고리즘
→ 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘이다. SSL/TLS는 해싱 알고리즘으로 SHA/256알고리즘이 자주 쓰인다.
SHA-256 알고리즘
→ 해시 함수의 결과값이 256비트인 알고리즘이다. SHA-256 알고리즘은 해싱을 해야 할 메시지에 1을 추가하는 등 전처리를 하고 전처리된 메시지를 기반으로 해시를 반환한다.
💡 해시
→ 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값
2-5-5. HTTP/3
→ HTTP/3은 TCP 위에서 돌아가는 HTTP/2와는 달리 QUIC라는 계층 위에서 돌아가며 UDP 방식으로 돌아간다.
또한, HTTP/2에서 장점이었던 멀티플렉싱을 가지고 있으며, 초기 연결 설정 시 지연 시간 감소라는 장점이 있다.
QUIC는 첫 연결 설정에 1-RTT만 소요된다. 클라이언트가 서버에 신호를 한 번 주고, 서버도 응답하기만 하면 바로 본 통신을 시작할 수 있다.
'IT > IT 도서 리뷰' 카테고리의 다른 글
[면접을 위한 CS 전공지식 노트] - Chapter 01. 디자인 패턴과 프로그래밍 패러다임 (0) | 2023.12.28 |
---|