IP (Internet Protocol)
- 컴퓨터 네트워크에서 사용되는 주요 프로토콜
- 지정한 IP 주소에 데이터를 송수신하는 데 사용
- 패킷(Packet)이라는 통신 단위로 데이터 전달
IP 패킷 정보
- 데이터 통신 네트워크에서 정보를 전달하는 데 사용되는 패킷 형식
- IP 패킷은 송신자에서 수신자로 데이터를 전달하기 위한 주요 정보를 담고 있음
- 패킷 단위로 데이터를 전달하며, 즉, 전송 데이터(보낼 메시지)와 함께 출발지 IP(클라이언트 IP), 목적지 IP(서버 IP) 등을 함께 묶어 패킷으로 만든 후 전달
IP 헤더 (IP Header)
- IP 패킷의 시작 부분에 위치한 헤더로, 다음과 같은 중요한 정보를 포함
- 버전 (Version)
- 헤더 길이 (Header Length)
- 서비스 유형 (Type of Service, TOS)
- 전체 패킷 길이 (Total Length)
- 패킷 식별자 (Identification)
- 플래그 (Flags)
- 생존 시간 (Time to Live, TTL)
- 프로토콜 (Protocol)
- 헤더 체크섬 (Header Checksum)
- 출발지 IP 주소 (Source IP Address)
- 목적지 IP 주소 (Destination IP Address)
데이터 (Data)
- IP 패킷에는 실제 데이터가 포함되며, 상위 레벨 프로토콜에 따라 다양한 형식의 데이터가 포함
- 예를 들어, 웹 브라우징을 위한 HTTP 요청 또는 응답 데이터, 이메일 메시지, 파일 전송 데이터 등이 포함
목적지 IP 주소와 라우팅
- IP 패킷의 목적지 IP 주소를 기반으로 네트워크에서 라우팅 결정이 내려지고, 각 라우터는 패킷의 목적지 주소를 검사하고 적절한 경로로 패킷을 전달
- 이러한 과정을 통해 데이터가 목적지로 안전하게 전송
IP 프로토콜의 한계
- 비연결성: 수신자의 상태를 확인하지 않고 데이터를 보내기 때문에 데이터 손실이 발생
- 비신뢰성: 중간에 패킷이 사라지면(예: 네트워크 혼잡), IP는 이를 해결하지 않고 데이터 손실이 발생 함(패킷 소실). 또한 패킷이 순서대로 도착하지 않을 수 있으며, IP 역시 이를 해결하지 않음(패킷 전달 순서 문제).
- 프로그램 구분: IP 주소는 컴퓨터나 장치를 식별하기 위한 것이지 어떤 애플리케이션 또는 프로그램을 구분하기 위한 것이 아니므로, 같은 IP 주소를 사용하는 서버에서 여러 애플리케이션이 동시에 통신하는 경우, IP 주소만으로는 어떤 애플리케이션이 통신 중인지 알 수 없음.
인터넷 프로토콜 스택의 TCP/IP 모델 (4계층)
- 네트워크 인터페이스 계층 (Network Interface Layer): 컴퓨터와 네트워크 장비 간의 물리적 연결과 데이터 전송을 관리.
- 예를 들어, 이더넷과 같은 하드웨어와 관련된 작업을 처리.
- 인터넷 계층 (Internet Layer): 데이터를 패킷 단위로 나누고, 각 패킷에 IP 주소를 부여하여 목적지까지의 경로를 결정.
- 패킷을 정확한 목적지로 라우팅.
- 전송 계층 (Transport Layer): 데이터 신뢰성을 담당.
- 데이터를 순서대로 전달하고 오류 복구 및 흐름 제어를 수행.
- 주로 TCP와 UDP 프로토콜을 사용.
- 애플리케이션 계층 (Application Layer): 최종 사용자 애플리케이션과 통신.
- 웹 브라우저, 이메일 클라이언트, 파일 전송 프로그램과 같은 애플리케이션에 데이터를 전달.
- 다양한 응용 프로그램 프로토콜 (HTTP, FTP, SMTP 등)이 여기에서 동작.
채팅 프로그램에서 Hello, world! 라는 메시지를 보내는 상황을 가정
- 채팅 프로그램이 Hello, world! 라는 메시지를 생성
- 생성된 메시지를 SOCKET 라이브러리를 통해 OS 계층에 전달
- OS 계층의 TCP 계층에서 메세지 데이터(Hello, world!)를 포함해 TCP 정보를 생성한다.
- OS 계층의 IP 계층에서 TCP 정보를 포함해 IP 패킷을 생성한다.
- IP 패킷: (IP 관련 정보 + (TCP 관련 정보 + (메시지 데이터)))
- IP 패킷이 LAN 카드를 통해 나갈 때 Ethernet Frame 이 포함되어 나간다.
- EtheretFrame: LAN 카드의 MAC 주소 등 물리적 정보가 포함됨
TCP/IP 패킷 정보
- TCP 정보가 추가되면서 IP의 한계점이 해결
- TCP 정보: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등..
TCP (Transmission Control Protocol)
- TCP는 신뢰성 있는 데이터 통신을 지원하며, 네트워크에서 데이터의 정확성과 신뢰성을 보장하는데 중요한 역할
- 신뢰성 있는 통신: TCP는 신뢰성 있는 데이터 전송을 보장
- 이를 위해 패킷의 수신 여부를 확인하고, 손실된 패킷을 재전송하거나 순서를 재조정하여 데이터의 정확성을 유지
- 이러한 신뢰성은 데이터 전송 중에 패킷 손실, 중복, 순서 바뀜을 방지합니다.
- 연결 지향: TCP는 연결을 설정하고 종료하는 과정을 거치며, 데이터 전송을 위한 가상 연결을 생성
- 연결 지향성은 데이터가 정확하게 송수신되도록 보장하며, 데이터의 신뢰성을 높입니다.
- 흐름 제어: TCP는 수신자 버퍼의 여유 공간을 고려하여 데이터를 송신데이터를 너무 빠르게 전송하여 수신자가 처리하지 못하는 상황을 방지하기 위해 흐름 제어 메커니즘을 제공
- 혼잡 제어: 네트워크 혼잡을 방지하고 관리하기 위한 혼잡 제어 기능을 제공
- 네트워크의 용량을 초과하는 데이터 트래픽이 발생할 때, 혼잡 제어는 데이터 전송 속도를 조절하여 네트워크 혼잡을 최소화
- 양방향 통신: TCP는 전이중 (full-duplex) 통신을 지원하여 동시에 양방향으로 데이터를 전송하고 수신 가능
- 클라이언트와 서버 간의 양방향 통신을 가능하게 합니다.
- 포트 번호: TCP는 출발지 및 목적지 포트 번호를 사용하여 데이터를 특정 애플리케이션으로 라우팅
- 이를 통해 다수의 애플리케이션이 동시에 네트워크에서 작동할 수 있습니다.
- 신뢰성 있는 애플리케이션에 적합: TCP는 웹 브라우징, 이메일 전송, 파일 전송 및 데이터베이스 관리 시스템과 같은 신뢰성 있는 데이터 전송이 필요한 애플리케이션에 적합
UDP
- UDP는 신뢰성이 요구되지 않고 데이터 전송 속도와 간결한 프로토콜이 필요한 응용 프로그램에서 주로 사용
- 데이터 손실이나 순서의 문제를 처리해야 하는 응용 프로그램에서는 TCP를 사용하는 것이 더 적합
- 비연결성 (Connectionless): UDP는 연결을 설정하지 않고 데이터를 전송
- 이것은 데이터 전송에 대한 추가적인 핸드셰이크 및 연결 설정 프로세스가 없음을 의미
- 이러한 특성으로 인해 데이터 전송이 빠르고 간단
- 신뢰성 없음: UDP는 데이터 전송의 신뢰성을 보장하지 않음
- 패킷이 손실될 수 있고, 패킷이 도착하는 순서가 보장되지 않음
- 이러한 특성으로 인해 데이터 손실이 허용되는 응용 프로그램 및 서비스에 사용
- 경량 프로토콜: UDP 헤더가 상대적으로 가볍기 때문에 데이터 오버헤드가 적음
- 이는 작은 패킷 크기 및 낮은 네트워크 부하를 의미
- 빠른 전송: UDP는 데이터 전송에 따른 추가 지연이 없으며, 실시간 응용 프로그램에서 중요한 역할을 함.
- 예를 들어, 음성 및 비디오 스트리밍, 온라인 게임, DNS (Domain Name System) 쿼리와 같은 응용 프로그램에서 주로 사용
- 다중 캐스팅 및 브로드캐스팅: UDP는 멀티캐스팅 (Multicasting)과 브로드캐스팅 (Broadcasting)을 지원
- 이를 통해 데이터를 여러 대의 수신자 또는 네트워크 내의 모든 장치에게 동시에 전송 가능
- 예측 가능한 동작: UDP는 데이터를 전송하는 순서와 관련된 동작을 예측 가능
- 이는 실시간 응용 프로그램에서 중요한 요소 중 하나
UDP와 TCP는 각각의 장단점을 가지고 있으며, 사용 사례에 따라 선택해야 한다.
PORT
한번에 둘 이상 연결해야 하면?
- 클라이언트 PC가 여러 개의 서버와 통신해야 하는 상황
- IP만 사용하면, 클라이언트 입장에서는 받은 패킷이 게임, 화상통화, 웹브라우저 요청 중 어떤 프로그램으로 온 패킷인지 알 수 없는 문제 발생
- 프로그램을 구분하기 위해 PORT를 사용
- TCP/IP 패킷을 보면 출발지 IP, 목적지 IP와 함께 출발지 PORT, 목적지 PORT 포함
- IP : 목적지 서버를 찾는 용도
- PORT : 같은 IP 내에서 프로세스를 구분하는 용도
PORT
- 0 ~ 65535 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 않는 것이 좋음
- 대표적인 PORT
- FTP: 20, 21
- TELNET: 23
- HTTP: 80
- HTTPS: 443
DNS
- IP는 기억하기 어려움.
- IP는 변경될 수 있음.
- DNS(Domain Name System)
- 도메인 명을 IP 주소로 변환시켜주는 것 (전화번호부 역할)
DNS 사용
- DNS 서버에 도메인 명에 대한 IP 주소를 등록
- 클라이언트가 DNS 서버에 도메인 명에 대한 IP를 요청
- DNS 서버는 해당 도메인 명에 대한 IP 주소를 클라이언트에 전달
- 클라이언트는 해당 IP주소로 서버에 접근
- DNS를 사용하면 IP가 기억하기 어렵고, 변경될 수 있는 문제를 해결
개인적인 이해를 바탕으로 작성한 글 입니다.
잘못된 내용, 피드백은 언제든 환영합니다! 🥺🥺🥺
참고 사이트
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, IP(인터넷 프로토콜)
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, TCP, UDP
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, PORT, DNS