-
728x90
HTTP는 인터넷 네트워크에 기반하여 동작하기 때문에 HTTP를 알아보기 전에 인터넷 네트워크를 알아보는 시간을 가지겠습니다
인터넷 사이에서 컴퓨터 둘은 어떻게 통신할까요?
서버와 클라이언트가 붙어있다면 케이블로 연결해서 통신할 수 있지만
만약에 한국과 미국이 메시지를 통신해야 한다면 인터넷망(해저케이블, 인공위성 등)을 통해 통신이 이루어져야 합니다.
인터넷이란?
인터넷이란 inter-network 라는 말에서 시작되었으며 여러 통신망을 하나로 연결하는 의미로 사용됩니다.
즉 인터넷이란 전 세계의 수많은 클라이언트 컴퓨터와 서버 컴퓨터, 그리고 이들로 구성된 네트워크들의 집합체입니다.
그러면 어떻게 목적지까지 안전하게 도착할까요?
IP(인터넷 프로토콜)을 사용합니다.
인터넷 프로토콜이란 IP 주소를 기반으로 패킷(전송 단위)을 통해 데이터를 전달합니다.
IP 패킷 정보에는 출발지 IP, 목적지 IP, 전송 데이터 등이 들어갑니다.
그러면 클라이언트와 서버가 통신하는 과정을 예시를 들어보겠습니다
클라이언트가 서버에게 Hello, world!라는 메시지를 전달하려고 합니다.
클라이언트의 IP : 100.100.100.1
서버의 IP : 200.200.200.2
패킷의 정보
출발지 IP : 100.100.100.1
목적지 IP : 200.200.200.2
전송 데이터 : Hello, world!
...
이 패킷은 인터넷망을 통하여 서버로 전달되게 되고 서버에서는 메시지를 잘 받았다는 의미로 OK를 보내려고 합니다.
패킷의 정보
출발지 IP : 200.200.200.2
목적지 IP : 100.100.100.1
전송 데이터 : OK
....
그러면 다시 패킷은 인터넷망을 통하여 클라이언트에게 전달되게 됩니다.
하지만 IP 프로토콜에는 한계가 있습니다.
패킷을 받은 대상이 없거나 서비스 불능 상태에서도 패킷을 전송합니다.(비연결성)
패킷이 중간에 사라지거나 순서대로 도착하지 않을 수 있습니다.(비신뢰성)
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면?
이것을 해결하기 위해서는 TCP, UDP가 사용됩니다.
TCP란?
전송 제어 프로토콜(Transmission Control Protocol)로 연결 지향, 데이터 전달 보증, 순서 보장의 특징을 가집니다.
현재는 대부분 TCP를 사용합니다.
TCP 3 way handshake
TCP가 연결성을 보장할 수 있는 클라이언트와 서버의 연결과정 (물리적 연결이 아닌 논리적인 연결)
연결과정
1. 클라이언트에서 서버로 SYN 메시지를 보냄
2. 서버가 클라이언트에게 ACK + SYN 메시지를 보냄
3. 클라이언트가 서버에게 ACK를 보냄.
SYN : 접속 요청
ACK : 요청 수락
TCP 데이터 전달 보증
1. 클라이언트가 데이터를 전송합니다.
2. 서버는 데이터를 잘 받았다는 ACK 메시지를 클라이언트에게 전송합니다.
TCP 순서 보장
1. 클라이언트가 패킷1,2,3 순서로 전송
2. 서버에게 패킷 1,3,2 순서로 도착
3. 서버가 클라이언트에게 패킷2부터 다시 보내라고 요청
TCP의 이러한 특징 때문에 IP 프로토콜의 한계(비연결성, 비신뢰성)를 해결할 수 있습니다.
IP 패킷 안에 TCP 세그먼트를 사용하는데 TCP 세그먼트에는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 들어갑니다.
다음은 UDP에 대해 알아보겠습니다.
User Datagram Protocol의 약자로 사용자 데이터그램 프로토콜로 IP 프로토콜과 유사합니다.
하지만 여기에 PORT번호와 체크섬정도가 추가됩니다.
데이터 전달 및 순서가 보장되지는 않지만 TCP에서 사용하는 연결들을 하지 않으므로 전송속도가 빠릅니다.
그러면 비연결성과 비신뢰성은 해결했는데 같은 IP에서 사용하는 애플리케이션이 2개 이상이라면 어떻게 해야 할까요?
Port를 통해서 해결할 수 있습니다.
Port는 같은 IP 내에서 프로세스(게임, 화상통화, 웹 브라우저 등)를 구분합니다.
IP가 어떤 아파트라면 Port는 몇 동 몇 호인지를 구분해주는 역할을 합니다.
대표적으로 HTTP는 80 포트 HTTPS는 443 포트번호를 가집니다.
TCP/IP를 통해 데이터를 안전하게 전송하는 법을 간략하게 알아봤습니다.
그런데 IP는 기억하기 어렵고 기억한다고 하더라도 IP가 변경되면 문제가 발생할 수 있습니다
그래서 DNS가 도입됩니다.
DNS
Domain Name System의 약자로 도메인명을 등록하고 그것을 IP주소로 바꾸어주는 전화번호부 역할을 하는 서버입니다.
대표적으로 우리는 구글 홈페이지에 들어가기 위해 google.com이라는 도메인을 입력하면 DNS server가 이를 구글의 IP주소로 변경하여 접속할 수 있도록 해줍니다.
DNS 통해 IP의 기억하기 어려운 특징과 변경될 때 문제점을 해결할 수 있습니다.
인터넷 프로토콜 스택의 4 계층
애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층
출처
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
'CS > 네트워크' 카테고리의 다른 글
REST API란? RESTful API란? (0) 2021.12.27 HTTP API란? (0) 2021.12.24 HTTP 기본 (0) 2021.12.22 URI란? (URI VS URL VS URN) (0) 2021.12.19 CORS란? (0) 2021.12.08