TCP ( transmission Control Protocol )
- TCP는 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜 입니다.
- 일반적으로 TCP와 IP가 함께 사용되는데,IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 하게 됩니다.
- 연결 지향형인 TCP는 3-Way HandShaking이라는 과정을 통해 연결 후 통신을 시작하는데, 흐름 제어와 혼잡 제어를 지원하며 데이터의 순서를 보장.
흐름 제어 , 혼잡 제어
더보기
흐름 제어 : 보내는 측과 받는 측의 데이터 처리속도 차이를 조절해주는 것혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
TCP의 특징
- 연결형 서비스로 가상 회선 방식을 제공한다.
- 데이터의 전송 순서를 보장한다.
- 데이터의 경계를 구분하지 않는다.
- 신뢰성 있는 데이터의 전송
- UDP보다 전송속도가 느리다.
- 연결을 설정(3-Way HandShaking)과 해제 (4-way HandShaking)
UDP(User Datagram Protocol)
- UDP는 비연결형 프로토콜로써,인터넷상에서 서로 정보를 주고 받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜입니다.
- TCP와는 다르게 연결 설정이 없으며, 혼잡 제어를 하지 않기 때문에 TCP보다 전송속도가 빠릅니다.
- 그러나 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생 할 수 있다.
특징
- 비연결형 서비스로 데이터그램 방식을 제공
- 비신뢰성
- 데이터의 경계를 구분
- 패킷 오버헤드가 적어 네트워크의 부하 감소
- 혼잡 제어를 하지 않기 때문에 TCP보다 빠름
- TCP의 HandShaking 같은 연결 설정이 없음
요약
TCP는 연속성보다 신뢰성 있는 전송이 중요할 때에 사용되는 프로토콜이며,
UDP는 TCP보다 빠르고 네트워크 부하가 적다는 장점이 있지만 신뢰성 있는 데이터 전송을 보장하지는 않습니다.
그렇기 때문에 신뢰성보다는 연속성이 중요한 실시간 스트리밍과 같은 서비스에 자주 사용됩니다.
HTTP (HyperText Transfer Protocol)
텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 이렇게 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있게 되었다.
HTML 문서만이 HTTP 통신을 위한 유일한 정보 문서는 아니다.
Plain text로 부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고 받을 수 있으며, 보통은 클라이언트가 어떤 정보를 HTML 형태로 받고 싶은지, JSON 형태로 받고 싶은지 명시해주는 경우가 많다.
HTTP 특징
- HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다.
- TCP/ IP를 이용하는 응용 프로토콜이다.
(컴퓨터와 컴퓨터간에 데이터를 전송 할 수 있도록 하는 장치로 인터넷이라는 거대한 통신망을 통해 원하는 정보(데이터)를 주고 받는 기능을 이용하는 응용 프로토콜) - HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
(이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.) - HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.
Request (요청)
클라이언트가 서버에게 연락하는것을 요청이라고 하며 , 요청을 보낼때는 요청에 대한 정보를 담아 서버로 보낸다.
Request HTTP 메시지 예시
GET https://velog.io/@surim014 HTTP/1.1 // 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... // 헤더
Upgrade-Insecure-Requests: 1
- 시작줄 (첫 줄)
- GET : HTTP Method
- https://velog.io/ ~~ : 사이트 주소
- HTTP/1.1 : HTTP 버전
- 헤더 (두번째 줄 부터)
- 두번째 줄부터는 헤더이며 요청에 대한 정보를 담고 있다. User-Agent , Upgrade-Insecure-Request등등이 헤더에 해당되며 헤더의 종류는 매우 많다.
- 본문
- 본문은 요청을 할 때 함께 보낼 데이터를 담는 부분이다. 현재 예시에는 단순히 주소로만 요청을 보내고 있고 따로 데이터를 보내고 있지 않아 본문이 비어있다.
Response (응답)
- 서버가 요청에 대한 답변을 클라이언트에게 보내는 것
Status Code(상태 코드)
- 1XX ( 조건부 응답 ) : 요청을 받았으며 작업을 계속한다.
- 2XX ( 성공 ) : 클라이언트가 요청한 동작을 수신하여 이해했고, 승낙했으며 성공적으로 처리했음을 의미한다.
- 3XX ( 리다이렉션 완료 ) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
- 4XX ( 요청 오류 ) : 클라이언트에 오류가 있음을 나타낸다.
- 5XX ( 서버 오류 ) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
Response HTTP 메시지 예시
HTTP/1.1 200 OK // 시작줄
Connection: keep-alive // 헤더
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;
<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...
- 시작줄 (첫 줄)
- 첫 줄은 버전 상태코드 상태메시지로 구성되어 있다. 200은 성공적인 요청이 되었다는 뜻
- 헤더 (두번째 줄 부터)
- 두번째 줄부터는 헤더로 응답에 대한 정보를 담고 있다.
- 본문 (헤더 뒤부터)
- 응답에는 대부분의 경우 본문이 있다. 보통 데이터를 요청하고 응답 메시지에는 요청한 데이터를 담아서 보내주기 때문이다. 응답 메시지에 HTML이 담겨 있는데 이 HTML을 담아 브라우저가 화면에 랜더링 한다.
'CS지식' 카테고리의 다른 글
CS 공부 - HTTP (0) | 2023.04.02 |
---|---|
CS 공부 -Spring (0) | 2023.03.23 |
기술면접 DB (0) | 2023.03.19 |
CS 공부 자바 -2 (0) | 2023.03.12 |
CS 공부 - 자바 (기초 , JVM , 동작원리 ) (0) | 2023.03.12 |