TCP(Transmission Control Protocol)
는 인터넷에서 데이터를 전송하는 주요 프로토콜 중 하나IP와 함께
TCP/IP
라고 불린다.특징 중 하나로 신뢰성을 보장한다.
데이터 패킷에
순서 번호(Sequence Numnber)
를 부여하여
수신자가 패킷을 올바른 순서대로재조립
할 수 있도록한다.만약 순서대로 도착하지 않는다면
누락된 패킷이 도착할 때 까지 대기
하고
그 후에 패킷을 순서대로 재조립
하여 애플리케이션에 전달한다.
체크섬(Checksum)
을 이용하여데이터의 오류를 검출
한다.
체크섬
은 송신자에서 계산되어 패킷 헤더에 포함되어 전송되며
수신자는 체크섬을 다시 계산하여 원래의 체크섬과 비교한다.만약 두
체크섬
이 일치하지 않으면손상
되었음을 의미하고
수신자는 송신자에게 해당 패킷을다시 요청
한다.
저 방법 뿐만이 아니라 체크섬 검증 방식에는 여러가지가 있다.
[네트워크] checksum 생성 및 검증
송신측에서 1개의 프레임을 송신하고,
수신측에서 수신된 프레임의 에러 유무 판단에 따라
ACK or NAK(Negative Acknowledgement)를 보내는 방식.
식별을 위해 데이터 프레임과 ACK 프레임은 각각 0,1 을 번갈아가면 부여한다.
수신측이 데이터를 받지 못했을 경우 NAK 을 보내고
NAK을 보낸 송신측은 데이터를 재전송한다.
만약 데이터나, ACK이 분실됐을 경우, 타임아웃이 발생하게 되는데
이때 송신측은 데이터를 재전송한다.
전송된 프레임이 손상되거나 분실된 경우 또는 ACK 이 손실되어 TIME_OUT이 발생한 경우
확인된 마지막 프레임 이후로 모든 프레임을 재전송한다.
슬라이딩 윈도우는 연속적인 프레임 전송기법으로
전송 측은 전송된 프레임의 복사본을 가지고 있어야하며,
ACK과 NAK 모두 각각 구별해야한다.
- ACK : 다음 프레임을 전송하라는 의미
- NAK : 손상된 프레임 자체 번호를 가지고 있다.
수신측으로 0~5의 데이터를 보냈고 송신 도중 ACK 을 받는다.
ACK 을 받은 송신 측은 윈도우를 이동해가며 전송을 지속한다.만약 2에서 이상을 감지하고 NAK2를 송신측으로 보내면
2 부터 다시 재전송한다.
수신측에서 데이터 1을 받고 다음에 데이터 3을 받은 경우 ,
데이터 2를 받지 못했으므로
수신측에서는 데이터 3예상한 데이터가 아닌 것
을 폐기하고
데이터 2를 받지 못했다는NAK2
를 보낸다.송신측은 데이터 2번부터 다시 재전송 한다.
전송 측은 분실된 ACK을 다루기 위해 타이머를 가지고 있다.
전송 측에서는 이 타이머 동안 수신 측으로 ACK 데이터를 받지 못했을 경우
마지막 ACK된 데이터부터 재전송한다.
Go-Back-N ARQ 의 단점을 보완한 방식이다.
손상되거나 손실된 프레임만 재전송한다.
따라서 데이터 재정렬을 수행해야하며 별도의 버퍼를 필요로 하다.
수신 측에서는 이 버퍼로 데이터를 정렬을 한다.
TCP
는 데이터를 보내는 속도를 제어하여 수신자의 버퍼가 넘치지 않도록 한다.이를 위해 수신자는 수신 가능한 양을 송신자에게 알리며
송신자는 이 정보를 바탕으로 데이터를 보내는 속도를 조절한다.
매번 전송한 패킷에 대한 확인 응밥을 받아야만 그 다음 패킷을 전송하는 기법
window size
: 7수신 측에서 설정한 윈도우 크기만큼 송신측에서 패킷 각각에 대한 확인 응답없이 세그먼트를 전송하고
데이터의 흐름을 동적으로 조절하는 기법최초 윈도우의 크기는
3 way handshaking
과정을 통해 설정된다.
이정보는TCP header
에 저장되고 관리된다.윈도우에 포함된 만큼은 수신 측의 응답 없이도 보낼 수 있지만, 그 이상은 보낼 수 없다.
그 이상의 데이터 패킷을 보내기 위해서는 수신의 응답이 확인이 되어
window
의 크기가 갱신되어야한다.
네트워크의 혼잡 상태를 관리하여 패킷의 손실을 최소화한다.
패킷이 손실되면 네트워크가 혼잡하다고 가정하고 데이터를 보내는 속도를 줄인다.
이후 네트워크 상태가 개선되면 다시 속도를 늘리는 매커니즘을 사용한다.
합 증가 / 곱 감소 알고리즘
합 증가
처음에 패킷 하나를 보내는 것으로 시작하여 전송한 패킷이 문제 없이 도착한다면
window size
를 1씩 증가시킨다.
곱 감소
만약 패킷 전송에 실패하거나
TIME_OUT
이 발생하면
window size
를 절반으로 감소시킨다.
여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만
시간이 흐르면 평형 상태로 수렴하게 되는 특징이 있다.
단점
- 초기 네트워크의 높은 대역폭을 사용하지 못한다.
- 네트워크가 혼잡해지는 상황을 미리 감지하지 못하여 혼잡해지고 나서야 대역폭을 줄이는 문제점이 있다.
- 초기에 전송 속도를 올리는데 시간이 오래걸린다.
AIMD
는 초기에 전송 속도를 올리는데 시간이 오래 걸린다는 단점이 있다.
Slow Start
는AIMD
와 마찬가지로 패킷을 하나씩 보내는 것부터 시작한다.
송신은ACK
을 받을 때마다window size
를1씩 증가
시킨다.즉, 한
window
를 다보내면window size
는2배
가 된다.
= RTT(Round Trip Time) 마다
window size는 2배가 된다.
이때
RTT 당 window size 그래프
는지수함수 그래프 모양
이 된다.
window size
가임계값에 도달
하면Congestion Avoidance
방식으로 전환된다.
Slow Start
이후window size
가 임계 값에 도달하면 발생한다.이 때부터
RTT 당 window size는 1 씩 증가
한다.
만약 패킷 손실이 감지되면
임계값을 현재 window size의 절반으로 감소
시키고
window size
를1
로 재설정한다.이후
Slow Start
부터 재시작한다.
혼잡 상태(패킷 손실)가 발생하면
Congetsion Avoidance
때 처럼
window size 를 1 로 재설정하는 것이 아닌
window size 의 절반
으로 줄이고AIMD
방식으로 동작시킨다.
먼저 도착해야할 패킷(2)
이 도착하지 않고다음 패킷(3)이 먼저 도착한 경우
에도ACK
을 보낸다.
단, 이ACK
에원래 도착해야할 패킷 번호(2)
를 담아서 보낸다.따라서 이후
4
,5
,.. 가 도착하더라도 송신측으로 보내는 패킷에는2
가 연속적으로 가게된다.수신 측은
중복된 패킷번호 3개를 연속적
으로 받으면 그 패킷을재전송
한다.이러한 상황을
혼잡 상태
로 인지하고window size
를 절반으로 줄인다.