네트워크의 개념과 기능
네트워크는 컴퓨터나 기타 기기들이 리소스를 공유하거나 데이터를 주고 받기 위해 유선 혹은 무선으로 연결된 통신 체계를 뜻합니다.
이 네트워크는 다양한 기능들이 있습니다.
- 네트워크는 애플리케이션 목적에 맞는 통신 방법을 제공합니다.
- 신뢰할 수 있는 데이터 전송 방법도 제공합니다.
- 네트워크 간의 최적의 통신 경로를 결정합니다.
- 결정된 경로를 바탕으로 목적지로 데이터를 전송합니다.
- 이 때 여러 노드들을 거치게 될텐데, 이 노드들도 네트워크가 결정합니다.
프로토콜
그런데 이런 네트워크 통신 기능들이 제대로 동작하기 위해서는 참여자들 사이에 약속된 통신 방법이 있어야 합니다. 왜냐하면 상대방과 나 사이에서 이루어지기 때문입니다. 만약 내가 한국어로 말을 하고 상대가 영어로 말한다면, 대화가 되지 않을 것 입니다.
프로토콜이란 네트워크 통신을 하기 위해 통신에 참여하는 주체들이 따라야 하는 형식, 절차, 규약을 말합니다.
OSI model (7 layer)과 TCP/IP stack (4 layer)의 등장
하지만 이 네트워크가 해주는 모든 기능을 단 하나의 프로토콜로는 구현할 수 없습니다. 이는 마치 백엔드 애플리케이션을 한 클래스에 모두 구현하겠다와 같습니다. 이러면 유지보수도 힘들어지고 새 기능 추가도 어려워집니다. 따라서 이를 모듈화해야 합니다.
그럼 어떻게 모듈화 하느냐 하니, 네트워크의 기능들이 뭔가 계층 별로 구분할 수 있을 것 같습니다.
따라서 나온게 OSI Model (7 layer)와 TCP/IP stack (4 layer) 입니다.
OSI 7 Layer
각 레이어에 맞게 프로토콜이 세분화돼서 구현됩니다.
각 레이어의 프로토콜은 하위 레이어의 프로토콜이 제공하는 기능을 사용하여 동작합니다.
예를 들어 Network Layer는 Data link Layer가 제공하는 기능을 사용해서 자신의 기능을 구현합니다.
각 레이어 별 담당하는 기능은 이렇습니다.
- Application layer: 애플리케이션 목적에 맞는 통신 방법을 제공합니다. HTTP(웹 페이지를 보여줄 때), DNS,SMTP(이메일), FTP(파일 전송)가 있습니다.
- Presentation layer: 애플리케이션간의 통신에서 메시지 포맷 관리, 인코딩과 디코딩, 암호화와 복호화, 압축과 압축 풀기가 있습니다.
- Session layer: 애플리케이션 간의 통신에서 세션을 관리, RPC(remote procedure call)
- Transport layer: 애플리케이션 간의 통신을 담당, 실제로 목적지 애플리케이션으로 어떻게 데이터를 전송할지 구현합니다.
안정적이고 신뢰할 수 있는 데이터 전송 보장 -> TCP
신뢰성은 떨어지나, 필수 기능만 제공 -> UDP - Network Layer:호스트 간의 통신 담당 -> IP 프로토콜, 목적지 호스트로 데이터 전송, 네트워크 간의 최적의 경로 결정
- Data Link Layer: 직접 연결된 노드 간의 통신을 담당합니다, MAC 주소 기반 통신 (ARP)
- Physical Layer: 물리적 신호, 케이블과 같은 장치를 통해 bits 단위로 데이터를 전송합니다.
OSI 7 Layer의 통신 예제: 유튜브 댓글이 유튜브 서버까지 가기까지
1. 사용자 → 애플리케이션 계층 (Application Layer)
- 댓글 작성 및 전송: 사용자가 유튜브 웹사이트나 앱에서 댓글을 작성하고 전송 버튼을 누릅니다.
- HTTP 요청 생성: 애플리케이션 계층에서 HTTP/HTTPS 프로토콜을 사용하여 댓글 데이터(내용, 작성자 정보 등)를 HTTP POST 요청으로 패키징합니다.
- 리버스 프록시 처리: 요청은 유튜브의 리버스 프록시 서버(Nginx, HAProxy 등)를 거쳐 들어옵니다. 리버스 프록시는 요청을 적절한 내부 서버로 분배하고, SSL 종료(HTTPS 암호화 해제)를 수행할 수 있습니다.
2. 세션/트랜스포트 계층 (Session/Transport Layer)
- 세션 설정: TLS/SSL을 통해 클라이언트와 유튜브 서버 간의 보안 세션이 설정됩니다.
- TCP 연결 설정: 트랜스포트 계층에서는 TCP 프로토콜을 사용하여 신뢰성 있는 데이터 전송을 보장합니다. 3-way 핸드셰이크(연결 설정)를 통해 출발지와 목적지 포트가 설정됩니다.
3. 네트워크 계층 (Network Layer)
- IP 라우팅: 클라이언트의 IP 주소와 유튜브 서버의 IP 주소를 기반으로 패킷이 전달될 최적의 경로가 설정됩니다.
- CDN 활용: 유튜브는 전 세계에 분산된 CDN(콘텐츠 전송 네트워크) 노드를 사용합니다. 사용자의 요청은 지리적으로 가까운 CDN 노드로 라우팅되어 대기 시간을 줄이고 부하를 분산시킵니다.
- 패킷 헤더 추가: 출발지와 목적지의 IP 주소가 데이터 패킷에 추가됩니다.
4. 데이터 링크 계층 (Data Link Layer)
- ARP 요청: 네트워크 계층에서 목적지 IP 주소를 기반으로 물리적 주소(MAC 주소)를 알아내기 위해 ARP(Address Resolution Protocol) 요청이 발생합니다.
- 프레임 생성: 데이터는 프레임으로 변환되고, 출발지와 목적지의 MAC 주소가 프레임 헤더에 추가됩니다.
- 에러 검출: CRC(Cyclic Redundancy Check)와 같은 에러 검출 정보가 프레임에 포함됩니다.
5. 물리 계층 (Physical Layer)
- 비트 전송: 데이터 프레임이 전기 신호, 광 신호 또는 무선 신호 등 물리 매체를 통해 전송됩니다.
- 매체 전송: 유선(이더넷 케이블) 또는 무선(Wi-Fi, LTE 등)을 통해 데이터가 전송됩니다.
6. 라우터 → 목적지 전달
- 라우팅 처리: 데이터는 여러 라우터를 거치며 목적지 IP를 확인하고 다음 경로로 전송됩니다. 각 라우터는 네트워크, 데이터 링크, 물리 계층을 통해 패킷을 처리합니다.
- CDN 노드 처리: CDN 노드에서 요청이 유튜브의 리버스 프록시 서버로 전달됩니다.
7. 서버 → 애플리케이션 복구
- 리버스 프록시에서 내부 서버로 전달: 리버스 프록시 서버는 요청을 내부 유튜브 애플리케이션 서버로 전달합니다.
- 각 계층 헤더 제거 및 데이터 복구: 서버는 각 OSI 계층에서 헤더를 제거하고 원래의 HTTP 요청 데이터를 복구합니다.
- 댓글 처리 및 데이터베이스 저장: 유튜브 애플리케이션 서버는 댓글 데이터를 처리하고, 데이터베이스에 저장합니다.
- 응답 생성 및 반환: 서버는 댓글이 성공적으로 저장되었음을 알리는 HTTP 응답을 생성하여 클라이언트로 반환합니다. 이 응답 역시 위의 과정을 거쳐 사용자에게 도달합니다.
TCP/IP Stack과 비교
인터넷 구조에 특화된 Layered 아키텍처이며 아래와 같은 구조를 가집니다.
Application layer는 Osi 7 layer에서 application, presentation, session을 포함하고
Network interface (link 계층이라고도 함)은 physical, data link, network layer를 통합한 것으로 볼 수 있습니다.
참조