본문 바로가기
카테고리 없음

[2023.01.16 / CNU SW 아카데미] 컴퓨터 네트워크 - HTTP

by 은행장 노씨 2023. 1. 16.

컴퓨터 네트워크 강의를 들으러 정보화본부 세미나실에 왔다.

 

이영석 교수님의 컴퓨터 네트워크 강의 시간이다. 

오늘은 응용 계층이다. 

 

HTTP 프로토콜의 이해

앱도 http, 줌, 유튜브도 http로 전송됨

실시간 통신에서도 쓰이고 있다. RTC

  • Socket을 이용한 웹 페이지 전송 프로토콜
  • 크롬 웹 브라우저로 유튜브 보면 http 3을 쓰고 있는 것이다. 
  • 객체 = HTML file, JPEG image, audio/video file, …
  • URL: universal resource locator

 

앱, 웹에서 보안을 필수다. https

앱은 암호화가 되어 있다. 

연결 - TCP connection, 

 

HTTP 프로토콜? 클라이언트 요청 메세지

프로토콜은 약속이다. 

txt로 일일히 타이핑하는 것과 같다. 

 

  • 클라이언트 -> 서버에게 요청 메시지 : GET (ASCII)
  • GET, POST, HEAD, PUT, DELETE

• 요청 내용 • GET /images/logo.gif HTTP/1.1

• 헤더 • Accept-Language: en

• 빈 줄 (empty line)    // 이것도 약속이다. 

• 기타 메시지를 포함하여 표시된다.

• 요청 내용과 헤더 필드는 로 끝나야 함

    • 캐리지 리턴(Carriage Return) + 라인 피드(Line Feed)

    • 빈 줄(empty line)은 로 구성

 

멱등 법칙 idempotent

- 여러번 적용해도 결과가 똑같다. 

- 예시) 정적 페이지에서 웹 페이지 클릭, 새로고침

get

post - 구글 설문지 update, 결과가 서버에 저장되는 것이 바뀐다. 

 

 

HTTP 프로토콜: 서버 응답 메시지

서버 -> 클라이언트에게 응답 메시지: Response with 200 OK

• Status line + Header lines + data

 

< 상태 코드 >

• 200 OK

• 301 Moved Permanently

• 400 Bad Request

• 404 Not Found

• 505 HTTP Version Not Supported

 

 

HTTP 응답과 요청이 이루어지는 과정

결국은 socket을 가지고 한다. 

socket만 할 때, system 성능이 중요할 때, 게임

실제는 socket을 가지고만 하지 않는다. 

 

• 클라이언트와 서버가 TCP socket 을 생성

    • HTTP over TCP

• 클라이언트가 HTTP GET 메시지를 서버로 전송

• 서버가 HTTP 응답 메시지를 클라이언트로 전송

• 서버는 요청 객체를 클라이언트로 전송

    • HTTP는 상태가 없음

 

TCP와 UDP 차이를 알아보자.

 

HTTP 서버 / 클라이언트 만들기

전통적인 방법

socket API, TCP socket을 이용한 HTTP 요청 파싱과 응답 모듈 개발

Web framework 이용하기

우리나라는 Spring이 대세다. 

• Python Django, Flask

• Java Netty, Spring

• JavaScript: Node.js, Express.js, Ruby on Rails

• ASP.NET

 

왜 지연시간을 줄이는 것이 중요할까?
HTTP/1.0 - 연결을 하나씩 만든다. 전화 같다. 느리다. 
    - GET 메소드에 대해서 1개의 TCP 연결 사용
HTTP/1.1 - 하나 만들고 해결하자. 성능 개선
    - GET 메소드에 대해서 1개의  TCP 연결 사용
    - Pipelining 병행성

웹 개발자에게 시간을 줄이는 것은 중요하다.
시스템 개발자에게도 HTTP 프로토콜 시간을 줄이는 것은 중요하다.  

 

지연시간과 Page Load Time (PLT) 관계

  • 핸드폰을 가지고 3G, 5G, LTE
    => 한번은 크게 떨어지는데 비례해서 떨어지지는 않는다.
  • 시간을 바꾼 것이다. wifi
    => 떨어지면 떨어질수록 웹 로딩 시간이 떨어진다. 
LTE에서 5G로 변화면 잘 못 느껴, delay가 빨라져야 한다. 
  1. 하드웨어가 좋아야 한다. 
  2. 서버에서 바꿀 수 있는 방법을 없을까? 1.0 -> 1.1 -> 2 -> 3

 

HTTP/1.1 Pipelining

여러개를 동시에 요청하는 것이다. 서버는 순차적으로 한다. 

 

 

시스템 쪽으로 생각해보면 성능 개선의 여지가 많이 있다. 

 

HTTP/2

txt가 사라졌다 => Binary Framing

txt는 양이 많다. 바이너리는 양이 적다.

 

• 웹 페이지 성능 향상 목표

    • HTTP/1.1에서는 객체가 순차적으 로 전송 (1개의 TCP 연결내에서)

    • Head-of-Line (HoL) 병목

    • 웹 페이지 로딩 시간을 50% 단축 목표

• 바이너리 프레임

    • 우선순위, 흐름 제어, 서버 푸시

    • Server push

• 스트림 전송(객체 하나하나를 보내는 것)

    • 멀티플렉싱 지원 - 다 섞어서 보내자. HOL 도입

    • 우선순위 지원

• 헤더 압축

 

파일을 전송하다 보면, 용량이 다 다르다. 

순차적으로 보낸다 -> 제일 오래 걸리는 애가 앞에 있으면 뒤 사람들 다 delay

 

 

 

HTTP/3

TCP를 이용하는 HTTP/2의 HoL 병목현상 해결하기 위해

TCP의 세그먼트 손실은 HTTP에서 보이지 않기때문에

TCP -> UDP

 

TCP 

- 오류시 재전송, 오류가 없다. 

 

UDP

- 연결이 없다. 오류 무시

- 그냥 보낸다. 

 


Domain Name System (DNS)

: Domain Name System (DNS)

주소에 따라 소켓 argment가 달라진다. 

서버를 찾을 때 까지 다 찾아봐야한다. 서버들이 트리 형태로 연결되어 있다. 

org 동격이 국가 코드다. 

전세계 어떤 주소라도 root 부터 조사하면 다 나온다. 

 

DNS 계층도

루트 서버는 h 까지 있다. .이지만 하나가 아니다. 

미국에 많이 있다.(인터넷 만든 나라가 미국이니까)

전세계 흩어져 있다. 공격하면 멈춰 2003년 1월 25일 125대란?

서버가 경로가 차단되었는데 루트 서버였다... 아르고스가 이때 만들어졌다. 

 

굉장히 중요한 인터넷 자원이다. 

유일하게 일본이 있다. 리눅스 개발자가 많다. 

 

한국은 복사된 서버가 있다. 

.kr 은 정부, 인터넷진흥원

 

DNS의 패킷 구조

빨리 해야 한다. UDP

Authoritative nameservers : 권한 있는 서버 == 내가 관리하는 것이다. 

권한을 갖고 있다는 의미있다. nameserver는 아무거나 가져도 돼요. 

구글 nameserver 8888. 도메인의 권한이 있는 애가 누구냐.

 

 

A - V4

AAAA - V6

 

 

• Top-level Domain

    • com, org, edu, net, biz, kr, jp, …

• Authoritative DNS server

    • 도메인 책임 DNS 서버

         • cnu.ac.kr -> ns.cnu.ac.k

 

 


 

DNS는 웹 서비스에서 쓸 수밖에 없다. DNS를 알고 있어야 한다. 

개발할 때, 이름 갖다가 쓰면 시스템에서 reserve 호출에서 자동으로 IP로 가져다 준다. 

 

최근에 개발하는데 fishing

웹 사기가 굉장히 많다. 서버 이름이 굉장히 많다. DNS가 진짜인지 구분이 안된다.

DNS도 암호화하자!