인터넷 네트워크란?
- 네트워크: 서로 데이터를 보낼 수 있는 연결된 컴퓨터 그룹
- 인터넷: 서로 연결되는 방대하고 거대한 네트워크의 모음
인터넷 네트워크는 전 세계를 연결하는 거대한 시스템으로, 데이터를 전송하기 위해 다양한 기술과 프로토콜(데이터 처리 규칙)이 사용됩니다.
클라이언트(요청하는 주체)와 서버(응답하는 주체)가 물리적으로 가까워 직접 연결이 가능하다면 비교적 간단하지만, 물리적 거리가 멀 경우 복잡한 인터넷 망을 통해 통신해야 합니다. 이러한 복잡한 과정 속에서 클라이언트와 서버가 데이터를 원활히 주고받기 위해 IP, PORT, DNS와 같은 요소들이 중요한 역할을 합니다.
IP (인터넷 프로토콜)
IP란?
IP(Internet Protocol)는 인터넷 상에서 데이터를 전송하기 위해 사용되는 프로토콜입니다. 데이터를 보내는 클라이언트와 받는 서버는 각각 고유한 IP 주소를 가지고 있으며, 이 주소를 통해 데이터를 정확한 대상에게 전달할 수 있습니다.
[역할]
- 지정한 IP 주소에 데이터 전달
- 통신 단위인 패킷(Packet)으로 데이터 전달
IP 패킷
IP 프로토콜에서 데이터를 전송할 때, 데이터는 IP 패킷이라는 단위로 나뉘어 전송됩니다. 이러한 패킷은 인터넷의 여러 노드를 거쳐 서버에 전달됩니다.
[IP 패킷에 있는 정보]
- 출발지 IP 주소: 클라이언트(데이터를 보내는 기기)의 주소
- 목적지 IP 주소: 서버(데이터를 받을 기기)의 주소
- 기타: 전송하려는 데이터의 내용 등등
IP 프로토콜의 한계
- 비연결성: 데이터 전송 시 상대방이 연결 상태인지, 데이터를 받을 준비가 되어 있는지 알 수 없습니다. 따라서 전달을 해도 상대방이 잘 받았는지 알 수 없습니다.
- 비신뢰성: 패킷이 중간에 손실되거나, 순서가 뒤바뀌어 도착할 수 있습니다. 예를 들어, 1번 패킷과 2번 패킷이 있을 때, 2번 패킷이 1번 패킷보다 더 적은 노드를 거쳐서 일찍 도착할 수 있습니다. 이 경우, 2번 패킷이 1번 패킷보다 먼저 도달해 패킷 순서가 뒤바뀔 수 있습니다.
- 프로그램 구분의 어려움: 같은 IP 주소를 사용하는 기기에서 여러 애플리케이션이 작동 중일 경우, 데이터를 특정 애플리케이션에 전달하기 어렵습니다.
위와 같은 문제를 해결하기 위해 TCP(+UDP)를 사용합니다.
TCP와 UDP
인터넷 프로토콜 계층
인터넷 프로토콜의 4계층 구조에서 프로그램이 데이터를 서버로 전송하는 과정은 다음과 같이 이루어집니다.
| 애플리케이션 계층 | HTTP, FTP SOKET 라이브러리 |
||
| OS | 전송 계층 | TCP | UDP |
| 인터넷 계층 | IP | ||
| 네트워크 인터페이스 계층 | LAN 드라이버, LAN 장비 | ||
- 애플리케이션 계층: 애플리케이션에서 데이터를 생성하고, SOKET 라이브러리를 통해 전송 계층으로 데이터를 전달합니다.
- 전송 계층: TCP 또는 UDP(주로 TCP 사용)를 사용하여 데이터 전송에 필요한 포트 번호와 메시지 데이터를 포함한 세그먼트를 생성합니다.
- 인터넷 계층: IP 프로토콜을 사용해 데이터를 전송할 IP 주소를 추가하고, TCP 또는 UDP 세그먼트를 포함한 IP 패킷을 생성합니다.
- 네트워크 인터페이스 계층: 생성된 IP 패킷은 물리적인 네트워크 장비(LAN 드라이버, Ethernet, Wi-Fi 등)를 통해 서버로 전달됩니다.
위 과정을 보면 생성한 데이터를 TCP 세그먼트와 IP 패킷을 감싸 보내는걸 확인할 수 있습니다. 이를 TCP/IP 패킷이라고도 합니다. 그럼 TCP는 무엇이고 TCP 세그먼트는 무엇일까요?
TCP (Transmission Control Protocol) (주로 사용)
TCP는 IP 프로토콜의 한계를 극복하기 위해 개발된 프로토콜로, 연결 지향(3-way Handshake), 데이터 전달 보증과 순서 보장을 제공합니다. 따라서 신뢰도가 높은 프로토콜로 현재 대부분의 애플리케이션에서 TCP를 사용합니다.
주요 특징
- 3-way Handshake: 연결을 설정하기 위해 세 번의 신호 교환을 수행합니다. 이는 논리적인 연결로 이를 통과하면 연결이 되었다고 가정하는 방법입니다.
- 클라이언트가 서버에서 접속 요청(SYN)
- 서버가 클라이언트에게 요청 수락 및 접속 요청(SYN + ACK)
- 클라이언트가 서버에게 요청 수락(ACK)
- 클라이언트가 서버에게 데이터 전송(최적화로 3번 과정에서 같이 전송 가능)
- 데이터 전달 보증: 전송된 데이터가 제대로 수신되었는지 확인하며, 문제가 발생할 경우 재전송을 시도합니다.
- 순서 보장: 전송된 데이터가 원래 순서대로 도착하도록 제어합니다.
- 1, 2, 3 패킷 순서로 클라이언트가 전송
- 1, 3, 2 패킷 순서로 서버 도착
- 서버가 클라이언트에게 2번 패킷부터 다시 보내라고 요청
TCP 세그먼트
- 출발지 PORT, 목적지 PORT
- 전송 제어, 순서, 검증 정보...
TCP 세그먼트는 위와 같이 전송 제어, 순서, 검증 정보를 포함하여 데이터가 손실 없이, 순서대로 도착할 수 있도록 합니다.
UDP (User Datagram Protocol)
UDP는 TCP보다 간단한 프로토콜로 기능이 거의 없습니다. TCP와 다르게 연결 지향 절차도 없으며(비연결성), 데이터 전달과 순서도 보장하지 않습니다. 대신 단순하고 빠르기 때문에 빠른 전송 속도가 요구되는 상황에 적합합니다. 예를 들어, 넷플릭스나 스포티파이와 같은 스트리밍 서비스, 온라인 게임, 디스코드와 같은 실시간 통화 기반 VoIP(Voice over IP) 서비스, 그리고 DNS(Domain Name System) 응답 처리 등에서 활용됩니다.
주요 특징
- IP와 거의 같다.
- PORT를 통한 데이터 구분
- IP 주소 외에 PORT를 추가로 사용하여 데이터를 구분합니다. 예를 들어, 음악 스트리밍과 온라인 게임이 동시에 실행 중일 때, 각각의 데이터가 혼합되지 않도록 구분합니다.
- 체크섬: 데이터 무결성을 확인하는 간단한 검증 메커니즘을 제공합니다.
TCP vs UDP
TCP와 UDP의 주된 차이점은 신뢰성과 속도입니다. TCP는 연결 지향적(3 way handshake)이며, 데이터 전달과 순서 보장을 제공합니다. 이러한 특성으로 신뢰도가 높지만, 작업이 많은 만큼 UDP보다 무겁고 느립니다. 반면, UDP는 비유하자면 빈 종이와 같습니다. TCP와 달리 비연결형이며, 데이터 전달과 순서도 보장하지 않습니다. 따라서 신뢰도가 낮다는 단점이 있습니다. 하지만 TCP보다 속도가 빠르고 가벼워서 특정 애플리케이션의 요구 사항에 맞게 최적화하거나 커스터마이징하기 쉽습니다. 정리하면 TCP는 신뢰성과 안전성을, UDP는 속도와 경량성을 중심으로 하는 프로토콜이라고 생각하면 됩니다. 현재 대부분의 애플리케이션은 주로 TCP를 사용하지만, 속도가 중요한 실시간 서비스 등에는 UDP가 사용됩니다.
PORT
PORT는 한 IP 주소에서 여러 애플리케이션이 동작할 수 있도록 데이터를 구분하는 번호입니다. 이는 동시에 여러 연결을 처리할 수 있도록 지원합니다.
- IP 주소: 기기의 위치를 나타내는 주소 (like 아파트 주소)
- PORT 번호: 해당 기기 내 특정 애플리케이션을 지정하는 번호 (like 아파트 내 특정 세대(몇 동 몇 호))
TCP/IP 패킷 구조
- IP 패킷: 출발지와 목적지의 IP 주소
- TCP 세그먼트: 출발지와 목적지의 PORT, 전송 제어, 순서, 검증 정보
TCP/IP 패킷 위와 같이 구성됩니다. 여기서 출발지와 목적지의 PORT로 같은 IP 내에서 프로세스 구분합니다. 포트 번호는 아래와 같이 구성되어 있습니다.
- 0 ~ 65535: 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS (Domain Name System)
DNS는 인터넷의 "전화번호부"와 같은 역할을 합니다.
DNS가 필요한 이유
- IP 주소의 복잡성: 숫자로 이루어진 IP 주소를 사람이 직접 기억하기 어렵습니다.
- IP 주소의 변경 가능성: 서버의 IP 주소가 변경되면 통신할 수 없습니다.
DNS는 사용자가 입력한 도메인 이름(예: www.example.com)을 해당하는 IP 주소로 변환합니다. 이를 통해 사용자는 복잡한 IP 주소를 외울 필요 없이, 친숙한 도메인 이름만으로 인터넷 서비스를 이용할 수 있습니다. 또한, 서버의 IP 주소가 변경되더라도, DNS는 도메인 이름을 통해 자동으로 새로운 IP를 찾아줍니다.
[참고자료]
'CS > 네트워크' 카테고리의 다른 글
| HTTP 헤더 - 개요 및 자주 사용되는 헤더 (0) | 2025.02.06 |
|---|---|
| HTTP 상태 코드 (1) | 2025.02.01 |
| HTTP 메서드 (1) | 2025.01.29 |
| HTTP 개요 (0) | 2025.01.24 |
| REST(설계 원칙, 리소스 처리) (3) | 2025.01.18 |