본 게시물은 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 보고 작성하였습니다.
인터넷에서 멀리 떨어진 컴퓨터 둘은 어떻게 통신할까요?
직접 케이블을 연결하여 통신할 수는 없으니 인터넷 망을 이용하여 통신을 하게 됩니다.
하지만, 인터넷 망은 수많은 노드들로 복잡하게 되어 있습니다. 그럼 어떠한 규칙으로 이 복잡한 노드를 타고 원하는 목적지에 도달할 수 있을까요?
이때, 배워야 하는 지식이 바로 IP(인터넷 프로토콜) 입니다.
이렇게 컴퓨터 각각에 IP 주소가 있다면, 데이터를 주고 받기 편리하겠죠?
IP(Internet Protocol)란?
네트워크에서 데이터를 주고받기 위한 규칙을 의미합니다.
IP 주소는 인터넷에 연결된 장치를 식별하고, 서로 통신할 수 있도록 해주는 주소를 말합니다.
IP는 패킷(Packet)이라는 통신 단위로 데이터를 전달합니다.
데이터를 그냥 보내는게 아니라 IP 패킷이라는 규칙에 맞춰 보내게 됩니다.
IP 패킷에는 출발지 IP 주소, 목적지 IP 주소, 메시지, 기타 등이 담겨져 있습니다.
이렇게 IP 패킷을 인터넷 망에 던지면, 노드들이 목적지 IP 주소가 어딘지 찾아서 목적지에 패킷이 도착하게 됩니다.
하지만, IP 프로토콜에는 한계에 있는데요
1. 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 무작정 전송합니다. (비연결성)
2. 중간에 패킷이 사라지거나, 패킷을 여러개 보냈는데 순서대로 오지 않는 경우가 있습니다. (비신뢰성)
3. 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러개라면 프로그램 구분이 어렵습니다.
이러한 IP 프로토콜의 문제점을 해결해주는 것이 바로 TCP, UDP 입니다!
기존의 IP 패킷에서 TCP 정보가 들어간 것이 TCP/IP 패킷입니다.
출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 포함되어 기존의 IP 프로토콜의 문제점을 해결해 줍니다.
TCP(Transmission Control Protocol) 특징
전송 제어 프로토콜인 TCP는 다음과 같은 특징이 있습니다.
- 연결지향 - TCP 3 way handshake (가상 연결)
- 데이터 전달 보증
- 순서 보장
출발지와 목적지가 연결이 됐는지 먼저 연결을 하고 메시지를 보냅니다. (연결성)
패킷을 보냈는데 중간에 누락이 된 경우에도 여부를 알 수 있고, 순서 정보까지 들어있습니다. (신뢰성)
TCP는 신뢰할 수 있는 프로토콜이며, 현재는 대부분 TCP를 사용하고 있습니다.
그렇다면, UDP는 무엇일까요?
UDP(User Datagram Protocol) 특징
사용자 데이터그램 프로토콜인 UDP는 다음과 같은 특징이 있습니다.
- 신뢰성보다 빠른 데이터 전송이 중요한 경우에 사용
- 기능이 거의 없음 (하얀 도화지)
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
TCP는 여러 확인 과정을 거치기 때문에 느리다는 단점이 있습니다. 그래서 빠른 전송이 중요한 경우(ex. 실시간 영상, 게임, 인터넷 전화 등)에 UDP를 사용합니다.
PORT란?
그렇다면, TCP/IP 패킷 안에 있는 출발지 PORT, 도착지 PORT는 무엇일까요?
같은 컴퓨터(같은 IP)에서도 여러 개의 프로그램이 동시에 실행될 수 있기 때문에, PORT(포트)를 이용해서 어떤 서비스로 데이터를 보낼지 결정합니다. 즉, IP 주소가 '집 주소'라면, 포트 번호는 '집 안의 특정 방'과 같습니다.
IP 주소는 "어디로?", 포트 번호는 "어떤 서비스로?" 데이터를 보낼지를 결정합니다.
포트 번호는 0~65535까지 있고, 다음과 같이 분류됩니다.
1. 운영체제가 기본적으로 사용하는 잘 알려진 포트! (0 ~ 1023번)
- 20, 21번 → FTP (파일 전송)
- 22번 → SSH (원격 접속)
- 23번 → TELNET
- 25번 → SMTP (이메일 전송)
- 80번 → HTTP (웹사이트)
- 443번 → HTTPS (보안 웹사이트)
2. 특정 애플리케이션이 사용하는 등록된 포트! (1024 ~ 49151번)
예) 3306번(MySQL 데이터베이스), 5432번(PostgreSQL) 등
3. 일반 프로그램이 임시로 할당하는 동적/사설 포트! (49152 ~ 65535번)
예) 웹 브라우저가 랜덤하게 열어 서버와 통신하는 포트
DNS(Domain Name System)란?
클라이언트와 서버는 숫자로 된 IP 주소(142,250,207.200)를 가지고 통신합니다. 하지만, IP는 기억하기 어렵다는 문제점
과 IP 주소가 변경될 수 있습니다. 그래서 쉽게 기억할 수 있도록 도메인 이름(www.google.com)을 사용합니다. 컴퓨터는 이러한 도메인 이름을 이해할 수 없으니까 DNS를 사용합니다. DNS는 중간에 전화번호부 같은 서버를 제공해주며, 도메인 명을 IP 주소로 변환하는 역할을 합니다.
웹 사이트 접속 과정 예시
1. 사용자가 브라우저에서 http://www.naver.com 입력
2. DNS가 www.naver.com 의 IP 주소(223.130.195.200)을 찾음
3. 브라우저는 포트 80(HTTP)로 요청 보냄 -> 223.130.195.200:80
4. 네이버 서버가 80번 포트에서 요청을 수신하고, 웹 페이지 데이터를 반환
5. 브라우저가 응답을 받아 웹페이지를 보여줌
전체 요약
복잡한 인터넷 망을 통해 메시지를 보내기 위해선 IP가 있어야 한다. 하지만, IP 프로토콜만 가지고는 메시지가 잘 도착했는지 신뢰하기 어렵고 순서가 섞일 수 있다. 이 문제점을 TCP 프로토콜이 해결해준다. 그리고 UDP는 IP랑 거의 똑같은데 포트 정보만 추가된 백지 상태이다. 빠른 전송이 필요할 때 사용한다. PORT는 같은 IP 안에서 동작하는 애플리케이션을 구분하기 위해서 사용한다. IP는 외우기 어렵고 변하기 쉬운데, 도메인 명을 등록하여 사용할 수 있도록 도와주는 것이 DNS이다.
end
이번 글에서는 네트워크 기본 개념인 IP, TCP/UDP, PORT, DNS에 대해 알아봤습니다. 이번에 공부하면서 웹 통신이 어떻게 이루어지는지 명확하게 알게 되었고, 네트워크의 기본 개념이 정말 중요하다는 걸 다시 한번 느꼈습니다. 네트워크는 어렵게만 느껴졌는데 등장 이유와 흐름을 차근차근 공부해보니 정말 재밌는 내용 같습니다.
'공부 메모' 카테고리의 다른 글
[HTTP] HTTP 기본 개념 정리: 구조, 특징, 메시지 이해하기 (0) | 2025.04.03 |
---|---|
[HTTP] URI/URL/URN? 웹 브라우저 요청 흐름 정리 (3) | 2025.03.29 |
유튜브 URL로 댓글 목록 크롤링하기 (0) | 2025.03.18 |
정적/동적 크롤링 개념 및 실습 진행해보기 (0) | 2025.03.18 |
Spring Boot 스프링부트 MySQL 연동 오류 해결법 (0) | 2023.11.10 |