OSI 7 계층
OSI(Open System Interconnection) 7계층은 국제 표준화 기구인 ISO(International Standardization Organization)에서
개발한 컴퓨터 네트워크 프로토콜 디자인과 통신을
7개의 계층으로 나누어 설명한 개방형 시스템 상호 연결 모델이다.
계층을 나눈 이유는 통신이 일어나는 과정이 단계별로 파악할 수 있기 때문이다.
흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉽고,
7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있기 때문이다.
물리계층: 물리적 통신매체와 해당 매체를 통해 데이터를 전송하는 기술을 말합니다
광섬유 케이블, 구리 케이블 및 공기와 같은 다양한 물리적 채널을 통해 디지털 및 전자 신호를 전송하는 것이 포함됩니다
데이터 링크계층:데이터 링크 계층은 물리 계층이 이미 존재하는 네트워크를 통해 두 시스템을 연결하는 데 사용되는 기술을 말합니다
네트워크계층: 경로 선택 및 논리적 주소(IP 주소)를 통해 데이터를 목적지까지 전달합니다. 라우터가 여기에 속합니다
전송 계층: 데이터 전송의 신뢰성을 보장하고 오류 복구를 수행합니다 TCP UDP 프로토콜이 사용됩니다
세션계층: 신 세션을 설정, 관리 및 종료합니다. 세션의 동기화와 점검점(Checkpoint)을 관리합니다
표현 계층(Presentation Layer): 데이터의 표현 형식을 변환하고 암호화 및 압축을 담당합니다. 예를 들어, JPEG, GIF 파일 형식 등이 여기에 포함됩니다.
응용 계층(Application Layer): 사용자와 직접 상호 작용하는 응용 프로그램을 제공하며, 이메일, 웹 브라우징, 파일 전송 등이 여기에 해당됩니다.
TCP/IP 4 계층
TCP/IP 4 계층 모델은 인터넷 프로토콜을 설명하는 네 계층의 구조입니다. 이는 OSI 모델과 유사하지만 더 간단하게 구성됩니다.
네트워크 인터페이스 계층(Network Interface Layer): 물리적 네트워크 매체를 통해 데이터 전송을 처리합니다. 이더넷, 와이파이 등이 여기에 속합니다.
인터넷 계층(Internet Layer): 패킷을 목적지로 라우팅하며, IP 주소를 사용합니다. 주로 IP, ICMP, ARP 프로토콜이 사용됩니다.
전송 계층(Transport Layer): 데이터 전송의 신뢰성과 순서를 관리합니다. TCP와 UDP가 이 계층에 속합니다.
응용 계층(Application Layer): 사용자와 직접 상호작용하는 애플리케이션 프로토콜을 포함합니다. HTTP, FTP, SMTP 등이 사용됩니다.
DNS
DNS(Domain Name System)는 도메인 이름을 IP 주소로 변환해주는 시스템입니다.
인터넷 상에서 사람이 이해하기 쉬운 도메인 이름(예: www.example.com)을
기계가 이해할 수 있는 IP 주소(예: 192.0.2.1)로 변환하여 웹사이트, 이메일 서버 등과 통신할 수 있도록 합니다.
도메인 이름으로 실제 IP 를 어떻게 찾을 수 있는지
1. 사용자가 도메인을 입력한다
- 사용자가 웹 브라우저에 www.example.com을 입력한다
2. 사용자의 컴퓨터에 DNS 캐시정보를 확인한다
- 사용자의 컴퓨터에서 DNS캐시를 확인합니다
- 캐시에 정보가 있다면 IP주소를 반환합니다
- 캐시에 없다면 다음단계를 진행합니다
3.로컬 DNS 리졸버에 요청한다
- 사용자는 로컬DNS 리졸버에 도메인의 IP주소를 요청합니다
- 여기서 캐시를 확인하고 IP가 있다면 반환 / 아니라면 다음단계로 진행합니다
4.Root DNS 서버에 요청한다
- Root DNS 서버는 해당 도메인의 TLD(Top-Level Domain) DNS 서버에 대한 정보를 반환합니다.
예를 들어, example.com의 경우, .com TLD DNS 서버의 주소를 반환합니다
5.TLD 네임서버에 요청한다
-로컬 DNS리졸버는 다시 TLD 네임서버에 요청을 보냅니다
- TLD 네임서버는 해당 도메인의 권한이 있는 네임서버의 정보를 반환합니다
6.SLD 네임서버에 요청
-로컬 DNS 리졸버는 권한이 있는 네임서버에 요청을 보냅니다
- 권한이 있는 네임서버는 최종 도메인이름의 IP주소를 반환합니다
7. 최종 IP주소 반환 및 캐싱
- 로컬 DNS서버는 권한이 있는 네임서버로 부터 받은 최종 IP를 사용자에게 반환합니다
- 클라이언트 컴퓨터와 로컬 DNS 리졸버는 IP주소 캐싱 합니다
관련 개념
Local DNS server(리졸버):
기지국 DNS 서버 / 기본적으로 컴퓨터의 LAN선을 통해 인터넷이 연결되면, 인터넷을 사용할 수 있게 IP를 할당해주는 통신사에 해당되는 각 통신사의 DNS서버가 등록됩니다.
Root DNS 서버:
Root DNS 서버는 전 세계의 DNS 계층 구조에서 최상위에 위치한 서버입니다
모든 DNS 계층 구조의 시작점이며, 모든 TLD(Top-Level Domain) 서버들의 위치 정보를 가지고 있습니다
TLD DNS 서버:
TLD DNS 서버는 도메인 이름의 최상위 도메인 부분을 관리하는 서버입니다
모든 TLD에 대한 DNS 정보를 가지고 있으며, 해당 도메인의 권한이 있는 네임서버 정보를 제공합니다
.com, .net, .org 등의 TLD에 대한 DNS 조회를 처리합니다
SLD 네임서버:
특정 도메인의 두 번째 수준 도메인 부분을 관리하는 네임서버를 의미합니다
두 번째 수준 도메인이란 도메인 이름에서 최상위 도메인(Top-Level Domain, TLD) 바로 아래에 위치한 부분을 말합니다.
예를 들어, example.com에서 example 부분이 두 번째 수준 도메인에 해당하며, 이 부분을 관리하는 네임서버가 SLD 네임서버입니다
TCP 와 UDP 의 차이
TCP(Transmission Control Protocol)는 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이다.
연결 지향형 프로토콜로, 데이터 전송 전에 연결을 설정합니다.
신뢰성 있는 데이터 통신을 가능하게 한다. (Sequence Number, Ack Number)
데이터의 경계를 구분하지 않는다. (바이트 스트림 서비스)
데이터의 전송 순서를 보장한다. (순서 유지를 위해 각 바이트마다 번호를 부여)
데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)
연결의 설정 (3-way handshake)해제 (4-way handshake)
전이중(Full-Duplex), 점대점(Point to Point) 서비스
UDP에 비해 전송 속도가 느리다.
UDP(User Datagram Protocol)는 데이터를 비연결적이고 신속하게 전송하기 위한 프로토콜입니다.
UDP는 연결 설정과 종료 과정이 없으며, 데이터 전송의 순서와 신뢰성을 보장하지 않습니다. 이러한 특성으로 인해 단순하고 빠른 데이터 전송을 원할 때 주로 사용됩니다.
비연결성: UDP는 연결 설정을 필요로 하지 않습니다. 데이터를 전송하기 위해 사전에 연결을 설정할 필요가 없으며, 데이터 전송 후에 연결을 종료하지 않습니다.
신속한 전송: UDP는 연결 설정 과정이 없고, 신뢰성을 보장하지 않기 때문에 데이터를 빠르게 전송할 수 있습니다.
데이터 순서 보장하지 않음: UDP는 데이터 전송 순서를 보장하지 않습니다. 따라서 패킷이 수신되는 순서대로 처리되지 않을 수 있습니다.
신뢰성 부족: UDP는 데이터 전송 중에 발생하는 패킷 손실이나 오류에 대한 복구 기능을 제공하지 않습니다.
작은 헤더 크기: TCP에 비해 UDP 헤더 크기가 작아서 오버헤드가 적습니다.
MTU
MTU(Maximum Transmission Unit)는 네트워크를 통해 전송할 수 있는 최대 패킷 크기(바이트 단위)를 의미합니다.
MTU 값이 클수록 효율적인 데이터 전송이 가능하지만, 너무 크면 네트워크의 품질이 저하될 수 있습니다.
일반적으로 이더넷의 MTU 값은 1500 바이트입니다.
서버-클라이언트 메시지 전송 후에 수신 확인
데이터 전송: 클라이언트가 서버에 데이터를 전송합니다. 이 데이터는 메시지, 파일, 요청 등 다양한 형태일 수 있습니다.
데이터 수신: 서버가 클라이언트로부터 데이터를 수신합니다. 서버는 이 데이터를 처리하고, 데이터가 올바르게 수신되었는지 확인합니다.
수신 확인(ACK) 전송: 서버가 데이터를 성공적으로 수신한 후, 클라이언트에게 수신 확인 메시지(ACK)를 보냅니다. ACK 메시지에는 일반적으로 수신한 데이터의 정보를 포함하여,
클라이언트가 어떤 데이터에 대한 확인인지 알 수 있도록 합니다.
ACK 수신 및 확인: 클라이언트가 서버로부터 ACK 메시지를 수신합니다. 클라이언트는 이 ACK 메시지를 확인하고, 서버가 데이터를 성공적으로 수신했음을 알게 됩니다.
//ack를 보내고 받아서 확인한다 서버가 ack를 보내고 클라이언트가 ack메세지를 받아서 확인합니다
3-way hand shake, 4-way hand shake 흐름
3-Way Handshake 는 TCP의 접속,4-Way Handshake는 TCP의 접속 해제 과정이다.
3-Way Handshake
TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 말한다.
1. [Client -> SYN -> Server]
Client가 Server에게 접속을 요청하는 SYN플래그를 보낸다.
2. [Server -> SYN + ACK -> Client ]
Server는 Listen상태에서 SYN이 들어온 것을 확인하고 SYN_RECV상태로 바뀌어 SYN + ACK플래그를 Client에게 전송한다. 그 후 Server는 다시 ACK 플래그를 받기 위해 대기상태로 변경된다.
3. [Client -> ACK -> Server]
SYN + ACK 상태를 확인한 Client는 서버에게 ACK를 보내고 연결 성립(Established)이 된다.
4-way hand shake
3way handshake가 연결확립을 위해 진행했다면 4way handshake는 세션을 종료하기 위해 수행되는 절차를 말한다.
1. [Client -> FIN -> Server]
Client가 연결을 종료하겠다는 FIN플래그를 전송한다. 보낸 후에 FIN-WAIT-1 상태로 변한다.
2. [Server-> ACK -> Client]
FIN 플래그를 받은 Server는 확인메세지인 ACK를 Client에게 보내준다. 그 후 CLOSE-WAIT상태로 변한다. Client도 마찬가지로 Server에서 종료될 준비가 됐다는 FIN을 받기위해 FIN-WAIT-2 상태가 된다.
3. [Server -> FIN -> Client]
Close준비가 다 된 후 Server는 Client에게 FIN 플래그를 전송한다.
4. [Client -> ACK-> Server]
Client는 해지 준비가 되었다는 정상응답인 ACK를 Server에게 보내준다. 이 때, Client는 TIME-WAIT 상태로 변경된다.