인터넷에서 컴퓨터 둘은 어떻게 통신할까?
클라이언트와 서버는 수많은 노드들을 거쳐 통신한다.
그렇다면 이렇게 복잡한 구조에서 어떻게 최종 목적지를 찾아가는 걸까?
IP
- Internet Protocol의 약자이다.
- 각 클라이언트는 IP 주소를 부여받는다.
- 패킷이라는 통신 단위로 지정한 IP 주소에 데이터를 전달한다.
IP 패킷
IP 패킷은 출발지, 목적지 IP 주소와 기타 데이터, 전송 데이터로 구성되어 있다.
클라이언트 패킷 전달
전송 데이터에 출발지, 목적지 IP 주소를 함께 보내 복잡한 네트워크 구조에서 최종 목적지를 찾아갈 수 있다.
간단히 생각하면 길에서 사람들에게 길을 물어보듯 수많은 노드들에게 목적지를 물어보며 찾아가는 것이다.
서버 패킷 전달
서버 또한 마찬가지다.
클라이언트로부터 받은 요청 패킷에 담겨 있는 출발지 IP 주소를 이용해서 클라이언트에게 응답 메시지를 보낸다.
Internet Protocol의 한계
IP의 한계에는 비연결성, 비신뢰성, 프로그램 구분 불가가 있다.
비연결성
클라이언트와 서버는 서로의 상태를 모르기 때문에 받는 대상이 없거나 서비스 불능 상태여도
패킷을 전송하게 된다. 이는 네트워크를 낭비하게 되는 셈이다.
비신뢰성
- 패킷 손실 여부 파악 불가
인터넷은 여러 서버의 집합이며 중간 노드가 꺼져버릴 수가 있다.
따라서 패킷 전송 시 중간에 패킷이 사라질 수 있다.
패킷이 손실되어도 클라이언트 측에서는 패킷의 손실 여부를 알지 못한다.
- 패킷 전달 순서 보장 불가
만약 우리가 Hello world!라는 메시지를 전송하려고 했다 생각하자.
전송 과정에서 패킷이 서로 다른 노드로 이동하기 때문에 도착 순서가 바뀔 수 있다.
프로그램 구분 불가
같은 IP 주소를 가진 애플리케이션이 둘 이상이라면 어느 애플리케이션으로 패킷을 전달해야 할지 알지 못한다.
이러한 한계를 어떻게 극복할까?
바로 TCP를 사용하는 것이다.
그전에 인터넷 프로토콜 스택 4 계층을 알고 가자
프로토콜 4 계층은 아래와 같이 이루어져 있다.
그렇다면 이 4 계층에서 패킷은 어떻게 전달될까?
카카오톡으로 친구에게 메시지를 보낸다고 가정해 보자.
처음 우리가 메시지를 전송하면 소켓 라이브러리를 통해 OS 계층으로 전달된다.
그 후 OS 계층에서 메시지에 TCP 정보와 IP 패킷 정보를 추가하여 네트워크를 통해 전달한다.
기존에 생성했던 IP 패킷에는 출발지, 목적지 IP 주소만 들어있었다.
하지만 TCP를 이용했을 때에는 출발지/목적지 포트, 전송 제어, 순서, 검증 정보 등 다양한 데이터들이 함께 보내진다.
TCP
- Transmission Control Protocol의 약자이다.
- 전송 제어 프로토콜이다.
TCP의 특징
TCP의 특징으로는 연결지향( 3 way handshake ), 데이터 전달 보증, 순서 보장이 있다.
TCP는 신뢰할 수 있는 프로토콜이며 현재는 대부분 TCP를 사용한다.
연결지향 ( 3 way handshake )
- SYN : 접속 요청
- ACK : 요청 수락
- 진짜 연결된 것이 아닌 논리적인 연결이다.
연결 과정에서 요청 수락과 동시에 데이터를 함께 전송할 수 있다. 여기서 연결은 현실적인 연결이 아닌 가상 연결임을 주의하자.
데이터 전달 보증
가상의 연결을 통해 데이터 수신 여부를 공유하게 된다.
만약 정상적으로 데이터를 수신하지 못했다면 재요청을 통해 데이터를 수신받을 수 있다.
순서 보장
IP는 패킷의 전달 순서가 보장되지 않았다.
하지만 TCP는 패킷이 정상적인 순서로 오지 않았다면 재요청을 할 수 있다.
이로써 비연결성, 비신뢰성 문제는 해결되었다. 그렇다면 프로그램 구분 불가의 한계점은 어떻게 해결할까?
PORT
클라이언트의 게임, 화상통화 애플리케이션은 같은 IP 주소를 사용하고 있다.
IP 주소가 아닌 PORT를 통해 게임인지 화상통화인지 구별하여 통신할 수 있다.
IP 주소는 아파트의 단지 PORT는 몇 동 몇 호라는 개념으로 생각하면 이해하기 쉽다.
이처럼 IP의 비연결성, 비신뢰성, 프로그램 구분 불가의 한계를 TCP를 이용하여 극복할 수 있다.
PORT 번호
- 0~65535 : 할당 가능한 범위
- 0~1023 : 잘 알려진 포트 번호 범위로 사용하지 않는 것이 좋다
- FTP : 20, 21
- TELNET : 23
- HTTP : 80
- HTTPS : 443
UDP
- User Datagram Protocol의 약자이다.
- 최근에는 UPP로 최적화하여 각광받고 있다.
- TCP와 달리 기능이 거의 없다. ( 하얀 도화지 느낌 )
- 연결지향 X : 3 way handshake X
- 데이터 전달 보증 X : 전송 중 데이터가 유실되어도 재전송하지 않는다.
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만 연결과정이 없어 단순하고 빠르다 ( 실시간 방송 )
IP와 거의 같지만 PORT와 체크섬 정도의 차이가 있다.
복잡한 IP 주소를 어떻게 기억해서 접속할까?
- IP 주소는 사람이 기억하기에는 너무나 복잡하다.
- IP 주소는 변경될 수 있다.
IP 주소를 외우기도 어렵지만 외웠다 한들 IP주소가 변경될 수 있어 사람이 기억하고 직접 입력하는 것은 거의 불가능하다.
그렇다면 어떻게 웹 사이트를 쉽게 접속할 수 있을까?
DNS
- DNS는 전화번호부 개념이라고 생각하면 된다.
- 클라이언트가 도메인 명을 입력하면 DNS 서버에 접속한다.
- DNS 서버에서 클라이언트가 입력한 도메인 명을 대조하여 해당 IP 주소를 전송한다.
- 클라이언트는 DNS 서버로부터 받은 IP 주소로 접속한다.
출처 : https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'CS' 카테고리의 다른 글
HTTP 메서드 활용 (0) | 2025.04.03 |
---|---|
[ 프로그래머스,bfs ] 네트워크.python (0) | 2025.04.03 |
HTTP 메서드에 대해 (0) | 2025.04.03 |
HTTP에 대해 (0) | 2025.04.02 |
URI와 웹 브라우저 요청 흐름 (0) | 2025.04.02 |