![[Network] TCP/IP 흐름 제어 및 혼잡 제어](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEWOmD%2FbtsA3TqSxFF%2Fkkx8Vj9DCNkwwr400YuYK0%2Fimg.png)
[Network] TCP/IP 흐름 제어 및 혼잡 제어Computer Science/Network2023. 11. 28. 13:46
Table of Contents
📌 흐름 제어 (Flow Control)
✅ 흐름 제어
- 수신 측 데이터 처리 속도 > 송신 측 데이터 처리 속도
- 상관 없음
- 수신 측 데이터 처리 속도 < 송신 측 데이터 처리 속도
- 수신 측에서 제한된 저장 용량을 초과한 이후 도착하는 패킷은 손실될 수 있다.
- 손실 시 불필요한 추가 패킷 전송 발생
- 수신 측에서 제한된 저장 용량을 초과한 이후 도착하는 패킷은 손실될 수 있다.
- 흐름제어는 위 문제 처럼, 송신 측과 수신 측의 TCP 버퍼 크기 차이로 인해 생기는 데이터 처리 속도 차이를 해결하기 위한 기법
- TCP 버퍼 : 송신 측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 전송하고, 수신 측은 도착한 TCP 세그먼트를 애플리케이션이 읽을 때까지 버퍼에 보관한다.
- 이러한 위험을 해결하기 위해 송신 측의 데이터 전송량을 수신측에 따라 조절해야 한다.
✅ 흐름 제어 기법 1 : Stop and Wait
- 전송한 패킷에 대해 확인 응답(ACK)를 받게 되면 다음 패킷을 전송하는 방식
- 일일이 패킷을 하나씩 보내기 때문에 비효율적이다.
✅ 흐름 제어 기법 2 : Sliding Window
- 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 패킷을 전송할 수 있게 한다.
- 데이터의 흐름을 동적으로 조절하는 방식이다.
- 윈도우 : 메모리 버퍼의 일정 영역. 모든 TCP/IP를 사용하는 호스트들은 송신과 수신을 위한 2개의 Window를 가지고, 데이터를 보내기 전에 수신 측과 송신 측이 3 way handshaking을 통해 각 window size를 맞도록 조절한다.
- 동작 방식 : 윈도우에 포함되는 모든 패킷 전송 -> 패킷 전달이 확인되면(수신 측에서 확인 응답(ACK)를 다시 보내오면) 윈도우를 옆으로 옮겨 다음 패킷을 전송
- 송신 측은 일정 시간동안 수신측으로부터 확인 응답(ACK)을 받지 못하면 패킷을 재전송한다.
- 그런데 사실 패킷이 손실된 것이 아니라, 수신측 버퍼에 공간이 없어서 못받고 있는 것이였다면 ??
- 이를 해결하기 위해 송신 측은 확인 응답(ACK)를 보내면서 남은 버퍼의 크기(윈도우 크기)도 함께 첨부하여 전송하여 수신측이 상황을 잘 파악할 수 있도록 한다.
- 그런데 사실 패킷이 손실된 것이 아니라, 수신측 버퍼에 공간이 없어서 못받고 있는 것이였다면 ??
📌 혼잡 제어
✅ 혼잡 제어
- 데이터의 양이 라우터가 처리 가능한 양을 넘어설 때, 송신 측에서는 처리 못한 데이터를 손실 데이터로 간주하고, 계속 재전송하게 된다.
- 이는 네트워크를 혼잡하게 한다.
- *네트워크 내 혼잡한 상황을 해결하기 위해, 송신 측의 전송속도를 적절히 조절하는데, 이를 혼잡 제어 라고 한다. *
- 이는 네트워크를 혼잡하게 한다.
✅ 혼잡 제어 기법 1 : AIMD (Additive Increase/Multicative Decrease)
- 처음 패킷을 하나 보내고 나서 문제가 없이 도착하면 윈도우의 크기를 1씩 증가시키면서 전송한다.
- 전송에 실패했다면 윈도우의 크기를 반으로 줄인다.
- 단점 : 윈도우 크기가 1씩만 증가하기에, 적절한 크기, 속도에 도달하여 통신하기 까지 너무 오래걸린다.
✅ 혼잡 제어 기법 2 : Slow Start (느린 시작)
- 윈도우의 크기를 1, 2, 4, 8 .. 의 형식으로 증가시키다가, 혼잡이 감지되면 윈도우의 크기를 1로 바꾼다.
- 처음엔 느려도, 나중엔 매우 증가폭이 커서 점점 빨라진다.
✅ 혼잡 제어 기법 3 : Fast Retransmit (빠른 재전송)
- 수신 측에서 세그먼트로 분할된 내용들이 올바른 순서대로 도착하지 않는 경우가 있을 수 있다.
- 수신 측에서 순서대로 잘 도착한 마지막 패킷의 다음 순번을 ACK (확인 응답) 패킷에 실어서 보낸다.
- 이 패킷을 같은 것을 3개 받게 된다면, 순서에 문제가 생겼다고 판단, 재전송이 이루어진다.
- 수신 측에서 순서대로 잘 도착한 마지막 패킷의 다음 순번을 ACK (확인 응답) 패킷에 실어서 보낸다.
- 송신 측에서 기존에 설정한 타임 아웃 시간보다 빠르게 문제를 파악할 수 있어서 빠른 문제 해결이 가능하다.
✅ 혼잡 제어 기법 4 : Fast Recovery (빠른 회복)
- 혼잡 상태가 될 때, 윈도우 크기를 1로 줄이는 것이 아니라, 반으로 줄인 후, 그 이후부터는 1씩 증가시킨다.
- 한번 혼잡 상태를 겪고 나면, 그 다음부터는 AIMD 방식으로 동작하게 된다.
✅ 혼잡 제어 단어 정리 1 : Timeout
- 송신 측에서 보낸 데이터가 유실되었거나, 수신 측이 응답으로 보낸 ACK 패킷이 유실된 경우
✅ 혼잡 제어 단어 정리 2 : 3 ACK Duplicate
- 위의 Fast Retransmit (빠른 재전송) 기법에서 나온 중복 ACK 3개. 해당 패킷에는 다음 순번이 적혀있다.
- 이 3개의 중복 ACK가 도착하면 송신 측에서 순서가 잘못되었구나 라고 느낀다.
✅ 혼잡 제어 단어 정리 3 : Slow Start 임계점 (ssthresh)
- Threshold : 임계점
- 이 임계점 까지만 Slow Start 기법을 사용하겠다는 뜻이다.
- 이 임계점이 넘어가게 되면, AIMD 기법을 사용하게 된다.
✅ 혼잡 제어 정책
- 모든 혼잡 제어 정책들은 공통적으로 혼잡이 발생하면 윈도우 크기를 줄이거나, 증가시키지 않는 것으로 혼잡을 회피한다.
- 실제 혼잡 제어 정책들은 위에서 설명한 혼잡 제어 기법들을 섞어서 활용한다
✅ 흐름 제어 vs 혼잡 제어
- 흐름 제어 : 송수신측 사이의 패킷 수 제어
- 혼잡 제어 : 네트워크 내 패킷 수 조절
📚 출처
- https://gyoogle.dev/blog/computer-science/network/%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%20&%20%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4.html
- https://musclebear.tistory.com/2
- https://jddng.tistory.com/191
- https://steady-coding.tistory.com/507
'Computer Science > Network' 카테고리의 다른 글
[Network] 양방향 암호화 방식 (대칭키 / 비대칭키) (0) | 2023.12.15 |
---|---|
[Network] 단방향 암호화 방식(Hash, MAC) (0) | 2023.12.14 |
[Network] TCP 3, 4 way handshake (0) | 2023.11.28 |
[Network] TCP vs UDP (0) | 2023.11.28 |
[Network] OSI 7 계층과 TC/ICP 4 계층 (1) | 2023.11.28 |
@Seyun. :: 개발할 결심
개발자가 되고 싶어요.