K 개발자

TCP 프로토콜을 이용한 데이터 전송 본문

OS/네트워크

TCP 프로토콜을 이용한 데이터 전송

ddingz 2021. 8. 4. 18:28

연결 설정

TCP 연결 설정

TCP를 사용하는 프로세스가 가장 먼저 실행하는 연결 설정은 3단계 설정Three-Way Handshake 방식이다.
A 프로세스가 연결 설정을 요구하고, B 프로세스가 이를 수락하는 형식이다.
먼저 A 프로세스는 TCP 헤더의 SYN 플래그를 지정한 세그먼트를 전송함으로써 연결 설정을 요구한다.
순서 번호 10번은 임의로 설정한 것이다.
연결 설정 요구를 받은 B 프로세스가 연결을 수락하려면 이에 대한 긍정 응답을 해야 한다.
이를 위해 SYN과 ACK 플래그를 지정해 연결에 대한 긍정 응답을 표시하였다.
SYN 플래그가 지정한 세그먼트에는 전송 데이터가 포함되지 않지만 순서 번호는 1이 증가한다.
따라서 SYN 세그먼트의 순서 번호 10에 1을 더한 11번을 Acknowledgement Number 필드에 지정해 회신한다.
Acknowledgement Number 값을 유효하게 하기 위해 ACK 플래그를 지정했으며, B 프로세스의 순서 번호 50번은 임의로 지정하였다.
마지막 세 번째 세그먼트는 B 프로세스가 전송한 연결 수락 세그먼트가 제대로 도착했음을 알린다.


데이터 전송

정상적인 데이터 전송

TCP 데이터 전송

TCP의 데이터 전송은 양쪽 프로세스가 동시에 데이터를 전송할 수 있는 전이중 방식을 지원한다.
위에는 세 번째 세그먼트를 전송하는 과정에서 데이터 전송이 이루어지지 않았는데, A 프로세스가 B 프로세스에 전송할 데이터가 있으면 세 번째 세그먼트에 데이터를 실어서 전송할 수 있다.
즉, 위의 첫 번째와 두 번째 세그먼트가 전송되고, 이어서 세그먼트 세 개가 순차적으로 전송되는 경우를 설명하고 있다.

데이터 전송 오류

TCP는 부정 응답 기능인 NAK를 사용하지 않는다.
따라서 수신 프로세스에 도착한 데이터 세그먼트의 내용이 변형되어도 수신 프로세스가 응답을 하지 않아 데이터 분실과 동일하게 처리된다.
데이터 변형과 분실 오류가 발생하면 수신 프로세스로부터 회신을 받을 수 없으므로 송신 프로세스의 타임아웃Timeout 기능에 의해 오류가 복구된다.

전송 오류

A 프로세스가 TCP 세그먼트 세 개를 연속으로 전송하고, 이 중 세 번째 세그먼트에 오류가 발생했다고 가정한 경우이다.
긍정 응답 세그먼트에 오류가 발생하면 수신 프로세스가 정상적으로 수신한 세그먼트를 재전송할 수 있다.
따라서 세그먼트가 중복으로 수신될 수 있기 때문에 수신 프로세스는 순서 번호를 기준으로 중복 여부를 처리할 수 있어야 한다.


연결 해제

TCP 연결 해제

연결 해제 단계는 연결을 해제하고자 하는 쪽에서 FIN 플래그를 지정해 요구한다.
연결 해제는 양쪽 프로세스의 동의하에 진행되기 때문에 연결 해제 세그먼트를 받은 프로세스가 FIN 플래그로 응답할 때까지 연결은 계속 유지된다.


혼잡 제어

TCP 연결 설정(ECN)
ECN의 동작 원리

ECNExplicit Congestion Notification 기능은 TCP의 혼잡 제어 기능을 지원한다.
이를 위해 TCP 헤더의 ECE, CWR 플래그와 IP 헤더의 ECN 필드가 새로 정의되었다.
ECN 기능을 사용하려면 TCP 연결 설정 단계에서 ECN 기능을 사용할 것인지 여부를 협상해야 한다.
데이터 전송 단계에서는 혼잡을 인지한 라우터가 수신 프로세스에 혼잡을 통지한다.
그러면 수신 프로세스는 다시 송신 프로세스에 혼잡을 통지함으로써 송신 프로세스가 전송하는 데이터의 양을 줄이는 방식으로 혼잡 제어가 이루어진다.
즉, 수신 프로세스의 중개Echo를 거쳐 간접적으로 송신 프로세스에 혼잡을 통지한다.
이와 같이 수신 프로세스의 중개를 거쳐야 하는 이유는 TCP와 IP 프로토콜이 혼재하여 동작하는 상황에서 네트워크 계층을 수행하는 라우터가 지니는 구조적인 한계 때문이다.
더불어, 혼잡을 인지한 라우터 다음에 위치한 라우터들이 ECN 기능을 반복적으로 수행하지 못하도록 하는 효과도 얻는다.

'OS > 네트워크' 카테고리의 다른 글

RTP 프로토콜  (0) 2021.08.05
UDP 프로토콜  (0) 2021.08.04
TCP 프로토콜  (0) 2021.08.03
전송 계층의 기능  (0) 2021.08.02
기타 네트워크 계층 프로토콜  (0) 2021.08.02
Comments