해당 주제 관련 기술면접 질문 미리보기
Q1. 흐름제어와 혼잡 제어에 대해 설명해주세요.
Q2. 흐름제어기법 중 슬라이딩 윈도우 방식에 대해 설명해주세요.
네트워크 트래픽에 따른 효율적/신뢰적 송신을 위한 제어 알고리즘 적용
매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
ACK를 받기 전 까지는 윈도우 사이즈 만큼 데이터를 한번에 보내고, ACK가 올 수록
윈도우가 서서히 이동합니다. 이동하면서 그 안에 아직 안 보낸 데이터를 ACK 없이 보냅니다.
윈도우 사이즈는 초기 설정 값이 65535로 시작되며, 3way-handshake 과정에서
RTT(SYN과 SYN/ACK 사이의 시간)를 측정하여, 이를 기반으로 윈도우 사이즈를 재설정 합니다.
송신 제어를 위한 윈도우는 2개
최종 송신 윈도우 크기는 min(RWND, CWND)에 의해 결정됩니다. 보통 CWND가 더 작기 때문에, 최종 윈도우 크기는 주로 CWND에 의해 결정됩니다.
Congestion Window 초기값: 1MSS
MSS: 하나의 패킷에 들어갈 수 있는 최대 크기
MSS = MTU - (IP헤더길이) - (TCP헤더길이)
보통 MSS
는 1460 bytes입니다. 이는 MTU (1500 bytes) - IP 헤더(20 bytes) - TCP 헤더(20 bytes)
로 계산됩니다.
수십 년 동안 네트워크 성능 개선을 위해 AIMD 알고리즘이 사용되었습니다. AIMD는 네트워크 혼잡을 줄이기 위해 사용되는 기본적인 혼잡제어 알고리즘입니다. (큰 그림 이해가 중요)
Additive Increase: 성공적으로 패킷이 전송되면 CWND가 1씩 증가합니다.
Multiplicative Decrease: 패킷 전송 실패 시 CWND가 반으로 줄어듭니다.
AIMD의 느린 전송 속도를 개선하기 위해 Slow Start와 혼잡 회피 알고리즘이 사용됩니다.
최근에는 AIMD 보다 Slow Start + 혼잡 회피 를 합쳐서 쓰는 경우가 많다고 합니다.
Q1. 흐름제어와 혼잡 제어에 대해 설명해주세요.
흐름제어는 네트워크에서 송신 측이 수신 측이 처리할 수 있는 속도에 맞춰 데이터를 전송하도록 조절하는 기술입니다. 이를 통해 수신측이 자신의 버퍼 용량을 초과하지 않도록 합니다.
주요 흐름제어 기법으로는 Stop-and-Wait와 슬라이딩 윈도우가 있습니다.
Stop-and-Wait는 매번 패킷을 송신하고, 수신 측으로부터 확인 응답(ACK)을 받기 전까지는 다음
패킷을 송신하지 않는 방식입니다.
슬라이딩 윈도우는 이보다 발전된 기법으로, 여러 패킷을 연속적으로 송신할 수 있게 해줍니다.
혼잡 제어는 네트워크 전체가 과부하 상태에 빠지지 않도록 데이터를 전송하는 과정에서 혼잡을 관리하는 기술입니다. 혼잡 제어는 네트워크의 패킷 손실이나 지연을 방지하는 데 초점을 맞추고 있습니다.
주요 기법으로는 AIMD와 Slow Start와 Congestion Avoid가 있습니다.
AIMD는 데이터 전송이 성공할 때는 천천히 전송량을 증가시키고, 실패할 때는 급격히 줄이는 방식입니다.
Slow Start는 초기에는 낮은 전송 속도로 시작해서 전송이 성공할 때마다 빠르게 전송 속도를 증가시켜 혼잡을 완화합니다.
Congestion Avoidance는 Slow Start 이후 적용되며, 혼잡이 발생할 가능성이 보일 시, 전송 속도를
서서시 증가시켜 안정적인 데이터 전송을 유지합니다.
Q2. 흐름제어기법 중 슬라이딩 윈도우 방식에 대해 설명해주세요.
슬라이딩 윈도우 방식은 송신 측이 여러 패킷을 한꺼번에 전송할 수 있도록 하는 흐름 제어 기법입니다.
송신 측은 미리 정해진 윈도우 크기만큼 데이터를 연속적으로 보내고, 수신 측에서 확인 응답(ACK)을 받기 전에도 데이터를 계속 전송할 수 있습니다. 윈도우는 수신 측에서 데이터가 제대로 도착했다는 응답을 받을 때마다 앞으로 이동하며, 새로운 데이터를 계속해서 보내는 구조입니다.
ref.
https://github.com/Seongwon97/tech-interview/blob/main/Q&A/Network_Q&A.md
gyoole/tech-interview-for-developer/Computer Science/Network
/TCP (흐름제어혼잡제어)