티스토리 뷰

네트워크

HTTP, TCP/IP

summercat 2022. 11. 11. 10:47

HTTP (HyperText Transfer Protocol)

W3 상에서 정보를 주고받을 수 있는 프로토콜. 주로 HTML 문서를 주고받는 데 쓰인다.

주로 TCP를 사용하고 HTTP/3부터는 UDP를 사용하며, 80번 포트를 사용한다. (HTTPS는 443번)

클라이언트와 서버 사이에 이루어지는 요청/응답(Request/Response) 프로토콜이다.

  • 클라이언트인 웹 브라우저가 HTTP를 통해 서버로부터 웹페이지(HTML)이나 그림 정보를 요청하면,
    서버는 이 요청에 응답해 필요한 정보를 해당 사용자에게 전달한다.

HTTP를 통해 전달되는 자료는 http:로 시작하는 URL로 조회할 수 있다.

HTTP Methods

멱등(Idempotent): 요청을 몇 번을 보내도 상대쪽의 상태가 변하지 않는다.

  • 예: GET을 1천번을 보내도 똑같은거를 가져옴
  • 예2: DELETE을 1천번을 보내도 한번 삭제함
  • 예3: POST를 1천번을 보내면 리소스의 상태가 계속 바뀜 → not idempotent

GET: 데이터를 가져오는 요청 (리소스 조회)

POST: 데이터를 보내는 요청 (요청 데이터 처리)

PUT(UPDATE): 리소스를 대체, 리소스를 전부 변경하는 요청. 해당 리소스가 없으면 생성한다.

PATCH: 리소스를 일부만 변경하는 요청

DELETE: 데이터를 삭제하는 요청 (리소스 삭제)

HTTP Message Format

클라이언트와 서버 사이의 소통은 평문(ASCII) 메시지로 이루어진다.

Request/Status Line을 보고 요청의 형태를 파악하고,
Request/Response Header를 보고 요청/응답을 어떻게 해석해야 하는지에 대한 정보를 확인하고,
Request/Response Body는 요청을 처리하는 데 필요한 데이터 또는 처리를 시켜주기 위해 요청하는 데이터를 담고 있다.

빈 라인은 요청을 위한 meta-information이 모두 보내졌다는 것을 표시하기 위한 것이다.

요청 메시지(Request): 클라이언트 → 서버

  • Request Line

    • Method: 어떤 형식의 요청인지 (GET, POST, HEAD, …)

    • Request Target: 경로. URL 또는 absolute path.

      • absolute path의 예시

          POST / HTTP/1.1
          GET /background.png HTTP/1.0
          HEAD /test.html?query=alibaba HTTP/1.1
          OPTIONS /anypage.html HTTP/1.0
      • complete URL의 예시

          GET https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
    • HTTP 버전: 현재 사용하고 있는 HTTP 규약의 버전

  • Request Headers

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages/http_request_headers3.png

    • HTTP 요청에 대한 부수적인 데이터
    • 요청 헤더 (Request Headers)
      • Host: 서버의 도메인
      • User-Agent: 사용자의 클라이언트(운영체제, 브라우저) 정보
      • Accept 등
    • 공통 헤더 (General Headers)
      • Date: HTTP 메시지가 만들어진 시각
      • Cache-Control, Content-Language 등
    • Representation Headers
      • Content-Type: 컨텐츠 타입
      • Content-Length: 요청과 응답 메세지의 컨텐츠 길이
  • Request Body

    • HTTP 요청에 관한 실제 데이터
    • 위 예시는 GET 요청이기 때문에 데이터를 보낼 필요가 없어 비어있다.

응답 메시지(Response): 서버 → 클라이언트

  • Status Line

    • 요청 처리에 대한 상태 표시줄
    • HTTP 버전
    • Status Code: 처리(응답)에 대한 정보. 위 예제의 200
    • Message: Status Code에 대한 정보. 위 예제의 OK
  • Response Headers

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages/http_response_headers3.png

    • 응답 헤더 (Response Headers)
      • Server: 서버 소프트웨어의 정보
      • Content-Encoding: 응답하는 내용의 인코딩 포맷
      • Content-Type: Response Body의 타입과 문자 포맷
      • Header의 정보를 통해 Response Body의 내용이 HTML 이라는 것을 알 수 있고,
        실제 HTML의 내용은 Response Body에 들어간다.
  • Response Body

    • 응답 데이터. DELETE 요청의 경우에는 비어있겠죠?

Header에 Content-Length가 있는 이유

  • 데이터 유실이 있는지 여부를 확인할 수 있다.
  • 네트워크 통신을 할 때에는 ‘패킷’이라는 단위로 쪼개서 통신을 한다.
  • 패킷을 주고받는 과정에서 없어진 게 있는지 확인할 때 사용 가능!

URL

https://i.imgur.com/QtWczWF.png

URI (Uniform Resource Identifier)

  • 특정 리소스를 다른 리소스와 식별(구분)하는 식별자.
  • URL과 URN을 포함한다.

URL (Uniform Resource Locator)

  • 인터넷 상에서 리소스의 위치를 나타내는 문자열.
  • scheme: 어떤 규약을 사용하는지. 어떤 형태로 요청을 보내야 하는지 (예: HTTP)
  • userinfo@
    • scheme에 따라 필요할 수도, 아닐 수도 있다 (선택사항).
    • 이메일 주소에서 주로 볼 수 있다.
  • host: 어디로 보낼 것인지. IP 또는 도메인
  • port: 어떤 컴퓨터에서 어떤 프로세스로 요청을 보낼 것인지를 구분하기 위한 숫자. 선택사항
    • 어떤 scheme인지, 어떤 통신 규약으로 요청을 보냈는지에 따라서 미리 정해져 있는 포트도 존재한다.
    • 별도로 작성되어 있지 않다면 scheme에 따른 기본값을 사용하게 된다 (예: HTTP는 80)
  • path: 자원의 위치(경로)
  • ?query: 조회할 때 필요한 부수적인 정보를 제공하기 위한 부분. 선택사항
  • fragment: 하나의 문서의 어떤 부분을 나타내는 것. 선택사항

Media Types

Media Type

  • 인터넷 상에서 주고 받는 데이터의 형식
  • 예: image(jpg, jpeg, …), video(mp4, avi, …)

Content-Type

  • HTTP Message의 Body의 Media Type을 알려주는 헤더
  • 예: txt/html, application/json, multipart/form-data

JSON (JavaScript Object Notation)

  • 데이터를 주고받을 때 흔히 사용하는 형태
  • 속성 - 값 (Attribute - Value)의 형태와 배열(array)를 활용한다 (Key-Value라고도 한다).
  • 일반적인 데이터를 표현한 객체 (VO, Value Object)는 json 형태로 주고 받는다.
  • Value에 들어갈 수 있는 것: 문자열, 숫자, 배열, json, boolean

multipart/form-data

  • Body에 들어갈 데이터의 타입을 Content-Type에서 명시할 때, 타입을 한가지만 명시할 수 있다.

    • 예: text이면 text/plain, xml이면 text/xml, jpg 이미지이면 image/jpeg 등
  • 두 종류 이상의 데이터를 하나의 Body에 넣고 싶을 경우 사용하는 것이 multipart 타입이다.

    • 예: 사진 설명과 사진 파일을 올리고 싶은 경우,
      사진 설명 input은 application/x-www-form-urlencoded, 사진 파일 input은 image/jpeg

      • form 태그 예시

          <form enctype="multipart/form-data">
              <input id="desc" type="text" />
              <input id="image" type="file"/>
          </form>

TCP/IP

패킷 통신: 데이터를 패킷이라는 작은 단위로 나누어 전송하는 방식

TCP/IP: 인터넷에서 정보를 주고받기 위한 프로토콜의 집합. 모음.

IP (Internet Protocol)

패킷 데이터들을 최대한 빨리 특정 목적지 주소로 보내는 프로토콜

패킷 전달 여부를 보증하지 않으며, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.

TCP (Transmission Control Protocol)

패킷 통신은 데이터를 작은 단위로 나누어 전송하기 때문에, 순서가 뒤섞이거나 데이터가 유실될 수 있다.

→ 이것을 해결하기 위한 프로토콜이 TCP

패킷을 정상적으로 받을 수 있도록 하는 프로토콜

IP보다 패킷 전송 속도는 느리지만, 패킷 전달 여부를 보증하고 패킷을 송신 순서대로 받게 해준다.

  • 목적지에 도착한 패킷들을 순서대로 정렬하고, 손상되거나 유실된 패킷이 있다면 출발지에 재요청한다.

TCP/IP

IP와 TCP를 묶은 것.

송신자가 수신자에게 IP를 사용해 최대한 빠르게 패킷을 전송하면, TCP를 활용해 패킷을 정상적으로 수신한다.

프로토콜 스택(Protocol Stack)

  • = 프로토콜 스위트(Protocol Suite)
  • 복수의 프로토콜 집합
  • 서로 다른 프로토콜 스택 끼리는 통신할 수 없다.

OSI 7계층과 TCP/IP 7계층

데이터 전송 시, 데이터는 상위 계층 → 하위 계층으로 이동

  • 계층 이동마다 필요한 정보(헤더)가 추가된다 → 캡슐화

데이터 수신 시, 데이터는 하위 계층 → 상위 계층으로 이동

  • 계층 이동마다 추가된 헤더를 읽고 알맞은 행동을 취한 후 헤더를 제거한다 → 역캡슐화

OSI 7계층: 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것

  • 물리 계층
    • 전기적, 기계적인 특성을 이용해서 통신 케이블로 데이터를 전송한다.
    • 이 계층에서 사용되는 통신 단위는 비트이며, 1과 0으로 나타내어지는 전기적인 On/Off 상태이다.
    • 데이터를 전기적인 신호로 변환해서 주고 받기만 할 뿐, 전송하는 데이터가 무엇인지, 어떤 에러가 있는지 등에는 신경쓰지 않는다.
    • 통신 케이블, 리피터, 허브 등의 장비를 통해 데이터를 전송한다.
  • 데이터 링크 계층
    • 물리 계층을 통해 송수신되는 정보의 오류와 흐름을 관리해 안전한 정보의 전달을 수행할 수 있도록 도와주는 역할 → 통신 오류를 찾고 재전송하는 기능을 가지고 있다.
    • 이 계층에서 사용하는 통신 단위를 프레임이라고 한다.
    • 브리지, 스위치 등의 장비를 통해 MAC 주소를 가지고 물리 계층에서 받은 정보를 전달한다.
      • MAC 주소는 물리적으로 할당받는다 → 네트워크 카드가 만들어질 때부터 맥 주소가 정해져 있다.
  • 네트워크 계층
    • 경로를 선택하고, 주소를 정하고, 경로에 따라 패킷을 전달하는 역할
    • 네트워크 계층의 기능: 라우팅, 흐름 제어, 세그멘테이션(Segmentation), 오류 제어, 인터네트워킹(Internetworking) 등
      • 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층
    • 논리적인 주소 구조(IP)를 가진다 → 네트워크 관리자가 직접 주소를 할당
    • 서브넷의 최상위 계층
      • 경로를 설정하고, 청구 정보를 관리한다.
      • 개방형 시스템들의 사이에서 네트워크 연결을 설정, 유지 해제하는 기능을 부여한다.
      • 전송 계층 사이에 네트워크 서비스 데이터 유닛을 교환하는 기능을 제공한다.
  • 전송 계층
    • 통신을 활성화하기 위한 계층. 인터넷에서 데이터를 어떻게 주고받는지.
    • 통신 노드 간 신뢰성 있는 데이터 전송을 보장하는 계층.
    • 보통 TCP 프로토콜을 이용하며, 포트를 열어서 응용 프로그램들이 전송을 할 수 있게 한다.
    • 데이터가 왔다면 4계층(전송 계층)에서 해당 데이터를 하나로 합쳐서 5계층에 전달한다.
    • 패킷들의 전송이 유효한지 확인하고, 전송 실패한 패킷들을 재전송한다.
      → 상위 계층에서 데이터 전달의 유효성이나 효율성을 더 이상 생각하지 않아도 된다.
  • 세션 계층
    • 데이터가 통신하기 위한 논리적인 연결. 컴퓨터들끼리 연결된 상태를 관리.
    • 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다.
    • TCP/IP 세션을 만들고 없애는 책임을 진다.
    • 세션 설정, 유지, 종료, 전송 중단 시 복구 등의 기능이 있다.
  • 표현 계층
    • 데이터 표현이 상이한 프로세스의 독립성을 제공하고, 암호화한다.
    • 통신을 어떻게 표현할지 (데이터의 형식에 관한 부분)
    • MIME 인코딩이나 암호화 등의 동작이 이루어지는 계층
  • 응용 계층
    • 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.
    • 통신 패킷은 프로토콜에 의해 처리된다.
      • 응용 계층에 정의된 통신 규약(Protocol): HTTP, FTP, SMTP 등
      • 브라우저나 메일 프로그램 등은 프로토콜을 보다 쉽게 사용하게 해주는 응용 프로그램
    • 모든 통신의 양 끝단은 HTTP와 같은 프로토콜이다 (응용 프로그램이 아니라)

TCP/IP 4계층

계층 역할 주요 프로토콜
응용 계층 응용 프로그램에서 데이터를 처리하는 계층 HTTP, HTTPS, SMTP, FTP 등
전송 계층 응용 계층에서 넘어온 데이터에 대한 검증, 재전송 등
각종 제어를 담당하는 계층 TCP, UDP 등
인터넷 계층 데이터를 목적지까지 효율적으로 전달하는 방법을 담당하는 계층 IP, ICMP 등
네트워크 인터페이스 계층 실질적으로 데이터를 전송하는 계층 Ethernet, Wi-Fi 등

출처
https://ko.wikipedia.org/wiki/HTTP
https://wooono.tistory.com/507https://ko.wikipedia.org/wiki/HTTP
https://shlee0882.tistory.com/110
https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
https://velog.io/@shin6403/HTTP-multipartform-data-란
http://kaludin.egloos.com/v/2270972

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함