ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 CS
    네트워크 2023. 3. 7. 06:29

    1. 웹 동작 방식

    www.google.com에 접속하는 과정

    1. 사용자가 브라우저에 URL(www.google.com)을 입력
    1. DNS 서버에 도메인 네임으로 서버의 진짜 주소(IP)를 찾음
    1. 웹 서버와 TCP연결을 통해 HTTP요청 전송
    1. 웹 서버는 HTTP 응답 메시지를 보냄
    1. 도착한 HTTP 응답 메시지는 웹페이지 데이터로 변환되고, 웹 브라우저에 의해 출력

    2. HTTP프로토콜

    HTTP 프로토콜

    TCP를 기반으로 웹 브라우저와 웹 서버가 HTML로 작성된 웹 페이지나 동영상, 음성 파일 등등을 주고받기 위한 프로토콜(통신규약)입니다. (거의 대부분의 형식을 지원한다)

    통신 과정은 client에서 요청메시지를 보내면 server에서 응답메시지를 보낸다.

    • 특징

      stateless(무상태)

      stateless를 알아보기 위해 그와 상반되는 stateful을 알아야한다.

      stateful

      • 서버가 클라이언트의 상태를 저장하는 것을 statefull이라고 한다.
      • statefull을 사용하면 정보를 공유하기 위한 비용이 비싸진다.

      위 그림처럼 안마의자 정보의 요청과 응답이 이루어진 후 클라이언트는 안마의자 정보는 없이 2개 구매 요청만 보내면 서버에서는 안마의자 정보에 대한 요청을 저장하고 있으므로 안마의자 2개 구매에 대한 성공 응답을 보낸다.

      하지만, 서버가 다수 있을 경우 클라이언트가 2개 구매 요청을 했을 경우 이전 상태를 확인하기 위해 해당 상태를 찾기위해 다수의 서버를 조회한다. 최악의 경우 모든 서버를 탐색 할 수 있다. 그렇기에 매우 비 효율적이다.

      Stateless(무상태성)

      • stateful의 한계를 극복하기 위해 고안한 방법이다.
      • 서버는 클라이언트의 상태를 저장하지 않는다.

      위 그림처럼 클라이언트가 이전에 요청하여 받은 응답을 저장하고 ‘클라이언트'에서 해당 응답을 포함해 함께 보내는 형식이다.

      • 서버의 갯수에 상관없이 모두 독립적으로 처리된다. 조회에 필요한 비용이 전혀 없다.
      • 각 서버의 갯수에 따라 비례하여 성능이 올라갈 수 있다.

      하지만, Stateless일 경우 페이지가 변경 될 때마다 로그인을 해야한다. 서버에서 상태를 저장하지 않으니 계속해서 인증을 요구하는 것이다. 이를 해결하기 위해 고안된 것이 쿠키, 세션, OAuth, JWT등이 있다.

      Connectionless(비 연결성)

      비 연결성이란 클라이언트의 요청에 의해 서버가 응답을 하면 바로 TCP/IP연결을 해제한다.

      • HTTP통신은 기본적으로 비 연결성이다.
      • 옵션을 통해 일정시간 유지할 수 있다.

      응답 이후에도 연결을 하고 있다면 리소스를 지속적으로 사용하기 때문에 자원을 효율적으로 관리할 수 없다.

      • 한계와 보완
        • TCP연결과 해제를 위한 3way, 4way hand shake의 시간이 추가된다.
        • HTML뿐 아니라 CSS, JS, 이미지 등 수 많은 자원을 다운 받기 위해 매번 연결-해제 수행
        • 현재는 HTTP지속연결로 이전 버전의 한계를 보완하였다.
        • 일정시간 연결을 유지 혹은 수 많은 자원을 모두 다운 후 해제

      HTTP초기 (HTTP/1.0)

      단점을 보완한 현재의 HTTP (HTTP/2.0)

    HTTP Request 구조

    • start line == requset Line

      HTTP Method

      • requset가 의도한 action을 정의
        • GET, POST, PUT, DELETE, OPTIONS 등이 있다.
        • 주로 GET, POST를 사용한다.

      Requset target

      • 해당 request가 전송되는 목표 uri
      • www.naver.com

      HTTP Version

      • HTTP버전이다. 1.0, 1.1, 2.0등이 있다.
        • 2.0 부터는 Connectionless을 보안하여 한번의 커넥션으로 동시에 여러개의 데이터를 주고 받을 수 있다.

    • Request header
      해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분
      Key:Value값으로 되어있다.
      • Host
        • 요청이 전송되는 target의 host url ex) naver.com
      • User-Agent
        • 요청을 보내는 클라이언트의 대한 정보 ex) 웹브라우저에 대한 정보
      • Accept
        • 해당 요청이 받을 수 있는 응답(response)타입
      • Connection
        • 해당 요청이 끝난후에 네트워크 컨넥션을 유지 할 것인가에 대한 옵션
      • Content-Type
        • 해당 요청이 보내는 메세지 body의 타입. JSON을 보내면 application/json
      • Content-Length
        • 메세지 body의 길이
    • Request body

      request의 실제 메세지/내용

      Body가 없는 request도 많다 ex) GET request들은 대부분 body가 없다.

    HTTP Response구조

    Status Line

    • HTTP버전
    • Status code
      • 응답 상태를 나타내는 코드 ex) 200
      • HTTP Response에서 자주 상용되는 상태코드
    • Status text
      • 응답 상태를 간략하게 설명해주는 부분 ex)ok, Not Found

    Headers

    • Response의 header와 동일
      • Content-Type : 바디 데이터의 타입
      • Content-Length : 바디 데이터 크기
      • Set-Cookie : 쿠키 설정
      • ETag : 엔티티 태그

    Body

    • Request Body와 일반적으로 동일
    • 데이터를 정송할 필요가 없을 경우 body가 비어있게 된다.

    HTTP Method

    쿠키와 세션의 차이

    • 쿠키
      • 브라우저가 사용자의 정보를 저장하여 동일한 웹사이트에 재방문 했을 때 재사용하기 위한 목적으로 사용하는 텍스트 파일이다.
      • 서버 요청시 쿠키와 함께 전송하여 사용한다.
      • 브라우저별 특정 폴더에 저장되어 사용
      • 만료일을 설정할 수 있다.
      • 지속쿠키 - 브라우저 종료 후에도 남아있다.
      • 세션쿠키 - 브라우저를 종료하면 없어진다.
      • 추적쿠키 - 광고 목적의 쿠키이다.
    • 세션
      • 브라우저를 통해 웹사이트를 접속한 시점부터 브라우저를 종료하여 연결이 끝내는 시점까지 같은 사용자에게 오는 요청은 하나의 상태로 유지하는 기술
      • 서버에 요청시 쿠키에 세션 ID를 담아 보내고 서버는 해당 세션 ID를 확인하여 동일한 사용자임을 확인한다.
      • 세션 ID가 존재하지 않는다면 서버에서 세션 ID를 생성하여 보내고 클라이언트를 쿠키에 저장한다.
      • 서버에 저장되기 때문에 보안적으로 뛰어나지만 그만큼 서버에 부하를 주고 세션 ID를 통해 데이터를 참조하는 과정에서 쿠키보다 시간이 더 걸린다.

    노출이 되어도 괜찮다면 쿠키에 보안이 필요하면 세션에!

    토큰

    • 인증된 사용자에게 권한을 부여
    • 권한을 부여받은 사용자는 허가된 요청을 서버에 수행할 수 있게된다.
    • 토근의 종류는 2가지이다.
      • 엑세스 토큰 : 인증된 사용자에게 부여되는 토큰으로 탈취되어 권한을 뺏길 수 있기 때문에 짧은 유효기간을 가진다.
      • 리프레시 토큰 : 로그인 시 엑세스 토큰과 함께 발급되는 토큰으로 엑세스 토큰이 만료되었을 때 새로 발급해주는 열쇠가 된다. 리프레시 토큰도 만료가 되었다면 사용자는 다시 로그인을 수행해야한다.

    JWT토큰

    3. TCP/UDP

    TCP(Transmission Control Protocol)

    • 특징
      • 연결 지향적으로 세션 연결이 완료된 후 통신을 진행한다.
      • 세션 연결 시 3way_hand_shake방식을 사용한다.
      • 세션 해제 시 4wah_hand_shake방식을 사용한다.
      • 데이터 유실 시 재 전송을 한다.
    • 장점
      • 데이터의 전송 순서를 보장해준다.
      • 신뢰성 있는 데이터를 전송한다.
    • 단점
      • 하나의 세션만 연결하여 통신할 수 있다.
      • 상대적으로 UDP보다 느리다.

    두 개의 호스트를 연결하고 데이터 스트림을 교환하는 네트워크 프로토콜이다.

    TCP는 데이터와 패킷이 순서대로 전달되는 것을 보장한다.

    두 호스트의 세션을 연결하는 과정에서 3way_hand_shake가 진행된다.

    Client > Server : TCP SYN

    Server > Client : TCP SYN ACK

    Client > Server : TCP ACK

    → 정확한 전송을 보장하기 위해 상대방 컴퓨터와 세션을 수립하는 절차이다.

    세션을 종료할 때는 4way_hand_shake가 진행된다.

    Client > Server : TCP FIN

    Server > Client : TCP ACK

    Server > Client : TCP FIN

    Client > Server : TCP ACK

    → 세션 종료 시 작업중이던 데이터 전송을 보장하기 위해 진행되는 절차이다.

    UDP(User Datagram Protocol)

    • 특징
      • 비 연결 지향적으로 연결 절차를 거치지 않고 일방적으로 데이터를 발신한다.

    • 장점
      • 상대적으로 TCP보다 빠르다.
      • 패킷 오버헤드가 적어 네트워크 부하가 감소된다.

    • 단점
      • 신뢰성 없는 데이터를 전송한다.
      • 정확한 데이터의 전송을 보장하지 않는다.
      • 패킷 관리가 필요하다.

    신뢰성이 없고 데이터 유실을 신경쓰지 않아도 UDP를 쓰는 이유는 TCP보다 빠르기 때문이다.

    4. OSI 7 layer

    분류에 따라 2가지의 계층구조로 나눌 수 있다.

    1. OSI 7Layer
      • 7계층(응용 계층) : 사용자에게 통신을 위한 서비스 제공. 인터페이스 역할
        • HTTP, FTP, SMTP같은 프로토콜
        • 크롬, 이메일 시스템 등을 통해 해당 프로토콜을 용이하게 사용할 수 있게 해줌
      • 6계층(표현 계층) : 데이터의 형식(Format)을 정의하는 계층
        • 응용 계층으로부터 전송받은 데이터를 디코딩
        • 응용 계층으로 전달해야 하는 데이터를 인코딩
        • 데이터 인코딩, 디코딩, 암호화, 복호화 등
      • 5계층(세션 계층) : 컴퓨터간 데이터 통신을 하기 위해 세션을 만드는 계층
        • TCP/IP 세션을 생성하고 해제하는 책임이 있다.
        • 세션 설정, 유지, 종료, 정송 중단 시 복구 등의 기능이 있다.
      • 4계층(전송 계층) : 최종 수신 프로세스로 데이터의 전송을 담담하는 계층(단위 : Segment)
        • TCP, UDP
        • 하위 계층으로 신뢰할 수 있는 데이터 전송
      • 3계층(네트워크 계층) : 패킷을 목적지까지 가장 빠른 길로 전송하기 위한 계층(단위 : Packet)
        • 네트워크 연결을 설정, 유지, 해제
        • 대표적인 장비는 라우터
      • 2계층(데이터 링크 계층) : 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당하는 계층(단위 : frame)
        • 프레임에 주소를 부여
        • CRC기반으로 오류와 흐름 제어
        • EX) 이더넷 - LAN, MAN, WAN에서 가장 많이 활용되는 기술 규격
      • 1계층(물리 계층) : 데이터를 전기 신호로 바꿔주는 계층( 단위 : bit)

    5. 대칭키, 비대칭키 암호화

    대칭키 암호화

    • 암호화, 복호화 할 때 필요한 키값이 동일하다.
    • 암호화 된 정보를 전달하고 확인하기 위해서는 송.수신자 똑같은 키를 가지고 있어함
    • 키를 ‘안전하게 교환’하는 것이 대칭키 암호화 방식의 키 포인트!

    비대칭키 암호화

    • 암호화, 복호화 할 때 사용하는 키가 서로 다르다.
    • 개인키 암호화, 공개키 암호화 두가지 방법이 있다.
    • 공개키 암호화 → 데이터를 안전하게 전송할 수 있는 보안 관점
      • 사용자의 공개키를 통해 정보를 암호화하여 전송
      • 개인키를 가지고 있는 본인만 복호화 가능(공개키로는 복호화 불가능)
      • 대칭키에서 키값 교환 문제를 해결
    • 개인키 암호화 → 신뢰할 수 있는 단체라는 것을 인증하는 관점
      • 사용자1의 개인를 통해 정보를 암호화하여 전송
      • 사용자1의 공개키를 통해서 복호화가 가능하다.
      • 암호화의 내용보다는 누가 암호화 했냐에 초점을 둔 방법이다.
      • 신원이 보장되는 전자서명등의 공인인증체계의 기본이다.

    6. Connection Timeout과 Read Timeout의 차이

    Connection Timeout → 서버 자체에 클라이언트가 어떤 사유로 접근을 실패했을 시 적용

    Read Timeout → 클라이언트가 서버에 접속을 성공 했으나 서버가 로직을 수행하는 시간이 너무 길어 제대로 응답을 못 준 상태에서 클라이언트가 연결을 해제하는 것

    7. 공인(public)IP와 사설(private)IP의 차이

    • 공인 IP
      • ISP(인터넷 서비스 공급자)가 제공하는 IP주소
      • 외부에 공개되어 있는 IP주소
    • 사설 IP
      • 일반 가정이나 회사 내 등에서 할당된 네트워크 IP주소
      • IPv4의 주소부족으로 인해 서브넷팅된 IP이기 때문에 라우터에 의해 로컬 네트워크상의 PC나 장치에 할당
    • 사설 IP 주소만으로는 인터넷에 직접 연결할 수 없고, 라우터를 통해 1개의 공인 IP를 할당하고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당 받아 인터넷에 접속 할 수 있다.

    틀린점있다면 언제든 알려주세요! 감사합니다.

    참조

    https://dev-coco.tistory.com/161#head1

    https://mangkyu.tistory.com/91

    https://literate-t.tistory.com/100

    https://velog.io/@pppp0722/쿠키-세션-토큰-JWT


    Uploaded by N2T

    '네트워크' 카테고리의 다른 글

    네트워크 정리  (0) 2023.01.26

    댓글

Designed by Tistory.