공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.
인터넷 통신
인터넷 네트워크를 통한 통신은 복잡하고 다양한 경로를 통해 이루어진다. 예를 들어, 클라이언트와 서버가 바로 옆에 있다면 간단히 케이블로 연결하여 클라이언트에서 "hello world" 메시지를 보내고, 서버가 "OK"라는 응답을 보낼 수 있다. 하지만 두 컴퓨터가 물리적으로 멀리 떨어져 있다면 인터넷을 통해 데이터를 주고받아야 한다.
인터넷 망은 복잡한 네트워크 구조를 가지고 있다. 메시지가 목적지에 도달하기 위해 중간에 많은 노드를 거쳐야 하며, 이는 때로 해저 광케이블을 통해, 혹은 인공위성으로 전달될 수도 있다. 수많은 중간 노드, 즉 라우터나 서버를 거쳐야 하기 때문에 데이터를 안전하고 정확하게 전달하기 위한 규칙이 필요하다. 그 규칙을 이해하려면 IP(Internet Protocol)를 알아야 한다.
IP(인터넷 프로토콜)
IP(Internet Protocol)은 인터넷 네트워크에서 데이터를 전송하는 데 필요한 규칙이다. 컴퓨터는 서로 멀리 떨어져 있어도 IP를 통해서 데이터를 주고받을 수 있다.
IP 주소 부여
IP 주소는 인터넷에 연결된 각 기기(클라이언트, 서버 등)에 고유하게 부여되는 주소이다. 예를 들어 클라이언트는 100.100.100.1이라는 IP 주소를, 서버는 200.200.200.2라는 IP 주소를 가질 수 있다. 이를 통해 서로 간의 통신을 할 때 데이터가 어디에서 왔고 어디로 가는지를 명확히 구분할 수 있다.
IP
IP는 인터넷상에서 데이터를 전송하기 위한 프로토콜로, 데이터가 목적지까지 도달할 수 있도록 경로를 지정하는 역할을 한다. IP는 데이터를 패킷 단위로 분할하여 전달하며, 각 패킷에는 출발지와 목적지의 IP 주소가 포함되어 있다.
IP 패킷 정보
IP 패킷은 데이터 통신의 기본 단위이다. 패킷 내부에는 출발지 IP 주소, 목적지 IP 주소, 전송할 데이터 등이 포함된다. 이 정보를 바탕으로 중간 경로의 라우터나 노드들이 패킷을 올바르게 전달할 수 있다.
클라이언트 패킷 전달
클라이언트는 서버로 메시지를 보낼 때 IP 패킷을 생성하여 전송한다. 이 패킷은 클라이언트의 IP 주소와 서버의 IP 주소를 포함하며, 메시지는 여러 개의 패킷으로 나뉠 수 있다. 패킷은 여러 중간 노드를 거쳐 최종 목적지인 서버로 전달된다.
서버 패킷 전달
서버는 클라이언트로부터 받은 패킷을 분석하여 해당 요청을 처리하고, 처리 결과를 다시 클라이언트에게 응답 패킷으로 전송한다. 이때 응답 패킷에는 서버의 IP 주소가 출발지로, 클라이언트의 IP 주소가 목적지로 설정된다.
IP 프로토콜의 한계
IP 프로토콜에는 몇 가지 한계가 있다.
- 비연결성: 패킷을 보낼 때, 수신 측의 상태를 확인하지 않고 일방적으로 전송한다.
- 비신뢰성: 중간 경로에서 패킷이 소실되거나, 순서가 뒤바뀔 가능성이 있다.
- 프로그램 구분의 어려움: 동일한 IP 주소에서 다수의 애플리케이션이 통신할 경우, 어떤 프로그램이 통신 중인지 구분하기 어렵다.
대상이 서비스 불능, 패킷 전송
클라이언트가 서버로 패킷을 전송할 때, 서버가 꺼져 있거나 서비스가 중단된 상태일 수도 있다. 하지만 IP 프로토콜은 이러한 상태를 확인하지 않고 패킷을 무조건 전송한다. 이로 인해 패킷이 유실되거나 응답을 받지 못할 수 있다.
패킷 소실
패킷이 인터넷을 거쳐 전송될 때, 중간에 있는 노드나 라우터에서 문제가 발생할 경우 패킷이 소실될 수 있다. 이는 네트워크 혼잡, 하드웨어 장애, 소프트웨어 오류 등 다양한 이유로 발생할 수 있다.
패킷 전달 순서 문제 발생
IP 프로토콜을 통해 큰 데이터는 여러 패킷으로 나뉘어 전송되는데, 이 과정에서 패킷들이 서로 다른 경로를 거쳐 서버에 도달할 수 있다. 따라서 서버는 이 패킷들을 순서대로 조립해야 하지만, 도착 순서가 뒤바뀌는 경우도 발생할 수 있다. 이를 해결하는 것이 TCP 같은 상위 계층 프로토콜이다.
TCP, UDP
이전에 설명한 것처럼 패킷이 소실되는 문제를 TCP(Transmission Control Protocol)가 해결해 준다. TCP는 신뢰할 수 있는 전송을 보장하기 위해 다양한 기능을 제공한다.
인터넷 프로토콜 스택의 4계층
인터넷 통신은 4 계층으로 구성되어 있으며, 각각의 계층은 특정한 기능을 담당한다.
프로토콜 계층
프로토콜 계층은 네트워크 통신에서 데이터를 주고받기 위한 일련의 규칙과 절차를 계층화한 구조이다. 각각의 계층은 특정 역할을 담당하며, 서로 협력하여 데이터를 안전하고 효율적으로 전달한다.
1. 애플리케이션 계층
이 계층은 사용자가 직접 사용하는 웹 브라우저, 네트워크 게임, 채팅 프로그램 등의 애플리케이션이 포함된다. 여기서 사용자가 데이터를 입력하면, SOCKET 라이브러리를 통해 하위 계층으로 데이터를 전달하게 된다.
2. 전송 계층
TCP(Transmission Control Protocol) 또는 UDP(User Datagram Protocol) 프로토콜이 사용된다. 이 계층에서는 데이터를 패킷 단위로 나누고, TCP의 경우 연결 지향적 방식으로 신뢰성을 보장한다. 즉, 데이터가 순서대로 전달되고, 도착 여부를 확인한다.
3. 인터넷 계층
IP(Internet Protocol)는 이 계층에서 데이터를 목적지로 전달하기 위해 IP 주소를 사용하여 라우팅 한다. 이때 데이터는 IP 패킷 형태로 전달된다. IP는 패킷의 전달 경로만 설정하며, 데이터의 신뢰성은 보장하지 않는다.
4. 네트워크 인터페이스 계층
LAN 드라이버 및 LAN 카드와 같은 장비를 통해 실제 물리적인 네트워크와 연결된다. 이 계층에서 데이터는 Ethernet frame 형태로 패킷을 전송한다.
IP 패킷 정보
IP 계층에서 패킷은 출발지 IP와 목적지 IP를 포함한다. 이 정보가 있어야 데이터가 어디에서 왔고, 어디로 가야 하는지를 알 수 있다.
TCP/IP 패킷 정보
TCP는 IP 계층 위에서 동작하며, 출발지 PORT, 목적지 PORT, 전송 제어, 순서 및 검증 정보 등을 포함한다. 이를 통해 데이터의 신뢰성을 보장한다.
TCP 특징
- 연결 지향: TCP는 통신을 시작하기 전에 가상 연결을 설정하는 3-way handshake 과정을 거친다.
- 데이터 전달 보증: 송신 측에서 보낸 데이터가 반드시 수신 측에 도달하도록 보장한다.
- 순서 보장: 데이터가 순서대로 도착하도록 보장한다.
- 신뢰성: 데이터 전송의 신뢰성을 확보한다.
- 대부분의 인터넷 통신은 TCP를 사용한다.
TCP 3-way handshake
- SYN: 클라이언트가 서버에 연결을 요청한다.
- SYN + ACK: 서버가 클라이언트의 요청을 수락하고 응답한다.
- ACK: 클라이언트가 서버의 응답을 확인하고 데이터 전송을 시작한다.
데이터 전달 보증 및 순서 보장
TCP는 데이터를 보낼 때, 각 데이터가 도착했는지 확인하고 도착 순서를 보장한다.
UDP 특징
UDP(User Datagram Protocol)는 TCP와 달리, 데이터 전달 보증 및 순서 보장이 없다. 간단하고 빠르지만, 신뢰성이 부족한 프로토콜이다.
- 연결 지향 X: TCP와 달리, 연결 설정 과정이 없다.
- 데이터 전달 보증 X: 데이터가 수신되지 않더라도 재전송하지 않는다.
- 순서 보장 X: 데이터가 순서대로 도착하는지 신경 쓰지 않는다.
- 단순함: IP 프로토콜에 약간의 추가 기능(포트 번호, 체크섬)만 있다.
- 사용 예시: 실시간 스트리밍, 온라인 게임 등에서 사용된다.
이처럼 TCP는 신뢰성과 안정성을 제공하지만, UDP는 속도와 효율성에 중점을 둔다. 사용 목적에 따라 두 프로토콜 중 하나를 선택하게 된다.
PORT
여러 연결을 동시에 해야 하는 경우
하나의 클라이언트가 여러 개의 서버 또는 여러 서비스를 동시에 사용해야 할 때, IP 주소만으로는 여러 연결을 구분할 수 없다. 이때 각 연결을 구분하기 위해 포트(PORT) 번호를 사용한다. 각 프로세스나 서비스는 고유의 포트 번호를 가지며, 같은 IP 주소에서도 서로 다른 포트 번호를 사용하여 여러 연결을 동시에 처리할 수 있다.
예를 들어, 클라이언트가 게임 서버와 화상통화 서버, 그리고 웹 브라우저 요청을 동시에 처리할 때 각 연결은 다른 포트 번호를 사용한다. 게임은 8090 포트, 화상통화는 21000 포트, 웹 브라우저 요청은 10010 포트를 사용하여 각기 다른 서버와 통신할 수 있다.
TCP/IP 패킷 정보
TCP/IP 패킷은 데이터를 전송하기 위해 출발지 IP, 목적지 IP, 출발지 PORT, 목적지 PORT 등 다양한 정보를 포함하고 있다. TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 패킷마다 전송 제어, 순서 및 검증 정보를 포함하고 있으며, 이를 통해 데이터가 손실 없이 순서대로 도착하는 것을 보장한다.
패킷 정보
패킷에는 데이터와 함께 여러 메타 정보가 포함된다.
- IP 주소: 출발지와 목적지 IP
- 포트 번호: 출발지와 목적지 포트 번호
- 데이터: 실제 전송될 데이터 이를 통해 동일한 IP 내에서도 여러 연결을 구분할 수 있다.
포트 (PORT) - 같은 IP 내에서 프로세스 구분
포트는 같은 IP 주소 내에서 여러 프로세스를 구분하는 역할을 한다. 포트 번호는 0부터 65535까지 할당 가능하며, 0~1023번 포트는 잘 알려진 서비스(Well-known Ports)에 사용되므로 일반적으로 사용하지 않는 것이 좋다.
주요 포트 번호는 다음과 같다.
- FTP: 20, 21
- TELNET: 23
- HTTP: 80
- HTTPS: 443
이처럼 포트를 사용하면 동일한 클라이언트와 서버 간에서도 여러 서비스가 동시에 작동할 수 있다.
DNS
DNS는 도메인 이름을 IP 주소로 변환해 주는 시스템이다. 인터넷상에서 서버나 컴퓨터는 IP 주소로 통신하지만, 사용자가 직접 IP 주소를 기억하고 입력하기는 어렵다. 그래서 DNS는 전화번호부처럼 도메인 이름을 입력하면 해당 도메인에 대응하는 IP 주소를 알려주는 역할을 한다.
IP는 기억하기 어렵다.
IP 주소는 숫자로 이루어져 있어 사람이 기억하기 어렵다. 예를 들어, 200.200.200.2라는 IP 주소를 기억하는 것보다 google.com 같은 도메인 이름을 기억하는 것이 훨씬 쉽다.
IP는 변경될 수 있다.
인터넷 환경에 따라 IP 주소는 변경될 수 있다. 서버의 IP가 변경되면 클라이언트는 더 이상 해당 IP로 접속할 수 없으므로, 항상 최신의 IP 정보를 알아야 한다. 이때 DNS가 필요하다. DNS 서버는 도메인 이름에 대응하는 최신 IP 주소를 저장하고 있다.
DNS 사용
- 사용자가 도메인 이름(예: google.com)을 입력하면, 클라이언트는 DNS 서버에 해당 도메인 이름에 대한 IP 주소를 요청한다.
- DNS 서버는 도메인 이름에 해당하는 IP 주소(예: 200.200.200.2)를 클라이언트에게 응답한다.
- 클라이언트는 응답받은 IP 주소로 서버에 접속하여 통신을 시작한다.
인터넷 네트워크 정리
- 인터넷 통신: 데이터를 전송하기 위해 TCP/IP와 같은 프로토콜을 사용한다.
- IP: 인터넷에서 각 컴퓨터를 구분하기 위한 고유한 주소.
- TCP, UDP: 데이터 전송을 위한 전송 프로토콜. TCP는 신뢰성 있는 연결을, UDP는 빠른 연결을 제공한다.
- PORT: 같은 IP 내에서 여러 애플리케이션을 구분하는 번호.
- DNS: 도메인 이름을 IP 주소로 변환하는 시스템.
'FrontEnd > HTTP' 카테고리의 다른 글
[HTTP] HTTP 상태코드 (0) | 2024.10.08 |
---|---|
[HTTP] HTTP 메서드 활용 (1) | 2024.10.07 |
[HTTP] HTTP 메서드 (1) | 2024.10.06 |
[HTTP] HTTP 기본 (3) | 2024.10.06 |
[HTTP] URI와 웹 브라우저 요청 흐름 (3) | 2024.10.06 |