TCP와 스트림 전송
TCP(Transmission Control Protocol)는 TCP/IP 모델의 4계층인 전송 계층에서 사용하는 프로토콜로 하위 계층인 네트워크 계층에서 사용하는 IP와 엮어서 TCP/IP로 표현하는 경우가 많다.
TCP나 UDP는 프로세스 대 프로세스 프로토콜이다. 여기서 프로세스는 응용프로그램의 하나로 생각하면 이해하기 쉬울 것이다. TCP에는 종단간(End-to-End, E2E)의 흐름제어 및 오류제어 등의 기능이 있어 이를 통해 데이터 전송의 신뢰성을 제공하는데, 이것이 IP와 구별되는 특성이다. '종단간'은 데이터 전송지 호스트 컴퓨터에서 최종 수신지 호스트 컴퓨터까지를 말한다. 데이터링크 계층에서 수행되는 오류제어 기능은 종단간이 아닌 이웃 노드 간의 오류제어라는 점에서 구별된다. TCP 프로토콜은 정확하게 데이터가 도착했는지 여부를 확인하기 위해 사용되는 절차로 이해할 수 있다.
두 호스트의 TCP 프로토콜 사이에서의 전송단위를 세그먼트(Segment)라고 하는데, 신뢰성 있는 전송을 위해 두 대의 호스트 컴퓨터는 사용자 데이터 세그먼트와 이에 대한 확인 응답인 ACK 세그먼트를 사용한다. TCP는 주어진 장치에서 다중 수신지를 분류하거나, 또는 패킷 손실이나 중복과 같은 오류를 복구하는 기법을 포함한다.
TCP는 종단간 데이터 전송의 신뢰를 보장하는 만큼 구조가 복잡하고 다양하다. 만일 TCP를 사용하지 않고 IP만 사용한다고 가정하면 신뢰성이 보장되지 못한 상태로 데이터가 전송될 것이다. 즉 TCP는 신뢰성 있는 스트림 전송 서비스 제공을 목적으로 한다.
신뢰성 있는 스트림 전송 서비스란 데이터의 중복이나 손실 없이 종단간 데이터의 전송을 보장한다는 의미이다. 하위 계층 네트워크 시스템이 신뢰성을 보장하지 못할 경우, 신뢰성을 확보하기 위해 p-ACK 재전송이라는 방법을 사용한다. 이 방법은 수신지에서 데이터를 수신하면 ACK 메시지를 재전송하는 것으로, 전송지에서는 전송한 각각의 세그먼트에 대한 정보를 가지고, 그 다음 패킷을 전송하기 전 이미 전송한 메시지에 대한 ACK 메시지가 도착하기를 기다린다.
일반적으로 신뢰성 프로토콜에서는 각 패킷에 순서번호를 할당하고, 수신된 순서번호를 이용해 패킷의 중복성 여부를 감지한다. 지연이나 중복된 ACK에 의해 발생하는 혼잡을 피하기 위해 p-ACK 프로토콜은 순서번호를 ACK로 되돌려 보내는 방법을 사용하는 것이다.
TCP의 특성
- 스트림 지향성
TCP는 데이터를 전송할 때 바이트를 기본단위로 사용자 데이터를 스트림 형태로 처리한다. 스트림 전송서비스는 전송지에서의 데이터 순서가 최종 수신지에서도 일치되도록 한다는 의미다. 이것이 TCP의 스트림 지향성(Stream Orientation)이다.
- 연결지향적
TCP는 연결지향(Connection Oriented) 서비스를 제공하는 프로토콜이다. 연결지향 서비스란 두 개체 간에 하나 이상의 메시지가 연결 상태를 유지하며 데이터교환이 가능하도록 하는 것을 말하며, 데이터의 지속적이고 연결적인 흐름에 적합하다. TCP의 연결지향 서비스가 진행되는 과정은 다음과 같다.
전송지와 수신지의 응용프로그램은 각각의 운영체제 하에서 동작하며, 운영체제 내의 프로토콜 소프트웨어 모듈은 네트워크를 통해 메시지를 보내 데이터 전송 준비를 한다. 모든 세부사항에 대한 준비가 완료되면 TCP 프로토콜 모듈은 먼저 연결설정 과정을 실행한다. 이는 물리적인 연결이 아니라 논리적인 연결로, 가상회선 연결(Virtual Circuit Connection)이라고도 한다. 연결이 정상적으로 설정되면 비로소 데이터 전송이 가능해진다. 데이터를 전송하는 동안 전송지와 수신지에서는 정확한 전송을 위해 상호 간의 전송 상태를 계속 확인한다. 만일 오류가 발생하면 양측은 이를 인지하고 응용프로그램에 알린다.
- 버퍼를 이용한 전송
데이터를 전송할 때 응용프로그램은 다양한 형태와 크기의 데이터 블록을 사용한다. 버퍼를 이용한 전송이란 네트워크 트래픽의 혼잡을 최소화하고 효율적으로 전송이 이루어지도록 하기 위해 데이터 스트림으로부터 충분한 데이터를 수집하고 버퍼를 이용해 데이터 블록을 채운 후에 전송하는 방식을 뜻한다. 만약 응용프로그램이 대용량의 데이터에 대한 블록을 전송해야 한다면 TCP는 각각의 블록을 작은 조각으로 나누어 전송한다. 경우에 따라서는 버퍼가 채워지지 않은 상태라도 강제적으로 전송하는 푸시 기법을 사용할 수 있다.
- 전이중 양방향 전송 지원
TCP/IP 스트림 서비스에 의해 사용되는 연결은 전이중 양방향 전송을 지원한다. 하나의 양방향 전송연결은 반대되는 방향성을 갖는 두 개의 독립적인 스트림의 흐름으로 만들어진다. 이러한 전이중 전송연결 서비스를 사용하면 하나의 데이터 스트림에 대해 반대 방향으로 제어정보를 보낼 수 있어서, 전송되는 데이터 트래픽 양의 감소 효과로 보다 효율적인 전송이 가능해진다.
댓글