1️⃣ TCP에 대해 설명해주세요.
TCP는 데이터의 정확한 전달을 중시하는 프로토콜입니다. 데이터 전송에 신뢰성을 더하기 위해서 데이터를 세그먼트 단위로 분할하고, 전송 속도를 조절하며, 데이터가 제대로 전달되지 않았을 경우 재전송을 합니다.
TCP는 웹이나 이메일과 같이 데이터가 정확하게 전달되어야 하는 통신에서 사용됩니다.
통신을 맺고 끊는 과정에서 클라이언트와 서버간 확인 절차를 거치는데, 이러한 특징으로 연결지향 프로토콜이라고 합니다.
2️⃣ 3 way handshake에 대해 설명해주세요.
TCP통신은 커넥션을 맺는 단계는 3단계로 진행되며 이를 3방향 핸드셰이크 라고 부릅니다.
커넥션이 맺어지면 데이터를 전송할 수 있는 상태가 됩니다.
- 클라이언트는 서버에 접속요청(syn)을 하고 클라이언트는 sync_sent 상태가 됨
- 서버는 요청수락(syn+ack)하고 서버는 sync_received 상태가 됨
- 클라이언트는 서버에 수락확인(ack)을 보내고 서버는 established 상태가됨
3️⃣ 4 way handshake에 대해 설명해주세요.
TCP소켓 연결을 종료하는 과정을 4 way hand shake 라고 합니다.
- 클라이언트가 서버에 연결을 종료 (fin)플래그를 전송, 클라이언트는 종료신호를 기다리는 상태 fin_wait1
- 서버는 일단 확인(ack) 했다는 메시지를 보내고 자신의 통신이 끝날때 까지 기다리게함. 서버는 close wait 상태 클라이언트는 종료신호를 기다리겠다는 fin_wait2 상태 전환
- 서버가 통신이 끝나면 이제 종료해도된다는 (fin) 플래그를 클라이언트에 전달. 서버는 last_ack 상태로 전환, 클라이언트는 time_wait 상태 전환
- 클라이언트는 연결종료를 확인했다는 응답(ack) 플래그를 보냄. 서버 상태 closed
4️⃣ Congestion control에 대해 설명해주세요.
네트워크에서 데이터를 전송할 때, 너무 많은 데이터를 너무 빠르게 보내서 네트워크가 감당하지 못하는 혼잡 상황을 방지하거나 해소하는 기법입니다. 혼잡 상황이 발생하면 패킷의 손실이나 지연이 증가하고, 네트워크의 성능이 저하됩니다. 따라서 혼잡 상황을 감지하고 적절한 조치를 취하는 것이 중요합니다.
TCP는 혼잡 제어를 위해 여러 가지 알고리즘을 사용합니다.
가장 기본적인 알고리즘은 AIMD(Additive Increase Multiplicative Decrease)입니다.
이 알고리즘은 congestion window라는 변수를 사용하여 데이터의 전송량을 조절합니다. congestion window는 송신자가 한 번에 보낼 수 있는 패킷의 최대 개수를 나타냅니다. congestion window는 다음과 같은 방식으로 변화합니다.
- 혼잡이 발생하지 않으면, 매 RTT마다 congestion window를 1 MSS씩 증가시킵니다. 이를 가법적 증가라고 합니다.
- 혼잡이 발생하면, congestion window를 절반으로 감소시킵니다. 이를 승법적 감소라고 합니다.
AIMD 알고리즘은 congestion window의 크기가 톱니 모양으로 변화하게 됩니다. 이렇게 하면 네트워크의 용량에 근접하면서도 혼잡을 피할 수 있습니다.
TCP는 AIMD 외에도 다른 알고리즘들을 사용합니다. 예를 들어, slow start는 TCP 연결이 시작될 때 congestion window의 초기값을 1 MSS로 설정하고, 매 RTT마다 2배씩 증가시키는 알고리즘입니다. 이렇게 하면 처음에는 빠르게 데이터를 보내고, 점차적으로 속도를 조절할 수 있습니다.
TCP는 또한 패킷의 손실을 감지하는 방법에 따라 다른 반응을 보입니다. 패킷의 손실은 타임아웃이나 중복 ACK으로 인해 발생할 수 있습니다.
타임아웃은 패킷이 전혀 도착하지 않았다는 것을 의미하므로, 심각한 혼잡 상황으로 간주합니다. 따라서 TCP는 타임아웃이 발생하면 congestion window를 1 MSS로 줄이고, slow start로 다시 시작합니다.
중복 ACK은 일부 패킷만 도착하지 않았다는 것을 의미하므로, 약간의 혼잡 상황으로 간주합니다. 따라서 TCP는 중복 ACK이 발생하면 congestion window를 절반으로 줄이고, 선형적으로 증가시킵니다.
5️⃣ Flow control에 대해 설명해주세요.
수신측이 송신측보다 데이터 처리 속도가 빠르면 문제없지만, 송신측의 속도가 빠를 경우 문제가 생기게 됩니다.
수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실 될 수 있으며, 만약 손실 된다면 불필요하게 응답과 데이터 전송이 송/수신 측 간에 빈번이 발생한다.
이러한 위험을 줄이기 위해 송신 측의 데이터 전송량을 수신측에 따라 조절하는 것을 Flow control이라고 합니다.
- Stop and Wait : 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법 -> 매우 간단하지만 비효율적
- Sliding Window (Go Back N ARQ) : Stop and Wait 방법의 비효율성을 개선시킨 방법
수신측에서 설정한 윈도우 크기 만큼 송신측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절한다!
이 때 윈도우란 송신, 수신 스테이션 양쪽에서 만들어진 버퍼를 말하고, 이 윈도우의 크기는 [가장 최근 ACK로 응답한 프레임 수] - [이전에 ACK 프레임을 보낸 프레임 수] 이다.
TCP로 통신하는 송신측, 수신측은 각각의 윈도우를 유지한다.
송신측은 송신 윈도우를 유지해 송신 윈도우 크기만큼 한번에 데이터를 보낼 수 잇고, 수신측도 수신 윈도우를 유지하며 수신 윈도우 크기만큼 데이터를 한번에 받을 수 있다.
이 때 양측 윈도우의 크기는 지난 포스팅에서 다룬 TCP 헤더의 Window Size 필드에 의해 설정되게 된다.
'CS' 카테고리의 다른 글
[CS 면접 준비] 컴퓨터 네트워크 (5) (0) | 2023.05.02 |
---|---|
[CS 면접 준비] 컴퓨터 네트워크 (4) (0) | 2023.04.28 |
[CS 면접 준비] 컴퓨터 네트워크 (2) (0) | 2023.04.17 |
[CS 면접 준비] 컴퓨터 네트워크 (0) | 2023.04.14 |
gdb로 register와 memory 변화 확인하기 (0) | 2022.09.05 |