HTTP 웹 기본 지식(1)

최현진·2023년 6월 13일

cs

목록 보기
1/1

개발자로 살기 위해 어차피 한 번은 정리해야한다.

1. 인터넷 통신

2. IP(Internet Protocol)

  • 지정한 IP주소에 데이터 전달
  • 패킷(Packet) 단위로 전달

2.1 IP 패킷 정보

  • 출발지 IP
  • 목적지 IP
  • 기타

2.2 IP 프로토콜의 한계

  • 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성: 패킷이 순서대로 오지 않는 경우, 중간에 패킷이 사라지는 경우
  • 프로그램 구분: 같은 IP에서 여러 애플리케이션을 사용하는 경우

3. TCP, UDP

IP 프로토콜의 한계를 극복

3.1 인터넷 프로토콜 스택의 4계층

  • 애플리케이션 계층 - HTTP, FTP
  • 전송 계층 - TCP, UDP
  • 인터넷 계층 - IP
  • 네트워크 인터페이스 계층 - LAN 드라이버, LAN 장비 등등

예시)
1. 프로그램이 메시지 생성
2. SOCKET 라이브러리를 통해 전달
3. TCP 정보 생성, 메시지 데이터 포함
4. IP 패킷 생성, TCP 데이터 포함

3.2 TCP/IP 패킷 정보

  • 출발지 IP, 목적지 IP
  • 출발지 PORT, 목적지 PORT
  • 전송 제어, 전송 순서, 검증 정보, ...
  • 전송 데이터

3.3 TCP 특징

  • 전송 제어 프로토콜
  • 연결지향 - TCP 3way handshake(가상 연결)
    • connect, (1.SYN -> 2.SYN+ACK -> 3.ACK) 연결 과정 선행
    • 데이터 전송
    • 물리적으로 연결되는 것이 아닌 개념적으로 연결된 것
  • 데이터 전달보증
    • 데이터 전송 -> 데이터 잘 받았음 (응답)
  • 순서 보장
    • 패킷1, 2, 3 순서로 전송, 만약 패킷1, 3, 2 순서로 도착하면?
    • 패킷 2부터 다시 보내도록 응답
  • 신뢰할 수 있는 프로토콜
  • 현재 대부분 TCP 사용
  • 거의 손을 못댐

3.4 UDP 특징

  • 기능기 거의 없음
  • 3 way handshake 없음
  • 데이터 전달 보증 없음
  • 순서 보장 없음
  • IP와 거의 같으나 PORT, 체크섬은 있음
  • PORT가 있으므로 같은 IP에서 애플리케이션 구분 가능
  • 기능이 없어서 단순하고 빠름

4. PORT

  • 하나의 클라이언트가 여러 서버와 연결되어야 하는 경우(ex. 여러 애플리케이션)
  • 패킷 정보에 있는 출발지 PORT, 목적지 PORT를 이용해 구분
  • 0 ~ 65535 할당 가능
  • 0 ~ 1023은 잘알려진 포트, 사용하지 않는 것이 좋음
    • FTP - 20, 21
    • TELNET - 23
    • HTTP - 80
    • HTTPS - 443

5. DNS

  • Domain Name System
  • IP는 기억하기 어렵고, 변경 될 수 있다
  • DNS Server에 도메인을 등록
  • 도메인을 요청하면 IP 주소를 반환

6. URI

6.1 URI, URL, URN

  • URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있음
  • URI = URL(Uniform Resource Locator), URN(Uniform Resource Name)
    • Uniform: 리소스 식별하는 통일된 방식
    • Resource: 자원 URI로 식별할 수 있는 모든 것(제한 없음)
    • Identifier: 다른 항목과 구분하는데 필요한 정보

URL
foo://excample.com:8042/over/there?name=ferret#nose
리소스가 있는 위치를 지정

URN
urn:example:animal:ferret:nose
리소스에 이름을 부여

6.2 URL 문법

  • [scheme]://[userinfo@][host][:port][/path][?query][#fragment]
  • scheme: 어떤 방식으로 자원에 접근할 것인가, 주로 프로토콜 사용(http, https, ftp, ...), 포트는 생략 가능
  • userinfo: url에 사용자 정보 포함, 거의 사용하지 않음
  • host: 호스트명, 도메인 or IP 주소를 직접 사용 가능
  • port: 접속 포트, 생략 가능
  • path: 리소스의 경로, 계층적 구조
  • query: key=value 형태, ?로 시작, &로 추가 가능, query parameter, query string으로 부름, 문자 형태
  • fregment: html 내부 북마크 등에 사용, 서버에 전송하는 정보는 아님

6.3 웹 브라우저 요청 흐름

https://www.google.com:443/search?q=hello&hl=ko

1) 웹 브라우저가 DNS 조희 (IP:200.200.200.2)
2) HTTPS PORT 생략, 443
3) HTTP 요청 메시지 생성
GET /search?q=hello&hl=ko HTTP/1.1 Host:www.google.com
4) SOCKET 라이브러리를 통해 전달
4-1) TCP/IP 연결(IP, PORT)
4-2) google 서버와 연결 (syn, syn+ack, ack)
5) TCP/IP 패킷 생성, 데이터 전달
6) google 서버에 도착, 데이터 해석, HTTP 응답 메시지 생성
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html> <body> ...
7) TCP/IP 패킷 생성 응답
8) html 랜더링

profile
Boostcamper!

0개의 댓글