[CS] 네트워크 문제 Day-65

IP에 대한 설명

  • IP 패킷에는 출발지, 목적지의 IP 주소가 포함된다.

  • IP 주소는 네트워크에서 장치들이 서로를 인식하고 통신하기 위해서 사용하는 특수한 번호이다.

  • IP 패킷에는 PORT 정보가 포함되어 있지 않기 때문에 IP 주소 내에서 프로세스를 구분할 수 없다.

TCP와 UDP

  • UDP는 데이터 전달 순서를 보장하지 않습니다. (단순한 프로토콜입니다.)
  • TCP는 장치들 사이에 논리적인 접속을 성립하기 위해 3 way handshake를 사용합니다.
  • UDP는 비 연결형 서비스를 지원하는 전송계층 프로토콜입니다.
  • TCP는 UDP보다 속도가 느리고, 신뢰성이 높습니다.

HTTP 헤더와 설명

  • Location: 페이지 리다이렉션
  • Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간
  • Content-Language: 데이터의 자연 언어를 설명하는 헤더
  • Content-Type: 표현 데이터의 형식

HTTP 헤더를 통한 콘텐츠 협상 예시

Accept-Language: ko, us;q=0.9, ja;q=0.8
Accept-Language: ko;q=1, us;q=0.9, ja;q=0.8

우선 순위는 0~1사이의 숫자로 표현하며 숫자가 높을 수록 우선순위를 가진다.

HTTP 검증 헤더

  • Etag값은 If-None-Match 로 검증합니다.
  • Last-Modified는 날짜 정보를 바탕으로 검증하기 때문에 최종 수정 날짜 정보가 표시됩니다.
  • 서버에서 별도의 캐시 로직을 관리하고 싶은 경우 Etag를 사용합니다.

프록시 캐시에 대한 설명

  • 프록시 서버에서 관리하는 캐시는 Public, 클라이언트에 저장되는 캐시는 Private
  • Cache-Control: public을 사용하면 응답을 public에 저장할 수 있다.
  • no-cache를 사용하면 프록시 서버와 원 서버 연결이 끊어지더라도 프록시 서버의 캐시 데이터를 사용할 수 있다.
  • no-store인 경우, 데이터에 민감한 정보가 있으면 안된다는 의미로 데이터가 캐시되지 않는다.

HTTP 통신의 두 가지 속성

  • stateless(무상태성)
  • connectionless(비 연결성)

IP에 대한 설명

  • IP는 Packet이라는 통신 단위로 데이터 전달을 한다.
  • IP는 Internet Layer에서 사용되는 프로토콜입니다.
  • IP는 Packet을 받을 대상이 없거나 서비스 불능 상태라도 Packet을 전송하며 이를 비연결성이라고 한다.
  • IP는 중간에 Packet이 사라질 수 있고, 패킷의 순서를 보장하지 않는다. 이런 특징을 비신뢰성이라고 한다.

네트워크 계층

  • 네트워크 프로토콜 계층은 OSI 7계층 모델과 TCP/IP 4계층 모델로 나눌 수 있다.
  • TCP/IP 4계층은 OSI 7계층보다 먼저 개발되었으며 2 계층은 정확하게 일치하지 않는다.
  • HTTP는 애플리케이션 계층에 속하며, 전송계층에 속하는 프로토콜은 TCP, UDP가 있다.
  • 애플리케이션 계층은 높은 계층이며, 네트워크 인터페이스 계층으로 갈수록 낮은 계층이라고 한다.

TCP/IP 4계층 모델 기반 (네트워크 상황)

  1. 유저가 메시지 작성 ex) Hello World
  2. 애플리케이션 계층에서 HTTP 메시지에 해당 메시지를 담아 전송
  3. 전송 계층에서 TCP 세그먼트를 생성하고, IP Packet 생성
  4. 생성된 IP Packet을 Ethernet Framework에 포함해 서버로 전송

TCP 특징

TCP란?

Transmission Control Protocol약어로 서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜

  • TCP 장치들 사이에 논리적인 접속을 위하여 3 way handshake를 사용하는 연결 지향형 프로토콜

  • TCP는 데이터 전송이 성공적으로 이루어지면, 이에 대한 응답을 돌려준다.

  • Packet이 순서대로 도착하지 않으면, TCP 세그먼트에 있는 정보를 토대로 Packet 전송을 다시 요청한다.

  • TCP는 UDP보다 속도가 느리고, 신뢰성이 높다.

네트워크 문제

  • TCP는 UDP에 비해 속도가 느리고, 3 way handshake를 사용하기 때문에 신뢰성을 보장합니다.

  • UDP는 HTTP3부터 사용이 가능하며, 여러 기능을 커스터마이징하여 사용할 수 있다는 장점이 있습니다.

  • UDP는 데이터 수신 여부와 전송순서를 보장하지 않습니다.

  • UDP는 IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜입니다.

네트워크 문제

  • HTTP를 사용하면 해당 자원들을 보낼 때마다 매번 연결을 반복해야 하며, 비효율성을 해결하기 위해 지속적 연결(Persistent Connections)를 사용합니다.

  • 비연결성을 가지는 HTTP에서는 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP연결을 끊습니다.

  • HTTP에서는 서버가 클라이언트 상태를 보존하지 않는 무상태 프로토콜입니다.

  • HTTP는 무상태성을 특징으로 가지고 서버를 확장하는데 용이하고, 클라이언트는 추가 데이터를 전송해야 합니다.

네트워크 문제

  • 2021년 기준, 가장 많이 사용되는 HTTP 버전은 HTTP /1.1 입니다.

  • TCP의 3 way handshake는 논리적 연결(가상 연결)로 이루어집니다.

  • UDP는 데이터 전달 여부 및 순서를 보장하지 않습니다.

  • IP는 지정한 IP 주소 (IP Address)에 패킷(Packet)이라는 통신 단위로 데이터를 전달합니다.

HTTP 메시지에 대한 내용

  • HTTP 메시지는 헤더와 바디로 구분할 수 있습니다.

  • HTTP 바디(메시지 본문)에서 모든 표현(Representation) 데이터를 전달합니다.

  • 메시지의 본문인 바디는 페이로드로 불립니다.

  • HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용합니다.

네트워크 문제

  • HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담습니다.

  • 표현 헤더는 요청, 응답 둘 다 사용합니다.

  • Content-Type 헤더는 표현 데이터 형식을 나타내며, 대표적으로는 application/json, Text/html 등이 있습니다.

  • Content-Language 헤더는 표현 데이터의 자연언어를 의미합니다.

표현 헤더와 헤더를 설명하는 내용

  • Content-Type: 표현 데이터의 형식을 설명하며, 미디어 타입 및 문자 인코딩의 내용을 담고 있습니다.

  • Content-Language: 표현 데이터의 자연 언어를 의미합니다.

  • Content-Encoding: 표현 데이터를 압축하기 위해서 사용하며, 데이터를 전달하는 쪽에서 압축 후 인코딩 헤더를 추가합니다.

  • Content-Length: 표현 데이터의 길이를 의미하며, Transfer-Encoding과 함께 사용할 수 없습니다.

HTTP 주요 헤더와 헤더에 대한 설명

  • Referer: 현재 요청된 페이지 이전 웹 페이지 주소를 의미하며, 만약 링크를 타고 들어왔다면 해당 링크를 포함하고 있는 페이지의 주소가 헤더에 포함됩니다.

  • User-Agent: 클라이언트 애플리케이션 정보를 의미하며, 해당 애플리케이션, OS등의 정보를 제공합니다.

  • Host: 요청한 호스트 정보(도메인명)을 의미하며, 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 호스트 정보를 명시하기 위해 사용합니다.

  • Origin: 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냅니다.

HTTP 주요 헤더와 헤더에 대한 설명

  • Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보를 나타내며, 프록시 서버를 사용하는 경우, 프록시 서버의 정보를 나타내기도 합니다.

  • Location: 리다이렉트 할 페이지의 URL을 의미하며, 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 리다이렉트 합니다.

  • Allow: 허용 가능한 HTTP 메소드를 의미합니다.

  • Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간을 의미하며, 503(Service Unavailable) 응답 코드와 함께 보내지면, 언제까지 기다려야 하는지 알 수 있습니다.

콘텐츠 협상에 대한 설명

  • 협상 헤더는 요청에서만 사용 가능합니다.

  • 협상 헤더에서는 원하는 콘텐츠에 대한 우선 순위를 지정할 수 있습니다.

  • Accept-Language: ko-KR,ko:q=0.9, en-US;q=0.8 일 경우 우선순위는 한국어가 됩니다. (0~1까지 높은 숫자가 우선)

  • Accept는 클라이언트가 선호하는 미디어 타입을 전달합니다.

캐시에 대한 설명

  • 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소 혹은 그러한 행위를 의미한다.

  • 캐시를 사용하면 브라우저 로딩 속도가 빨라지고, 비싼 네트워크 사용량을 줄일 수 있다.

  • Cache-Control 헤더를 통해 캐시 유지 시간, 캐시 여부, 프록시 캐시의 유지 시간을 설정 할 수 있다.

  • 클라이언트와 서버 사이에 대리로 통신을 수행하는 것을 프록시(Proxy), 중계 기능을 하는 서버를 프록시 서버라고 한다.

캐시 검증 헤더와 조건부 요청에 대한 내용

  • 캐시 유효기간이 지난 후 Last-Modified, If-Modified-Since와 Etag, If-None-Match 두 쌍의 헤더를 통해, 검증하고 사용할 수 있습니다.

  • Last-Modified는 데이터가 마지막으로 수정된 시간 정보를 헤더에 포함하며, 응답 결과를 캐시에 저장할 때 데이터 최종 수정일도 저장됩니다.

  • 서버에서 완전히 캐시를 컨트롤하고 싶은 경우 Etag를 사용할 수 있습니다.

  • If-None-Match를 요청 헤더에 작성하여 보내면, Etag 값을 검증하고 수정되지 않았다면 응답 결과를 재사용하고, 헤더 데이터를 갱신합니다.

캐시를 무효화하기 위한 헤더의 내용

  • Cache-Control: no-store: 데이터에 민감한 정보가 있으므로 저장하면 안된다는 의미이며, 메모리에서 사용하고 최대한 빨리 삭제되어야 한다.

  • Cache-Control: no-cache: 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용해야 합니다.

  • Cache-Control: must-revalidate: 캐시가 만료된 후, 최초 조회 시 원 서버에 검증을 해야 하며, 원 서버 접근에 실패하면 반드시 오류가 발생해야 합니다.

  • 캐시를 무효화를 확실히 해야 하는 경우, Pragma와 같은 하위 호환까지 포함하여 적용해야 합니다.

좋은 웹페이지 즐겨찾기