인터넷 통신과정 ( + IP, TCP/UDP, PORT, DNS )

인터넷에서 두 컴퓨터가 통신하는 과정을 IP·TCP·UDP·PORT·DNS 단계별로 정리한 노트다. 핵심은 IP만으로는 상대방이 데이터를 받을 수 있는 상태인지 확인할 수 없어(비신뢰성) TCP가 3-way-handshake로 연결을 보장하고, PORT로 같은 IP 안의 여러 서비스를 구분하며, DNS가 사람이 기억하기 쉬운 도메인명을 실제 IP로 변환해준다는 점이다.

실행 환경

본 문서는 IP/TCP/UDP/DNS 같은 네트워크 프로토콜 자체의 이론이며, 특정 언어/프레임워크 버전에 종속되지 않는다. nslookup 예시는 일반적인 OS 명령줄 도구 사용법을 보여준다.

네트워크 과정

[ 컴퓨터 A ]  ─────  네트워크(인터넷)  ─────  [ 컴퓨터 B ]
   (송신)         수많은 라우터/스위치 경유         (수신)
  • 컴퓨터 A와 B는 네트워크라는 공간을 통해 서로의 데이터를 주고 받게 된다.
  • 컴퓨터는 많이 보급되어 있기에 누구가 누군것인지를 특정할 필요가 있다

네트워크에서 구분하는 방법

[ 컴퓨터 A ]              [ 컴퓨터 B ]
 IP: 100.100.1.1  ───▶   IP: 200.200.2.2
   (출발지 주소)            (도착지 주소)
  • 해당 컴퓨터는 IP라는 네트워크 주소를 가지고 있게 된다.
  • 해당 주소를 통해 서로에게 올바르게 원하는 데이터를 주고받게 된다.

IP 란?

  • 원하는 주소로 데이터를 보내기 위한 네트워크의 절차 중 한 부분
  • 데이터를 가장 안쪽에 두고, 포장지를 씌우는 것처럼 “헤더”라는 이름으로 아래 그림이 붙어지게 된다
    • 중요한 부분!
      • Source Address
      • Destination Address
  • 데이터와 함께 아래 “헤더”가 같이 보내지게 되고, 받는 쪽에서 이 부분을 보고 자기 것인지 확인 후 데이터를 얻게 된다.
IP 헤더 필드설명
VersionIP 버전 (IPv4 / IPv6)
Header Length헤더 길이
Total Length전체 패킷 길이
TTL (Time To Live)패킷 생존 시간(홉 수 제한)
Protocol상위 프로토콜 종류 (TCP/UDP 등)
Source Address출발지 IP 주소 (중요)
Destination Address목적지 IP 주소 (중요)
Data실제 전송할 데이터

IP 헤더 정보

TCP 의 탄생

  • TCP (Transmission Control Protocol)로서 “전송 제어 프로토콜”이다.
  • IP로만 해서 전송하면 되지, 왜 TCP가 나왔을까?
    • IP의 한계
      • 상대방이 받을 수 있는 상태인지,아닌지를 확인하지 않고 보냄 ( 비신뢰성 )
      • 네트워크를 거치면서 가다가 유실되더라도 알지를 못함
  • 전송을 제어할 무언가가 필요하다 -> TCP
    • 중요한 부분!
      • Port 정보
      • 이미 IP 헤더로서 상대방 컴퓨터의 정보는 어느정도 알았기에, 세부 주소를 알기 위해서 port 사용
        • ex) IP 정보 : 아파트 / PORT 정보 : 호수
TCP 헤더 필드설명
Source Port출발지 포트 번호 (중요)
Destination Port목적지 포트 번호 (중요)
Sequence Number전송하는 데이터의 순서 번호
Acknowledgment Number수신 확인 응답 번호
Flags (SYN/ACK/FIN 등)연결 제어 플래그
Window Size수신 가능한 데이터 크기
Checksum오류 검출용 체크섬

TCP 헤더

  • TCP의 특징
    • 3-way-handshake 라는 연결을 통해 상대방이 데이터를 받을 수 있는 상태인지 check를 한다.
    • 상대방이 맞고, 연결 가능하다면 연결을 통해 상대방과 데이터를 오고가게 된다.
      • 이러한 부분을 “연결 지향적”이라고 한다.
    • IP의 한계에서 드러났던 문제들을 제어함으로써 원활한 통신이 가능하게 한다.
  • 3-way-handshake
    • 클라이언트와 서버는 각각 컴퓨터A, 컴퓨터B로 놓아도 무방하다
    • 컴퓨터A가 연결 요청을 하면, B가 허락을 하고 , A가 허락한 것을 알았다를 보내고 연결시작 과정을 마무리한다
    • 총 3번 왔다갔다 한다해서 “3-way-handshake”이다.
컴퓨터 A (Client)                     컴퓨터 B (Server)
       │──────── ① SYN ─────────────▶│   "연결 요청"
       │◀─────── ② SYN + ACK ────────│   "요청 수락 + 확인 요청"
       │──────── ③ ACK ─────────────▶│   "확인 응답, 연결 성립"

3-Way-Handshake

UDP

  • TCP와 같은 층에 존재하지만, 쓰임새는 확연히 다르다.
  • 빠른 전송을 위해 연결 지향적이지 않은 채로 데이터를 보내게된다 ( IP만을 이용한 전송과 유사 )
  • 신뢰성은 없어도 빠른 데이터 제공을 위해 사용할 때가 있다.
UDP 헤더 필드설명
Source Port출발지 포트 번호
Destination Port목적지 포트 번호
Length헤더 + 데이터의 전체 길이
Checksum오류 검출용 체크섬
  • TCP 헤더에 비해 필드 수가 적어 구조가 훨씬 단순함 (연결 확인/재전송 관련 필드 없음)

UDP 헤더

PORT

  • PORT는 전송제어 프로토콜에서 사용하는 중요한 부분이다.

  • 컴퓨터가 받아드릴 수 있는 통로가 65535개가 존재하고, 해당 통로를 Port라고 일컫는다.

  • 통로를 통해서, 게임도하면서 채팅도하고 웹서핑도 즐길 수 있는 것이다.

  • Port 정보

    • Well-Known 포트 ( 잘 알려진 포트 )
      • 0~1023번 까지는 예약된 포트
        • DHCP (출발 : 67, 도착 : 68)
        • DNS (53)
        • SSH (22)
        • Telnet (23)
        • HTTP (80)
        • HTTPS (443)
      • 1024~65535 까지는 포트를 따로 지정해서 사용해도 괜찮다

DNS

  • 원래 모든 웹페이지든 컴퓨터로의 접속이든지 간에 IP + PORT 조합으로 연결을 해야한다.

  • 그래서 검색을 할 때도, 문자가 아닌 상대방의 IP를 직접 검색해서 가야한다.

  • -> 이러한 불편함에 DNS가 나오게 됨

  • DNS

    • 직접 IP를 검색하지 않더라도, domain 명을 통해서 쉽게 검색 가능
    • ex) www.naver.com
$ nslookup www.naver.com
 
서버:    (DNS 서버 주소)
Address: (DNS 서버 IP)
 
Non-authoritative answer:
이름:    www.naver.com
Address: 223.130.xxx.xxx   <- domain 명이 실제 IP 주소로 변환되어 반환됨

nslookup 명령어 사용 결과

관련 문서