공부/Computer Science

[CS 면접 대비 공부] 네트워크

남쪽마을밤송이 2022. 8. 3. 08:05

 OSI 7계층 

  1. 물리 계층 (Physical Layer)
    • 네트워크의 기본 네트워크 하드웨어 전송 기술을 이룬다.
    • 네트워크의 높은 수준의 기능의 논리 데이터 구조를 기초로 하는 필수 계층이다.
    • 전송 단위는 Bit이다.
  2. 데이터 링크 계층 (Data Link Layer)
    • 종단(Point to Point) 간 신뢰성 있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다.
    • 주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다.
    • 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다.
    • 데이터 전송 단위는 Frame이다.
  3. 네트워크 계층 (Network Layer)
    • 여러개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)를 제공하기 위한 기능적, 절차적 수단을 제공한다.
    • 네트워크 계층은 라우팅, 흐름 제어, 세그멘테이션(segmentation/desegementation), 오류 제어, Internetworking 등을 수행한다.
    • 논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며, 계층적(hierarchical)이다.
    • 데이터 전송 단위는 Datagram(Packet)이다.
  4. 전송 계층 (Transport Layer)
    • 양 끝단(End to End)의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다.
    • 시퀀스 넘버 기반의 오류 제어 방식을 사용한다.
    • 전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고(stateful), 연결 기반(connection oriented)이다. (이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다)
    • 가장 잘 알려진 전송 계층의 예는 TCP이다.
    • 데이터 전송 단위는 Segment이다.
  5. 세션 계층 (Session Layer)
    • 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다.
    • 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(full-duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다.
    • 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.
  6. 표현 계층 (Presentation Layer)
    • 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어준다.
    • MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다.
  7. 응용 계층 (Application Layer)
    • 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.
    • 일반적인 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다.
    • 5~7계층의 데이터 전송 단위는 Data이다.

 

 TCP와 UDP 

  • 네트워크 계층 중 전송 계층에서 사용하는 프로토콜

 (1) TCP 

  • TCP (Transmission Control Protocol)
    • 인터넷 상에서 데이터를 메세지의 형태(세그먼트라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
    • TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.
    • 연결형 서비스로 가상 회선 방식을 제공한다.
      • 3-way handshake 과정을 통해 연결을 설정하고, 4-way handshake를 통해 연결을 해제한다.
    • 흐름제어 및 혼잡제어를 제공한다.
      • 흐름제어
        • 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것
        • 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다.
      • 혼잡제어
        • 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
        • 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.
    • 높은 신뢰성을 보장한다.
    • UDP보다 속도가 느리다.
    • 전이중(Full-Duplex), 점대점(Point to Point) 방식이다.
    • 연속성보다 신뢰성 있는 전송이 중요할 때에 사용된다.

 (2) UDP 

  • UDP (User Datagram Protocol)
    • 데이터를 데이터그램 단위로 처리하는 프로토콜이다.
    • 비연결형 서비스로 데이터그램 방식을 제공한다.
      • 연결을 위해 할당되는 논리적인 경로가 없다.
      • 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 된다.
      • 이렇게 데이터를 서로 다른 경로로 독립적으로 처리한다.
    • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
    • UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
    • 신뢰성이 낮다.
    • TCP보다 속도가 빠르다.
    • 신뢰성보다는 연속성이 중요한 서비스, 예를 들면 실시간 서비스에 사용된다.

  • 참고
    • UDP와 TCP는 각각 별도의 포트 주소 공간을 관리하므로 같은 포트 번호를 사용해도 무방하다. 즉, 두 프로토콜에서 동일한 포트 번호를 할당해도 서로 다른 포트로 간주한다.
    • 또한 같은 모듈(UDP or TCP) 내에서도 클라이언트 프로그램에서 동시에 여러 커넥션을 확립한 경우에는 서로 다른 포트 번호를 동적으로 할당한다. (동적 할당에 사용되는 포트번호는 49, 152~65, 535이다)

 

 HTTP와 HTTPS 

 (1) HTTP 

  • HTTP 프로토콜
    • 개념
      • HyperText Transfer Protocol
      • 웹 상에서 클라이언트와 서버 간에 요청/응답으로 정보를 주고 받을 수 있는 프로토콜
    • 특징
      • 주로 HTML 문서를 주고받는 데에 쓰인다.
      • TCP와 UDP를 사용하며, 80번 포트를 사용한다.
      • 비연결 (Connectionless)
        • 클라이언트가 요청을 서버에 보내고 서버가 적절한 응답을 클라이언트에 보내면 바로 연결이 끊긴다.
      • 무상태 (Stateless)
        • 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.

 (2) HTTPS 

  • HTTPS 프로토콜
    • 개념
      • HyperText Transfer Protocol over Secure Socket Layer
      • 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전의 프로토콜
    • 특징
      • HTTPS의 기본 TCP/IP 포트로 443 포트를 사용한다.
      • HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, 웹 상에서 정보를 암호화하는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다.
        • TLS 프로토콜은 SSL 프로토콜에서 발전한 것이다.
        • 두 프로토콜의 주요 목표는 기밀성, 데이터 무결성, ID 및 디지털 인증서를 사용한 인증을 제공하는 것이다.
      • 따라서 데이터의 적절한 보호를 보장한다.
        • 보호의 수준은 웹 브라우저에서의 구현 정확도와 서버 소프트웨어, 지원하는 암호화 알고리즘에 달려있다.
      • 금융 정보나 메일 등 중요한 정보를 주고받는 것은 HTTPS를, 아무나 봐도 상관 없는 페이지는 HTTP를 사용한다.
    • HTTPS가 필요한 이유
      • 클라이언트인 웹 브라우저가 서버에 HTTP를 통해 웹 페이지나 이미지 정보를 요청하면 서버는 이 요청에 응답하여 요구하는 정보를 제공하게 된다.
      • 웹 페이지(HTML)는 텍스트이고, HTTP를 통해 이런 텍스트 정보를 교환하는 것이다.
      • 이때 주고받는 텍스트 정보에 주민등록번호나 비밀번호와 같이 민감한 정보가 포함된 상태에서 네트워크 상에서 중간에 제3자가 정보를 가로챈다면 보안상 큰 문제가 발생한다.
      • 즉, 중간에서 정보를 볼 수 없도록 주고받는 정보를 암호화하는 방법인 HTTPS를 사용하는 것이다.
    • HTTPS의 원리
      • 공개키 알고리즘 방식
      • 암호화, 복호화시킬 수 있는 서로 다른 키(공개키, 개인키)를 이용한 암호화 방법
        • 공개키: 모두에게 공개. 공캐키 저장소에 등록
        • 개인키(비공개키) : 개인에게만 공개. 클라이언트-서버 구조에서는 서버가 가지고 있는 비공개키
        • 클라이언트 -> 서버
          • 사용자의 데이터를 공개키로 암호화 (공개키를 얻은 인증된 사용자)
          • 서버로 전송 (데이터를 가로채도 개인키가 없으므로 복호화할 수 없음)
          • 서버의 개인키를 통해 복호화하여 요청 처리
    • HTTPS의 장단점
      • 장점
        • 네트워크 상에서 열람, 수정이 불가능하므로 안전하다.
      • 단점
        • 암호화를 하는 과정이 웹 서버에 부하를 준다.
        • HTTPS는 설치 및 인증서를 유지하는데 추가 비용이 발생한다.
        • HTTP에 비해 느리다.
        • 인터넷 연결이 끊긴 경우 재인증 시간이 소요된다.
          • HTTP는 비연결형으로 웹 페이지를 보는 중 인터넷 연결이 끊겼다가 다시 연결되어도 페이지를 계속 볼 수 있다.
          • 그러나 HTTPS의 경우에는 소켓(데이터를 주고 받는 경로) 자체에서 인증을 하기 때문에 인터넷 연결이 끊기면 소켓도 끊어져서 다시 HTTPS 인증이 필요하다.

 

 

 

 쿠키와 세션 

  • HTTP 프로토콜의 특징
    • 비연결 지향(Connectionless)
      • 클라이언트가 request를 서버에 보내고, 서버가 클라이언트에 요청에 맞는 response를 보내면 바로 연결을 끊는다.
    • 상태정보 유지 안 함(Stateless)
      • 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
  • 쿠키와 세션의 필요성
    • HTTP 프로토콜은 위와 같은 특징으로 모든 요청 간 의존관계가 없다.
    • 즉, 현재 접속한 사용자가 이전에 접속했던 사용자와 같은 사용자인지 아닌지 알 수 있는 방법이 없다.
    • 계속해서 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것이 큰 장점이지만, 통신할 때마다 새로 연결하기 때문에 클라이언트는 매 요청마다 인증을 해야 한다는 단점이 있다.
    • 이전 요청과 현재 요청이 같은 사용자의 요청인지 알기 위해서는 상태를 유지해야 한다.
    • HTTP 프로토콜에서 상태를 유지하기 위한 기술로 쿠키와 세션이 있다.

 (1) 쿠키 

  • 쿠키(Cookie)란?
    • 개념
      • 클라이언트 로컬에 저장되는 키와 값이 들어있는 파일이다.
      • 이름, 값, 유효 시간, 경로 등을 포함하고 있다.
      • 클라이언트의 상태 정보를 브라우저에 저장하여 참조한다.
    • 구성 요소
      • 쿠키의 이름(name)
      • 쿠키의 값(value)
      • 쿠키의 만료시간(Expires)
      • 쿠키를 전송할 도메인 이름(Domain)
      • 쿠키를 전송할 경로(Path)
      • 보안 연결 여부(Secure)
      • HttpOnly 여부(HttpOnly)
    • 동작 방식

 (2) 세션 

  • 세션(Session)이란?
    • 개념
      • 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지하는 기술이다.
      • 즉, 웹 브라우저를 통해 서버에 접속한 이후부터 브라우저를 종료할 때까지 유지되는 상태이다.
    • 동작 방식
      • 세션도 쿠키를 사용하여 값을 주고받으며 클라이언트의 상태 정보를 유지한다.
      • 즉, 상태 정보를 유지하는 수단은 쿠키이다.

  • 쿠키와 세션의 차이점
    • 저장 위치
      • 쿠키 : 클라이언트
      • 세션 : 서버
    • 보안
      • 쿠키 : 클라이언트에 저장되므로 보안에 취약하다.
      • 세션 : 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 비교적 보안성이 좋다.
    • 라이프사이클
      • 쿠키 : 만료시간에 따라 브라우저를 종료해도 계속해서 남아 있을 수 있다.
        세션 : 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
    • 속도
      • 쿠키 : 클라이언트에 저장되어서 서버에 요청 시 빠르다.
      • 세션 : 실제 저장된 정보가 서버에 있으므로 서버의 처리가 필요해 쿠키보다 느리다.