Network Quiz - HTTP, HTTPS, TCP, UDP

이소라·2023년 5월 30일
0

Interview Questions

목록 보기
37/67

1. 웹 프로토콜에 대해 설명해주세요.

  • 웹 프토토콜은 웹 클라이언트와 웹 서버 간의 통신 규약을 말합니다.
    • 가장 기본 웹 프로토콜로 HTTP가 있습니다.

    • HTTP와 함께 작동하는 다른 웹 프로토콜로 DNS, TCP/IP, WebSocket, FTP가 있습니다.

      • DNS (Domain Name System) : 도메인 이름을 IP 주소로 바꿔주는 시스템
      • TCP/IP : 인터넷을 포함한 네트워크 전반의 데이터 전송에 대한 기본 통신 규약
      • WebSocket : 클라이언트와 서버 간의 실시간 양방향 통신
      • FTP(File Transfer Protocol) : 클라이언트와 서버 간의 파일 전송



2. HTTP에 대해 설명해주세요.

  • HTTP는 Hypertext Transfer Protocol의 약어로 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 계층 프로토콜입니다.
  • HTTP는 웹 브라우저와 웹 서버 간의 통신을 위해 설계되었습니다.
  • HTTP는 무상태 프로토콜이기 때문에, 서버가 이전 요청에 대한 상태를 유지 하지 않습니다.

2.1 HTTP의 GET과 POST를 비교하여 설명해주세요.

  • GET 메서드는 서버의 리소스를 가져올 때 쓰는 메서드이고, POST 메서드는 서버에 데이터를 보낼 때 쓰는 메서드입니다.
  • GET 메서드는 body나 payload의 사용을 피하는 반면에, POST 메서드는 body나 payload를 사용하여 데이터를 전송합니다.

2.2 HTTP의 PUT과 PATCH를 비교하여 설명해주세요.

  • PUT 메서드는 새로운 리소스를 만들거나 리소스를 교체할 때 사용하는 메서드이고, PATCH 메서드는 리소스를 부분적으로 수정할 때 사용하는 메서드입니다.
  • PUT 메서드는 URL에 해당되는 리소스를 통째로 바꿔주므로 멱등성을 만족하지만, PATCH 메서드는 URL에 해당되는 리소스 중 일부만 변경할 수 있으므로 멱등성을 만족하지 않아도 됩니다.
    • 멱등성이란 동일한 요청을 한 번 했을 때와 여러 번 연속해서 했을 때 같은 결과가 나오는 것을 말합니다.

2.3 HTTP의 Status Code에 대해 설명해주세요.

  • HTTP 응답의 상태 코드는 HTTP 요청의 성공 여부를 나타냅니다.
  • 상태 코드는 5 가지 그룹으로 나눠집니다.
    • 1XX : Informational responses
    • 2XX : Successful responses
    • 3XX : Redirection messages
    • 4XX : Client error responses
    • 5XX : Server error responses

2.3 HTTP와 HTTPS의 차이점에 대해 설명해주세요.

  • HTTPS는 SSL(Secure Socket Layer)나 TLS(Transport Layer Security)를 통해 암호화된 HTTP 프로토콜입니다.
  • 따라서 정보를 안전하게 주고 받을 수 있다는 장점이 있지만, 암호화와 복호화 과정을 거쳐야 하므로 HTTP 보다 느리고 인증서를 발급받기 위해 비용이 든다는 단점이 있습니다.



3. HTTPS의 동작 방식에 대해 설명해주세요.

  1. 클라이언트가 SSL 버전과 암호화 방식(cipher suite), 임의의 난수가 포함된 Client Hello 메시지를 송신하면서 SSL 통신을 시작합니다.
  2. 서버가 SSL 통신이 가능한 경우, SSL 버전과 암호 방식, 서버의 공개키가 담긴 SSL 인증서, 임의의 난수를 포함한 Server Hello 메시지로 응답합니다.
  3. 클라이언트는 서버의 SSL 인증서가 믿을 만한지 확인하기 위해 인증기관(CA)의 공개키로 암호화된 인증서를 복호화해봅니다.
  4. 클라이언트는 자신이 생성한 난수와 서버의 난수를 사용하여 premaster secret을 만듭니다.
  5. 클라이언트는 공개키 증명서에서 꺼낸 공개키로 Pre-Master secret를 암호화하여 서버로 전송합니다.
  6. 서버는 비밀키로 Pre-Master secret을 복호화한 값을 master secret 값으로 저장합니다.
  7. 서버는 master secret을 사용하여 대칭키 암호화에 사용할 세션 키를 생성합니다.
  8. SSL handshake를 종료하고 HTTPS 통신을 시작합니다.



4. TCP와 UDP를 비교 설명해주세요.

  • TCP는 Transmission Control Protocol의 약어로 두 호스트를 연결하고 데이터 스트림을 교환하는 네트워크 프로토콜입니다.
    • TCP는 연결 기반으로 되어 있고, 데이터를 전송하기 전에 클라이언트와 서버간의 연결이 설정됩니다.
    • TCP는 데이터와 패킷이 보내진 순서대로 전달되는 것을 보장합니다.
    • TCP는 3-way-handshake, 재전송, 에러 감지를 통해 신뢰성을 주는 반면에 지연이 길어집니다.
  • UDP는 User Datagram Protocol의 약어로 보안과 안정성보다 전송 속도와 효율성이 중요할 때 데이터를 전송하기 위한 프로토콜입니다.
    • UDP는 최소한의 프로토콜 메커니즘을 가진 연결이 없는 간단한 통신 모델을 사용합니다.

    • UDP는 데이터 무결성을 위한 checksums과 datagram의 소스와 목적지에서 서로 다른 함수들을 주소 지정하기 위한(?) port 번호를 제공합니다.

      • 데이터 무결성 : 데이터의 생명 주기 동안 데이터의 정확성, 일관성을 보장하는 것
    • UDP는 handshaking이 없기 때문에 사용자의 프로그램이 네트워크의 불안전성에 노출될 수 있습니다.

    • UDP는 정확성과 순서, 중복 보호에 대한 보장이 없습니다.

    • UDP는 에러 체크, 정확성이 필수가 아니거나 애플리케이션에서 실행되는 곳에 적합합니다.

    • 시간에 민감한 애플리케이션은 UDP를 종종 사용합니다.

      • 재전송 때문에 지연되는 패킷을 기다리는 것보다 패킷을 떨어뜨리는 것이 선호되기 때문입니다.



5. TCP가 신뢰성을 보장하는 방법에 대해 설명해주세요.

  • TCP는 손실된 데이터를 감지하고 재전송함으로써 신뢰성을 보장합니다.
  • TCP는 재전송 타임 아웃(RTO : Retransmission TimeOut)와 중복 누적 승인(DupAcks:Duplicate cumulative Acknowledgements)을 사용하여 손실을 감지합니다.
    • Dupack-based 재전송
      • 스트림 중 하나의 세그먼트가 손실된다면, 수신기는 누적 ACK를 사용하기 때문에 해당 세그먼트 번호 이상의 패킷을 승인할 수 없습니다.
      • 수신기가 3번의 중복된 ACK를 받으면, 마지막에 승인되지 않은 패킷을 재전송합니다.
    • Timeout-based 재전송
      • 발신기가 세그먼트를 전송할 때, ACK 도착 시간을 보수적으로 추정하여 타이머를 초기화합니다.
      • 타이머가 만료되면 세그먼트가 재전송되며, 이 전 값의 2배에 해당되는 새로운 시간 초과 임계값이 적용되어 기하급수적인 backoff 동작이 발생합니다.



6. TCP의 3-Way-HandShake와 4-Way-HandShake에 대해 설명해주세요.

  • 클라이언트와 서버에 TCP 연결을 할 때 3-Way-HandShake 방식으로 하고, TCP 연결을 해제할 때 4-Way-HandShake 방식으로 합니다.

  • 3-Way-HandShake

    1. 클라이언트가 열린 상태의 서버에 SYN 패킷를 보냅니다.
    2. 서버는 클라이언트에게 SYN-ACK 패킷으로 응답합니다.
    3. 마지막으로, 클라이언트가 서버에게 ACK 패킷을 보냅니다.
  • 4-Way-HandShake

    1. 클라이언트가 서버에게 FIN 패킷을 보냅니다.
    2. 서버가 클라이언트에게 ACK 패킷을 보냅니다.
    3. 서버가 클라이언트에게 FIN 패킷을 보냅니다.
    4. 클라이언트가 서버에게 ACK 패킷을 보냅니다.
      • 클라이언트는 최종 ACK 패킷으로 응답한 후 최종적으로 연결을 닫기 전에 타임아웃을 기다립니다.
      • 전송 중에 최종 ACK 패킷이 손실되는 경우, 클라이언트가 서버에 최종 ACK 패킷을 다시 보낼 수 있게 해줍니다.



출처

0개의 댓글