[모두의네트워크&그림으로 배우는HTTP&Network] 6주차 공부

김서영·2021년 10월 17일
0

네트워크 스터디

목록 보기
6/12

HTTP 헤더

HTTP/1.1 일반 헤더 필드

리퀘스트 메세지와 리스폰스 메세지 양쪽에서 사용되는 헤더.

Cache-Control

디렉티브로 불리는 명령을 사용하여 캐싱 동작을 지정. 지정한 디렉티브에는 파라미터가 있는 것과 없는 것도 있음. 여러 개를 지정하는 경우 콤마(,) 사용.
Cache-Control: private, max-age=0, no-cache

캐시 리퀘스트 디렉티브

디렉티브파라미터설명
no-cache없음오리진 서버에 강제적인 재검증
no-store없음캐시는 리퀘스트, 리스폰스의 일부분을 보존해서는 안됨
max-age = [초]필수리스폰스의 최대 age 값
max-state (= [초])생략 가능기한이 지난 리스폰스를 수신
min-fresh = [초]필수지정한 시간 이후에 변경된 리스폰스를 보냄
no-transform없음프록시는 미디어 타입을 변환해서는 안됨
only-if-cached없음캐시에서 리소스를 취득
cache-extension-새로운 디렉티브를 위해서 토큰

캐시 리스폰스 디렉티브

디렉티브파라미터설명
public없음어딘가에 리스폰스 캐시가 가능
private생략가능특정 유저에 대해서만 리스폰스
no-cache생략가능유효성의 재확인 없이는 캐시는 사용해서는 안됨
no-store없음캐시는 리퀘스트, 리스폰스의 일부분을 보존해서는 안됨
no-transform없음프록시는 미디어 타입을 변경해서는 안됨
must-revalidate없음캐시 가능하지만 오리진 서버에 리소스의 재확인을 요구
proxy-revalidate없음중간 캐시 서버에 대해서 캐시했던 리스폰스의 유효성의 재확인을 요구
max-age = [초]필수리스폰스의 최대 age 값
s-maxage = [초]필수공유 캐시 서버의 리스폰스 최대 age 값
cache-extension-새로운 디렉티브를 위한 토큰

Connection

  • 프록시에 더 이상 전송하지 않는 헤더 필드를 지정
  • 지속적 접속 관리
    Connection: 더 이상 전송하지 않는 헤더 필드 명
    Connection: Close
    Connection: Keep-Alive

Date

HTTP 메세지를 생성한 날짜.
Date: Tue, 03 Jul 2021 04:10:32 GMT
Date: Tue, 03-Jul-21 04:10:32 GMT
Date: Tue 03 Jul 21 04:10:32 2021

Pragma

HTTP/1.1 보다 오래된 버전의 흔적으로 HTTP/1.0와의 후방 호환성만을 위해 정의.
Pragma: no-cache

Cache-Control: no-cache 
Pragma: no-cache

Trailer

메세지 바디의 뒤에 기술되어 있는 헤더 필드를 미리 전달. 청크 전송 인코딩을 사용하고 있는 경우에 사용 가능.

Transfer - Encoding

메세지 바디의 전송 코딩 형식을 지정하는 경우.

Upgrade

HTTP 및 다른 프로토콜의 새로운 버전이 통신에 이용되는 경우에 사용.

Via

클라이언트와 서버 간의 리퀘스트 혹인 리스폰스 메세지의 경로를 알기 위해 사용. 프록시 혹은 게이트웨이는 자신의 서버 정보를 Via 헤더 필드에 추가한 뒤에 메세지를 전송.

Warning

HTTP/1.0 리스폰스 헤더(Retry-After)가 HTTP/1.1에서 변경된 것. 리스폰스에 관한 추가 정보를 전달.
Warning: [경고코드][경고한 호스트:포트번호]"[경고문]"([날짜])

리퀘스트 헤더 필드

클라이언트 측에서 서버 측으로 송신된 리퀘스트 메세지에 사용되는 헤더.
리퀘스트의 부가 정보와 클라이언트의 정보, 리스폰스의 콘텐츠에 관한 우선 순위 등을 추가.

Accept

유저 에이전트에 처리할 수 있는 미디어 타입과 미디어 타입의 상대적인 우선 순위를 전달하기 위해 사용.
Accpet: text/html, application/xhtml+xml, application/xml;1=0.9,*/*;q=0.8

Accpet-Charset

유저 에이전트에서 처리할 수 있는 문자셋. 문자셋의 상대적인 우선 순위를 전달하기 위해 사용. 서버 구동형 네고시에이션에 이용.
Accept-Charset:iso-8859-5, unicode-1-1:q+0.8

Accept-Encoding

유저 에이전트가 처리할 수 있는 콘텐츠 코딩과 콘텐츠 코딩의 상대적인 우선 순위를 전달하기 위해서 사용.
Accept-Encoding: gzip, deflate

Accept-Language

유저 에이전트가 처리할 수 있는 자연어의 세트(한국어와 영어라는 의미)와 자연어 세트의 상대적인 우선 순위를 전달하기 위해 사용.
Accept-Language: ko-kr, en-us;q=0.7,en;q=0.3

Authorization

유저 에이전트의 인증 정보(크리덴셜 값)을 전달하기 위해 사용.
Authorization: Basic dWVub3NidjajdADjw==

Expect

클라이언트가 서버에 특정 동작 요구를 전달.
Expect: 100-continue

From

유저 에이전트를 사용하고 잇는 유저의 메일 주소를 전달.
From:info@hackr.jp

Host

리퀘스트한 리소스의 인터넷 호스트와 포트 번호를 전달.
Host:www.hackr.jp

If-Match

조건부 리퀘스트. 조건부 리퀘스트를 받은 서버는 지정된 조건에 맞는 경우에만 리퀘스트를 받음. 엔티티 태그 값을 전달.
If-Match:"123456"

If-Modified-Since

조건부 리퀘스트. 리소스 갱신 날짜가 필드 값보다 새롭지 않다면 리퀘스트를 받아들이겠다는 뜻을 전달.
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT

If-None-Match

조건부 리퀘스트. If-Match 헤더 필드와는 반대로 동작. 엔티티 태그(ETag)값이 지정된 리소스의 ETag 값과 일치하지 않으면 리퀘스트를 받아들이겠다는 뜻.

If-Range

조건부 리퀘스트. If-Range로 지정한 필드값(ETag 값, 혹은 날짜를 지정)과 지정한 리소스의 ETag값 혹은 날짜를 일치하면 Range 리퀘스트로서 처리하고 싶다는 것을 전달.

If-Unmodified-Since

If-Modified-Since 헤더 필드와 반대로 동작. 지정된 리소스가 필드 값에 지정된 날짜 이후에 갱신 되어 있지 않는 경우에만 리퀘스트를 받아들이도록 전달.

Max-Forwards

TRACE 혹은 OPTIONS 메소드에 의한 리퀘스트를 할 때에 전송해도 좋은 서버 수의 최대치를 10진수로 저장.
Max-Forwards:10

Proxy-Authorization

프록시 서버에서의 인증 요구를 받아들인 때에 인증에 필요한 클라이언트의 정보를 전달.

Range

리소스의 일부분만 취득하는 Range 리퀘스트를 할 때 지정 범위를 전달.
Range: bytes=5001-10000

Referer

리퀘스트가 발생한 본래 리소스의 URL 전달.

TE

리스폰스로 받을 수 있는 전송 코딩의 형식과 상대적인 우선 순위를 전달.
TE: trailers

User-Agent

리퀘스트를 생성한 브라우저와 유저 에이전트의 이름 등을 전달.

전송 계층: 신뢰할 수 있는 데이터 전송하기

전송 계층

전송 계층의 역할

물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있음.다만, 데이터가 손상되거나 유실되더라도 이들 계층에서는 아무것도 하지 않음.

전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요.
전송 계층에 오류를 점검하는 기능이 있어, 오류가 있는 경우 데이터를 재전송하도록 함. 또한, 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능도 있음.

연결형 통신과 비연결형 통신

신뢰성/정확성 : 데이터를 목적지에 문제없이 전달하는 것, 연결형 통신
효율성 : 데이터를 빠르고 효율적으로 전달하는 것, 비연결형 통신

연결형 통신은 신뢰성/정확성이 우선인 통신이라 여러 번 확인하고 보내는데, 비연결형 통신은 효율성이 우선인 통신으로 확인 절차 업시 일방적으로 보냄.

연결형 통신 프로토콜은 TCP, 비연결형 통신 프로토콜은 UDP.

TCP의 구조

연결형 통신 프로토콜. TCP로 전송할 때 붙이는 헤더를 TCP 헤더. TCP 헤더가 붙은 데이터를 세그먼트(segment).

출발지 포트번호(16비트)목적지 포트번호(16비트)
일련번호(32비트)
확인 응답 번호(32비트)
헤더 길이(4비트)예약 영역(6비트)코드 비트(6비트)윈도우 크기(16비트)
체크섬(16비트)긴급 포인터(16비트)
옵션
코드 비트는 TCP 헤더의 107번째 비트부터 112번째 비트까지의 6비트로 연결의 제어 정보가 기록되는 곳.
URGACKPSHRSTSYNFIN
000000

초깃값은 0이고 비트가 활성화되면 1로 변경.
연결을 확립하려면 SYN(연결 요청)과 ACK(확인 응답)이 필요.

3-Way 핸드셰이크

연결을 확립하려면 SYN(연결 요청)과 ACK(확인 응답)이 필요.
컴퓨터1에서 컴퓨터2로 통신을 할 때,

컴퓨터1 ----연결확립요청(SYN)---> 컴퓨터2

URGACKPSHRSTSYNFIN
000010
컴퓨터1 <---연결확립응답(ACK)+연결확립요청(SYN)---- 컴퓨터2
URGACKPSHRSTSYNFIN
010010
컴퓨터1 ----연결확립응답(ACK)---> 컴퓨터2
URGACKPSHRSTSYNFIN
010000

연결을 끊을 때는 FIN(연결 종료) ACK을 사용.
컴퓨터1 ----연결종료요청(FIN)---> 컴퓨터2

URGACKPSHRSTSYNFIN
000001
컴퓨터1 <---연결종료응답(ACK)---- 컴퓨터2
URGACKPSHRSTSYNFIN
010000
컴퓨터1 <---연결종료요청(FIN)---- 컴퓨터2
URGACKPSHRSTSYNFIN
000001
컴퓨터1 ----연결종료응답(ACK)---> 컴퓨터2
URGACKPSHRSTSYNFIN
010000

일련번호와 확인 응답 번호의 구조

일련번호와 확인 응답 번호

출발지 포트번호(16비트)목적지 포트번호(16비트)
일련번호(32비트)
확인 응답 번호(32비트)
헤더 길이(4비트)예약 영역(6비트)코드 비트(6비트)윈도우 크기(16비트)
체크섬(16비트)긴급 포인터(16비트)
옵션
  • TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려주는 역할.
  • 확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할. 이 번호는 다음 번호의 데이터를 요청하는 데도 사용. 예를 들어 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청.
  • 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송함.(재전송 제어)

윈도우 크기

받은 세그먼트를 버퍼(buffer)에 저장. 수신 측으로 대량으로 데이터가 전송되면 보관하지 못해 넘쳐 버림.(overflow)
오버플로우가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 하는데 TCP 헤더의 윈도우 크기(window size)값에 해당.
3-way 핸드셰이크를 하는 동안에 서로의 윈도우 크기를 확인.
따라서, 윈도우 크기 이내라면 연속해서 세그먼트를 송신.

포트 번호의 구조

포트 번호(port number)

출발지 포트번호(16비트)목적지 포트번호(16비트)
일련번호(32비트)
확인 응답 번호(32비트)
헤더 길이(4비트)예약 영역(6비트)코드 비트(6비트)윈도우 크기(16비트)
체크섬(16비트)긴급 포인터(16비트)
옵션
어느 애플리케이션의 데이터인지 알기 위해서는 출발지 포트 번호(source port number)와 목적지 포트 번호(destination port number)가 필요.

포트 번호는 0~65535번을 사용할 수 있음. 0~1023번 포트는 주요 프로토콜이 사용하도록 예약. (잘 알려진 포트,well-known ports)
1024번은 예약되어 있지만 사용되지는 않는 포트, 1025번 이상은 랜덤 포트(클라이언트 측의 송신 포트로 사용).
포트는 방 번호라고 생각하면 쉬움.

UDP의 구조

비연결형 통신 프로토콜. 데이터를 효율적으로 빠르게 보내는 것. TCP처럼 따로 확인 작업은 없음. 스트리밍 방식으로 전송하는 동영상 서비스 같은 곳에 사용.

UDP 헤더

UDP 헤더가 붙은 데이터는 UDP 데이터그램.

출발지 포트 번호(16비트)목적지 포트 번호(16비트)
길이(16비트)체크섬(16비트)
UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있음.(브로드캐스트,broadcast)
profile
하지만 저는 이겨냅니다. 김서영이죠?

0개의 댓글