목차
📌 신뢰적 데이터 전송의 원리
Q) 슬라이딩 윈도우가 뭘까요?
슬라이딩 윈도우
- 데이터 통신에서 사용되는 흐름 제어 기법 중 하나
- 송신자와 수신자가 각각 윈도우라는 버퍼를 가지고 있으며, 윈도우의 크기에 따라 한 번에 보낼 수 있는 패킷의 개수가 결정됨
- 윈도우의 크기를 동적으로 조절하면서 효율적인 패킷 전송을 가능하게 함
동작 과정
1) 송신자는 윈도우의 크기만큼 패킷을 전송하고, 각 패킷에 순서 번호를 부여합니다.
2) 수신자는 패킷을 받으면 순서 번호에 따라 자신의 윈도우에 저장하고, 가장 작은 순서 번호를 가진 패킷부터 상위 계층으로 전달합니다. 또한 송신자에게 ACK(acknowledgement) 메시지를 보내어 받은 패킷을 확인합니다.
3) 송신자는 ACK 메시지를 받으면 자신의 윈도우를 오른쪽으로 이동시키고, 새로운 패킷을 전송합니다. ACK 메시지가 오지 않은 패킷은 타이머를 설정하여 일정 시간이 지나면 재전송합니다.
4) 수신자는 자신의 윈도우를 왼쪽으로 이동시키면서 상위 계층으로 전달할 수 있는 패킷을 찾습니다. 만약 순서대로 받지 못한 패킷이 있으면 NAK(negative acknowledgement) 메시지를 보내어 재전송을 요청합니다.
장점
- 윈도우의 크기를 동적으로 조절하여 네트워크 상황에 맞게 효율적인 패킷 전송을 할 수 있음
- 순서 번호와 ACK/NAK 메시지를 통해 오류 제어와 흐름 제어를 동시에 수행할 수 있음
단점
- 윈도우의 크기가 너무 작으면 네트워크 대역폭을 충분히 활용하지 못하고, 너무 크면 네트워크 혼잡이 발생할 수 있음.
- 송신자와 수신자의 윈도우 크기가 일치하지 않으면 비효율적인 패킷 전송이 발생할 수 있음
Q) Go Back N에 대해 설명해주세요.
GBN(Go Back N) 프로토콜 :
Receiver 측에서 순서대로 받지 못한 패킷이 있다면 해당 패킷부터 다시 재전송 하는 방식
- Sender는 패킷2에 대한 ack2를 받지 못한 시점부터 패킷2 타임아웃되기 전까지의 Receiver의 ack를 무시한다.
- 즉, Receiver는 패킷3, 4, 5를 받았다 할지라도 이를 버리고, 직전에 성공한 패킷1에 대한 ack1을 보낸다. 그리고 Sender는 중복된 패킷이므로 ack1을 무시한다.
- 결국, 패킷2 타임아웃이 되면 Sender는 그동안 받지 못한 패킷부터 다시 순차적으로 보낸다.
→ 이러한 성질로 인해 GBN의 ACK은 cumulative ACK 이다.
특징
- Receiver는 패킷이 오지 않는 상황에서, 오지 않은 패킷의 직전 패킷에 대한 ACK을 다시 보낸다.
- Sender는 전송한 패킷 중, ACK되지 않은 가장 최신의 패킷에 대해 타이머를 계산한다.
- 구조가 간단하고 구현이 단순하며, 따로 패킷을 보관할 버퍼가 필요 없다.
Q) Selective Repeat에 대해 설명해주세요.
SR(Selective Repeat) 프로토콜 :
Receiver 측에서 받은 각각의 패킷들에 대해 ACK을 보내는 방식
- Sender가 보낸 패킷중 패킷2가 소실되었다. ACK 받지 못한 패킷2가 전송되는 순간에 타이머가 가동되고, 소실된 패킷의 타이머가 만료되면 해당 패킷만 재전송한다.
- 순서대로 올 경우 바로 상위 레이어로 deliver 하고, 순서대로 오지 않을 경우 나머지를 버퍼에 모아뒀다가 한번에 deliver 한다.
특징
- Receiver는 패킷이 오는 것에 상관 없이, 받은 패킷에 대한 ACK를 보낸다.
- Sender는 ACK 받지 못한 모든 패킷에 대해 타이머를 계산한다.
- 따로 받은 패킷을 보관할 버퍼가 필요하다.
📌 TCP
Q) TCP에 대해 설명해주세요.
TCP
전송 제어 프로토콜(Transmission Control Protocol)
L4(Transport Layer)의 연결 지향 프로토콜
특징
연결지향 - TCP 3 way handshake (가상 연결)
데이터 전달 보증
순서 보장
신뢰 가능한 프로토콜
현재는 대부분 TCP 사용
Q) 3 way handshake에 대해 설명해주세요.
TCP 3 way handshake
TCP/IP 프로토콜을 이용해서 통신하는 응용프로그램이, 데이터를 전송하기 전에 먼저 상대방 컴퓨터와 사전에 세션을 수립하는 과정
1) Client -> SYN -> Server
Client가 Server에 접속 요청 SYN 패킷을 보낸다. Client는 SYN을 보내고 SYN/ACK 응답을 기다린다
(Client의 SYN_SENT 상태)
2) Client <- SYN+ACK <- Server
Server는 SYN 요청을 받고 Client에게 요청을 수락한다는 ACK와 SYN 플래그가 설정된 패킷을 발송하고 다시 Client가 ACK 응답하기를 기다린다
(Server의 SYN_RECEIVED 상태)
3) Client -> ACK -> Server
Client는 Server에게 ACK을 보내고 이후부터는 연결이 이루어지고 데이터가 오가게 된다.
(Server의 ESTABLISHED 상태)
Q) 4 way handshake에 대해 설명해주세요.
TCP 3 way handshake
세션 종료를 위해 수행되는 절차
1) Client -> FIN -> Server
Client가 Server에게 연결을 종료하겠다는 FIN 플래그를 전송한다.
2) Client <- ACK <- Server
Server는 일단 확인했다는 ACK 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다.
3) Client <- FIN <- Server
Server가 통신이 끝났으면 연결이 종료되었다는 FIN 플래그를 전송한다.
4) Client -> ACK -> Server
Client는 확인했다는 ACK 메시지를 보낸다.
Q) Congestion control에 대해 설명해주세요.(혼잡제어)
혼잡 제어(Congestion control) :
네트워크 내의 패킷 수를 조절하여 네트워크의 오버플로(overflow)를 방지하는 기능
- 데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 초과된 데이터는 라우터가 처리하지 못한다.
- 이때, 송신 측에서는 라우터가 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하여 네트워크를 혼잡하게 한다.
- 이런 상황은 송신 측의 전송 속도를 적절히 조절하여 예방할 수 있는데, 이것을 혼잡 제어라고 한다.
해결 방법
- AIMD(Additive Increase / Multiplicative Decrease)
- 처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법
- 패킷 전송에 실패하거나 일정 시간을 넘으면 패킷의 보내는 속도를 절반으로 줄인다.(윈도우 크기를 반으로 줄인다)
- 공평한 방식으로, 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형상태로 수렴하게 되는 특징이 있다.
- 문제점은 초기에 네트워크의 높은 대역폭을 사용하지 못하여 오랜 시간이 걸리게 되고, 네트워크가 혼잡해지는 상황을 미리 감지하지 못한다. 즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식이다.
- Slow Start (느린 시작)
- AIMD 방식이 네트워크의 수용량 주변에서는 효율적으로 작동하지만, 처음에 전송 속도를 올리는데 시간이 오래 걸리는 단점이 존재했다.
- Slow Start 방식은 AIMD와 마찬가지로 패킷을 하나씩 보내면서 시작하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려준다. 즉, 한 주기가 지나면 window size가 2배로 된다.
- 전송속도는 AIMD에 반해 지수 함수 꼴로 증가한다. 대신에 혼잡 현상이 발생하면 window size를 1로 떨어뜨리게 된다.
- 처음에는 네트워크의 수용량을 예상할 수 있는 정보가 없지만, 한번 혼잡 현상이 발생하고 나면 네트워크의 수용량을 어느 정도 예상할 수 있다.
- 그러므로 혼잡 현상이 발생하였던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킨다.
- Fast Retransmit (빠른 재전송)
- 빠른 재전송은 TCP의 혼잡 조절에 추가된 정책이다.
- 패킷을 받는 쪽에서 먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보내게 된다.
- 단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보내게 되므로, 중간에 하나가 손실되게 되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 된다. 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송 해줄 수 있다.
- 중복된 순번의 패킷을 3개 받으면 재전송을 하게 된다. 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지하고 window size를 줄이게 된다.
- Fast Recovery (빠른 회복)
- 혼잡한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가시키는 방법이다. 이 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작하게 된다.
Q) TCP 빠른 재전송에 대해서 설명해주세요.
TCP 빠른 재전송
- 패킷을 받는 수신자 입장에서는 세그먼트로 분할된 내용들이 순서대로 도착하지 않는 경우가 생길 수 있다.
- 이런 상황이 발생했을 때 수신 측에서는 순서대로 잘 도착한 마지막 패킷의 다음 순번을 ACK 패킷에 실어서 보낸다.
- 그리고 이런 중복 ACK를 3개 받으면 재전송이 이루어진다.
- 송신 측은 자신이 설정한 타임 아웃 시간이 지나지 않았어도
바로 해당 패킷을 재전송할 수 있기 때문에 보다 빠른 재전송률을 유지할 수 있다.
Q) Flow control에 대해 설명해주세요.
흐름 제어(Flow control) :
데이터 처리 속도를 조절하여 송/수신 사이의 패킷 수를 제어하는 기능
- 수신 측이 송신 측보다 데이터 처리 속도가 빠르면 문제가 없지만, 송신 측의 속도가 빠를 경우 문제가 생긴다.
- 수신 측에서 제한된 저장 용량을 초과한 이후에 도착하는 패킷은 손실될 수 있으며, 만약 손실된다면 불필요한 추가 패킷 전송이 발생하게 된다.
- 흐름 제어는 위와 같이 송신 측과 수신 측의 TCP 버퍼 크기 차이로 인해 생기는 데이터 처리 속도 차이를 해결하기 위한 기법이다.
📌 참고자료
https://velog.io/@mu1616/TCPIP-%ED%98%BC%EC%9E%A1-%EC%A0%9C%EC%96%B4
'CS > NETWORK' 카테고리의 다른 글
[네트워크 스터디 5주차] 네트워크 더 알아보기 (0) | 2023.12.04 |
---|---|
[네트워크 스터디 4주차] 네트워크 레이어 / IP 프로토콜 (1) | 2023.11.28 |
[네트워크 스터디 2주차] HTTPS / DNS / UDP / 신뢰적 데이터 전송의 원리 (1) | 2023.11.14 |
[네트워크 스터디 1주차] 컴퓨터 네트워크와 네트워크 레이어 / HTTP 프로토콜 (1) | 2023.11.07 |
REST API (0) | 2023.06.01 |