컴공 전공 공부

모든 개발자를 위한 HTTP 웹 기본 지식[인터넷 네트워크]- 섹션 1 본문

웹지식

모든 개발자를 위한 HTTP 웹 기본 지식[인터넷 네트워크]- 섹션 1

HUFS_COMPUTERPROGRAMER 2024. 2. 1. 18:00

(인프런) 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 공부하고 리뷰한 글입니다.

IP (인터넷 프로토콜) 의 역할 

- 지정한 IP주소에 데이터 전달

- 패킷이라는 통신 단위로 데이터 전달 

 

 IP 프로토콜의 한계

1) 비연결성

- 패킷을 받을 대상이 없거나 서비스 불능 상태  패킷 전송

2) 비신뢰성

- 중간에 패킷이 사라지면? → 해결X

- 패킷이 순서대로 안오면?  해결X

3) 프로그램 구분

- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?  구분X

e.g. 한 PC로 게임, 음악 듣기하면 IP는 같음

 

이러한 IP 프로토콜의 한계에 대한 해결책 -> TCP / UDP 

- 인터넷 프로토콜 스택의 4계층

애플리케이션 계층: HTTP, FTP

전송 계층: TCP, UDP

인터넷 계층 : IP

네트워크 인터페이스 계층 

 

IP패킷 정보 

: 출발지 IP, 목적지 IP 정보가 담겨 있음

TCP 특징

- 전송 제어 프로토콜

- 연결지향 (연결한 다음 메시지를 보낸다)

 

3 way handshake

: 1. SYN -> 2. SYN + ACK  ->  3. ACK 3번 주고 받음 -> 4. 데이터 주고 받음

- 물리적으로 연결 된다 X(전용 랜선 연결 의미 X) -> 논리적 연결 의미 

 

Q. 3way-handshake를 통해 클라이언트 서버 간 논리적 연결의 의미는?

A. 물리적 연결은 PC와 PC를 직접 선으로 연결한 경우를 말한다.

반면, 논리적 연결은 클라이언트, 서버 사이에 무수히 많은 노드들을 거쳐 연결된 것이다.

3-way-handshake를 통한 연결이 직접 연결이 아닌 이유는 서버와 클라이언트는 서로 SYN, ACK를 통해 서로의 존재를 확인했음에도, 중간 노드의 결함이 발생할 경우 이 연결은 유효하지 않기 때문이다.

 

 

 

- 데이터 전달 보증

: 클라이언트에서 서버로 데이터를 전송하면 서버가 데이터를 잘 받았다고 응답해줌)

- 순서 보장 

: 클라이언트에서 서버로 패킷이 순서대로 보내지지 않으면 ,

틀린 부분부터 다 버리고 틀린 패킷부터 다시 서버에서 클라이언트로 보냄

->이것을 확인한 클라이언트는 다시 서버에  틀린 부분부터 보냄

전송제어 , 순서 검증 정보가 있기 때문에 가능함 -> 따라서 TCP는 신뢰할 수 있는 프로토콜

-현재는 대부분 TCP 사용

UDP 특징 (사용자 데이터그램 프로토콜) 

- IP와 동일하지만  + PORT + 체크섬(메시지가 맞는지 검증)  정도만 추가

- 기능이 거의 없음 

-연결지향 X -TCP 3way handshake X

-데이터 전달 보증 X

-순서 보장 X

- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름

- 최적화를 하고 싶을 때 UDP에서 작업을 하여 원하는 것을 애플리케이션 레벨에서 만드면 됨 

 

-요즘은 영상도 TCP로 보냄 -> 그렇지만 최적화를 하면서 HTTP3 같은 경우 UDP 프로토콜을 씀

 

- 애플리케이션에서 추가 작업 필요

: 웹의 통신 규격인 HTTP는 여러가지 버전(0.9, 1.1, 2, 3)이 있다. HTTP/1.1 과 HTTP/2 는 TCP를 기반으로 작동하고 HTTP/3 은 UDP를 기반의 QUIC를 사용한 기술이 도입됐다. 이중 대부분을 차지하는 HTTP/1.1과 달리 HTTP/3은 아직 보편화된 단계가 아니고 구글의 크롬 브라우저에서만 도입되고 사용되는 단계다.

 

하나의 웹 사이트 페이지는 여러 개의 파일(이미지, css 파일 등)의 모음이다. 따라서 한 페이지를 요청할 때 파생되는 수백개의 요청을 효율적으로 처리하는 것이 HTTP/2, HTTP/3의 주요 목표다. 하나의 사이트를 불러오기 위해 브라우저는 TCP, UDP 등의 모든 통신을 동시에 활용한다. (서버가 UDP를 지원한다는 전제하에)

 

UDP는 3-way-handshake 과정이나 데이터 순서 보장을 하지 않아 클라이언트가 이를 알아서 해결해야 한다. 즉, 데이터 순서를 보장하지 않는 문제를 해결하기 위해 클라이언트에서는 추가적으로 작업이 필요하게 된다. 웹 개발에서 애플리케이션은 브라우저를 말하고 브라우저(클라이언트)가 TCP, UDP에 대한 처리를 담당하므로 웹 개발자가 이를 구분하여 작업할 필요는 없다.

[출처] https://www.inflearn.com/questions/336522

 

 

PORT란?

- IP는 목적지 서버를 찾는 것이고, 그 서버 안에서 돌아가는 애플리케이션들을 또 구분하는 것이 PORT

- 즉, 같은 IP내에서 프로세스를 구분하는 것이 포트

- 0 ~ 65535 포트 번호 할당 가능

- 0~1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음

- FTP : 20,21

-TELNET : 23

- HTTP : 80

- HTTPS : 443 

 

DNS가 왜 필요한가?

->IP는 변경될 수 있고, 외우기 어렵다 .

DNS : Domain Name System 으로 도메인 명을 ip주소로 변환해준다. 

 

google.com이 호출되는 과정

1. 클라이언트가 DNS 서버에게 도메인 명 google.com에 맞는 ip를 요청한다. 

2. DNS 서버에서는 IP를 응답한다. 

3. 클라이언트는 이 IP 정보로 서버에 접속하게 된다.