김영한님의 모든개발자를 위한 HTTP 웹 기본 지식을 수강 후 해당 내용을 기반으로 작성한 글입니다.
인터넷에서 컴퓨터들은 어떻게 통신할까?

- 컴퓨터끼리 통신을 하기 위해서는 최소한의 규칙이 존재해야 한다 → IP 주소
IP(Internet Protocol Address)
- 인터넷에 연결된 각 기기를 식별하기 위한 고유한 숫자 값
- 지정한 IP 주소에 데이터를 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
- 데이터를 송신자에서 수신자로 전달하기 위해 컴퓨터의 위치 정보를 제공 (엔드투엔드 통신)
🧐 엔드투엔드 통신이란?
네트워크의 두 종단(endpoints), 즉 클라이언트와 서버 또는 두 장치 간의 데이터가 중간 노드의 개입 없이 직접적이고 신뢰성 있는 방식으로 이루어지는 것
🧐 패킷(Packet)이란?
- Package와 Bucket의 합성어로, 데이터를 작은 조각으로 나누어 전송하는 단위
- 데이터가 한 번에 전송되기 어려운 경우를 대비해 쪼개진 데이터 조각.
- 각 패킷은 출발지와 목적지 정보를 포함하며, 전송 중 다양한 경로를 통해 전달될 수 있음.
IP 패킷 정보
- 헤더: 출발지 IP, 목적지 IP, 기타
- 전송 데이터
클라이언트 패킷 전달

서버 패킷 전달

- 인터넷 망이 복잡하기 때문에 요청과 응답이 서로 다른 호스로 전달될 수도 있다.
IP 프로토콜의 한계

- 패킷의 전송 데이터 크기가 크다면 여러개로 나누어서 전송되는데, 이 때 순서를 보장할 수 없다.
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 구분하기 어렵다.
🧐 이런 IP 프로토콜의 한계를 보완할 수는 없을까?
TCP/UDP
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
프로토콜 계층

- 애플리케이션 계층
- 웹 브라우저, 네트워크 게임, 채팅 프로그램등 애플리케이션이 동작하는 레이어
- 프로그램이 사용자가 보낸 데이터(그림에서는 'Hello, world!')를 생성
- SOCKET 라이브러리를 통해 하위 계층(운영체제 레벨)으로 데이터를 전달
- OS 계층(운영체제)
데이터가 전송될 수 있도록 다양한 프로토콜(TCP/IP)을 추가하여 데이터를 처리
- 네트워크 인터페이스 계층
- LAN 드라이버 및 LAN 카드
- 데이터 전기 신호로 변환하여 LAN 장비를 통해 인터넷으로 송신
- IP 패킷에 물리적인 주소(MAC 주소)를 포함하여 이더넷 프레임 생성
- 이더넷 프레임
TCP/IP 데이터를 물리적인 네트워크 상에서 전송하기 위한 마지막 계층
TCP
- 전송 제어 프로토콜
- 연결 지향 - TCP 3 way handshake(가상 연결)

1. 클라이언트가 SYN 패킷을 서버에 전송해 연결 요청.
2. 서버가 SYN-ACK 패킷으로 응답.
3. 클라이언트가 ACK 패킷을 보내 연결이 설정됨.
4. 최근에는 최적화가 잘 되어있어 3번의 과정에서 데이터 전송이 함께 되기도 함.
- 순서 보장 순서가 올바르지 않게 온다면 그 부분부터 다시 요청됨

TCP/IP 패킷 정보
- 헤더
- IP 헤더: 출발지 IP , 도착지 IP, 기타
- TCP 헤더: 출발지 PORT, 도착지 PORT, 체크섬, 전송제어, 순서, 검증정보 등등
- 전송 데이터
UDP
- 사용자 데이터그램 프로토콜
- 연결 지향이 아니므로 지연이 적다.
- 데이터 전달 보증과 순서 보장이 되지 않지만 단순하고 빠르다.
- 실시간 성능이 중요한 애플리케이션(스트리밍, 온라인 게임)에 적합
- IP와 거의 동일한 기능을 수행하면서 PORT, 체크섬 정도 추가된 기능
PORT

- PORT는 같은 IP 주소를 사용하는 여러 애플리케이션을 구별하기 위한 식별자로 볼 수 있다.
- 예를 들어, 한 컴퓨터에서 웹 서버(HTTP: 80)와 데이터베이스 서버(MySQL: 3306)를 동시에 실행할 수 있다.
- 클라이언트는 IP 주소와 PORT를 함께 사용하여 정확히 어떤 애플리케이션과 통신할지 지정
- 0 ~ 65535 할당이 가능하며 0 ~ 1023은 잘 알려진 포트이므로 사용하지 않는 것이 좋다.
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
DNS
- 도메인 네임 시스템
- DNS는 도메인 이름을 IP 주소로 변환하는 분산 데이터베이스 시스템
- 사용자는 www.example.com과 같은 도메인을 사용해 쉽게 접근할 수 있지만, 실제 통신은 해당 도메인의 IP 주소로 이루어진다.
- DNS는 이를 자동으로 변환하여 사용자가 IP를 기억하지 않아도 되도록 도와준다.
ref.
그림으로 배우는 네트워크 원리
모든 개발자를 위한 HTTP 웹 기본 지식(김영한)
이미지 출처 - 모든 개발자를 위한 HTTP 웹 기본 지식(김영한)