신뢰적인 연결방식
reliable network를 보장
할 수 있도록 하는 프로토콜network congestion avoidance algorithm(NCAA)
을 사용송신측과 수신측의 데이터 처리 속도 차이를 해결
하기 위한 기법receiver가 packet을 지나치게 많이 받지 않도록 조절
하는 것receiver가 sender에게 현재 자신의 상태를 feedback
한다는 점송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결
하기 위한 기법flow control
의 핵심은 이 receiver buffer가 넘치지 않게 하는 것
임.RWND(Receive WiNDow) : receive buffer의 남은 공간을 홍보
함송신측의 속도가 빠를 경우 문제
가 생긴다.수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실
될 수 있으며, 만약 손실 된다면 불필요하게 응답과 데이터 전송이 송/수신 측 간에 빈번히 발생한다.송신 측의 데이터 전송량을 수신측에 따라 조절
해야한다.-> 받는 애가 데이터를 너무 빨리 받게 되면 용량이 초과돼서 데이터가 손실된다. 그래서 보내는 애가 전송량을 조절해야한다.
Stop and Wait
확인 응답
을 받아야만 그 다음 패킷을 전송
하는 방법수신측에서 설정한 윈도우 크기
만큼 송신측에서 확인응답없이 세그먼트를 전송
할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
목적 : 전송
은 되었지만, acked를 받지 못한 byte의 숫자를 파악
하기 위해 사용하는 protocol
LastByteSent - LastByteAcked <= ReceivedWindowAdvertised
(마지막에 보내진 바이트 - 마지막에 확인된 바이트 <= 남아있는 공간) == (현재 공중에 떠있는 패킷 수 <= sliding window)
동작방식 : 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
Window : TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 Window(송신용, 수신용)
를 가지고 있다. 호스트들은 실제 데이터를 보내기 전에 '3 way handshaking'
을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 된다.
세부구조
a. 송신 버퍼
200 이전의 바이트는 이미 전송되었고, 확인응답을 받은 상태
200 ~ 202 바이트는 전송되었으나 확인응답을 받지 못한 상태
203 ~ 211 바이트는 아직 전송이 되지 않은 상태
b. 수신 윈도우
c. 송신 윈도우
수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정
하게되면 흐름제어
가 가능하다.d. 송신 윈도우 이동
e. Selected Repeat
송신측의 데이터
는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달
된다. 만약 한 라우터에 데이터가 몰릴 경우
, 자신에게 온 데이터를 모두 처리할 수 없게 된다
. 이런 경우 호스트들은 또 다시 재전송
을 하게되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실
을 발생시키게 된다. 따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게
되는데, 이러한 작업을 혼잡제어
라고 한다.패킷의 수가 과도하게 증가
하는 현상을 혼잡
이라 하며, 혼잡 현상을 방지하거나 제거하는 기능을 혼잡제어라고 한다.=> 즉, 1. 한 라우터에 데이터가 몰릴 경우 2. 패킷 수가 너무 많이 증가할 경우에 혼잡제어가 필요!
흐름제어가 송신측과 수신측 사이의 전송속도
를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제
를 다루게 된다.뒷북
하나씩
보내고 이것이 문제없이 도착하면 window 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가
시켜가며 전송하는 방법 (cnt++
)실패
하거나 일정 시간을 넘으면
패킷의 보내는 속도를 절반으로 줄인다.
(실패 -> 1/2
)평형상태로 수렴
하게 되는 특징이 있다.오랜 시간
이 걸리게 되고 (1씩 증가하므로), 네트워크가 혼잡해지는 상황을 미리 감지하지 못한다
. 즉, 네트워크가 혼잡해지고 나서야 대역폭을 줄이는 방식
이다.패킷을 하나씩 보내면서 시작
하고, 패킷이 문제없이 도착하면 각각의 ACK 패킷마다 window size를 1씩 늘려준다
. 즉, 한 주기가 지나면 window size가 2배
로 된다. (x2
)지수 함수 꼴로 증가
한다. 대신에 혼잡 현상이 발생
하면 window size를 1
로 떨어뜨리게 된다. (실패 -> go to 1
)한번 혼잡 현상이 발생
하고 나면 네트워크의 수용량을 어느 정도 예상
할 수 있다.혼잡 현상이 발생하였던 window size의 절반까지는 이전처럼 지수 함수 꼴로 창 크기를 증가
시키고 그 이후부터는 완만하게 1씩 증가
시킨다.TCP의 혼잡 조절
에 추가된 정책이다.다음 패킷이 도착
한 경우에도 ACK 패킷
을 보내게 된다.중간에 하나가 손실
되게 되면 송신 측에서는 순번이 중복된 ACK 패킷
을 받게 된다. 이것을 감지하는 순간 문제가 되는 순번의 패킷을 재전송
해줄 수 있다.중복된 순번의 패킷을 3개 받으면 재전송
을 하게 된다. 약간 혼잡한 상황이 일어난 것이므로 혼잡을 감지
하고 window size를 줄이게 된다.
혼잡
한 상태가 되면 window size를 1로 줄이지 않고 반으로 줄이고 선형증가(1/2 -> y=x)
시키는 방법이다. 이 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식
으로 동작하게 된다.[출처]