네트워크란 두 개 이상의 장치가 데이터를 주고받을 수 있도록 연결된 구조다.
[PC] ── [PC] [Server] ── [Printer] [EC2] ── [EC2] (VPC 내부)
👉 연결만 되어 있으면 네트워크
인터넷은 하나의 네트워크가 아니다.
👉 전 세계 수많은 네트워크를 연결한 “네트워크들의 네트워크”
[LAN] ─┐ [LAN] ─┼── Internet ── [LAN] [LAN] ─┘
👉 회사 내부망, 집 네트워크도 전부 인터넷의 일부
서버는 네트워크를 통해 요청을 받고 응답을 제공하는 컴퓨터(또는 프로그램)다.
Client ── 요청 ──▶ Server Client ◀─ 응답 ── Server
👉 서버는 “인터넷 그 자체”가 아니라, 인터넷 위에 존재
IP 주소는 네트워크에서 장치를 식별하기 위한 주소
👉 전화번호 같은 존재
포트는 한 컴퓨터 안에서 어떤 서비스로 갈지 정하는 번호
| 포트 | 서비스 |
|---|---|
| 80 | HTTP |
| 443 | HTTPS |
| 22 | SSH |
👉 IP = 건물 주소, Port = 방 번호
네트워크의 기본 구조는 Client - Server 모델이다.
[Client] ── 요청 ──▶ [Server] [Client] ◀─ 응답 ── [Server]
프로토콜은 통신 규칙이다.
👉 “말하는 방식에 대한 약속”
| 구분 | TCP | UDP |
|---|---|---|
| 신뢰성 | 높음 | 낮음 |
| 속도 | 느림 | 빠름 |
| 사용처 | 웹, 파일전송 | 스트리밍, 게임 |
방화벽은 네트워크 트래픽을 허용하거나 차단하는 보안 장치다.
Internet │ [NACL] │ [Security Group] │ [Server]
라우팅은 패킷이 목적지까지 가는 경로를 정하는 과정이다.
NAT는 사설 네트워크가 외부와 통신하도록 주소를 변환하는 기술이다.
VPC는 aws에서 사용하는 가상 사설 네트워크다.
Internet │ [IGW] │ [VPC] ├─ Public Subnet └─ Private Subnet
👉 AWS에서 네트워크의 기본 단위
CDN은 사용자와 서버 사이에 캐시 서버를 두어 콘텐츠를 빠르게 전달하는 구조다.
User │ [Edge Server] │ [Origin Server]
OSI 7 계층은 네트워크 통신을 역할별로 나눈 추상적 모델이다.
7. Application ── 사용자와 가장 가까움 6. Presentation ── 인코딩, 암호화 5. Session ── 연결 유지 4. Transport ── 신뢰성, 포트 3. Network ── IP, 라우팅 2. Data Link ── MAC, 프레임 1. Physical ── 전기 신호
👉 실제 통신 흐름을 이해하기 위한 설명용 모델
TCP/IP 4 계층은 실제 인터넷에서 사용되는 실무 중심의 네트워크 모델이다.
OSI 7계층이 “설명용 모델”이라면, TCP/IP는 현실에서 동작하는 모델이다.
4. Application ── HTTP, HTTPS, FTP, DNS 3. Transport ── TCP, UDP 2. Internet ── IP, ICMP 1. Network ── Ethernet, MAC
👉 인터넷은 이 구조를 기준으로 설계되고 동작한다.
| 구분 | OSI 7 계층 | TCP/IP 4 계층 |
|---|---|---|
| 목적 | 이론적 설명 | 실제 구현 |
| 계층 수 | 7 | 4 |
| 사용 여부 | 설명·교육용 | 실제 인터넷 표준 |
| 상위 계층 | Application / Presentation / Session | Application |
| 전송 계층 | Transport | Transport |
| 네트워크 계층 | Network | Internet |
| 하위 계층 | Data Link / Physical | Network |
OSI 7 계층 TCP/IP 4 계층 ----------------------------------- Application ┐ Presentation ├──▶ Application Session ┘ Transport ─────▶ Transport Network ─────▶ Internet Data Link ┐ Physical ├──▶ Network
👉 OSI는 세분화, TCP/IP는 실용적 통합
TCP는 신뢰성을 보장하기 위해 연결을 먼저 맺는다.
Client → SYN → Server Client ← SYN+ACK ← Server Client → ACK → Server
👉 “서로 통신 준비됐는지 확인하는 과정”
연결 종료는 수립보다 복잡하다.
Client → FIN → Server Client ← ACK ← Server Client ← FIN ← Server Client → ACK → Server
👉 양쪽이 각자 종료 의사를 표현해야 완전히 끝난다.
<흐름 제어는 송신자가 수신자의 처리 속도를 초과하지 않도록 조절하는 기능이다.
혼잡 제어는 네트워크 전체 상황을 고려한다.
UDP는 연결을 맺지 않는 비신뢰성 프로토콜이다.
| 항목 | TCP | UDP |
|---|---|---|
| 연결 | 필요 | 불필요 |
| 신뢰성 | 높음 | 낮음 |
| 속도 | 느림 | 빠름 |
👉 실시간 스트리밍, 게임, DNS에서 사용
👉 실제 통신은 공개키로 대칭키를 교환한다.
HTTPS 연결 시 내부적으로 일어나는 과정
Client → Hello Server → Certificate Client → Key Exchange Secure Communication
👉 대칭키를 안전하게 합의하는 과정
로드 밸런싱은 트래픽을 여러 서버로 분산하는 기술이다.
User │ [Load Balancer] ├─ Server A ├─ Server B └─ Server C
Blocking: 함수 B는 내 할 일을 다 마칠 때까지 제어권을 가지고 있는다. A는 B가 다 마칠 때까지 기다려야 한다.
Non-Blocking: 함수 B는 할 일을 마치지 않았어도 A에게 제어권을 바로 넘겨준다. A는 B를 기다리면서도 다른 일을 진행할 수 있다.
👉 제어권을 누가 가지느냐의 문제
Synchronous (동기): 함수 A는 함수 B가 일을 하는 중에 기다리면서, 현재 상태가 어떤지 계속 체크한다.
Asynchronous (비동기): 함수 B의 수행 상태를 B 혼자 직접 신경쓰면서 처리한다. (Callback)
👉 결과 통지 방식의 차이
| 구분 | 설명 |
|---|---|
| Blocking I/O | 읽기/쓰기 동안 대기 |
| Non-Blocking I/O | 즉시 반환 |
(1) Process(Thread)가 Kernel에게 I/O를 요청하는 함수를 호출
(2) Kernel이 작업을 완료하면 작업 결과를 반환 받음.
I/O 작업이 진행되는 동안 user Process(Thread) 는 자신의 작업을 중단한 채 대기
Resource 낭비가 심함
(I/O 작업이 CPU 자원을 거의 쓰지 않으므로)
I/O 작업이 진행되는 동안 User Process의 작업을 중단하지 않음.
User Process가 recvfrom 함수 호출 (커널에게 해당 Socket으로부터 data를 받고 싶다고 요청함)
Kernel은 이 요청에 대해서, 곧바로 recvBuffer를 채워서 보내지 못하므로, "EWOULDBLOCK"을 return함.
Blocking 방식과 달리, User Process는 다른 작업을 진행할 수 있음.
recvBuffer에 user가 받을 수 있는 데이터가 있는 경우, Buffer로부터 데이터를 복사하여 받아옴.
이때, recvBuffer는 Kernel이 가지고 있는 메모리에 적재되어 있으므로, Memory간 복사로 인해, I/O보다 훨씬 빠른 속도로 data를 받아올 수 있음.
recvfrom 함수는 빠른 속도로 data를 복사한 후, 복사한 data의 길이와 함께 반환함.
I/O 작업이 진행되는 동안 User Process의 작업을 중단하지 않음.
User Process가 recvfrom 함수 호출 (커널에게 해당 Socket으로부터 data를 받고 싶다고 요청함)
Kernel은 이 요청에 대해서, 곧바로 recvBuffer를 채워서 보내지 못하므로, "EWOULDBLOCK"을 return함.
Blocking 방식과 달리, User Process는 다른 작업을 진행할 수 있음.
recvBuffer에 user가 받을 수 있는 데이터가 있는 경우, Buffer로부터 데이터를 복사하여 받아옴.
이때, recvBuffer는 Kernel이 가지고 있는 메모리에 적재되어 있으므로, Memory간 복사로 인해, I/O보다 훨씬 빠른 속도로 data를 받아올 수 있음.
recvfrom 함수는 빠른 속도로 data를 복사한 후, 복사한 data의 길이와 함께 반환함.