솜이의 데브로그

[CS] 네트워크 본문

CS/etc

[CS] 네트워크

somsoming 2022. 4. 14. 16:57

1. TCP와 UDP의 차이에 대해서 설명해 주세요.

  • TCP와 UDP는 네트워크 계층 준 전송 계층에서 사용하는 프로토콜입니다.
TCP는 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하고, 그렇기에 높은 신뢰성을 보장하지만 속도가 비교적 느리다는 단점이 있습니다.
UDP는 비연결형 서비스로 3-way handshaking을 사용하지 않기 때문에 신뢰성이 떨어지는 단점이 있습니다. 하지만 수신 여부를 확인하지 않기 때문에 속도가 빠릅니다.

TCP

  • 인터넷 상에서 데이터를 메세지의 형태 (segment 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
  • 연결형 서비스로, 가상 회선 방식을 제공한다.
    • 3-way handshaking 과정을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.
  • 흐름제어 및 혼잡제어를 제공한다.
  • 높은 신뢰성을 제공한다.
  • UDP 보다 속도가 느리다.
  • 전이중 (Full-Duplex), 점대점(Point to Point) 방식이다.
  • 연속성보다 신뢰성이 있는 전송이 중요할 때 사용된다.

UDP

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

 

2. HTTP와 HTTPS 의 차이는 무엇인가요?

HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 비밀번호나 주민번호 등을 주고 받으면 제삼자에 의해 조회될 수 있습니다.
HTTPS는 자신의 공개키를 갖는 인증서를 발급하여 보내는 메시지를 공개키로 암호화하도록 합니다.
공개키로 암호화된 메시지는 개인키를 가지고 있어야만 복호화가 가능하기 때문에, 기업을 제외한 누구도 원본 데이터를 얻을 수 없습니다.

HTTP 프로토콜

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

HTTPS 프로토콜

  • HyperText Transfer Protocol over Secure Socket Layer
  • 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전의 프로토콜
  • HTTPS의 기본 TCP/IP 포트로 443번 포트를 사용한다.
  • 소켓 통신에서 일반 텍스트를 이용하는 대신에, 웹 상에서 정보를 암호화하는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다.
    • TLS(Transport Layer Security) 프로토콜은 SSL (Secure Socket Layer) 프로토콜에서 발전한 것이다.
    • 두 프로토콜의 주요 목표는 기밀성(사생활 보호), 데이터 무결성, ID 및 디지털 인증서를 사용한 인증을 제공하는 것이다.
  • 따라서 데이터의 적절한 보호를 보장한다.

 

3. HTTP GET과 POST의 차이는 무엇인가요?

  • GET 메서드
    • 정보를 조회하기 위한 메서드
    • 서버에서 어떤 데이터를 가져와서 보여주기 위한 용도
    • 가져오는 것 (Select)
    • URL에 요청 정보를 붙여서 전송한다.
    • URL에 요청 정보가 이어붙기 때문에 길이 제한이 있어서 대용량의 데이터를 전송하기 어렵다.
    • 요청 정보를 사용자가 쉽게 눈으로 확인할 수 있다.
      • 따라서 POST 방식보다 보안상 취약하다.
    • HTTP 패킷의 Body는 비어있는 상태로 전송한다.
      • Body의 데이터 타입을 표현하는 ‘Content-Type’ 필드도 HTTP Request Header에 들어가지 않는다.
    • POST 방식보다 빠르다.
      • 캐싱을 사용할 수 있어, GET 요청과 그에 대한 응답이 브라우저에 의해 캐쉬된다.
  • POST 메서드
    • 서버의 값이나 상태를 바꾸기 위한 용도의 메서드
    • 수행하는 것 (Insert, Update, Delete)
    • 요청 정보를 HTTP 패킷의 Body 안에 숨겨서 서버로 전송한다.
    • Body 안에 숨겨서 요청 정보를 전송하기 때문에 대용량의 데이터를 전송하기에 적합하다.
    • 클라이언트 쪽에서 데이터를 인코딩하여 서버로 전송하고, 이를 받은 서버 쪽이 헤당 데이터를 디코딩한다.
    • GET 방식보다 보안상 안전하다.

 

4. HTTP Method 종류 및 역할에 대해 말해주세요.

  • GET : 클라이언트가 서버에게 URL에 해당하는 자료의 전송을 요청.
  • HEAD : GET 요청으로 반환될 데이터 중 헤더 부분에 해당하는 데이터만 요청.
  • POST : 클라이언트가 서버에서 처리할 수 있는 자료를 보낸다. (서버의 값이나 상태를 바꾸기 위한 용도의 메서드)
  • PATCH : 클라이언트가 서버에게 지정한 URL의 데이터를 부분적으로 수정할 것을 요청한다.
  • PUT : 클라이언트가 서버에게 지정한 URL에 지정한 데이터를 저장할 것을 요청한다. (전체 저장)
  • DELETE : 클라이언트가 서버에게 지정한 URL의 정보를 제거할 것을 요청한다.
  • TRACE : 클라이언트가 서버에게 송신한 요청의 내용을 반환해 줄 것을 요청한다.
  • CONNECT : 클라이언트가 특정 종류의 프록시 서버에게 연결을 요청한다.
  • OPTIONS : 해당 URL에서 지원하는 요청 메시지의 목록을 요청한다.

 

5. 쿠키와 세션에 대해서 설명해 주세요.

쿠키

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

  1. 웹 브라우저가 서버에 요청
  2. 상태를 유지하고 싶은 값을 쿠키(cookie)로 생성
  3. 서버가 응답할 때 HTTP 헤더에 쿠키를 포함해서 전송
  4. 전달받은 쿠키는 웹브라우저에서 관리하고 있다가, 다음 요청 때 쿠키를 HTTP 헤더에 넣어서 전송
  5. 서버에서는 쿠키 정보를 읽어 이전 상태 정보를 확인한 후 응답

세션

  • 개념
    • 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지하는 기술.
    • 즉, 웹 브라우저를 통해 서버에 접속한 이후부터 브라우저를 종료할 때까지 유지되는 상태이다.
  • 동작 방식 
    1. 웹 브라우저가 서버에 요청
    2. 서버가 해당 웹브라우저(클라이언트)에 유일한 ID(Session ID)를 부여함
    3. 서버가 응답할 때 HTTP 헤더(Set-Cookie)에 Session ID를 포함해서 전송, 쿠키에 Session ID를 JSESSIONID라는 이름으로 저장
    4. 웹브라우저는 이후 웹브라우저를 닫기까지 다음 요청 때 부여된 Session ID가 담여깄는 쿠키를 HTTP 헤더에 넣어서 전송
    5. 서버는 세션 ID를 확인하고, 해당 세션에 관련된 정보를 확인한 후 응답.

 

6. 흐름제어기법중 슬라이딩 윈도우 방식에대해 설명하세요.

Sliding Window (Go Back N ARQ)

  • 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법입니다.
  • 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는 대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송합니다.

 

7. 3-way handshaking이란?

3-way handshaking 이란,

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정
  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.
  • 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 말한다.

단계

  • A→B : SYN
    • 접속 요청 프로세스 A가 연결 요청 메시지를 전송
    • 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
  • B→A : SYN + ACK
    • 접속 요청을 받은 프로세스 B가 요청을 수락했으며, 접속 요청 프로세스인 A도 포트를 열어달라는 메시지 전송
    • 수신자는 Acknowledgement Number 필드를 (Sequence Number +1)로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
  • A→B : ACK
    • 마지막으로 접속 요청 프로세스 A가 수락 확인을 보내 연결을 맺음
    • 이 때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.

 

8. DNS가 무엇인가요?

DNS는 Domain Name System의 약자로, IP 주소를 모두 기억하는 것이 어렵기 때문에 DNS Server에 수많은 IP 주소와 도메인이 저장되어 있습니다.

DNS Server

  • IP 주소와 Domain 이름을 기억하는 기능과 Client가 이름을 물어보면 IP를 알려주는 기능을 갖고 있다.

 

9. 흐름제어와 혼잡제어에 대해 설명하세요.

  • 흐름제어
    • 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것.
    • 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보낼 때 수신하는 곳에서 문제가 일어나는 것을 막는다.
  • 혼잡제어
    • 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
    • 정보의 소통량이 과다하다면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.

 

10. 유니캐스트, 멀티캐스트, 브로드캐스트란?

Unicast

  • 1:1 통신을 말하며 LAN 통신에서 송신자의 MAC와 수신자의 MAC 주소를 알 때 메세지를 전달한다.
  • 한개의 MAC 주소를 사용하여 CPU 성능에는 문제를 주지 않는다.
  • 개인적이거나 고유한 리소스가 필요한 모든 네트워크 프로세스에서 사용될 수 있다.

Multicast

  • 한 번의 송신으로 메세지나 정보를 목표한 여러 컴퓨터에 전송하는 것을 말한다. 1:N 전송 방법이다.
  • 수신자를 그룹화하여 해당 그룹에 해당하는 수신지만 유니캐스트 + 브로드캐스트 한다.

Broadcast

  • 정보의 전달 과정에서 송신자는 누군지 확실히 알고 있으나 수신자를 특정하지 않았을 때, 네트워크에 있는 모든 서버에게 정보를 알려야 할 때, 라우터끼리 정보를 교환하거나 새로운 라우터를 찾을때 사용한다.
  • Flooding 개념
  • 브로드캐스팅용 주소가 따로 정해져있고, 수신 받는 목적지는 이 주소가 오면 패킷을 자신의 CPU로 전송해서 CPU가 패킷을 처리한다.

'CS > etc' 카테고리의 다른 글

[cs] 운영체제  (0) 2022.05.05
[CS] 데이터베이스  (0) 2022.04.28
[CS] 알고리즘  (0) 2022.04.07
[CS] 개발 상식  (0) 2022.03.31