Chapter - 인터넷 프로토콜
IP와 IP Packet
- 컴퓨터에 IP 주소를 부여하여 통신을 한다.
- IP는 지정한 IP 주소(IP Address)에 패킷(Packet)이라는 통신 단위로 데이터 전달을 한다.
- IP 패킷에는 출발지 IP, 목적지 IP와 같은 정보가 포함되어 있다.
- 패킷 단위로 전송을 하면 목적지 IP에 도달하기 위해 서로 데이터를 전달한다.
- 서버에서 데이터를 전송받는다면 서버도 응답을 돌려줘야한다.
- 서버도 IP 패킷을 이용해 클라이언트에 응답한다.
IP 프로토콜의 한계
비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
비신뢰성
- 중간에 패킷이 사라질 수 있음
- 패킷의 순서를 보장할 수 없음
TCP vs UDP
TCP 프로콜은 IP 프로토콜보다 더 높은 게층에 존재하기 때문에 IP 프로토콜의 한계를 보완할 수 있다.
* TCP/IP 4계층은 OSI 7계층보다 먼저 개발되었으며 TCP/IP 프로토콜의 계층은 OSI 모델의 계층과 정확하게 일치하지는 않는다.
TCP 특징
전송 제어 프로토콜(Transmission Control Protocol)
- 연결 지향 -TCP 3way handshake (가상 연결)
- 데이터 전달 보증
- 순서 보장
- 신뢰할 수 있는 프로토콜
TCP는 장치들 사이에 논리적인 접속을 성립하기 위해 3 way handshake를 사용하는 연결지향형 프로토콜이다.
연결방식
- 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다.
- 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN가 설정된 패킷을 발송한다.
- 서버는 클라이언트가 다시 ACK으로 응답하기를 기다린다.
- 클라이언트가 서버에게 ACK을 보내면 이 이후부터 연결성이 성립되며 데이터를 전송할 수 있다.
만약 서버가 꺼져있다면 클라이언트가 SYN을 보내고 서버에서 응답이 없기 때문에 데이터를 보내지 않는다. 현재에는 최적화가 이루어져 3번 ACK을 보낼 때 데이터를 함께 보내기도 한다.
* SYN은 Syncronize, ACK는 Acknowledgment의 약자
UDP 특징
사용자 데이터그램 프로토콜 (User Datagram Protocol)
- 하얀 도화지에 비유 (기능이 거의 없음)
- 비 연결지향
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- 신뢰성보다는 연속성이 중요한 서비스(e.g. 실시간 스트리밍)에 자주 사용됨
UDP는 IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜이다.
* 체크섬(checksum)은 중복 검사의 한 형태로, 오류 정정을 통해, 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법
TCP | UDP |
연결지향형 프로토콜 | 비 연결지향형 프로토콜 |
전송 순서 보장함 | 전송 순서 보장하지 않음 |
데이터 수신 여부 확인함 | 데이터 수신 여부 확인하지 않음 |
신뢰성은 높지만 속도가 느림 | 신뢰성은 낮지만 속도가 빠름 |
HTTP
HTTP의 특징
- 클라이언트 서버 구조
- 무상태 프로토콜 (Stateless), 비연결성 (Connectionless)
- HTTP 메세지
- 단순함, 확장 가능
클라이언트 서버구조
- Request, Response 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어 응답
무상태 프로토콜 - Stateless
서버가 클라이언트의 상태를 보존하지 않는다.
- 장점: 서버 확장성이 높음 (스케일 아웃)
- 단점: 클라이언트가 추가 데이터 전송
비 연결성 - Connectionless
- HTTP는 기본이 연결을 유지하지 않는 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답
Chapter - HTTP 헤더
표현 헤더(Representation Headers)
HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용한다.
- Content-Type: 표현 데이터의 형식
- Content-Encoding: 표현 데이터의 압축 방식
- Content-Language: 표현 데이터의 자연 언어
- Content-Length: 표현 데이터의 길이
- 표현 헤더는 요청, 응답 둘 다 사용
HTTP 주요 헤더
요청(Request)에서 사용되는 헤더
From: 유저 에이전트의 이메일 정보
- 일반적으로 잘 사용하지 않음
- 검색 엔진에서 주로 사용
Referer: 이전 웹 페이지 주소
- 현재 요청된 페이지의 이전 웹 페이지 주소
- A -> B로 이동하는 경우 B를 요청할때 Referer: A를 포함해서 요청
- Referer를 사용하면 유입경로 수집 가능
User-Agent: 유저 에이전트 애플리케이션 정보
- 클라이언트의 애플리케이션 정보(웹 브라우저 정보 등등)
- 통계 정보
- 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
Host: 요청한 호스트 정보(도메인)
- 필수 헤더
- 하나의 서버가 여러 도메인을 처리해야 할 때 호스트 정보를 명시하기 위해 사용
- 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 호스트 정보를 명시하기 위해 사용
Origin: 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냄
- 여기서 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러가 발생
- 응답 헤더의 Access-Control-Allow-Origin과 관련
Authorization: 인증 토큰을 서버로 보낼 때 사용하는 헤더
응답(Response)에서 사용되는 헤더
Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
Data: 메시지가 발생한 날짜와 시간
Location: 페이지 리디렉션
- 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 리다이렉트(자동 이동)
- 201(Created): Location 값은 요청에 의해 생성된 리소스 URI
- 3xx(Redirection): Location 값은 요청을 자동으로 리디렉션하기 위한 대상 리소스를 가리킴
Allow: 허용 가능한 HTTP 메서드
- 405(Method Not Allowed)에서 응답에 포함
Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
- 503(Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있음
콘텐츠 협상 헤더
콘텐츠 협상(Content negotiation)
클라이언트가 선호하는 표현 요청
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압충 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
- 협상 헤더는 요청시에만 사용
Chapter - 웹 캐시
HTTP 헤더 - 캐시
캐시(cache)는 컴퓨터 과학에서 데이터나 값을 미리 복사해놓는 임시 장소를 가리킨다.
- 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절학하고 싶을 때 사용
- 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있음
- 브라우저에 캐시를 저장할 땐 헤더에 cache-control 속성을 통해 캐시가 유효한 시간을 지정할 수 있음
- 캐시가 존재하고 유효기간이 지나지 않은 캐시라면 해당 캐시에서 데이터를 가져올 수 있음
- 캐시가 유효기간을 초과하면 서버를 통해 데이터를 다시 조회하고 캐시를 갱신함. 이때 다시 네트워크 다운로드가 발생함
캐시 검증 헤더와 조건부 요청은 조금 더 정리되면 작성
프록시 캐시(Proxy Cache), 얘도 마찬가지로 정리되면 작성
'TIL > Code States' 카테고리의 다른 글
Code States 64일차 - [Git] 브랜치 관리와 고급 기능 (0) | 2021.10.28 |
---|---|
Code States 62일차 - [컴퓨터공학] 기초 (0) | 2021.10.26 |
Code States 61일차 - [컴퓨터공학] 기초 (0) | 2021.10.25 |
Code States 60일차 - [인증/보안] 기초 (0) | 2021.10.22 |
Code State 59일차 - [인증/보안] 기초 (0) | 2021.10.21 |