4 minute read

HTTP (HyperText Transfer Protocol)

    request - response 방식의 web 통신 protocol
    HTML 문서를 주고 받는데 사용
    TCP/UDP를 사용 
    port 80번 사용
    특징
            connectionless: 요청/응답 후 바로 연결이 끊김
            stateless: 연결을 끊는 순간 client-server의 통신이 끊어짐

 

HTTPS (HyperText Transfer Protocol over Secure Socket Layer)

    SSL (Secure Socket Layer)
    TCP/IP 사용, 443 port
    공개키 알고리즘 방식
    인증서 유지 비용 등 보안 관련 overhead

 

HTTP request header

POST / HTTP/1.1

    # request header------------------
    Host: localhost:8000
    User-Agent: Mozilla/5.0 (...
    Accept: text/html, application/xhtml+xml,...,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate

    # general headers-----------------
    Connetion: keep-alive
    Upgrade-Insecure-Requests: 1

    # Entity headers -----------------
    Connection-Type: Multipart/form-data; boundary=-12656974
    Content-Length: 345


    Accept: content type
            ex. text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Charset: ex. utf-8
    Accept-Encoding: gzip, deflate
    Connection: Keep-alive / Upgrade
    Referer: http://en....
    X-Forwarded-For: client1, proxy1, proxy2, 129.78.138.66
    X-Forwarded-Host: en.wikipedia.org:80
    Warning: 199 Miscelaneous warning

HTTP response header

    HTTP/1.1 200 OK
    # response headers
    Access-Control-Allow-Origin: *          <- CORS 허용 범위
    Connection: Keep-Alive
    Content-Encoding: gzip
    
    # General headers
    Date: Wed, 10 Aug ... GMT

    Etag: "d9.........b"

    Last-Modified: Wed, 10 Aug ...... GMT

    Server: Apache
    Set-Cookie: csrftoken=...

    Transfer-Encoding: chunked

    Vary: Cookie, Accept-Encoding
    X-Frame-Options: DENY



    Age: proxy cache에 있던 시간 ex. 12
    Cache-Control: server의 cache 설정 시간 ex. max-age=3600
    Connection: close
    Content-Disposition: content type ex. attachment; filename="hello.png"
    Content-Encoding: gzip
    Content-Length: 348
    Program: no-cache



    CORS (Cross Origin Resources Sharing)
            외부 domain 통신을 위한 표준 정책
            XMLHttpRequest는 외부 domain server와 통신 불가
            
            서버에 CORS 지원 확인
            Access-Control-Request-Method로 보낼 method를 알림
            Access-Control-Request-Headers로 보낼 header를 알림
            Allow 항목은 Request에 대응됨 - 서버가 허용하는 method와 header 응답 시 사용
            Request와 allow가 일치 시 CORS 요청이 수행됨

 

HTTP/2

Hypertext Transfer Protocol Version 2 HTTP/2는 클라이언트와 서버 간에 데이터 서식(프레임)이 지정되는 방식과 데이터가 전송되는 방식을 수정

SPDY 기반 97년 HTTP 1.1의 개선 2015년 HTTP 2가 승인 후 공개

 

주요 특징

  • HTTP header data 압축
  • server push
  • 요청에 대한 HTTP pipeline 처리
  • 1.x의 HOL blocking 문제 해결
  • single TCP 연결로 multiple 요청 처리 (다중화)
 +------------------------+
 | application (HTTP 2.0) |
 | +----------------+     |
 | | Binary framing |     |
 +-+----------------+-----+
 | Session (TLS) (opt)    |
 +------------------------+
 | Transport (TCP)        |
 +------------------------+
 | Network (IP)           |
 +------------------------+
Binary frame 계층
HTTP messgae가 encapsulated 되어 client와 server 사이에 전송됨

HTTP 1.1 header
    POST /upload HTTP/1.1
    Host: www.example.org
    Content-Type: application/json
    Content-Length: 15
    {"msg":"hello"}
    
    HTTP 2.0
    HEADERS frame <-- 위 POST 부터 Contnet-Length 까지
    DATA frame    <-- 위 {"msg":"hello"} 부분

 

server/client간 data 교환 방식

binary frame 지원을 위해 변경 되었음

stream: 연결 내에서 전달되는 byte stream의 flow (하나 이상 전달 될 수 있음)
message: 요청/응답에 대한 frame sequence
frame: HTTP/2에서의 최소 통신 단위
    frame은 header, message paylod등 특정 유형의 data를 전달함

TCP 연결
    HTTP/1.x
        성능 개선을 위해 client에서 여러 병렬 요청 수행 시 여러 TCP 연결 사용
        HTTP/1.x 전달 모델의 직접적인 결과로 발생
        연결당 하나의 응답만 전달되도록 보장함
        HOL (Head-of-Line) 차단과 기본 TCP 연결의 비효율적인 사용을 초래
    
    HTTP/2는 위와 같은 제한을 제거
        전체 요청 및 응답을 다중화
        server/client간 HTTP message를 여러 frame으로 세분화 (interleaving) 해서 처리
            ex.
                stream1에 대한 data frame
                stream2에 대한 headers
                stream1에 대한 headers
                ...
        ->
            여러 요청에 대해 병렬 처리 가능
            요청을 차단하지 않고 병렬 처리 가능

 

flow control

HTTP/2 stream flow control 가능
    양방향
    credit 기반의 flow
    flow control은 비활성화 될 수 없음
    흐름제어는 E2E (End-to-End) 방식이 아니라 Hop-by-Hop 방식

 

TCP

Transmisson Control Protocol

flow control
connection-oriented: persistent connection
    연결 -> 전송 -> 종료(close)
    segment에 checksum check로 손상파악
    sequence number 할당 (순서)
    ACK, ReTransmission mechanism 사용
bidirectional

TCP는
무결성을 전제하기에 거리가 멀어질수록 RTT가 늘어남.. 느려짐
수신 측에서 보낸 전송 확인 ACK를 받고 다시 전송함
64KB window size

    RTT는 ICMP protocol 사용한 ping으로 확인 가능
    RTT가 100ms 경우, 1MB는 1.6 sec의 시간 소모됨
        100ms 마다 64KB
        1024 / 64 = 16
        16 x 100ms = 1.6 sec

 

UDP, IP

connectionless protocol

 

Socket

Berkley Sockets

Socket -> TCP -> IP

stream socket
    uses TCP
    TCP socket -> use TCP port
datagram socket
    use UDP
    ~65500B
    UDP socket -> use UDP port
    
TCP socket
    bind 후, (address, port에 bind)
    server는 accept로 wait
    client는 connect로 server 연결
    이후 send/receive 가능
    
    session oriented
        3 way handshaking 과정으로 session 생성
UDP socket
    bind 후, 
    UDP datagram은 비동기로 send/recv
    

Socket
    create a new communication endpoint
Bind
    attach a local address to a socket
listen
    announce willingness to accept connections
accept
    block caller until a connection request arrives
connect
    actively attemp to establish a connection
send
    send some data over the connection
receive
    receive some data over the connection
close
    release the connection

 

SPDY

web content 전송용 Google의 비표준 protocol 압축, 다중화, 우선순위 설정을 통해 latency 감소 SPDY는 Google의 상표 2016년 부터 Chrome browser에서 SPDY 지원 제거 -> HTTP 2.0 사용 목적 web page loading 시간 감소 목적 1 socket 연결로 page 구성 요소들을 한번에 전송 gzip(/DEFLATE)로 압축 server PUSH 무조건 암호화 연결 (SSL or TLS)

 

SPDY in HTTP HTTP의 전송 계층에서 사용되는 protocol임 SDPY는 HTTP header를 해석하고 단순화하여 압축 전송 (동일 header 전송 시 다시 보내지 않음) HTTP header는 압축해서 전달

 

HTTP Hypertext Transfer Protocol 주로 HTML 문서 전송용 TCP, UDP 사용 80 port 사용 request - response protocol client에서의 요청 -> server 응답 history 팀버너스리의 팀이 HTTP를 발명, WWW 제안 최초 protocol은 GET method만 존재

 

RSA 소인수분해의 시간이 오래 걸리는 것에 기반한 암호화 알고리즘 2개 키 사용 public key : encryption 용 private key : decription 용

    sender가 public key로 암호화 해서 전송
    receiver가 private key로 복호화 해서 사용

 

SHA secure hash algorithm

SHA-0은 충돌 발생 -> 퇴출 수속
SHA-1 구글이 충돌 발견
    국세청 홈택스에서 이를 사용
SHA-2
    
SHA-245
    인터넷뱅킹

Categories:

Updated: