Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

네트워크 면접 질문 정리 #44

Open
krrong opened this issue Nov 29, 2023 · 47 comments
Open

네트워크 면접 질문 정리 #44

krrong opened this issue Nov 29, 2023 · 47 comments
Assignees

Comments

@krrong
Copy link
Collaborator

krrong commented Nov 29, 2023

  • OSI 7계층 각각에 대해 설명해주세요

  • TCP/IP 4계층에 대해 설명해주세요

  • TCP와 UDP의 차이점을 얘기해주세요

  • 가상회선방식이 무엇인지, TCP/UDP 중 어디에 속하는지 얘기해주세요

  • 3-way 핸드셰이킹의 과정을 설명해주세요

  • 4-way 핸드셰이킹의 과정을 설명해주세요

  • 혼잡 제어란 무엇인가요?

  • 오류를 인지하는 경우는 언제인가요?

  • HTTP vs HTTPS

  • REST란?

  • google.com을 입력하면 일어나는 일은 ??

  • 왜 이렇게 OSI 7 계층으로 나누게 되었을까요?

  • OSI 7계층중 어떤 계층이 헤더와 더불어 트레일러가 붙어있을 까요? 또한 그 트레일러가 붙는 이유는 무엇일까요?

  • 프로토콜이 뭔지 간략하게 설명해주실 수 있나요?

  • TCP/IP 4계층에서 각 계층 마다 데이터의 단위를 다르게 부르는데 각각 어떤게 있는지 설명해주실 수 있나요?

  • 패킷이 뭔가요?

  • MAC 주소가 무엇인가요?

  • IP 주소가 뭔가요?

  • 서브넷 마스크가 뭔가요?

  • TCP 통신 시 2번 단계의 클라이언트가 서버가 보낸 ACK+SYN를 받지 못한다면 어떻게 되나요?

  • TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?

  • 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?

  • DNS란 무엇인가?

  • PATCH PUT 차이

  • 데이터 캡슐화란 무엇인가요?, 데이터 캡슐화를 하는 이유는 무엇인가요?

  • 전송 계층에서는 주로 어떤 전송방식을 사용하나요?

  • IPv4와 IPv6의 차이는 무엇인가요?

  • TCP가 데이터 신뢰성을 보장하기 위해 어떤 방법을 사용하나요?

  • 흐름제어는 무엇인가요? 그리고 어떤 방법이 있을까요?

  • 혼잡제어는 무엇인가요? 그리고 어떤 방법이 있을까요?

  • TCP Tahoe와 TCP Reno에 대해 설명해주세요.

  • 오류 제어는 무엇인가요? 그리고 어떤 방법이 있을까요?

  • UDP의 오류 검출 방법은 어떻게 하나요?

  • 세션과 쿠키의 차이가 무엇인가요?

  • 공개키 암호화 방식만 사용하지 않고 대칭키 암호화 방식도 사용하는 이유는 무엇인가요?

  • URL과 URI의 차이는 무엇인가요?

  • RESTful 하다는 것은 어떤 것을 의미하나요?

  • GET과 POST의 차이에 대해 설명해주세요.

  • 세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.

  • JWT 토큰에 대해 설명해주세요.

  • 인터넷이 무엇인가요?

  • UDP를 쓰는 경우는?

  • HTTP Keep Alive와 TCP Keep Alive를 설명해 보세요.

  • HTTPS에서 사용하는 암호화 방식을 설명해 보세요.

  • REST의 장단점을 설명해 보세요.

  • GET에 바디를 넣어서 보내면 나타날 결과를 설명해 보세요.

  • POST와 PUT의 차이점을 설명해 보세요.

같이 알아볼 질문들

  • TIME_WAIT안에 데이터가 오지 않으면 어떻게 되나요? ( tcp fsm 참고)
  • 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
@woowacourse-study woowacourse-study deleted a comment from Choisehyeon Nov 29, 2023
@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Nov 29, 2023

OSI 7계층 각각에 대해 설명해주세요

Application 계층

HTTP 등의 프로토콜을 응용 프로그램의 UI를 통해 제공

Presentation 계층

데이터를 표준화된 형식으로 변경

Session 계층

세션의 유지 및 해체 등 응용 프로그램 간 통신 제어와 동기화

Transfer 계층

신뢰성 있는 데이터 전달하기 위한 계층,

Network 계층

데이터를 송신하기 위한 최적의 경로 선택을 수행

Datalink 계층

데이터 오류 검출 및 복구 수행

Physical 계층

데이터를 비트 단위의 0과 1로 변환한 후 장비를 사용해 전송

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

TCP/IP 4계층에 대해 설명해주세요

TCP/IP란 전송계층에서 사용되는 인터넷 프로토콜 중 하나이다.
TCP(Transmission Control Protocol, 전송 제어 프로토콜)

  • 데이터를 나눈 단위인 패킷의 전달 여부와 전송 순서를 보장하는 통신 방식

IP(Internet Protocol, 인터넷 프로토콜)

  • 패킷을 빠르게 보내기 위한 통신 방식

OSI 7계층을 TCP/IP에 맞게 표준화한것이 4계층이다.

응용계층

  • 사용자와 소프트웨어를 연결해주는 계층으로, HTTP, HTTPS, DNS 등의 프로토콜이 작동한다.
  • 데이터 단위는 메시지이다.

전송계층

  • 데이터의 신뢰성을 보장하며, 포트 번호로 데이터를 적절한 응용프로그램에 전달한다.
  • TCP, UDP 등의 프로토콜이 전송 계층에 속한다.
  • 데이터 단위는 세그먼트이다.

인터넷 계층

  • 데이터를 최종 목적지까지 도달할 수 있게 하는 계층으로, IP가 대표적인 프로토콜이다.
  • 전송 계층으로부터 받은 데이터를 헤더에 붙여 캡슐화하는데 이를 패킷, 데이터그램이라고 한다.

네트워크 접근 계층, 네트워크 인터페이스 계층

  • 데이터를 전기 신호로 변환하고 MAC 주소를 사용해 기기에 데이터를 전달한다.
  • 48비트로 구성된 하드웨어 고유 주소가 MAC(Media Access Control address)주소이다.
  • 이더넷, WI-FI 등이 있다.

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

TCP와 UDP의 차이점을 얘기해주세요

TCP

  • 연결형 서비스
  • 가상회선 방식을 통해 패킷을 전달
  • 3 way handshaking 방식을 통해 연결을 하고 4 way handshaking 방식을 통해 연결을 해제
  • 패킷의 순서가 보장됨
  • 패킷을 받았는지 확인함
  • 속도가 느림

UDP

  • 비연결형 서비스
  • 데이터그램 방식을 통해 데이터를 전달
  • 패킷의 순서가 보장되지 않음
  • 패킷을 받았는지 확인하지 않음
  • 속도가 빠름

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

가상회선방식이 무엇인지, TCP/UDP 중 어디에 속하는지 얘기해주세요

가상회선방식이란, 데이터를 주고 받기 전 패킷을 전송할 경로를 가상 회선으로 미리 설정하여, 모든 패킷들이 해당 경로를 따라 전송되는 방식을 의미합니다. TCP에서 데이터를 주고 받을 때 사용되어 패킷의 전송 순서가 보장됩니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

3-way 핸드셰이킹의 과정을 설명해주세요

TCP에서는 연결형 서비스를 지원하기 위해 송신부와 수신부를 연결하는 과정을 거칩니다.
이 중에서 데이터를 주고받기 전에 상대방 컴퓨터와 세션을 수렵하는 과정이 3 - way 핸드셰이킹 입니다.

  1. 송신부가 수신부에게 연결을 요청하기 위해 SYN 메시지와 임의의 수 N을 함께 보냅니다. 이 때 송신부는 SYN_SENT 상태가 됩니다.
  2. 수신부가 송신부로부터 SYN 메시지를 받으면 연결 요청을 수락하는 의미인 ACK 메시지를 송신부로부터 받은 N + 1 값을 보냅니다. 또한 수신부에서도 송신부와의 연결을 확인하기 위해 SYN 메시지와 임의의 숫자인 M을 함께 보낸 후 송신부의 응답을 기다립니다. 이 때 수신부는 SYN_RECEIVED
  3. 송신부가 수신부로부터 ACK + SYN 메시지를 받으면 연결이 성립되었다는 의미인 established 상태가 됩니다. 메시지에 대한 응답으로 ACK 메시지와 수신부로부터 받은 M에 1을 더한 값을 보냅니다. 이 때 ACK 메시지에는 송신부에서 전송하려는 데이터가 포함될 수 있습니다. 송신부로부터 ACK 메시지를 받으면 수신부는 established 상태가 됩니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Nov 29, 2023

4-way 핸드셰이킹의 과정을 설명해주세요

  1. 송신부가 수신부와 연결 종료하려고 FIN 메시지를 보냄
  2. 수신부가 송신부로부터 FIN 메시지 받으면 응답으로 ACK 메시지 보냄, 수신부는 메시지 보낸 후 연결 종료하기 위한 작업 수행
  3. 수신부 연결할 종료 준비 끝나면 송신부에 FIN 메시지 보냄
  4. 송신부는 수신부로 받은 FIN 메시지에 응답하기 위해 ACK 메시지 보냄, 송신부 TIME_WAIT 상태

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

혼잡 제어란 무엇인가요?
AIMD, 느린 시작을 설명해주세요

TCP/IP는 데이터 손실이 없음을 보장한다.
이를 보장하기 위해 여러가지 오류상황에 대한 제어방법이 존재한다.
크게 1. 흐름제어 2. 혼잡제어 3. 오류제어로 구분지어볼 수 있다.

특히 혼잡제어란?

  • 송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법이다.
  • 여기서 혼잡이란, 네트워크 패킷 수가 과도하게 증가하는 증상을 의미한다.
  • 혼잡이 발생해 네트워크에 패킷이 쌓이며, 일정시간 응답을 받지못하면, 송신부는 패킷을 재전송하며 이는 혼잡을 가중한다.
  • 따라서 TCP는 혼잡 윈도우의 크기를 조절해 혼잡에 대응한다.

다음과 같은 혼잡제어방법이 있다.

  1. AIMD(Additive Increase Multiplicative Decrease)
  • 데이터를 전달할 때 합 증가방식으로 혼잡 윈도우를 더해가며 키운다.
  • 데이터 손실이 발생하면, 혼잡 윈도우의 * 1/2 곱연산을 통해 혼잡윈도우를 줄인다.
  • 시간이 지나면 여러 송신부간 네트워크 대역폭을 공평하게 쓸 수 있다는 장점이 있다.
  1. 느린시작
  • 윈도우 크기가 1인상태에서 수신부에서 오는 ACK메시지의 갯수만큼 윈도우 크기를 늘려나간다.
  • 혼잡이 발생하면 윈도우 크기를 1로 줄인다.
  • AIMD 방식에서 초기에 전송 가능한 패킷 수가 적다는 단점을 보완한다.(제곱증가)
  1. 혼잡 회피
  • 윈도우 크기가 지수 함수 형태로 증가하다가 혼잡이 발생하는 것을 방지하기 위해 윈도우 크기에 대한 임계점(threshold)을 정하는 방식이다.
  • 윈도우 크기가 임계점에 도달하면, 이후부턴 선형으로 증가한다.
  • ACK 메시지를 받지 못해 타임아웃이 발생하면, 해당 시점에서 윈도우 크기의 절반을 임계점으로 설정하고, 윈도우 크기를 초깃값으로 변경한다.
  1. 빠른 회복
  • 혼잡이 발생하면 혼잡 윈도우 크기를 절반으로 줄인 후 선형적으로 증가하는 방식이다.
  • 혼잡이 처음 발생하면 AIMD 방식으로 동작한다.
  1. 빠른 재전송
  • Duplicate ACK가 3번 발생하면 해당 시점의 윈도우 크기를 절반으로 줄인다.
  • 그 뒤로 ACK 메시지를 받으면 다시 윈도우 크기를 키우는 방식이다.
  • Duplicate ACK는 패킷이 순서대로 도착하지 않아서 받아야 할 차례의 패킷을 ACK 메시지와 함께 요청하는 것을 뜻한다.

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

오류를 인지하는 경우는 언제인가요?

3 Duplicate ACK / NAK(Negative Acknowledge) / ACK을 받지못해 타임아웃

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

HTTP vs HTTPS
+ 암호화 계층이 어떤 계층 사이에 추가되나요?

HTTP는 데이터 암호화를 거치지 않아 보안에 취약한 반면,
HTTPS는 HTTP에 보안 계층인 SSL/TLS를 이용해 보안이 강화되었습니다.
보안 계층은 HTTP의 응용 계층과 전송 계층 사이에 추가됩니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

REST란?

REST는 REpresentational State Transfer의 약자로, 인터넷 상의 자원을 URI로 나타낼 수 있음을 의미합니다.
클라이언트는 URI로 표현된 자원을 HTTP 메서드를 이용해 CRUD 연산을 할 수 있습니다.
State Transfer는 자원의 상태를 주고받는 것, 즉 요청받은 자원의 상태를 전달하는 것을 의미합니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Nov 29, 2023

google.com을 입력하면 일어나는 일은 ??

  1. 사용자가 URL을 웹 브라우저에 입력
  2. 웹 브라우저는 DNS를 사용해서 도메인을 통해 IP주소를 얻어냄
  3. 웹 브라우저는 DNS 서버에서 받은 IP를 통해 웹 서버와 TCP/IP 연결을 하고 HTTP 요청 보냄
  4. 웹 서버는 받은 HTTP 요청에 응답, 응답은 웹 페이지에 필요한 리소스 포함
  5. 웹 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지 보여줌

DNS 를 사용할 때는 전송계층에서 어떤 프로토콜을 사용하나요?

DNS는 주로 전송계층에서 UDP를 사용합니다.. UDP는 데이터를 신속하게 전송하는 데에 중점을 둔 프로토콜로, 신뢰성 있는 데이터 전송을 보장하지 않지만, DNS의 경우에는 일반적으로 작은 데이터 패킷을 빠르게 전송하는 데에 적합한 특성을 갖고 있어 UDP를 주로 활용합니다.

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

왜 이렇게 OSI 7 계층으로 나누게 되었을까요?

레이어를 나눔으로써 관심사가 분리된다. 상위계층의 변경사항이 하위계층까지 전달되지 않으며 이는 캡슐화를 유지하고 유지보수성을 증대시킨다.

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

OSI 7계층중 어떤 계층이 헤더와 더불어 트레일러가 붙어있을 까요? 또한 그 트레일러가 붙는 이유는 무엇일까요?

데이터 링크 계층에 트레일러가 붙습니다.
트레일러는 데이터 송신 도중에 오류가 발생하는지 확인하는 용도로 사용되기 때문입니다.

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

프로토콜이 뭔지 간략하게 설명해주실 수 있나요?

프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계를 의미합니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

TCP/IP 4계층에서 각 계층 마다 데이터의 단위를 다르게 부르는데 각각 어떤게 있는지 설명해주실 수 있나요?

응용 계층에서는 메시지
전송 계층에서는 세그먼트
인터넷 계층에서는 패킷
네트워크 인터페이스 계층에서는 프레임입니다.
아 그리고 추가로 5계층으로 보는 곳도 있는데 여기서는 물리계층이 추가되어 bit입니다.

예시)

  1. 웹 브라우저에서 데이터를 보내면서 HTTP 헤더가 추가되고 HTTP 메세지가 된다.
  2. 전송 계층을 거치면서 HTTP 메세지에 TCP 헤더가 추가되면서 세그먼트가 된다. (TCP의 경우)
  3. 인터넷 계층을 거치면서 IP 주소 정보가 포함된 IP 헤더가 추가 되면서 패킷이 된다.
  4. 패킷에 이더넷 헤더와 FCS가 추가되어 프레임이 되고, 그 상태에서 비트로 변환되어 전송된다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

로피

패킷이 뭔가요?

인터넷에서 데이터 전송을 효율적으로 하기 위해 데이터를 나눈 조각

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

MAC 주소가 무엇인가요?

MAC(Media Access Control address)은 48비트로 구성된 하드웨어 고유의 주소이다.

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

IP 주소가 뭔가요?

인터넷 프로토콜(Internet Protocol)의 약자로, 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약을 의미합니다.

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

서브넷 마스크가 뭔가요?

IP 주소의 네트워크부와 호스트부를 구분하기 위해 사용됩니다.
IP와 동일한 구조인 8자리 2진수 4개로 구성되고, 연속적인 1과 0으로 이루어집니다.
서브넷마스크를 IP주소와 and 연산을 함으로써 네트워크부와 호스트부를 알 수 있습니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

TCP 통신 시 2번 단계의 클라이언트가 서버가 보낸 ACK+SYC를 받지 못한다면 어떻게 되나요?

3 - way 핸드 셰이킹의 1단계에서 수신측에게 SYN을 보내고 시간을 잽니다. timeout이 되기 전까지 ACK+SYN이 오지 않는다면 다시 수신측에게 SYN을 보내고 ACK+SYN을 대기합니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

로피

TCP의 연결 설정 과정(3단계)과 연결 종료 과정(4단계)이 단계가 차이나는 이유?

Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메시지를 보내기 때문입니다.

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유?

Connection을 맺을 때 사용하는 포트(port)는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용된다.

따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재한다.

서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 number가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있다. 이러한 문제가 발생할 가능성을 줄이기 위해서 난수로 ISN을 설정하는 것이다.

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

DNS란 무엇인가?

Domain Name System의 약자로 도메인 이름과 IP 주소를 서로 변환하는 역할을 합니다.
DNS는 HTTP 프로토콜 중 하나이고 UDP를 사용합니다.

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

PATCH PUT 차이
PUT을 했는데 일부 데이터만 수정한 경우는?

둘 다 데이터를 갱신할 때 사용하는 HTTP 메서드입니다.
다만, 데이터를 모두 갱신할 때는 PUT,
일부만 갱신할 때는 PATCH를 사용합니다.
만약 PUT을 하고 일부 데이터만 수정하는 경우, 수정하지 않는 다른 값들은 null이 됩니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

데이터 캡슐화란 무엇인가요?

객체의 속성과 행위를 하나로 묶고, 실제 구현 내용 일부를 내부에 감추어 은닉하는 것입니다.

데이터 캡슐화를 하는 이유는 무엇인가요?

결론적으로 상태를 잘 정의된 행동 집합 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만듭니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

로피

전송 계층에서는 주로 어떤 전송방식을 사용하나요?

TCP와 UDP

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

IPv4와 IPv6의 차이는 무엇인가요?

  • 패킷을 단편화하지 않으면서도 보다 효율적인 라우팅
  • NAT를 없앰으로써 주소 공간을 32비트에서 128비트로 확장
  • 네트워크 레이어 보안 내장(IPsec)
  • 손쉬운 네트워크 관리를 위한 무상태 주소 자동 구성
  • 처리 오버헤드가 줄어든 개선된 헤더 구조

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

TCP가 데이터 신뢰성을 보장하기 위해 어떤 방법을 사용하나요?

오류제어 / 흐름제어 / 오류제어 를 사용합니다.

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

흐름제어는 무엇인가요? 그리고 어떤 방법이 있을까요?

흐름제어란 데이터 송신부와 수신부에서 데이터 처리 속도의 차이 때문에 발생하는 데이터 손실을 방지하는 방법입니다.
크게 정지-대기, 슬라이딩 윈도우 방식이 있습니다.

정지-대기 방식은,
데이터를 보낸 후 수신부로부터 ACK 메시지를 받을 때까지 다음 데이터를 보내지 않고 기다리는 방식입니다.
다만 시간 면에서 비효율적이라는 단점이 있습니다.

슬라이딩 윈도우는,
메시지의 수신 여부를 확인하지 않고 수신부에서 설정한 윈도우 크기만큼 데이터를 연속적으로 보내는 방식입니다.
윈도우 크기가 N인 경우, 수신 여부를 확인하지 않고 N개 데이터를 보낼 수 있습니다.
또한, 전송한 데이터에 수신 여부가 확인된 경우 윈도우를 한 칸 이동함으로써 다음 데이터도 보낼 수 있는 상태가 됩니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

혼잡제어는 무엇인가요? 그리고 어떤 방법이 있을까요?

혼잡제어는 송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법입니다.
혼잡제어를 하는 방법으로 5가지 정도가 있는데요

  1. AIMD(Addictive Increase Mutiplecative Decrease)
  2. 느린 시작(Slow Start)
  3. 혼잡 회피(Congestion avoidance)
  4. 빠른 회피(Fast Recovery)
  5. 빠른 재전송(Fast Retrasmit)
    등이 있습니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

로피

TCP Tahoe와 TCP Reno에 대해 설명해주세요.

TCP Tahoe

초반에 느린 시작을 사용해 혼잡 윈도우 크기를 지수적으로 키웁니다. 혼잡이 발생했다고 판단되면 혼잡이 발생한 윈도우 크기의 절반을 임계점으로 설정하고 혼잡 윈도우 크기를 초기화한다.

TCP Reno

초반에 느린 시작을 사용하지만, 3 Duplicate ACK와 타임아웃을 구분해 대응합니다. 3 Duplicate ACK가 발생하면 혼잡 윈도우 크기를 절반으로 줄이고, 줄인 혼잡 윈도우 크기를 임계점 값으로 설정합니다. 하지만 타임아웃이 발생하면 혼잡 윈도우 크기를 1로 초기화 하고 임계점 값은 변경하지 않습니다.

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

오류 제어는 무엇인가요? 그리고 어떤 방법이 있을까요?

오류 제어란, TCP/IP에서 데이터에 오류 또는 유실이 발생할 때 데이터의 신뢰성을 보장하기 위해 오류를 제어하는 방식이다.

  • 잘못된 데이터를 받았다는 응답인 NAK(Negative Acknowledge) 메시지를 보낸 경우
  • 3 Duplicate ACK가 발생할 때
  • 타임아웃이 발생할 때
  1. 정지-대기
  • 타임아웃 발생 시 해당 패킷을 다시 보낸다.
  • 흐름 제어에 나와있던 방식과 동일하다.
  • ARQ(Automatic Repeat Request) 방식이 사용되며, 이는 재전송 요청을 의미한다.
  1. Go-Back-N ARQ
  • 누실된 부분부터 순차적으로 재전송한다.
  1. Selective-Repeat ARQ
  • 누실된 부분만 재전송한다.
  • 별도의 순서 보장 처리를 해주어야한다.

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

UDP의 오류 검출 방법은 어떻게 하나요?

checksum 방식을 사용합니다.
체크섬을 구하는 방법은 송신자가 보내는 데이터들의 합에서 오버플로우 되는 캐리를 다시 더한 뒤 1의 보수를 취합니다.
수신자는 체크섬과 받은 데이터를 더했을 때 모든 비트가 1이 나오는지 검사합니다.
만약 모든 비트가 1이 아니라면 오류가 발생했음을 검출할 수 있습니다.

하지만 단순히 합을 확인하기 때문에 정확한 오류 검출 방법이라고 볼 수는 없습니다.

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

세션과 쿠키의 차이가 무엇인가요?
쿠키가 사용되는 경우는?
세션의 단점은?

서버와 클라이언트와의 연결 정보를 서버에서 저장 및 관리하는 것을 세션,
클라이언트의 웹 브라우저에 저장하는 것을 쿠키라고 합니다.

쿠키는 웹 브라우저에 키와 값 형태로 저장되며, 웹 사이트에서 로그인 정보와 쇼핑몰의 장바구니 등이 그 예입니다.

세션의 경우, 서버에 값이 저장되므로 보안 면의 장점은 있으나, 접속자가 많은 경우 과부하가 올 수 있습니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

공개키 암호화 방식만 사용하지 않고 대칭키 암호화 방식도 사용하는 이유는 무엇인가요?

비공개키 (대칭키) 암호화 방식은 생성비용이 저렴하고 컴퓨터 성능을 많이 사용하지 않습니다.
하지만 공개키 암호화 방식이 사용하는 알고리즘인 RSA 알고리즘이 컴퓨터의 성능을 많이 사용하기 때문에 공개키 방식과 대칭키 암호화 방식을 같이 사용합니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

로피

URL과 URI의 차이는 무엇인가요?

URI는 인터넷에 있는 자원의 주소를 말하며 하위 개념에 URL, URN이 존재합니다.
URL은 인터넷에서 자원의 위치를 알 수 있는 규약을 말합니다.

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

RESTful 하다는 것은 어떤 것을 의미하나요?

  • REST 규칙을 지키며 API를 제공하는 서비스
  1. 자원에 대한 행위는 HTTP 메서드로 나타내며, HTTP 메서드나 행위에 대한 표현이 URI에 들어가면 안된다.
  2. HTTP 메서드는 명시적이어야 하며, 요청하려는 목적에 맞게 사용해야 한다.
  3. URI 경로는 슬래시로 계층 관계를 표현하며, URI 마지막에 슬래시가 들어가면 안된다.
  4. URI 경로에는 언더바를 사용하면 안되고 소문자 사용을 지향한다.

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

GET과 POST의 차이에 대해 설명해주세요.

두 메서드 모두 HTTP 메서드입니다.

GET은 데이터를 받기 위해 사용되며 URL에 자원의 정보가 모두 드러나기 때문에 보안에 취약합니다.
POST는 데이터를 생성하기 위해 사용되며 바디에 데이터의 정보를 넣어 보내기 때문에 GET보다 안전합니다.

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.

로그인 정보가 서버에 저장되는 것이 세션 기반 인증이고,
클라이언트의 웹 브라우저에 저장되는 것이 토큰 기반 인증입니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

JWT 토큰에 대해 설명해주세요.

Json Web Token으로 우리가 보통 로그인을 구현하게 될 때 주로 사용되는 방식입니다.
Json 객체에 인증에 필요한 정보들을 담은 후 비밀키로 서명한 토큰으로, 인터넷 표준 인증 방식입니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

로피

인터넷이 무엇인가요?

인터넷은 전 세계적으로 컴퓨터 네트워크를 연결하는 대규모 네트워크의 집합체입니다. 이는 수많은 컴퓨터, 서버, 기기, 라우터, 케이블 등으로 구성되어 있으며, 이들이 정보를 주고 받을 수 있는 하나의 거대한 통신 인프라를 형성합니다.

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

UDP를 쓰는 경우는?

UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)란?

  • TCP와 마찬가지로 전송 계층에 해당하는 네트워크 프로토콜이다.
  • 송신부와 수신부 간 연결을 지원하지 않고 데이터그램 형태의 통신을 지원한다.
  • 3-way 핸드셰이킹 같은 과정 없이 패킷을 바로 송수신한다.
  • 신뢰성이 낮을 수 있지만 속도가 빠르다는 장점이 있다.
  • 단독으로 UDP만 사용하는곳은 없다. UDP를 사용하는 곳은 TCP도 사용할 수 있다.
  • 송수신이 매우빠르며, 제공되는 기능 및 규약이 많지 않기때문에 그만큼 커스텀 또한 용이하다.

UDP 사용 예

  • 인터넷 스트리밍 서비스
  • 학교, 회사, 군사지역과 같은 소규모 네트워크 그룹
  • 게임 및 인터넷 전화 등이 있다

@krrong
Copy link
Collaborator Author

krrong commented Nov 29, 2023

HTTP Keep Alive와 TCP Keep Alive를 설명해 보세요.

두 방법 모두 클라이언트와 서버 간 연결을 유지하기 위한 방법이며 불필요한 연결과 해제의 반복을 줄일 수 있습니다.

HTTP Keep Alive는 HTTP 프로토콜의 연결을 정해진 시간 동안 유지하는 방식으로 정해진 시간이 끝나면 연결을 해제합니다.

TCP Keep Alive는 3-way 핸드셰이킹으로 연결된 세션을 계속 유지하기 위한 방식이며 일정 시간 동안 패킷 교환이 없으면 패킷을 던져 유지 여부를 확인합니다.

다른 계층에서 이뤄지고, 연결 유지 방식이 다릅니다.

@sujin9
Copy link
Collaborator

sujin9 commented Nov 29, 2023

HTTPS에서 사용하는 암호화 방식을 설명해 보세요.

데이터를 송신할 때, 응용 계층에서 보안 계층으로 데이터를 보내면 데이터를 암호화하여 전송 계층으로 전달하고,
데이터를 수신할 때, 전송 계층에서 보낸 데이터를 보안 계층에서 복호화하여 응용 계층으로 전달합니다.

위의 데이터 암호화/복호화 과정에서, SSL/TLS는 대칭 키 암호화 방식과 공개 키 암호화 방식을 사용합니다.
대칭 키 암호화 방식은, 암호화와 복호화 모두 대칭 키를 이용하는 방식이며, 송신자가 다르면 이용하는 키도 다릅니다.
공개 키 암호화 방식은, 암호화할 때는 공개 키, 복호화할 때는 비밀 키를 이용하는 방식이며, 송신자가 달라도 공개 키는 동일합니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

REST의 장단점을 설명해 보세요.

장점

  • 일관된 인터페이스: 자원의 나타내는 URI를 HTTP 메서드로 조작하는 일관된 인터페이스를 사용합니다.
  • 클라이언트-서버 구조: 클라이언트와 서버 간에 요청-응답의 독립적인 구조를 갖습니다. 클라이언트는 서버에 요청을 보내고 응답을 대기합니다. 서버는 자원을 가지고 있으며 클라이언트의 요청에 응답합니다.
  • 무상태성: 서버에서는 클라이언트의 요청을 저장하거나 관리하지 않는다. 서버는 클라이언트의 요청에 대한 처리와 응답만 합니다.
  • 캐싱 가능: HTTP 표준을 사용하므로 클라이언트는 이전에 서버로부터 받은 응답을 저장 및 재사용하는 캐싱을 할 수 있습니다.
  • 자체 표현 구조: REST API는 자원, 행위, 표현으로 구성되어 REST API 메시지를 보고 어떤 요청을 하는지 알 수 있습니다.
  • 계층형 구조: REST 서버는 다중 계층으로 구성도리 수 있어서 보안, 암호화와 같은 계층을 추가해 서버에 대한 기능을 유연하게 확장할 수 있습니다.

이와 같은 장점과 더불어 HTTP를 기반으로 하기 때문에 별도의 인프라를 구축할 필요가 없습니다.

단점

HTTP 메서드를 사용해 자원에 대한 연산을 처리하므로 동작이 한정적이라는 단점이 있습니다.

@no1msh
Copy link
Collaborator

no1msh commented Nov 29, 2023

로피

GET에 바디를 넣어서 보내면 나타날 결과를 설명해 보세요.

GET은 바디가 필요하지 않은 메서드지만 GET에 바디를 넣어서 올 경우 첫 번째, GET에 대한 요청이 왔을 때 바디를 무시하고 자원에 대한 데이터를 Read 할 수 있습니다. 두 번째로 GET에 바디를 넣어 요청을 보냈을 때 예외 처리를 할 수 있습니다. 마지막으로 바디가 있으면 POST와 동일하게 처리하는 경우가 있을 수 있습니다. 이런 경우에는 Read가 아니라 Create하게 처리할 것 같습니다.

@s9hn
Copy link
Member

s9hn commented Nov 29, 2023

POST와 PUT의 차이점을 설명해 보세요.

POST는 데이터를 생성할 때 사용하며, PUT은 데이터를 갱신할 때 사용한다.
집 지을 때 vs 리모델링 할 때

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants