2.1 네트워크 계층
1. OSI 7계층 ⭐⭐
네트워크 통신이 이뤄지는 과정을 7단계로 나눈 네트워크 표준 모델
데이터를 송신할 때는 높은 계층 -> 낮은 계층 전달
데이터를 수신할 때는 낮은 계층 -> 높은 계층 전달
- 데이터 캡슐화
송신할 때 각 계층에서 필요한 정보를 추가해 데이터 가공하는데, 이때 제어 정보를 담은 헤더나 트레일러가 붙음
수신부의 같은 계층에서 데이터 호환성을 높이고 오류의 영향을 최소화하기 위해서
수신할 땐 헤더나 트레일러를 분석하는 역캡슐화를 진행
- 프로토콜
통신규약, 데이터를 송수신하기 위해 정한 규칙
7계층(응용 계층) - HTTP, FTP 등의 프로토콜을 응용 프로그램의 UI를 통해 제공
6계층(표현 계층) - 데이터를 표준화된 형식으로 변경
5계층(세션 계층) - 세션의 유지 및 해제 등 응용 프로그램 간 통신 제어와 동기화
4계층(전송 계층) - 신뢰성 있는 데이터를 전달하기 위한 계층으로, TCP, UDP 같은 전송 방식과 포트번호 결정
3계층(네트워크 계층) - 데이터를 송신부부터 수신부까지 보내기 위한 최적 경로를 선택하는 라우팅을 수행
이때 선택한 최적 경로를 라우트라고 함
ex) 라우터
2계층(데이터 링크 계층) - 데이터 흐름을 관리하며, 데이터의 오류 검출 및 복구 수행
ex) 브리지, 스위치, 이더넷
1계층(물리 계층) - 데이터를 비트 단위의 0과 1로 변환하여 장비 사용해 전송 or 전기 신호를 데이터로 복원
ex) 리피터, 허브
2. TCP/IP 4계층 ⭐
인터넷에서 데이터를 주고받기 위한 네트워크 프로토콜을 의미
TCP/IP 기반 프로토콜에는 대표적으로 HTTP가 있음
TCP: 데이터를 나눈 단위인 패킷의 전달 여부와 전송 순서를 보장하는 통신 방식
IP: 패킷을 빠르게 보내기 위한 통신 방식
TCP/IP 4계층에서 데이터 흐름과 각 계층의 역할
4계층(응용 계층) - 사용자와 소프트웨어를 연결해 주는 계층
ex) HTTP, HTTPS, DNS 등의 프로토콜이 작동함
3계층(전송 계층) - 데이터 신뢰성 보장, 포트 번호로 데이터를 적절한 응용 프로그램에 전달하는 역할
데이터 단위는 세그먼트
ex) TCP, UDP
2계층(인터넷 계층) - 데이터를 최종 목적지까지 도달할 수 있게 하는 계층
전송 계층으로부터 받은 데이터에 헤더를 붙여 캡슐화를 하는데 이를 패킷 또는 데이터그램이라고 함
1계층(네트워크 인터페이스 계층) - 네트워크 접근 계층. 데이터를 전기 신호로 변환, MAC 주소를 사용해 기기에 데이터 전달
ex) 이더넷, Wi-Fi
2.2 TCP와 UDP
1. TCP란 ⭐⭐⭐
- 송신부와 수신부의 연결을 확인하는 연결형 서비스
- 패킷 교환 방식은 패킷이 전달되는 회선이 정해져 있는 가상회선방식
- 패킷의 전송 순서 보장
- 패킷의 수신 여부 확인
- 송신부와 수신부는 1대 1 통신
- 데이터의 손실이 없음을 보장하므로 신뢰성 높음
- 그대신 데이터 송수신 속도 느림
➡️ 패킷 교환 방식
- 가상회선방식
데이터를 주고받기 전에 패킷을 전송할 경로인 가상 회선을 설정해서 모든 패킷을 같은 경로로 전송
- 데이터그램방식
패킷마다 최적의 경로로 전송되는 방식, 송신부에서 보낸 패킷의 순서와 수신부에 도착하는 패킷의 순서가 다를 수 있음
2. TCP 핸드셰이킹 ⭐⭐⭐
연결을 시작할 때는 3-way 핸드셰이킹
연결을 종료할 때는 4-way 핸드셰이킹
핸드셰이킹 과정에서는 송신부와 수신부 간 연결을 제어할 수 있도록 플래그 값 주고 받음
SYN - 동기화의 약자로, 연결을 생성할 때 사용
FIN - 종료의 약자로, 연결을 끊을 때 사용
ACK - 승인의 약자로, 데이터를 전송하면 수신자가 받았음을 알려줄 때 사용
RST - 초기화의 약자로, 연결을 재설정할 때 사용
PSH - 밀다의 약자로, 빠른 응답이 필요한 데이터를 응용 계층으로 즉시 전송할 때 사용
URG - 긴급의 약자로, 다른 데이터보다 우선순위가 높은 데이터를 전송할 때 사용
3-way 핸드셰이킹
데이터를 본격적으로 주고받기 전에 상대방 컴퓨터와 세션을 수립하는 과정
4-way 핸드셰이킹
TCP 연결을 해제할 때 이뤄지는 과정
3. TCP 제어방법 ⭐⭐⭐
TCP의 가장 큰 특징인, 데이터 신뢰성을 보장하기 위한 제어 방법
크게 흐름제어, 혼잡제어, 오류제어로 나뉨
1️⃣흐름제어
데이터 송신부와 수신부에서 데이터 처리 속도의 차이 때문에 생기는 데이터 손실을 방지하는 방법
1. 정지 대기(stop-wait)
송신부에서 데이터를 보낸 후, ACK 메시지를 받을 때까지 다음 데이터를 보내지 않고 기다리는 방식
2. 슬라이딩 윈도우
송신부에서 데이터의 수신 여부(ACK)를 확인하지 않고, 수신부에서 설정한 윈도우 크기만큼 데이터를 연속적으로 보낼 수 있게 해서 데이터 흐름을 동적으로 제어하는 방식
수신 여부와 상관없이 일정 크기의 데이터를 연속적으로 보내서 ACK 메시지를 받아야만 다음 메시지를 보낼 수 있는 정지-대기 방식의 단점을 보완
윈도우 크기가 5일 때, 슬라이딩 윈도우는 다음과 같이 동작한다.
2️⃣혼잡제어
송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법
혼잡은 네트워크에 패킷 수가 과도하게 증가하는 증상을 말함
1. AIMD (Addiive Increase Multiplicative Decrease)
데이터를 전달할 때 합 증가(AI) 방식으로 혼잡 윈도우의 크기를 더해가면서 키움
그리고 데이터 손실이 발생하면 혼잡 윈도우의 크기를 곱 감소(MD) 방식을 적용해 1/2배와 같이 배수 단위로 줄임
2. 느린 시작
위노우 크기가 1인 상태에서 시작해 ACK 메시지를 수신할 때마다 윈도우 크기를 1씩 늘려나감
그러다 혼잡이 발생하면 윈도우 크기를 1로 확 줄이는 방식
3. 혼잡 회피
윈도우 크기가 지수 함수 형태로 증가하다가 혼잡이 발생하는 것을 방지하기 위해 윈도우 크기에 대한 임계점을 정하는 방식
4. 빠른 회복
혼잡이 발생하면 혼잡 윈도우 크기를 절반으로 줄인 후 선형적으로 증가하는 방식
즉, 혼잡이 처음 발생하면 AIMD 방식으로 동작
5. 빠른 재전송
Duplicate ACK가 3번 발생하면 해당 시점의 윈도우 크기를 1/2로 줄이고, ACK 메시지를 받으면 다시 윈도우 크기를 키우는 방식
3️⃣오류제어
데이터에 오류 또는 유실이 발생할 때 데이터의 신뢰성을 보장하기 위해 오류를 제어하는 방식
데이터에 오류 또는 유실 발생을 인지하는 경우
- 수신부에서 NAK 메시지를 보낸 경우
- 3 Duplicate ACK가 발생할 때
- 수신부로부터 ACK 메시지를 받지 못해 타임아웃이 발생할 때
1. 정지-대기
송신한 패킷에 대한 ACK 메시지를 일정 시간 동안 받지 못해 타임아웃이 발생하면 해당 패킷을 다시 보내는 방식
송신부에서 데이터를 1개만 보내고 메시지를 기다려야 하기 때문에 ARQ(재전송 요청) 방식 사용
2. Go-Back-N ARQ
송신부에서 연속적으로 데이터를 보냈을 때 누락된 데이터가 있으면 송신부에서 해당 데이터부터 재전송하는 방식
3. Selective-Request ARQ
송신부에서 연속적으로 데이터를 보냈을 때 누락된 데이터가 있으면 수신부에서 해당 데이터만 재전송을 요청하는 방식
4. UDP ⭐⭐⭐
TCP와 달리 핸드셰이킹 과정 없이 패킷을 바로 송수신함
- 송신부와 수신부의 연결이 보장되지 않는 비연결형 서비스
- 패킷이 서로 다른 회선으로 교환될 수 있는 데이터그램 패킷 교환 방식
- 패킷 수신 여부를 확인하지 않음
- 1:1, 1:N, N:N 통신 모두 가능
- 데이터의 신뢰성이 낮음
- 데이터의 전송 속도 빠름
5. UDP의 오류 검출 ⭐⭐⭐
최소한의 신뢰성을 보장하기 위해 CheckSum 방식으로 오류 검출
❓ CheckSum
데이터의 무결성을 보장하는 간단한 방법
체크섬을 만들기 위한 데이터를 모두 더한다.
오버플로 되는 캐리가 발생하면 해당 캐리를 떼서 데이터에 다시 더한 후 1의 보수를 취해 체크섬을 만든다.
2.3 HTTP
1. HTTP ⭐⭐⭐
인터넷상에서 데이터를 전송하기 위한 프로토콜
TCP/IP 4계층에서 응용 계층에 속함
1. 비연결성(connectionless)
클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는 것
서버에서 응답을 받고 나서도 연결을 유지하려면 그만큼 자원을 사용하게 돼서 비연결성을 사용해 연결을 끊는다.
그러나, 연결을 유지하지 않기 때문에 서버가 클라이언트를 기억할 수 없다는 단점이 있고, 동일한 클라이언트에서 연속적으로 요청이 오면 연결과 연결 해제 과정을 반복하게 되어 자원을 낭비하게 된다.
이러한 단점을 보완하기 위해 일정 시간 동안 연결을 유지할 수 있도록 HTTP Keep Alive를 사용한다.
따라서, 마지막 응답 이후 일정 시간 동안 연결을 유지해 동일한 클라이언트로부터 요청이 오면 연결 과정을 생략할 수 있다.
2. 무상태(stateless)
서버에서 클라이언트의 상태를 저장하지 않는 것
클라이언트는 요청에 필요한 데이터를 모두 가지고 있어야 한다.
또는 서버가 클라이언트로부터 요청 사항을 모두 저장해야 한다.
이 방법들을 각각 쿠키와 세션이라고 한다.
무상태는 서버 확장성이 높아 클라이언트의 요청에 응답하는 서버가 바뀌어도 되기 때문에 서버를 계속 확장해도 된다. 특정 서버에 문제가 생겨 응답하지 못하는 문제점을 보완할 수 있다.
❓쿠키 (Cookie)
클라이언트의 로컬 웹 브라우저에 저장하는 데이터 파일, 키와 값을 저장
ex) 웹 사이트의 로그인 정보, 온라인 쇼핑몰 장바구니
❓세션 (Session)
서버에서 클라이언트와의 연결 정보를 저장 및 관리하는 것
서버에 데이터가 저장되므로 보안 면에서는 쿠키보다 좋지만, 접속자가 많을 경우 서버에 과부하가 옴
2. HTTPS ⭐⭐⭐
보안 계층인 SSL/TLS를 이용해 HTTP의 보안을 강화한 웹 통신 프로토콜
HTTP는 데이터 암호화를 거치지 않고 전송해서 보안에 취약해 HTTPS가 등장
SSL(Secure Socket Layer)
TLS(Transport Layer Security)
SSL는 암호화 프로토콜이지만, 몇 가지 문제점으로 인해 이를 보완해 새로운 암호화 프로토콜인 TLS를 개발
현재 HTTPS에서 통용되는 방식은 TLS지만, SSL라는 명칭이 사라지지 않아서 SSL 또는 SSL/TLS라고 부름
3. 웹 페이지 접속 과정 ⭐⭐⭐
- 사용자가 URL을 웹 브라우저에 입력한다.
- 웹 브라우저는 입력한 URL을 바탕으로 DNS 서버에 연결할 IP를 요청한다.
- DNS 서버는 IP 주소를 웹 브라우저에 응답으로 제공한다.
- 웹 브라우저는 DNS 서버에서 받은 IP를 통해 웹 서버와 TCP/IP 연결을 한다.
- HTTP 요청을 보내고, 웹 서버는 받은 HTTP 요청에 응답한다. 응답은 웹 페이지와 필요한 리소스를 포함한다.
- 웹 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지를 보여준다.
2.4 REST
1. REST란 ⭐⭐⭐
HTTP 통신을 쉽게 활용할 수 있는 대표적인 방법
Representational State Transfer의 약자, HTTP 통신을 활용하기 위해 고안된 아키텍처
Representational은 인터넷상의 자원을 URI로 나타낼 수 있음을 의미
클라이언트는 URI로 표현된 자원을 HTTP 메서드를 이용해 CRUD 연산을 할 수 있음
State Transfer은 자원의 상태를 주고받는 것, 즉 요청받은 자원의 상태를 전달하는 것을 의미
2. REST API⭐⭐⭐
REST를 기반으로 한 인터페이스
Application Programming Interface의 약자, 다른 소프트웨어에 서비스를 제공하기 위한 소프트웨어 인터페이스
자원의 식별은 URI
자원에 대한 행위 HTTP 메서드
전달되는 데이터 JSON or XML
3. HTTP 메서드 ⭐⭐⭐
멱등성이란?
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
'🍞 Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] SocketIO vs WebSockets (0) | 2023.02.02 |
---|---|
[네트워크] HTTP vs WebSockets (0) | 2023.02.02 |
[네트워크] REST와 RESTful API (1) | 2022.10.07 |
[네트워크] HTTP에 대해서 (0) | 2022.10.06 |