생계형 개발자.

[HTTP웹기본지식_인프런] 인터넷 네트워크 - IP, TCP, UDP, PORT, DNS


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 프로토콜의 한계

  1. 비연결성: 수신자의 상태를 확인하지 않고 데이터를 보내기 때문에 데이터 손실이 발생
  2. 비신뢰성: 중간에 패킷이 사라지면(예: 네트워크 혼잡), IP는 이를 해결하지 않고 데이터 손실이 발생 함(패킷 소실). 또한 패킷이 순서대로 도착하지 않을 수 있으며, IP 역시 이를 해결하지 않음(패킷 전달 순서 문제).
  3. 프로그램 구분: IP 주소는 컴퓨터나 장치를 식별하기 위한 것이지 어떤 애플리케이션 또는 프로그램을 구분하기 위한 것이 아니므로, 같은 IP 주소를 사용하는 서버에서 여러 애플리케이션이 동시에 통신하는 경우, IP 주소만으로는 어떤 애플리케이션이 통신 중인지 알 수 없음.


인터넷 프로토콜 스택의 TCP/IP 모델 (4계층)

  1. 네트워크 인터페이스 계층 (Network Interface Layer): 컴퓨터와 네트워크 장비 간의 물리적 연결과 데이터 전송을 관리.
    • 예를 들어, 이더넷과 같은 하드웨어와 관련된 작업을 처리.
  2. 인터넷 계층 (Internet Layer): 데이터를 패킷 단위로 나누고, 각 패킷에 IP 주소를 부여하여 목적지까지의 경로를 결정.
    • 패킷을 정확한 목적지로 라우팅.
  3. 전송 계층 (Transport Layer): 데이터 신뢰성을 담당.
    • 데이터를 순서대로 전달하고 오류 복구 및 흐름 제어를 수행.
    • 주로 TCP와 UDP 프로토콜을 사용.
  4. 애플리케이션 계층 (Application Layer): 최종 사용자 애플리케이션과 통신.
    • 웹 브라우저, 이메일 클라이언트, 파일 전송 프로그램과 같은 애플리케이션에 데이터를 전달.
    • 다양한 응용 프로그램 프로토콜 (HTTP, FTP, SMTP 등)이 여기에서 동작.


채팅 프로그램에서 Hello, world! 라는 메시지를 보내는 상황을 가정

  1. 채팅 프로그램이 Hello, world! 라는 메시지를 생성
  2. 생성된 메시지를 SOCKET 라이브러리를 통해 OS 계층에 전달
  3. OS 계층의 TCP 계층에서 메세지 데이터(Hello, world!)를 포함해 TCP 정보를 생성한다.
  4. OS 계층의 IP 계층에서 TCP 정보를 포함해 IP 패킷을 생성한다.
    • IP 패킷: (IP 관련 정보 + (TCP 관련 정보 + (메시지 데이터)))
  5. IP 패킷이 LAN 카드를 통해 나갈 때 Ethernet Frame 이 포함되어 나간다.
    • EtheretFrame: LAN 카드의 MAC 주소 등 물리적 정보가 포함됨


TCP/IP 패킷 정보

  • TCP 정보가 추가되면서 IP의 한계점이 해결
    • TCP 정보: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등..


TCP (Transmission Control Protocol)

  • TCP는 신뢰성 있는 데이터 통신을 지원하며, 네트워크에서 데이터의 정확성과 신뢰성을 보장하는데 중요한 역할
  1. 신뢰성 있는 통신: TCP는 신뢰성 있는 데이터 전송을 보장
    • 이를 위해 패킷의 수신 여부를 확인하고, 손실된 패킷을 재전송하거나 순서를 재조정하여 데이터의 정확성을 유지
    • 이러한 신뢰성은 데이터 전송 중에 패킷 손실, 중복, 순서 바뀜을 방지합니다.
  2. 연결 지향: TCP는 연결을 설정하고 종료하는 과정을 거치며, 데이터 전송을 위한 가상 연결을 생성
    • 연결 지향성은 데이터가 정확하게 송수신되도록 보장하며, 데이터의 신뢰성을 높입니다.
  3. 흐름 제어: TCP는 수신자 버퍼의 여유 공간을 고려하여 데이터를 송신데이터를 너무 빠르게 전송하여 수신자가 처리하지 못하는 상황을 방지하기 위해 흐름 제어 메커니즘을 제공
  4. 혼잡 제어: 네트워크 혼잡을 방지하고 관리하기 위한 혼잡 제어 기능을 제공
    • 네트워크의 용량을 초과하는 데이터 트래픽이 발생할 때, 혼잡 제어는 데이터 전송 속도를 조절하여 네트워크 혼잡을 최소화
  5. 양방향 통신: TCP는 전이중 (full-duplex) 통신을 지원하여 동시에 양방향으로 데이터를 전송하고 수신 가능
    • 클라이언트와 서버 간의 양방향 통신을 가능하게 합니다.
  6. 포트 번호: TCP는 출발지 및 목적지 포트 번호를 사용하여 데이터를 특정 애플리케이션으로 라우팅
    • 이를 통해 다수의 애플리케이션이 동시에 네트워크에서 작동할 수 있습니다.
  7. 신뢰성 있는 애플리케이션에 적합: TCP는 웹 브라우징, 이메일 전송, 파일 전송 및 데이터베이스 관리 시스템과 같은 신뢰성 있는 데이터 전송이 필요한 애플리케이션에 적합


UDP

  • UDP는 신뢰성이 요구되지 않고 데이터 전송 속도와 간결한 프로토콜이 필요한 응용 프로그램에서 주로 사용
  • 데이터 손실이나 순서의 문제를 처리해야 하는 응용 프로그램에서는 TCP를 사용하는 것이 더 적합
  1. 비연결성 (Connectionless): UDP는 연결을 설정하지 않고 데이터를 전송
    • 이것은 데이터 전송에 대한 추가적인 핸드셰이크 및 연결 설정 프로세스가 없음을 의미
    • 이러한 특성으로 인해 데이터 전송이 빠르고 간단
  2. 신뢰성 없음: UDP는 데이터 전송의 신뢰성을 보장하지 않음
    • 패킷이 손실될 수 있고, 패킷이 도착하는 순서가 보장되지 않음
    • 이러한 특성으로 인해 데이터 손실이 허용되는 응용 프로그램 및 서비스에 사용
  3. 경량 프로토콜: UDP 헤더가 상대적으로 가볍기 때문에 데이터 오버헤드가 적음
    • 이는 작은 패킷 크기 및 낮은 네트워크 부하를 의미
  4. 빠른 전송: UDP는 데이터 전송에 따른 추가 지연이 없으며, 실시간 응용 프로그램에서 중요한 역할을 함.
    • 예를 들어, 음성 및 비디오 스트리밍, 온라인 게임, DNS (Domain Name System) 쿼리와 같은 응용 프로그램에서 주로 사용
  5. 다중 캐스팅 및 브로드캐스팅: UDP는 멀티캐스팅 (Multicasting)과 브로드캐스팅 (Broadcasting)을 지원
    • 이를 통해 데이터를 여러 대의 수신자 또는 네트워크 내의 모든 장치에게 동시에 전송 가능
  6. 예측 가능한 동작: 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

  1. IP는 기억하기 어려움.
  2. IP는 변경될 수 있음.
  3. DNS(Domain Name System)
  • 도메인 명을 IP 주소로 변환시켜주는 것 (전화번호부 역할)


DNS 사용

  • DNS 서버에 도메인 명에 대한 IP 주소를 등록
  1. 클라이언트가 DNS 서버에 도메인 명에 대한 IP를 요청
  2. DNS 서버는 해당 도메인 명에 대한 IP 주소를 클라이언트에 전달
  3. 클라이언트는 해당 IP주소로 서버에 접근
  • DNS를 사용하면 IP가 기억하기 어렵고, 변경될 수 있는 문제를 해결





개인적인 이해를 바탕으로 작성한 글 입니다.
잘못된 내용, 피드백은 언제든 환영합니다!
🥺🥺🥺


참고 사이트


[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, IP(인터넷 프로토콜)
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, TCP, UDP
[모든 개발자를 위한 HTTP 웹 기본 지식] 01. 인터넷 네트워크 - 인터넷 통신, PORT, DNS