[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계층 모델 기반 (네트워크 상황)
- 유저가 메시지 작성 ex) Hello World
- 애플리케이션 계층에서 HTTP 메시지에 해당 메시지를 담아 전송
- 전송 계층에서 TCP 세그먼트를 생성하고, IP Packet 생성
- 생성된 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와 같은 하위 호환까지 포함하여 적용해야 합니다.
Author And Source
이 문제에 관하여([CS] 네트워크 문제 Day-65), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cptkuk91/CS105저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)