CS 면접 대비 정리_ 네트워크

아이작·2022년 1월 10일
0

CS 공부

목록 보기
4/10

네트워크

TCP vs UDP

  1. TCP (transfer control protocol) 전송 제어 프로토콜.

    서버와 클라이언트가 소켓을 통해 직접 연결하여, 데이터를 전송하는 "연결지향" 프로토콜이다. ---> 신뢰성

    특징
    	a. 혼잡제어 ---> 네트워크의 혼잡을 제어한다. 
        b. 흐름제어 ---> sender/ recevier 의 데이터 주고받는 속도 차이를 개선한다. 
        		1. 1개씩 보내고, 응답받기: stop and wait 
                2. 슬라이딩 윈도우, 윈도우 사이즈만큼 보내고, 받은 응답만큼 윈도우 사이즈 조절 
        c. 오류제어 ---> 데이터의 오류를 제어한다. 
    
        이를 할 수 있는 이유는? --> 연결 지향 프로토콜이기 때문이다. 
        이를 통해 얻는 것은? ---> 데이터의 신뢰성! 
        
  2. UDP (user datagram protocol)--- 비연결지향 프로토콜

    서버와 클라이언트 연결, 연결 해제 과정이 없기에, 빠르게 데이터 전송가능. but 데이터의 신뢰성이 떨어진다.

    데이터그램이란? 독립적인 패킷.

    데이터가 패킷으로 나뉘고, 각 패킷은 서로 다른 경로를 통해 목적지에 도착.

소켓통신 vs HTTP 통신

HTTP 통신= 5계층(어플리케이션 통신 프로토콜)
무상태성.

소켓 통신 = 4계층 tcp 기반의 통신-- 소켓과 소켓을 연결하여, 양방향/ 실시간 전송을 한다.

HTTP 역시, tcp 위에서 작용하는 프로토콜이기에 소켓통신이다! 하지만, 여기서 말하는 요점은
실시간성이냐?/ 비실시간(무상태성)이냐의 차이.

keep Alive!

HTTP 요청에 대한 응답을 보내고, 바로 연결을 끊는 것이 아니라, 일정시간동안 연결을 "유지한다!"
Why? --> 연결을 하기 위해서는 항상 3-way-handshake/4-way-handshake 과정 필요--> 자주 발생하면, 오버헤드!

하지만, 대규모 요청이 한번에 들어오는 경우? --> 여러 소켓을 일정 시간동안 열어두기에, 프로세스가 늘어나고 메모리 소모, 서버 다운 가능성이 있다.

HTTP/ HTTPS

HTTP 의 단점 HTTPS
1. 도청이 가능하다. ----------------------------> 암호화!
2. 통신상대를 확인하지 않는다. --------------------> 인증기관 CA 활용
3. 완전성(정보의 정확성)을 증명할 수 없다. ----------> 비대칭키(개인키/공개키), 대칭키 활용

flow

클라이언트의 브라우저에 여러 인증기관의 공개키가 존재.
클라이언트가 웹사이트 방문하면, 해당 웹사이트에서 인증서 획득, CA의 공개키로 복호화 --> 해당 웹사이트의 공개키 획득
" 클라이언트는 인증기관을 이용하는 정상적인 클라임을 입증 가능"
" 웹사이트 역시, 인증기관에 의해 인증받은 사이트임을 입증. "

획득한 공개키로 암호화해서 의미없는 데이터 전달 ---> 서버가 개인키로 이를 복호화,
클라이언트가 대칭키를 만든다. ----> 대칭키로 데이터 암호화, 대칭키를 서버 공개키로 암호화
서버가 개인키로 대칭키 복호화해서 획득, 이후 데이터 교환에서 개인키만 이용!

  • why? 이런 복잡한 방식을 사용하는가?
    비대칭키 암호화 알고리즘은 많은 자원 소모, 대칭키가 훨씬 경제적. 대칭키를 안전하게 전송하기위한 방법으로, 비대칭키를 이용하는 것!

인증과 인가 (Authentication/ Authorization)

  1. 인증 : 사용자가 누구인가? ex) 로그인,
  2. 인가 : 인증된 사용자에게 권리를 허가하는 것

인증을 어떻게 하는가? HTTP는 무상태, 연결되어 있지 않기에 매번 로그인 정보를 넘겨주어야 한다. 이는 상당히 번거롭다

*** 세션, 토큰 --> 인증 방법!

세션: 서버측에 사용자의 로그인 정보를 저장하고 세션id를 쿠키에 실어서 사용자에게 전달. 사용자는 이 세션id(쿠키에 있는)를 저장하여, 매 요청마다 함께 보냄으써, 자신을 인증한다.

토큰: 사용자의 정보를 토큰에 저장하고 이를 인코딩해서 사용자가 관리한다. 매 요청마다 토큰을 보내고, 서버가 이를 디코딩/해석하여 인증.

서버측에서 관리하지 않는다 --> 서버 용량 자유롭다. but 로그인 통제를 하지 못한다.(여러 기기에서 로그인 수 제한, 강제 로그아웃 등).
악의적 사용자가 토큰을 획득하면, 유효기간내에 사용 가능하다는 문제점!

** 토큰 문제점 해결 방법
1. access 토큰,refresh 토큰을 클라에 전달, refresh 토큰만 서버에 저장. access 토큰의 유효기간을 매우 짧게 설정
access 토큰의 유효기간이 끝나면, refresh 토큰을 통해 새로운 aceess 토큰 발행, 타기기가 로그인하면 refresh 토큰값이 바뀌기에 이전의 access 토큰으로 더 이상 접근 불가. but 유효기간내에는 사용가능하다는 문제점.

0개의 댓글