2023. 02.05 13:00 복습
TCP
- TCP(Transmission Control Protocol)는 트랜스포트 레이어의 프로토콜이다.
- 핸드셰이크를 먼저 진행하므로 연결지향형이며 end 호스트 간 논리적인 연결을 가지게 한다. (1대 1, 점대점)
- 신뢰성 있으며 순서에 맞춰 메시지를 전달한다. 기본적인 동작 방식은 파이프라이닝이다.
- TCP 연결은 full-duplex 서비스, 즉 양방향 서비스를 제공한다. TCP 성능저하의 원인은 주로 혼잡 제어다.
Three-way-handshake
또한 TCP의 연결 설정 절차는 흔히 "세 방향 핸드 셰이크" (three-way-handshake)라 부른다.
TCP 세그먼트 헤더에서 가장 중요한 필드 두 가지는 순서번호 필드와 확인 응답 번호 필드이다.
즉 sequence number와 acknowledgements가 제일 중요하다.
또한 acknowledgements에서 TCP는 누적 확인응답 (cumulative acknowledgment)를 제공한다.
호스트 A가 sender고 호스트 B가 receiver라는 상황을 가정하자.
호스트 A가 데이터를 보내면 호스트 B가 다시 A에게 데이터를 보낸다.
그러면 세그먼트는 B로부터 A에 들어온 데이터에 순서 번호를 갖는다.
호스트 A가 자신의 세그먼트에 삽입하는 확인 응답 번호는 호스트 A가 호스트 B로부터 기대하는 다음 바이트의 순서 번호이다.
빠른 재전송
송신자는 종종 많은 양의 세그먼트를 연속적으로 보낼 수 있으므로,
만약 하나의 세그먼트를 잃어버린다면 많은 연속적인 중복 ACK들이 존재할 수 있다.
왜 중복 ACK를 보내는 것일까?
- 중복 ACK는 송신자가 이미 이전에 받은 확인 응답에 대한 재확인용 응답 세그먼트 ACK다.
- TCP 수신자가 기다리는 것보다 더 큰 순서번호를 가진 세그먼트를 받았을 때, TCP 수신자는 그 데이터 스트림에서의 간격(즉, 손실 세그먼트)를 찾아 낼 것이다.
- 이 간격은 네트워크 안에서의 세그먼트를 잃어버리거나 순서가 바뀐 결과일 수 있다.
- TCP는 부정 확인응답을 사용하지 않으므로, 수신자는 송신자에게 부정 확인 응답을 보낼 수 없지만,
- 대신 수신자는 마지막으로 수신된 순서적인 바이트를 갖는 데이터를 다시 수신 확인응답(즉, 중복 ACK를 생성함)을 한다.
정리하면 TCP 송신자가 같은 데이터에 대해 3개의 중복 확인 응답을 수신한다면,
이것은 ACK 된 세그먼트의 다음 3개의 세그먼트들이 분실되었음을 의미한다.
3개의 중복 ACK를 수신하는 경우에는 TCP는 세그먼트의 타이머가 만료되기 이전에 손실 세그먼트를 재전송하는 빠른 재전송을 한다.
재전송을 위한 타임아웃 주기는 RTT만큼의 시간을 설정하는 것이 좋다.
너무 짧으면 불필요한 재전송이 일어나고 너무 타임아웃이 길면 성능 저하가 일어난다.
흐름 제어
만약 애플리케이션이 데이터를 읽는 속도가 비교적 느리다면,
송신자가 점점 더 많은 데이터를 빠르게 전송함으로써 연결의 수신 버퍼에 아주 쉽게 오버 플로를 발생시킬 것이다.
TCP는 송신자가 수신자의 버퍼를 오버플로 시키는 것을 방지하기 위해서 애플리케이션에게 흐름 제어 서비스를 제공한다.
흐름 제어란 속도를 일치시키는 서비스다. 수신하는 애플리케이션이 읽는 속도와 송신자가 전송하는 속도를 같게 한다.
TCP는 송신자가 수신 윈도우라는 변수를 유지하여 흐름제어를 제공한다.
수신 윈도우는 수신 측에서 가용한 버퍼 공간이 얼마나 되는지를 송신자에게 알려주는데 사용된다.
TCP는 전이중이므로 각 측의 송신자는 별개의 수신윈도우를 유지한다.
혼잡 제어
TCP 송신자는 IP 네트워크에서 혼잡 때문에 억제될 수 있다. 즉 송신자 제어의 이 형태는 혼잡 제어라고 알려져 있다.
송신 측에서 동작하는 TCP 혼잡제어 메커니즘은 추가적인 변수인 혼잡 윈도우(congestion window)를 기록한다.
cwnd로 표시되는 혼잡 윈도는 TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 비율을 제한하게 만든다.
송신자의 송신율은 cwnd/RTT 바이트/초다. cwnd의 값을 조절하여, 송신자는 링크에 데이터를 전송하는 비율을 조절할 수 있다.
AIMD
- TCP 혼잡 제어는 종종 가법적 증가, 승법적 감소 (additive-increase, multiplicative decrease, AIAD)의 혼잡제어 형식이라고 부른다.
- 패킷이 문제 없이 도착하면 혼잡 윈도우 크기를 1씩 증가시키고, 실패하면 크기를 반으로 감소 시킨다.
슬로 스타트
- 연결이 되면 처음에는 전송률이 낮지만 점점 급격하게 상승한다. 이를 슬로 스타트라고 한다. AIMD 방식을 적용했다.
빠른 회복
- 빠른회복에서 cwnd 값을 잃었던 세그먼트에 대한 매 중복된 ACK를 수신할 때마다 1 MSS만큼 증가된다.
- 만약 타임아웃 이벤트가 발생한다면 빠른 회복은 슬로 스타트와 같은 동작을 수행한 후 슬로 스타트로 전이한다.
- 즉 cwnd 값은 1MSS로 하고, ssthresh(슬로우 스타트의 임계치 약자) 값은 손실 이벤트가 발생할 대의 cwnd 값의 반으로 한다.
- TCP Tahoe는 빠른 회복 비선택. TCP Reno는 빠른 회복 선택했다.
최근에는 네트워크가 명시적으로 TCP 송신자와 수신자에게 혼잡을 알리는 IP와 TCP의 확장이 제안되고 구축되었다.
이러한 네트워크-지원 혼잡 제어의 형식을 명시적 혼잡 표시라고 한다.
2023. 02.05 15:35 복습 및 정리
참고자료
컴퓨터 네트워킹 하향식 접근 제 7판
댓글