네트워크란 컴퓨터 등이 통신 기술을 이용하여 연결하고, 구축하는 연결망을 말한다.
프로토콜(protocol)은 통신 규약이라고 하며 데이터를 송수신하기 위해 정한 규칙을 의미한다.
네트워크를 구축할 떄는 처리량과 지연시간을 고려해야 한다. 많은 처리량을 처리할 수 있으며 지연 시간이 짧고 장애 빈도가 적으며 좋은 보안을 갖춘 네트워크가 좋은 네트워크이다.
- 처리량(throughput) : 링크를 통해 전달되는 단위 시간당 데이터양을 말한다. bps(bits per second) 초당 전송 또는 수신되는 비트수를 의미하며. 트래픽, 대역폭, 하드웨어 스펙등에 영향을 받는다.
- 지연 시간(latency) : 요청이 처리되는 시간을 말하며 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간을 말한다.
0. 네트워크 토폴리지
네트워크 토폴리지는 노드와 링크가 어떻게 배치되어 있는지에 대한 방식이자 연결 형태를 의미한다.
- 트리 토폴리지 : 계층형 토폴로지라고 하며 트리 형태로 배치한 네트워크 구성을 의미한다. 노드의 추가 / 삭제가 쉬우며 특정 노드에 트래픽이 집중될 때 하위 노드에 영향을 끼칠 수 있다.
- 버스 토폴리지 : 버스 토폴리지는 중앙 통신 회선 하나에 여러 개의 노드가 연결되어 공유하는 네트워크 구성을 말한다. 근거리 통신망(LAN)에서 사용된다.
- 스타 토폴리지 : 성형 이라고 불리기도 하며, 중앙에 있는 노드에 모두 연결된 네트워크 구성을 말한다. 노드를 추가하거나 에러를 탐지하기 쉽고 패킷의 충돌 발생 가능성이 적다. 어떠한 노드에 장애가 발생해도 쉽게 에러를 발견할 수 있으며 장애 노드가 중앙 노드가 아닐 경우 다른 노드에 영향을 끼치는 것이 적다. 하지만 중앙 노드에 발생하면 전체 네트워크를 사용할 수 없다.
- 링형 토폴리지 : 각각의 노드가 양 옆의 두 노드와 연결하여 전체적으로 고리처럼 구성된 망 구성 방식이다.
- 메시 토폴리지 : 망형 토폴로지라고도 하며 그물망처럼 연결되어 있는 구조이다. 한 단말 장치에 장애가 발생해도 여러 개의 경로가 존재하므로 네트워크를 계속 사용할 수 있고 트래픽도 분산 처리가 가능하다.
- LAN(Local Area Network) : 근거리 통신망을 의미하며 같은 건물등 좁은 공간에서 운영된다. 전송 속도가 빠르다.
- MAN(Metropolitan Area Network) : 대도시 지역 네트워크를 나타내며 전송 속도는 평균이다.
- WAN(Wide Area Network) : 광역 네트워크를 의미하며 국가 또는 대륙 같은 더 넓은 지역에서 운영된다. 속도는 낮다.
1. OSI 7계층
네트워크 통신이 이뤄지는 과정을 7단계로 나눈 네트워크 표준 모델이다.
데이터를 송신할 때는 높은 계층에서 낮은 계층으로 전달하고,
데이터를 수신하면 낮은 계층에서 높은 계층으로 데이터를 전달한다.
각 계층은 독립적이며 데이터를 송신할 때 각 계층에서 필요한 정보를 추가해 데이터를 가공한다.
- 7 (응용 계층) : HTTP, FTP 등의 프로토콜
- 6 (표현 계층) : 데이터를 표준화된 형식으로 변경한다.
- 5 (세션 계층) : 세션의 유지 및 해제 등 응용 프로그램 간 통신 제어와 동기화를 한다.
- 4 (전송 계층) : TCP, UDP와 같은 신뢰성 있는 데이터를 전달하기 위한 계층이다.
- 3 (네트워크 계층) : 데이터를 송신부에서 수신부까지 보내기 위한 최적 경로를 선택하는 라우팅(routing)을 수행한다.
- 2 (데이터 링크 계층) : 데이터 흐름을 관리하며 데이터의 오류 검출 및 복구 등을 수행한다. 브리지, 스위치, 이더넷
- 1 (물리 계층) : 데이터를 비트 단위인 0과 1로 변환 후 장비를 사용해 전기 신호로 전송한다. 리피터, 허브 등
2. TCP/IP 4계층
인터넷에서 데이터를 주고받기 위한 네트워크 프로토콜을 말한다.
TCP(Tranmission Control Protocol, 전송 제어 프로토콜)은 네트워크에서 주고받는 데이터를 작게 분할한 단위인 패킷(송신 주소, 수신 주소 등의 정보가 포함되어 있다.)의 전달 여부와 전송 순서를 보장하는 통신 방식이고, IP(Internet Protocol, 인터넷 프로토콜)는 패킷을 빠르게 보내기 위한 통신 방식을 의미한다.
TCP/IP 기반 프로토콜에는 대표적으로 HTTP가 있다.
TCP/IP에 맞춰 네트워크 통신 표준인 OSI 계층을 단순화한 것이 TCP/IP 4계층이다.
- 4 (응용 계층): 사용자와 소프트웨어를 연결해주는 계층으로, HTTP, HTTPS, DNS, FTP, SSH등 프로토콜이 동작한다.
- 3 (전송 계층): 데이터의 신뢰성을 보장, 포트 번호로 데이터(세그먼트)를 응용 프로그램에 전달한다. TCP, UDP 등
- 2 (인터넷 계층): 데이터를 최종 목적지 까지 도달할 수 있게 해주는 계층, IP, ICMP 가 대표적이다.
- 1 (네트워크 인터페이스 계층): 데이터를 전기 신호로 변환하고 MAC 주소를 사용해 기기에 데이터를 전송한다. 이더넷, Wi-Fi등을 의미한다.
IP 주소는 컴퓨터 또는 네트워크 장치를 식별하기 위한 값이다.
3. TCP와 UDP
TCP/IP 4계층의 전송 계층(3계층) 에서 사용하는 대표적인 프로토콜이다. 송신자와 수신자를 연결하는 통신 서비스를 제공한다.
TCP (Tranmission Control Protocol)
TCP는 연결형 서비스를 지원하고 데이터의 신뢰성을 보장한다. 가상 회선 방식으로 패킷을 전송하므로 패킷의 전송 순서가 보장되며, 수신 여부를 확인한다. 손실이 없음을 보장하므로 신뢰성이 높으나, 데이터 송수신 속도가 느리다.
TCP 핸드셰이킹
TCP는 연결형 서비스 이므로, 송신부와 수신부를 연결하는 과정을 거친다. 연결을 시작할 때는 3-way handshaking을, 종료할 떄는 4-way handshaking을 한다.
핸드셰이킹 과정에서는 송신부와 수신부 간 연결을 제어 및 관리하도록 플래그(flag) 값을 주고 받는다. 플래그 값은 다음과 같다.
- SYN: Synchronization(동기화)의 약자로, 연결을 생성할 때 사용한다.
- FIN: Finish(종료)의 약자로, 연결을 끊을 때 사용한다.
- ACK: Acknowledgment(승인)의 약자로, 데이터를 전송하면 수신자가 받았음을 알려 줄 때 사용한다.
- RST: Reset(초기화)의 약자로 연결을 재설정 할 때 사용한다.
3-way 핸드셰이킹
데이터를 주고받기 전 상대방 컴퓨터와 세션을 수립하는 과정으로, 데이터의 정확한 전달을 위해 필요한 절차이다.
- SYN(임의의 숫자 N)
- ACK(N + 1) + SYN(임의의 숫자 M)
- ACK(M + 1)
송신부와 수신부 간 번갈아 요청을 해서 연결을 확인 한 후 데이터 통신을 한다. 이처럼 요청과 응답을 총 3번 주고받는다고 해서 3-way handshaking 이라고 한다. (악수)
4-way 핸드셰이킹
TCP 연결을 해제할 때 이뤄지는 과정이다. 연결을 해제할 때는 이름 그대로 요청과 응답을 총 4번 주고받게 된다.
- FIN(송신 -> 수신)
- ACK(수신 -> 송신)
- FIN(수신 -> 송신)
- ACK(송신 -> 수신)
TCP 제어 방법
TCP의 데이터의 신뢰성을 보장하기 위한 제어 방법으로, 흐름 제어, 혼잡 제어, 오류 제어가 있다.
- 흐름 제어(flow control) : 데이터 송신부와 수신부에서 데이터 처리 속도의 차이 떄문에 생기는 데이터 손실을 방지
- 혼잡 제어(congestion control) : 송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실 발생하는 것 방지
- 오류 제어(error control): 통신 중 데이터에 오류 또는 유실이 발생할 때 데이터의 신뢰성을 보장하기 위해 오류를 제어
UDP (User Datagram Protocol)
UDP(User Datagram Protocol)는 송신부와 수신부 간 연결을 지원하지 않고 데이터그램 형태의 통신을 지원한다. 따라서 3-way 핸드셰이킹 같은 것 없이 패킷을 바로 송수신한다. 신뢰성이 낮고 패킷 순서가 다를 수 있지만, 속도가 빠르다는 장점이 있다. 비연결형 서비스이다.
UDP의 오류검출
UDP도 최소한의 신뢰성을 보장하기 위해 체크섬(checksum) 방식으로 오류를 검출한다.
체크섬은 데이터의 무결성을 보장하는 간단한 방법이다.
하지만 이는 선택사항이므로 송신부에서 체크섬 값을 0으로 보내면 수신부는 확인하지 않는다.
4. HTTP (HyperText Transfer Protocol)
인터넷상에서 데이터를 전송하기 위한 프로토콜이다. 다음과 같은 특징이 있다.
- 비연결성(connectionless) : 클라이언트에서 요청을 보낸 후 서버로부터 응답을 받으면 연결을 끊는 것. 서버에서 응답을 받고 나서도 연결을 유지하려면 자원이 사용되므로, 연결을 유지하지 않는 비연결성으로 자원을 아끼며 불특정 다수를 대상으로 하는 서비스에 유리하다. HTTP Keep Alive로 마지막 응답 이후 연결을 유지할 시간을 두어 시간 내에 동일한 클라이언트로부터 요청이 올 시 연결 과정을 생략 할 수도 있다.
- 무상태(stateless) : 서버에서 클라이언트의 상태를 저장하지 않는 것 클라이언트에서 요청한 사항을 서버에 저장하지 않으므로, 클라이언트는 요청에 필요한 데이터를 모두 가지고 있거나, 서버가 클라이언트로부터 받은 요청 사항을 저장해두어야 한다. 이때 사용되는 것이 쿠키(cookie)와 세션(session)이다. 쿠키 : 클라이언트의 로컬 웹 브라우저에 저장하는 데이터 파일로, 키와 값을 저장한다. 로그인 정보와 장바구니 정보등이 예시이다. 세션 : 서버에서 클라이언트의 연결 정보를 저장 및 관리하는 것을 말한다. 서버에 데이터가 저장되므로 보안 면에서는 쿠키보다 좋지만, 서버에 과부하가 올 수 있다.
HTTP에서는 클라이언트와 서버가 통신하기 위해 정형화된 데이터인 HTTP 메시지를 주고받는다.
5. HTTPS (HyperText Transfer Protocol Secure)
보안 계층인 SSL/TLS를 이용해 HTTP의 보안을 강화한 웹 통신 프로토콜이다.
HTTP는 데이터 암호화를 거치지 않고 전송해서 보안에 취약하다. 그래서 등장한 것이 HTTPS이다.
SSL(Secure Socket Layer)는 넷스케이프(Netscape)에서 개발한 암호화 프로토콜이다. 전송 계층과 응용 계층 사이에 있는 보안을 위한 통신 계층이며, 당시 SSL은 몇 가지 문제 점이 있었는데 이를 보완해서 새로운 암호화 프로토콜인 TLS(Transport Layer Security)를 만들었다.
현재 HTTPS에서 통용되는 보안 방식은 TLS 이지만, SSL이라는 명칭이 사라지지 않아 SSL 또는 SSL/TLS라고 부른다.
데이터를 송신할 때 응용 계층에서 보안 계층의 SSL/TLS로 데이터를 보내면 데이터를 암호화해 전송 계층으로 전달한다.
수신부에서는 전송 계층에서 보낸 데이터를 보안 계층의 SSL/TLS에서 받아 복호화 한 후 응용 계층으로 보낸다
SSL/TLS에서는 암호화를 위해 2가지 암호화 방식을 사용한다.
- 대칭 키 암호화 방식: 데이터의 암호화와 복호화에 모두 같은 키인 대칭 키를 이용하는 방식이다. 수신자가 가진 키를 송신자에게 준다. 수신자가 가진 키를 송신자에게 주고, 송신자는 받은 키로 데이터를 암호화 한 후 수신자에게 보낸다. 수신자는 동일한 키로 데이터를 복호화한다. ( 키 유출에 주의해야 한다. )
- 공개 키 암호화 방식: 데이터의 암호화와 복호화를 다른 키로 하는 방식이다. 데이터를 암호화할 때는 공개 키를, 데이터를 복호화 할 떄는 비밀 키를 이용한다.
6. 웹 페이지 접속 과정
- 사용자가 URL을 웹 브라우저에 입력한다.
- 웹 브라우저는 입력한 URL을 바탕으로 DNS(Domain Name Server) 서버에 연결할 IP를 요청한다.
- DNS 서버는 IP 주소를 웹 브라우저에게 응답으로 제공한다.
- 웹 브라우저는 DNS 서버에서 받은 IP를 통해 웹 서버와 TCP/IP 연결을 하고 HTTP 요청을 보낸다.
- 웹 서버는 받은 HTTP 요청에 응답한다. 응답은 웹 페이지와 필요한 리소스를 포함한다.
- 웹 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지를 보여준다.
7. REST
REST는 HTTP 통신을 쉽게 활용할 수 있는 방법으로, HTTP를 기반으로 한 한 플랫폼에서 범용으로 사용된다.
REST ( Representational State Transfer )는, HTTP 통신을 활용하기 위해 고안된 아키텍쳐이다. 즉, 웹에서 데이터를 주고받기 위한 아키텍쳐이다.
HTTP를 기반으로 하기 때문에 별도의 인프라를 구축할 필요가 없다는 장점이 있다.
- URI(Uniform Resource Identifier) : 인터넷에 있는 자원을 나타내는 주소이다. URI는 인터넷에서 요구하는 기본 조건으로 인터넷 프로토콜에 항상 붙어 다닌다. URI의 하위 개념으로 URL, URN이 있다.
- URL(Uniform Resource Locator) : 인터넷에서 자원의 위치를 알 수 있는 규약이다. 웹 사이트 주소와 인터넷의 모든 자원을 나타 낼 수 있다.
- URN(Uniform Resource Name) : 자원의 위치 정보가 아닌 실제 자원을 특정한다.
8. REST API
REST를 기반으로 한 API를 뜻한다. API(Application Programming Interface)는 다른 소프트웨어에 서비스를 제공하기 위한 소프트웨어 인터페이스이다. REST를 기반으로 한 인터페이스인 REST API는 다음과 같이 구성된다.
- 자원 - URI
- 행위 - HTTP 메서드
- 표현 - JSON, XML 등
→ 자원의 식별은 URI로 하고, 자원에 대한 행위(처리)는 HTTP 메서드로 나타낸다. 전달되는 데이터는 JSON 또는 XML 등으로 표현한다.
작동 방식은 다음과 같다.
- 클라이언트가 URI로 식별한 자원에 대해 HTTP 메서드를 사용해 REST API로 요청한다.
- REST API가 HTTP 요청 메시지에 실려 서버에 전달된다.
- 서버에서는 수신한 HTTP 요청 메시지를 바탕으로 요청 사항을 확인해 처리하고 HTTP 응답을 반환한다. 응답에는 요청에 대한 처리 성공 여부와 정보를 포함한다.
- 응답 메시지는 자원에 대한 정보를 JSON or XML 등의 형태로 포함하고 있다.
→ REST 규칙을 지키며 API를 제공하는 서비스를 RESTful API라고 한다. 규칙은 다음과 같다.
- 자원에 대한 행위는 HTTP 메소드로 나타내며, 메서드나 행위에 대한 표현이 URI에 들어가면 안된다.
- HTTP 메서드는 명시적이어야 한다. 목적에 맞는 HTTP 메서드를 사용해야 한다. (POST -> UPDATE 아닌 CREATE)
- URI 경로는 슬래시(/)로 계층 관계를 표현하며, URI 마지막에 슬래시가 들어가면 안 된다.
- URI 경로에 언더바(_)를 사용해선 안되고, 소문자 사용을 지향한다.
요약 겸 정리
TCP Keep Alive와 HTTP Keep Alive
TCP Keep Alive는 연결된 세션을 계속 유지하기 위한 방식, 일정 시간 동안 패킷 교환이 없으면 연결 유지 여부를 확인하는 패킷을 던짐.
HTTP Keep Alive는 일정 시간 동안 연결을 유지하는 방식, 정해진 시간이 끝나면 연결 해제
이러한 방식을 통해 서버 간에 불필요한 연결과 해제의 반복을 줄일 수 있다.
TCP와 UDP의 차이점
TCP와 UDP는 전송 프로토콜이지만, TCP는 연결형 서비스, 가상회선 방식, 패킷 전송 순서를 보장하고 신뢰성이 높으나 속도가 빠름. UDP는 비연결형 서비스, 데이터그램 방식, 패킷 전송 순서 보장하지 않고 신뢰성이 낮으나 속도가 빠름.
쿠키와 세션의 차이
쿠키와 세션 모두 HTTP 통신의 단점을 보완하기 위해 사용한다.
쿠키는 브라우저에 저장되어 있는 키와 값이 있는 데이터 파일. 서버에서 클라이언트에 대한 정보를 저장하지 않아도 쿠키를 이용해 정보를 재사용 할 수 있다. 로그인 인증 정보, 온라인 장바구니 등에 사용된다.
세션은 키와 값은 클라이언트에, 데이터는 서버에 저장해서 쿠키보다 보안에 강하다는 특징이 있다.
대칭 키 암호화와 비 대칭 키 암호화
대칭 키 암호화 방식은 데이터의 송신자와 수신자 모두 대칭 키를 이용해 데이터를 암호화 및 복호화 하는 방식이다.
공개 키 암호화 방식은 공개 키로 데이터를 암호화하고 비밀 키로 데이터를 복호화하는 방식이다.