1 분 소요

TCP는 신뢰성을 보장해 주는 프로토콜이다. 바꾸어 말하면, 패킷이 손실 없이, 순서가 바뀌는 일 없이 전달되도록 하는 프로토콜이 바로 TCP라 할 수 있다. 흐름제어와 혼잡제어는 이 신뢰성을 보장해 주는 방법이라고 할 수 있다.

흐름제어(Flow Control)

만약 송신측의 전송량이 수신측의 처리량보다 많다면 어떤 일이 벌어질까? 당장 처리하지 못하는 데이터들이 수신측의 큐(queue)에 쌓이다가, 결국 큐의 저장 용량이 꽉 차게 되면 전송된 패킷이 손실될 것이다. 이런 상황이 발생할 경우 손실된 데이터를 재전송하는 데 추가적인 자원이 소모할 수 밖에 없다. 흐름 제어는 이와 같은 수신측, 그리고 송신측의 데이터 처리 속도 차이에 의한 문제를 해결하기 위한 방법이다.

흐름 제어에는 크게 두 가지 기법이 있다.

정지-대기(Stop-and-Wait)

image

패킷 하나를 보내고, 확인 응답이 오면 다음 패킷을, Time out 될 때까지 확인 응답이 오지 않으면 같은 패킷을 전송하는 방식이다. 간단하지만, 속도가 느리고 비효율적이다.

슬라이딩 윈도우(Sliding Window)

슬라이딩 윈도우 기법은, 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법이다.

image

위의 사진에서 볼 수 있듯이, 슬라이딩 윈도우는 ACK를 받았을 때만 오른쪽으로 경계가 확장되며, 전송은 되었지만 아직 확인 응답(ACK)를 받지 못한 프레임이 일정 숫자 이하로 유지되도록 한다.

혼잡제어(Congestion Control)

송신 측의 데이터는 네트워크를 통해 전달된다. 그런데 만약 한 라우터에 데이터가 과도하게 몰리는 상황이 발생하면 어떻게 될까? 라우터는 자신에게 온 데이터를 모두 처리할 수 없게 되고, 처리하지 못한 데이터가 생기니 송신측은 데이터를 재전송하게 된다. 이 악순환이 반복되다 보면, 결국 오버플로우, 혹은 데이터 손실이 발생한다. 이런 위험을 줄이기 위해서 송신측에서 보내는 데이터의 전송 속도를 조절해야 하는데, 이를 혼잡 제어라 한다.

AIMD(Addtive Increase Multicative Decrease)

###

오류 제어

참고:

  • https://rok93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCP-%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4
  • https://ooeunz.tistory.com/91

댓글남기기