HTTP - 인터넷 네트워크

Jung Hyun Kim·2021년 3월 10일
0

인터넷 프로토콜 스택의 4계층 이 있다.

  • 애플리케이션 계층 - HTTP
  • 전송 계층 - TCP, UDP
  • 인터넷 계층 - IP
  • 네트워크 인터페이스 계층

인터넷 통신

IP(인터넷 프로토콜)

사용법

  • 클라이언트가 아이피 주소를 부여 받아야 하고 받는 서버도 아이피가 있어야한다
  • 지정한 IP 주소에 데이터를 전달하고, 패킷(package+bucket)이라는 통신단위로 전달한다
  • IP 패킷이라는 규칙에 맞추어서 넣어준다
  • 출발지와 목적지 까지 구분해서 보낸다

IP 프로토콜의 한계

  • 패킷받을 대상이 없어도 그냥 전송된다.
  • 중간에 패킷이 사라지거나 순서를 보장해서 받을 수 없다.
  • 인터넷 안되도 패킷을 전송한다.
  • 중간에 전달 전달하는 서버가 문제가 생기면 패킷이 유실되고 노드가 꺼질수 있다.

TCP (Transmission Control Protocol)

연결지향 방식의 통신이고 연결이 되었는지 확인하고 보내기 때문에 중간에 서버에 문제가 생겨 패킷이 유실될 상황이 없다.
논리적으로 순서 및 데이터 전달을 보증해준다.

  1. syn (먼저 서버에 syn을 보낸다)
  2. syn + ack (서버에서 받았다는 상황의 syn과 ack를 같이 보내준다)
  3. ack (syn+ack가 들어오면 다시 ack를 보내준다)

UDP (User Datagram Protocol)

TCP와는 다르게 순서보장도 안되고 syn보내고 ack받고 하는 과정이 없다. 연결지향도 아니기 때문에 IP와 같지만 PORT가 추가된 통신이다. 통신의 속도가 빠른 장점으로 이용되고 있다

PORT

같은 IP내에서 받을 포트를 지정해주는것이다. IP가 아파트라면 PORT는 동 호수 라고 생각할 수 있음

DNS

아이피는 바뀔수 있으므로 도메인명을 등록해서 사용할수 있도록 한다

웹 브라우저 요청 흐름

URI (Uniform Resoure Identifier)

URI는 로케이터(URL(locater)), 이름(URN(name)) 또는 둘다 추가로 분류될 수 있다.

URI (리소스를 식별한다)
URI안에 URL과 URN이 있다.
URL - 리소스의 위치 (예 김정현이 있는 곳)
URN - 리소스 이름 (예 김정현)

URL 리소스가 있는 위치를 지정
URN이 있다고 한들 이름만으로 리소스를 찾을 수 있는 방법이 보편화 되어있지 않아서 URI가 URL과 같은 의미로 볼 수 있다.

port는 일반적으로 생략 가능하고 https 는 443, http는 80이라고 보면 된다.

계층적인 개념으로 URL을 설계한다
query의 형태로도 가능하다

HTTP

TCP를 직접연결하는 경우는 거의 없고 모든것이 HTTP
HTTP/1.1(1997년)이 중요하다 이후에는 성능개선이 전부

TCP : HTTP/1.1, HTTP2/
UDP : HTTP/3 에서 동작함

HTTP특징

  • 클라이언트 & 서버구조
    request response구조
    클라이언트는 서버에 요청을 보내고 응답을 대기
    서버가 요청에 대한 결과를 만들어서 응답
    비즈니스 로직과 데이터는 서버에 넣고, 클라이언트는 UI 그리는것과 사용성에 초점을 맞춘다.
  • 무상태 프로토콜 (stateless)
    서버가 state의 상태를 보존하고 있지 않다
    무상태는 응답서버를 쉽게 바꿀 수 있다.(무한한 서버 증설 가능)
    기존에 상태를 저장할 필요가 없기때문!
    스케일아웃이 되고 수평 확장이 유리하다
    무상태는 로그인이 필요없는 단순한 서비스소개에서 가능한데 상태유지가 꼭 필요한 경우에 사용한다면 로그인 했다는 상태를 서버에 유지시키고 쿠기나 세션을 이용해서 상태를 유지하는데 최소한으로만 사용해야 한다.
  • 비연결성
    연결을 유지하지 않기 때문에 서버를 최적화 해서 사용할 수 있게 한다
    서버 자원을 효율적으로 사용한데,
    한계는 TCP/IP연결을 새로해야해서 시간이 오래걸리고, 자원이 한꺼번에다운로드 되면서
    HTTP는 지속연결 이라는걸 쓴다(persistent connections)
    HTTP2와 HTTP3에서는 많이 최적화 되어있다.

HTTP 메세지

HTTP요청메세지
start line = GET(request-line)
서버에 리소스를 달라고 하는 것

요청대상
절대경로 / 로 시작 하고 뒤는 쿼리가 옴
다른방식도 있음
GET/search?q=hello

응답메세지
start-line = statusline
HTTP/1.1 200 OK

HOST:www.google.com
fieldName은 대소문자 구분이 없음.

Host
공백라인
바디를 가질 수 있음

HTTP응답메세지
HTTP/
Header
공백
메세지바디

HTTP는 단순하다

profile
코린이 프론트엔드 개발자💻💛🤙🏼

0개의 댓글