TCP 프로토콜은 전이중 방식의 양방향 통신을 지원하므로 가상 회선으로 연결된 두 프로세스가 동시에 데이터를 전송할 수 있다. 따라서 전송 데이터와 응답 데이터를 함께 전송하는 피기배킹 기능을 사용한다.
연결형 서비스를 제공하는 TCP에서 데이터를 전송하려면 연결 설정, 데이터 전송, 연결 해제라는
3단계를 순차적으로 진행해야 한다.
연결 설정
TCP를 사용하는 프로세스가 가장 먼저 실행하는 연결 설정은 3단계 설정 방식이다.
A 프로세스는 TCP 헤더의 SYN 플래그를 지정한 세그먼트를 전송함으로써 연결 설정을 요구한다. 순서 번호 10은 임의로 설정한 것. 연결 설정 요구를 받은 B 프로세스가 연결을 수락하려면 이에 대한 긍정 응답을 해야 한다. 이를 위해 SYN과 ACK 플래그를 지정해 연결에 대한 긍정 응답을 표시하였다. SYN 플래그가 지정한 세그먼트에는 전송 데이터가 포함되지 않지만 순서 번호는 1이 증가한다. 따라서 SYN세그먼트의 순서번호 10에 1을 더한 11번을 Acknowledgment Number필드에 지정해 회신한다. Acknowledgmenet Number 값을 유효하게 하기 위해 ACK 플래그를 지정했으며, B프로세스의 순서 번호 50번은 임의로 지정한다.
마지막 세 번째 세그먼트는 B 프로세스가 전송한 연결 수락 세그먼트가 제대로 도착했음을 알린다. A 프로세스가 전송할 데이터가 없을 때 처리하는 방식이고, 전송 데이터가 있으면 세 번째 세그먼트에서 바로 데이터를 전송해도 된다.
데이터 전송
TCP는 데이터 전송 과정에서 흐름 제어를 지원하려고 슬라이딩 윈도우 프로토콜을 사용한다. 데이터를 수신하는 프로세스는 응답 세그먼트 헤더의 Window 필드를 이용해 윈도우의 크기를 늘리거나 줄여 송신 프로세스의 전송 속도를 조절한다.
정상적인 전송
TCP의 데이터 전송은 양쪽 프로세스가 동시에 데이터를 전송할 수 있는 전이중 방식을 지원한다. 세 번째 세그먼트를 전송하는 과정에서 데이터 전송 방식이 이루어지지 않았는데, A프로세스가 B프로세스에 전송할 데이터가 있으면 세 번째 세그먼트에 데이터를 실어서 전송할 수 있다.
TCP의 흐름 제어는 프로토콜 헤더의 Window 필드를 사용한다.
Window 필드에 지정한 값 이상으로 데이터를 전송할 수 없으므로 수신 프로세스는 자신의 처리 능력에 맞는 값으로 지정해 송신 프로세스의 전송 속도를 제어한다.
ex) 송신 프로세스가 데이터를 1000,번부터 전송한다고 가정했을 때 수신 프로세스로부터 Window-300으로 지정된 세그먼트가 도착하면 1,299까지의 데이터를 연속으로 전송할 수 있다 그러나 다음 데이터는 수신 프로세스로부터 응답이 도착했을 때만 전송할 수 있다.
데이터 전송 오류
- TCP 데이터를 세그먼트라 부르며, 순서 번호와 함께 전송된다.
- 순서 번호는 상위 계층에서 보낸 데이터의 바이트 수에 기초하여 부여되고, 수신 프로세스는 이 번호를 근거로 데이터의 순서를 올바르게 정렬할 수 있다.
- 순서 번호가 동일한 데이터가 도착하면 중복으로 판단하여 해당 데이터를 버리고, 중간의 순서 번호가 빠지면 데이터를 분실했다고 판단한다.
- TCP는 부정 응답 기능인 NAK를 사용하지 않는다. 따라서 수신 프로세스에 도착한 데이터 세그먼트의 내용이 변형되어도 수신 프로세스가 응답을 하지 않아 데이터 분실과 동일하게 처리된다.
- 데이터 변형과 분실 오류가 발생하면 수신 오류 프로세스로부터 회신을 받을 수 없으므로 송신 프로세스의 타임아웃 기능에 의해 오류가 복구된다.
A프로세스가 순서 번호 11~20번, 21~30번의 데이터를 올바르게 수신했으므로, 다음에 수신할 데이터는 31번이 된다. 따라서 ACK 플래그가 지정된 응답 세그먼트의 순서 번호는 31번으로 지정된다. 한편 A프로세스는 31~40번 데이터에 대한 긍정 응답을 받지 못했으므로 타임아웃 기능을 통해 해당 세그먼트를 재전송해야 한다.
긍정 응답 세그먼트에 오류가 발생하면 수신 프로세스가 정상적으로 수신한 세그먼트를 재전송할 수 있다. 따라서 세그먼트가 중복으로 수신될 수 있기 때문에 수신 프로세스는 순서 번호를 기준으로 중복 여부를 처리할 수 있어야 한다.
연결 해제
TCP 연결 해제
연결을 해제하고자 하는 쪽에서 FIN 플래그를 지정해 요구한다. 연결 해제는 양쪽 프로세스의 동의하에 진행되기 때문에 연결 해제 세그먼트를 받은 프로세스가 FIN 플래그로 응답할 때까지 연결은 계속 유지된다.
혼잡 제어
ECN 기능은 TCP의 혼잡 제어 기능을 지원한다. 이를 위해 TCP 헤더의 ECE, CWR 플래그와 IP 헤더의 ECN 필드가 새로 정의되었다.
ECN 기능을 사용하려면 TCP 연결 설정 단계에서 ECN 기능을 사용할 것인지 여부를 협상해야 한다. 데이터 전송 단계에서는 혼잡을 인지한 라우터가 수신 프로세스에 혼잡을 통지한다. 그러면 수신 프로세스는 다시 송신 프로세스에 혼잡을 통지함으로써 송신 프로세스가 전송하는 데이터의 양을 줄이는 방식으로 혼잡 제어가 이루어진다.
먼저 TCP 연결 단계에서 ECN 사용에 대한 동의 절차를 거쳐야 한다.
연결 설정을 요청하는 A 프로세스에서 연결 설정 요구인 SYN 플래그와 함께 CWR, ECE 플래그를 지정하여 ECN 기능이 동작하는 연결 설정 요청을 보낸다. 요청을 받은 B 프로세스에서 ECN 기능을 사용할 의사가 있으면 a처럼 연결 설정 요구 응답인 SYN, ACK 플래그와 함께 ECE 플래그를 지정하여 응답한다. 만일 ECN 기능을 사용할 의사가 없으면 b와 같이 SYN, ACK 플래그만 지정하여 응답한다.
ECN 기능이 동작하는 tCP 연결을 사용하여 데이터를 전송하는 과정의 혼잡 제어 처리는 먼저 TCP 세그먼트를 전송하는 A 프로세스의 IP 프로토콜은 IP 헤더 내의 ECN 필드 값을 ECT(01 혹은 10)로 설정하여 전송한다. 전송되는 모든 데이터는 항상 이 값이 설정된 상태로 전송된다. 참고로 IP 헤더에 ECT가 설정되었다는 의미는 TCP가 ECN 기능을 지원한다는 의미이다.
임의의 시점에서 네트워크에 혼잡이 발생하고, 라우터가 이를 감지한 경우가 b이다. 혼잡을 감지한 라우터는 IP헤더에 ECT가 설정된 패킷들에 대해 CE를 설정하여 혼잡이 발생했음을 알린다. 이때, 라우터가 송신 프로세스인 A 프로세스에 직접 혼잡을 통지하지 않고, 수신 프로세스인 B 프로세스에 통지하는 것이 주의한다. 즉 수신 프로세스의 중개를 거쳐 간접적으로 송신 프로세스에 혼잡을 통지한다.
이와 같이 수신 프로세스의 중개를 거쳐야 하는 이유는 TCP와 IP프로토콜이 혼재하여 동작하는 상황에서 네트워크 계층을 수행하는 라우터가 지닌 구조적 한계 때문이다. 더불어 혼잡을 인지한 라우터는 다음에 위치한 라우터들이 ECN 기능을 반복적으로 수행하지 못하도록 하는 효과도 얻는다.
라우터로부터 IP헤더의 CE 값을 받은 B 프로세스는 모든 TCP 세그먼트에 대해 TCP 헤더의 ECE 플래그를 지정하여 라우터가 감지한 혼잡을 A 프로세스에게 알려주며, 이는 d로 표현되었다. 혼잡을 인지한 A 프로세스는 송신 윈도우를 조절하여 전송되는 데이터의 양을 줄이고, TCP 헤더의 CWR 플래그를 지정함으로써 혼잡에 적절한 조치를 취했음을 통지한다.
Reference
쉽게 배우는 데이터 통신과 컴퓨터 네트워크
'CS > Network' 카테고리의 다른 글
[Chapter 10] UDP 프로토콜(RTP 프로토콜) (0) | 2025.02.17 |
---|---|
[Chapter 10] UDP 프로토콜(UDP 헤더 구조) (0) | 2025.02.17 |
[Chapter 9] TCP 프로토콜(TCP 프로토콜) (0) | 2025.02.16 |
[Chapter 9] TCP 프로토콜(전송 계층의 주요 기능) (0) | 2025.02.14 |
[Chapter 8] 네트워크 계층(기타 네트워크 계층 프로토콜) (0) | 2025.02.14 |