TCP
Last updated
Last updated
-전송 계층 프로토콜은 오류제어, 흐름 제어, 데이터 순서화 등의 기능 면에서 데이터 링크 계층과 유사하지만 2 계층은 물리적인 전송 선로로 직접 연결된 두 물리적 호스트 사이의 데이터 전송을 담당하고 / 전송 계층은 네트워크 끝단에 위치하는 통신 주체가 중간의 논리적인 선로(라우터로 연결된 컴퓨터 네트워크)를 통해 데이터를 주고받는다.
1.1 흐름 제어
- 전송 계층의 서비스를 이용해 연결을 설정하면 양 끝단의 호스트에서 실행되는 네트워크 프로세스가 데이터를 주고받는데 이 과정에서 흐름 제어를 사용한다.
- 수신 프로세스가 송신 프로세스의 전송 속도보다 느리게 데이터를 수신하면 버퍼 용량이 초과하여 데이터를 분실할 수 있다. 이 경우에 송신 프로세스는 타임아웃 기능을 통해 재전송 과정을 수행하므로 전체 네트워크의 전송 효율이 점점 떨어진다.
이론적으로 흐름 제어 기능은 수신 호스트가 슬라이딩 윈도우 프로토콜의 윈도우 하단 값을 조정하는데 송신 프로세스가 보낼 수 있는 패킷의 한계를 지정하는 방법으로 해결한다.
1.2 오류 제어
- 데이터를 전송하는 과정에서 발생할 수 있는 오류로 데이터 변형, 분실이 있는데 전송 오류가 발생해 수신 데이터의 내용이 깨지거나 분실되면 데이터 재전송에 의한 오류 제어 기능에 의해 복구 절차가 진행
데이터의 재전송 절차는 수신 프로세스의 요구에 의해 이뤄질 수도 있고 송신 프로세스 스스로 판단해 이뤄질 수도 있다. 전송 계층에서 발생하는 오류는 논리적으로 구축된 각 계층의 소프트웨어가 동작하는 과정에서 데이터를 분실하는 경우가 대부분이다.
1.3 분할과 병합
- 상위 계층에서 전송을 요구한 데이터의 크기가 전송 계층에서 처리할 수 있는 데이터 크기보다 크면 데이터를 쪼개 전송해야 한다. 데이터를 전송하기 전에 적합한 크기로 나누는 과정을 분할과정, 수신 프로세스가 수신한 데이터를 원래 크기로 다시 모으는 과정을 병합 과정이라 한다.
1.4 서비스 프리미티브
- 전송 서비스 프리미티브는 전송 계층 사용자가 전송 계층 서비스를 사용하기 위한 인터페이스다. 네트워크 계층에서 제공하는 서비스는 일반적으로 비신뢰성을 바탕으로 한 비연결형 서비스 프리미티브가 정의된다.
- 주소 표현, 멀티플렉싱, 연결 관리
2.1 주소 표현
- 네트워크에서 기본적으로 필요한 일반 사항은 주소다. TCP/IP 환경에서 사용하는 호스트의 IP 주소와 포트 번호의 조합은 네트워크 계층과 전송 계층에서 사용하는 주소 표현 방식의 하나이다. 전송 계층의 주소를 TSAP(Transport Service Access Point)라 한다.
- 주소는 구조적, 비구조적으로 표현하는데 구조적 표현에서는 전화번호나 우편물에 표기되는 주소처럼 하나의 주소를 여러 개의 계층적인 필드로 구분한다. 이때 필드는 전체 주소 공간의 상하 계층 관계를 나타낸다.
ex) 대한민국:서울:한국대학교:네트워크 학과:네트워크 연구실:홍길동:50(포트번호)
- 포트를 이용해 통신하고 네트워크 프로세스는 포트 번호로 구분
비구조적 주소 표현의 예는 1,2,3.. 번식으로 일련번호를 부여하는 것
2.2 멀티플렉싱
- 개별적으로 설정된 전송 계층 연결에서 전송 데이터의 단위인 TPDU(Transport Protocol Data Unit)의 목적지가 동일한 호스트이면 이들 데이터를 하나의 가상 회선에 실어 전송하는 것이 유리할 수 있다.
- (a)는 상방향 멀티플렉싱으로 다수의 전송 계층 연결에 대해 하부의 네트워크 계층에서 연결이 하나 형성된다. 따라서 여러 전송 계층의 연결에서 발생한 데이터가 동일한 경로로 전송되면 하나의 네트워크 연결에 묶어 전송할 수 있다. 일반적인 연결 구조보다 네트워크 계층에서 만들어지는 가상 회선 연결의 개수를 줄일 수 있으므로 연결 설정에 걸리는 시간이 단축된다.
- (b)는 하방향 멀티플렉싱으로 하나의 전송 연결 설정을 의미하는 포트에 다수의 가상 회선을 할당한다. 이 방식으로 데이터를 전송하면 데이터를 전송하면 전송 속도뿐 아니라, 전송 계층에서 발생하는 데이터의 특성에 따라 개별 가상 회선을 할당하여 효과적인 통신이 가능하다.
ex) 전송 연결에서 송신하고자 하는 데이터의 종류가 영화 파일이면 그 내용을 영상/음성/모국어 자막/외국어 자막 등으로 구분해 네트워크 연결을 개별적으로 설정할 수 있다.
2.3 연결 설정
- 프로세스의 연결 설정 요구인 Conn_Req와 상대편 프로세스에서 연결 수락을 의미하는 Conn_Ack의 회신으로 완료된다.
-> 이는 최소한의 단계이고 프리미티브 전달 과정에서 분실, 변형, 복사 등을 고려하면 다음과 같은 3단계 설정의 동작 과정을 보여준다.
-> 오류가 발생하지 않은 정상 상태에서의 3단계 설정 과정(Three-Way Handshake)으로
1. A프로세스는 임의의 송신 순서 번호 x를 지정해 연결 설정을 요청
2. 이를 수신하는 B 프로세스는 연결 설정 요구에 대한 순서 번호 x에 대해 응답을 보낸다. 이때 순서 번호 y는 자신의 초기 송신 번호를 왼쪽 프로세스에 알려주기 위해 사용한다.
3. 연결 요구에 대한 응답 Conn_Ack를 받은 A가 잘 받았다고 B에 응답해야 한다. 따라서 Conn_Ack와 다른 종류로 응답 정보를 보내야 하지만, Data_Req가 데이터 전송과 함께 응답 기능을 함께 수행하기 때문이다. A는 Data_Req(x, y)처럼 자신이 설정한 순서 번호 x를 사용해 데이터를 전송하고 데이터 전송과 함께 B가 설정한 순서 번호 y에 대해서도 응답해야 한다.
2.4 연결 해제
- 연결 해제 과정은 크게 2가지이며 양방향 데이터 전송을 지원.
-> 일방적 연결 해제 절차 방식에서는 통신하는 한쪽 프로세스가 일방적으로 Disc_Req를 전송해 연결 종료를 선언할 수 있다. Disc_Req에 대한 상대 프로세스의 동의가 없어도 연결이 끊기는 방식이다.
- 양방향 통신을 지원하는 연결을 하나의 원통으로 표현했으며, 한쪽 프로세스가 Disc_Req를 전송한다는 의미는 원통의 기능을 정지시켜, 둘 사이의 연결이 해제되는 것을 의미.
- 점진적 연결 해제 절차로 하나의 연결에 두 개의 단방향 연결을 지원하는 원통이 존재하는 것과 같다. 따라서 A의 데이터 전송 과정 중에 B의 연결 해제 요구가 발생해도 아래쪽 원통 기능만 정지하고, 위쪽 원통은 여전히 정상 기능을 수행(두 프로세스 사이의 연결을 완전히 종료하려면 양쪽에서 자신에게 할당된 단방향의 원통 기능을 명시적으로 정지해야 된다)
- TCP(Transmission Control Protocol)는 IP 프로토콜 위에서 연결형 서비스를 지원하는 전송 계층 프로토콜로 연결형 서비스를 제공, 전이중 방식의 양방향 가상 회선을 제공, 신뢰성 있는 데이터 전송을 보장한다.
-> TCP/IP 프로토콜의 계층적 구조로 네트워크 계층의 기능을 제공하는 프로토콜은 IP이며, 프로토콜 위에서 실행되는 전송 계층 프로토콜은 서비스의 유형에 따라 TCP(연결형 서비스를 지원하는 프로토콜)와 UDP(비연결형 서비스를 지원하는 프로토콜)가 있다.
- 전송 계층은 위의 5,6,7 계층의 기능을 지원하는 다양한 응용 프로그램이 존재하며 연결형 서비스가 필요한지, 비연결형 서비스가 필요한지 판단해서 TCP와 UDP를 선택한다. 응용 프로그램으로 파일 전송 기능, 메일 송수신 기능 등은 일반 사용자가 가장 많이 이용하는 인터넷 서비스다.
네트워크 계층 아래에는 데이터 링크 계층을 지원하는 X.25, 이더넷, 위성 통신 등 다양한 종류의 네트워크 인터페이스가 존재한다.
1.1 TCP 헤더의 필드
- TCP 헤더는 중간에 위치한 여덟 개의 플래그 비트를 비롯해 제법 많은 필드를 사용하므로 데이터의 전송 과정이 UDP보다 복잡하다.
Source Port/Destination Port(송신 포트/수신 포트) : TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당된 네트워크 포트 주소이다. 인터넷 환경에서는 통신을 원하는 프로세스가 실행되는 호스트 주소와 함께, 호스트 내부에서 다른 프로세스와 구분할 수 있는 프로세스의 고유 주소가 필요하다. 호스트 주소는 IP 프로토콜에서 정의된 호스트의 IP 주소를 사용한다. 프로세스에 할당되는 네트워크 자원을 포트라 하는데 포트를 구분하기 위한 주소가 포트 번호이다.
Sequence Number(순서 번호) : 송신 프로세스가 지정하는 순서 번호이다. 세그먼트 전송 과정에서 전송되는 바이트의 수를 기준으로 증가한다. 즉, TCP에서는 전송 데이터의 각 바이트마다 순서 번호가 존재한다. 크기가 32비트인 필드로 표시할 수 있고, 최대 2의 32승 개로 충분히 크므로 순서 번호가 중복될 염려는 없다. 송신 프로세스가 최소 데이터를 전송할 때는 임의의 순서 번호를 선택해 전송한다.
Acknowledgement Number(응답 번호) : 수신 프로세스가 제대로 수신한 바이트의 수를 응답하기 위해 사용한다. 필드 값은 ACK 플래그 비트가 지정된 경우에만 유효하며, 다음에 수신을 기대하는 데이터의 순서 번호를 표시한다. ACK 응답을 받은 송신 프로세스는 -1까지의 모든 데이터가 올바로 전송되었음을 확인할 수 있다. 연결 성정이나 연결 해제처럼 데이터 세그먼트가 없는 경우에도 순서 번호가 1씩 증가한다는 점에 주의한다.
Data Offset(데이터 옵셋) : TCP 세그먼트가 시작되는 위치를 기준으로 데이터의 시작 위치를 나타내므로 TCP 헤더의 크기가 된다. 32비트 워드 단위로 표시된다.
Reserved(예약) : 예약 필드
Window(윈도우) : 슬라이딩 윈도우 프로토콜에서 수신 윈도우의 버퍼 크기를 지정하려고 사용하며, 수신 프로세스가 수신할 수 있는 바이트의 수를 표시한다. 수신 프로세스의 버퍼 용량 초과 등으로 인해 데이터를 더 이상 수신할 수 없으며 Window 필드 값을 0으로 지정한다. 이 경우 송신 프로세스는 데이터를 더 전송하면 안 된다.
Checksum(체크섬) : TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터 모두에 대한 변형 오류를 검출하려고 사용한다. IP 프로토콜에서 사용하는 오류 검출 알고리즘을 사용한다.
Urgent Pointer(긴급 포인터) : 긴급 데이터를 처리하기 위한 것으로, URG 플래그 비트가 지정된 경우에 유효하다. 이 필드를 사용해 송신 프로세스가 긴급히 처리하려는 데이터를 전송할 수 있다.
1.2 TCP 헤더의 플래그 비트
- TCP 헤더에는 플래그 비트가 8개 정의되어 있는데 처음 2개 비트는 혼잡 제어 용도로 사용되고 나머지 6개 필드는 값이 1이면 다음과 같은 의미를 갖는다.
URG : Urgent Pointer 필드가 유효한지를 나타낸다. 이 기능은 수신 프로세스의 응용 계층에 긴급 데이터가 도착했음을 알리는 것으로, 데이터가 응용 계층에 전달되기 전에 긴급 데이터가 왔음을 미리 알려주어 대비할 수 있게 한다. 수신 프로세스는 Urgent Pointer 값을 읽어보고 얼마나 많은 긴급 데이터가 오는지 알 수 있다.
ACK : Acknowledgment Number 필드가 유효한지를 나타내며 정상적인 피기배킹 방식의 양방향 통신 환경에서, 양단 프로세스가 쉬지 않고 데이터를 전송한다고 가정하면 최초 연결 설정 과정에서 전송되는 첫 번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트가 1로 지정된다.
PSH : 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달하도록 지시할 때 사용한다. 수신 프로세스로부터 PSH 세그먼트에 대한 응답 프레임이 도착하면, 프레임의 Acknowledgement Number 필드에 표시한 숫자까지의 모든 데이터가 상대 프로세스의 상위 계층에 전달되었음을 의미한다. 또한 수신 프로세스의 TCP 계층에 버퍼링 된 데이터를 즉시 상위 계층에 전송함으로써 전송 지연이 감소되는 효과를 얻는다.
RST : 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용으로 사용한다. 송신 프로세스가 전송을 마쳤으나 수신 프로세스에 아직 도착하지 못한 세그먼트, 혹은 수신 프로세스가 아직 긍정 응답하지 않은 세그먼트는 연결이 재설정되었을 때 재전송되어야 한다.
SYN : 연결 설정 요구를 의미하는 플래그 비트이므로 가상 회선 연결을 설정하는 과정에서 사용한다.
FIN : 한쪽 프로세스에서 더는 전송할 데이터가 없어 연결을 종료하고 싶다는 의사 표시를 상대방에게 알리려고 사용한다. 현재 전송 과정에 있는 데이터는 계속 처리할 수 있으며, 상대편 프로세스의 데이터 전송에 장애가 발생하지 않는다. 따라서 연결 해제는 양쪽 프로세스 모두가 FIN 플래그를 전송해야 완료된다. [연결 해제]
1.3 혼잡 제어
- 최근에 TCP에 ECN 기능은 라우터가 송신 프로세스에 명시적으로 혼잡 발생을 알려주어 송신 프로세스 스스로 트래픽을 완화하는 기술이다. TCP는 ECN 기능을 지원하기 위해 CWR필드와 ECE 필드를 정의한다.
CWR(Congestion Window Reduced) : ECE 비트를 수신한 송신 프로세스가 전송 윈도우 크기를 줄였음을 통지하는 것이 목적이며, 더 이상의 ECE를 전송하지 말라는 의미이다.
ECE(Explicit Congestion Notification Echo) : ECN-Echo로도 약칭되며, 네트워크 트래픽이 많아질 때 라우터가 송신 프로세스에 명시적으로 혼잡을 알리려고 사용한다. 주의할 점은 송신 프로세스에 직접 전달하지 않고, IP 헤더의 ECN 필드에 CE 값을 지정하여 간접적으로 수신 프로세스에 알려준 후에 수신 프로세스의 중개(Echo)를 거쳐 수신 프로세스에 통지된다는 점이다. ECE를 수신한 송신 프로세스는 네트워크 부하를 줄이기 위해 전송 윈도우 크기를 줄인다. 라우터가 IP 프로토콜을 이용하여 수신 프로세스의 중개를 통해 간접적으로 통지하는 이유는 라우터가 TCP 프로토콜을 지원하지 않기 때문이다.
1.4 캡슐화
- TCP 헤더 뒤에 추가되어 TCP 세그먼트를 구성하며 TCP 세그먼트는 다시 iP 프로토콜로 보내지고 IP 헤더에 캡슐화되어 데이터 링크 계층으로 보내진다.
- 포트번호는 TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식이고 유닉스 환경에서는 소켓으로 포트를 구현하므로, TCP/UDP 프로토콜을 사용하려면 소켓 시스템 콜의 인터페이스를 알아야 한다.
소켓 시스템 콜을 이용해 TCP 연결 설정이 되면 통신 양단의 프로세스가 사용하는 고유 주소는 해당 호스트의 IP 주소와 호스트 내부의 포트 번호가 조합된 형태이다.
- 클라이언트-서버의 연동은 서버가 먼저 실행되고, 클라이언트가 서버와 연결을 시도하는 방식으로 이뤄지며 연결을 원하는 서버와 접속하려면 서버의 IP 주소와 포트 번호를 알아야 한다.
인터넷 환경에서 많이 사용하는 포트 번호를 Well-Known 포트라 하며 자주 사용하는 응용 서비스는 모두 고정된 포트 번호를 사용한다.
- TCP 프로토콜은 전이중 방식의 양방향 통신을 지원하므로 가상 회선으로 연결된 두 프로세스가 동시에 데이터를 전송할 수 있고 전송 데이터와 응답 데이터를 함께 전송하는 피기 배킹 기능을 사용한다.
: TCP를 사용하는 프로세스가 가장 먼저 실행하는 3단계 설정 방식(Three-way Handshake)으로 A프로세스가 연결 설정을 요구하고 B프로세스가 이를 수락하는 형식이다.
1. 먼저 A는 TCP 헤더의 SYN 플래그를 지정한 세그먼트를 전송함으로써 연결 설정을 요구하고 순서 번호 10번은 임의로 설정한 것이다.
2. 연결 설정 요구를 받은 B는 연결을 수락하려면 긍정 응답을 해야 한다. 이를 위해 SYN 플래그가 지정한 세그먼트에는 전송 데이터가 포함되지 않지만 순서 번호는 1이 증가한다. 따라서 SYN 세그먼트의 순서 번호(10+1 = 11) 11번을 Acknowledgment Number 필드에 지정해 회신한다. 값을 유효하게 하기 위해 ACK 플래그를 지정했으며, B의 순서 번호 50번은 임의로 지정하였다.
3. 세 번째 세그먼트는 B가 전송한 연결 수락 세그먼트가 제대로 도착했음을 알린다.
- TCP는 데이터 전송 과정에서 흐름 제어를 지원하려고 슬라이딩 윈도우 프로토콜을 사용한다. 데이터를 수신하는 프로세스는 응답 세그먼트 헤더의 Window 필드를 이용해 윈도우 크기를 늘리거나 줄여 송신 프로세스의 전송 속도를 조절한다.
2.1 정상적인 데이터 전송
- TCP의 데이터 전송은 양쪽 프로세스가 동시에 데이터를 전송할 수 있는 전이중 방식을 지원하는 데 세 번째 세그먼트를 전송하는 과정에서 데이터 전송이 이뤄지지 않았는데 A가 B에 전송할 데이터가 있으면 세 번째 세그먼트에 데이터를 실어서 전송할 수 있다.
-> 세그먼트 세 개가 순차적으로 전송되는 경우로 A가 먼저 순서 번호 11부터 5바이트의 데이터를 전송하고, B는 순서 번호 51번부터 10 바이트의 데이터를 전송한다. 순서 번호와 응답 번호의 조합은 전송되는 데이터의 양에 따라 적절히 조정되고 있다.
- TCP 흐름 제어는 프로토콜 헤더의 Window 필드를 사용하며 지정한 값 이상으로 데이터를 전송할 수 없으므로 수신 프로세스는 자신의 처리 능력에 맞는 값으로 지정해 송신 프로세스의 전송 속도를 제어한다.
2.2 데이터 전송 오류
- TCP 데이터를 세그먼트(segment)라 부르며, 순서 번호와 함께 전송된다. 순서 번호는 상위 계층에서 보낸 데이터의 바이트 수에 기초하여 부여되고, 수신 프로세스는 이 번호를 근거로 데이터의 순서를 올바르게 정렬할 수 있다. 순서 번호가 동일한 데이터가 도착하면 중복으로 판단하여 해당 데이터를 버리고, 중간의 순서 번호가 빠지면 데이터를 분실했다고 판단한다.
- TCP는 부정 응답 기능인 NAK를 사용하지 않아서 수신 프로세스에 도착한 데이터 세그먼트의 내용이 변형되어도 수신 프로세스가 응답을 하지 않아 데이터 분실과 동일하게 처리된다. 데이터 변형과 분실 오류가 발생하면, 수신 프로세스로부터 회신을 받을 수 없으므로 송신 프로세스의 타임아웃 기능에 의해 오류가 복구된다.
-> A가 TCP 세그먼트 세 개를 연속으로 전송하고, 이중 세 번째 세그먼트에 오류가 발생한 경우로
A프로세스가 순서 번호, 11~20/21~30/31~40번인 데이터 세그먼트를 전송하고, 이들이 모두 정상적으로 수신되면 41번 응답 번호를 긍정 응답으로 회신받는다. 하지만 3번째 세그먼트에서 오류가 발생해서 오류 제어를 해야 한다.
B는 11~20/21~30번의 데이터를 올바르게 수신했고 ACK 플래그가 지정된 응답 세그먼트의 순서 번호는 31번으로 지정된다. A는 31~40번 데이터에 대한 긍정 응답을 받지 못해서 타임아웃 기능을 통해 해당 세그먼트를 재전송해야 한다.
: 연결을 해제하고자 하는 쪽에서 FIN 플래그를 지정해 요구하고 프로세스의 동의하에 진행되기 때문에 연결 해제 세그먼트를 받은 프로세스가 FIN 플래그로 응답할 때까지 연결은 계속 유지된다.
- FIN 플래그가 지정된 세그먼트를 수신한 프로세스는 이에 대한 응답으로 순서 번호를 1 증가시켜서 응답 번호를 17번으로 지정한 긍정 응답 세그먼트를 회신했고 자신이 전송할 61번 세그먼트 이후의 데이터는 계속 전송하고 있다. 5바이트의 데이터를 전송한 후에 FIN 플래그를 사용해 연결 종료하는 것으로 합의하고 있다.
- ECN 기능은 TCP의 혼잡 제어 기능을 지원하며 ECE, CWR 플래그와 IP 헤더의 ECN 필드를 정의했고 ECN 기능을 사용하려면 TCP 연결 설정 단계에서 ECN 기능을 사용할 것인지 여부를 협상해야 한다.
데이터 전송 단계에서는 혼잡을 인지한 라우터가 수신 프로세스에 혼잡을 통지하고 수신 프로세스는 다시 송신 프로세스에 혼잡을 통지함으로써 송신 프로세스가 전송하는 데이터의 양을 줄이는 방식으로 혼잡 제어가 이뤄진다.
1. 연결 설정을 요청하는 A에서 연결 설정 요구인 SYN, CWR, ECE 플래그를 지정하여 ECN 기능이 동작하는 연결 설정 요청을 보낸다.
2. 요청을 받은 B에서 ECN 기능을 사용할 의사가 있으면 (a)처럼 SYN, ACK, ECE 플래그를 지정하여 응답한다. 만일 의사가 없으면 (b)처럼 SYN, ACK플래그만 지정하여 응답.
-> ECN 기능이 동작하는 TCP 연결을 사용하여 데이터를 전송하는 과정으로
(a) - 먼저 TCP 세그먼트를 전송하는 A의 IP 프로토콜은 IP 헤더 내의 ECN 필드 값을 ECT(01,10)로 설정하여 전송한다. IP 헤더에 ECT가 설정된 것은 TCP가 ECN 기능을 지원한다는 의미이다.
(b) - 임의의 시점에서 네트워크에 혼잡이 발생하고, 라우터가 이를 감지한 경우
(c) - 혼잡을 감지한 라우터는 IP 헤더에 ECT가 설정된 패킷들에 대해 CE를 설정하여 혼잡이 발생했음을 알리는데 라우터가 송신 프로세스인 A에 직접 통지하지 않고 B에 통지하는 것에 주의한다. 즉, 수신 프로세스의 중개를 거쳐 간접적으로 송신 프로세스에 혼잡을 통지한다.
(라우터의 구조적 한계 때문 + 다음에 위치한 라우터들이 ECN 기능을 반복적으로 수행하지 못하는 효과)
(d) - 라우터로부터 IP 헤더의 CE 값을 받은 B는 모든 TCP 세그먼트에 대해 TCP 헤더의 ECE 플래그를 지정하여 라우터가 감지한 혼잡을 A에게 알려준다.
(e) - 혼잡을 인지한 A는 송신 윈도우를 조절하여 전송되는 데이터의 양을 줄이고, TCP 헤더의 CWR 플래그를 지정함으로써 혼잡에 적절한 조치를 취했음을 통지한다.