HTTP 웹 기본지식 Part. 1

Bluewind·2024년 7월 1일
0

withSIN

목록 보기
4/9
post-thumbnail

해당 글은 인프런의 김영한님의 강의인 '모든 개발자를 위한 HTTP 웹 기본 지식'을 공부하며 작성한 글입니다.

TCP

TCP를 왜 사용하는가?

완벽한 비유는 아니지만 인터넷을 현실세계에 비유하자면 자동차와 도로, 그리고 사거리에 있는 신호등(?)을 예로 들 수 있겠다.

인터넷 안에는 서울의 도로처럼 수많은 도로들과 신호등들이 있다.
도로는 물리적인 랜선을 비유할 수 있겠고, 신호등들은 길을 가르켜주는 라우터로 비유할 수 있다. (네비게이션에 좀 더 가깝다랄까)
라우터들은 패킷에 담긴 정보를 보고 어디로 가야 더 빠를지 계산해서 길을 가르켜준다.

자동차는 인터넷 패킷이다. 출발지와 도착지가 정해져있고 안에는 데이터를 담고 있다. 이 데이터를 도착지까지 보내야한다.

자동차는 수많은 신호등들을 지나서 도착지까지 수많은 신호등들과 도로들을 지나서 가는데, 가다가 길이 끊킬 수 있고, 신호등이 고장날 수도 있다.

패킷은 도중에 손실될 수 있다.

우리가 인프런 강의를 본다고 생각하면, 이 큰 영상이 한 패킷에 담길 수 없을 것이다. 잘게잘게 잘라서 수많은 패킷을 보내는데, 어떤 패킷은 운이 좋아서 다른 패킷보다 늦게 출발했는데도 빨리 도착할 수도 있다.

순서를 보장하지 못한다

그래서 사용하는 것이 TCP이다.

패킷은 package + bucket의 합성어다 (처음앎)

TCP의 특징

TCP (전송 제어 프로토콜 Transmission Control Protocol)

  • 연결지향 - TCP 3 way handshake (가상연결)
    • 연결을 한 다음에 데이터를 보낸다
  • 데이터 전달 보증
  • 순서 보장

TCP 3 way handshake

클라이언트와 서버는 중간에 3번 악수를 한다.

  1. 클라이언트 -----(SYN)-----> 서버
  2. 클라이언트 <--(SYN+ACK)-- 서버
  3. 클라이언트 -----(ACK)-----> 서버
  • SYN : Synchronize : 접속 요청
  • ACK : Acknowledgement (인정) : 요청 수락
    (요즘은 ACK와 함께 데이터 전송 가능)

이렇게하면 패킷 손실을 줄일 수 있다

데이터 전달 보증

  1. 클라이언트 --(데이터 전송)--> 서버
  2. 클라이언트 <--(데이터 받았음)-- 서버

만약 패킷이 중간에 빠져있다면 다시 보내줄 수 있을 것이다

순서 보장

  1. 클라이언트 --(1,2,3 순서로 전송)-->
  2. --(1,3,2 순서로 도착)--> 서버
  3. 클라이언트 <--(2번부터 다시 보내)-- 서버

이론 자체는 간단하다!

UDP

  • TCP와는 달리 기능이 거의 없는 IP와 거의 유사하나 PORT를 체크 할 수 있는 기능이 있다.
  • 기능은 얼마 없으나 단순하고 빠르다.
  • 하얀 도화지같아서 어플리케이션 상에서 작업이 가능하다.

요즘은 하얀 도화지 같은 UDP가 각광을 받는다고 한다.

PORT

같은 IP 내에서 프로세스를 구분하는데 쓰인다.

Port는 항구라는 뜻이므로 나는 패킷을 데이터를 싣은 선박으로 비유하여 이해했다.

포트에는 Well-known port가 존재하므로 해당 포트들은 피하는 것이 좋다.

DNS

아이피는 외우기도 힘들뿐더러 변경될 수 있는 요지가 존재한다.
그래서 생긴것이 DNS(Domain Name System)이다.

DNS 서버는 도메인명을 아이피 주소로 변환해주는 서버다.

URI

URI? URL? URN?

I - Identifier (식별)
L - Locator (위치)
N - Name (이름)

URI가 가장 큰 개념이며 하위에 URL과 URN이 존재한다.

URI,URL,URN구조

URI이 맞냐 URL이 맞냐 혼동을 계속 불러오기 때문에 W3C 문서의 '1.3 Confusion' 부분에 따르면...

People who are well-versed in URI matters tend to use "URL" and "URI" in ways that seem to be interchangable. Among these experts, this isn't a problem.

URL과 URI를 혼용해서 사용해도 문제없는것으로 말하고있다.

URI 구조

도메인 구조

query

뒤에 ?key=value&key=value의 형태로 URI뒤에 붙는 것을 query parameter, query string (숫자를 적어도 문자열로 넘겨주기 때문에)등으로 부른다.

웹 브라우저 요청 흐름

  1. 사용자가 URI를 입력한다.
  2. DNS 서버에서 해당 URI의 IP와 포트정보를 찾아낸다
  3. HTTP 요청 메세지를 생성하고 발송한다
    1) 웹 브라우저가 HTTP 메세지를 생성한 후
    2) SOCKET 라이브러리를 통해 전달하면
    3) OS단위에서 이 HTTP 메세지를 받아 TCP/IP 패킷을 생성하여 HTTP 메세지를 감싼다
    4) 네트워크 인터페이스인 LAN 드라이버 등을 통하여 인터넷으로 나간다
  4. 인터넷 망으로 들어간 요청 패킷이 서버에 도착한다
  5. 서버가 HTTP 메세지를 해석해서 HTTP 응답 메세지를 생성한다
  6. 사용자의 웹 브라우저가 HTTP 응답 메세지를 렌더링하여 사용자에게 보여준다.
profile
NO EFFORT, NO RESULTS

0개의 댓글