TCP 란

TCP(Transmission Control Protocol)는 인터넷에서 컴퓨터들이 신뢰성 있는 데이터 통신을 하기 위한 프로토콜입니다. TCP는 IP(Internet Protocol)와 함께 인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, OSI 7계층에서 전송 계층(Transport Layer)에 해당됩니다.

TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 세그먼트(Segment) 단위로 데이터를 나누어 전송합니다. 전송 중 데이터가 유실되거나 손실되었을 경우, TCP는 재전송을 수행하여 데이터의 신뢰성을 보장합니다. 또한, TCP는 흐름 제어(Flow Control)와 혼잡 제어(Congestion Control) 기능을 갖추어, 데이터 전송 시 네트워크 혼잡을 방지하고 성능을 최적화합니다.

TCP는 연결 지향적(Connection-oriented)인 프로토콜로, 3-way handshake를 통해 연결을 설정하고, 4-way handshake를 통해 연결을 종료합니다. 연결 설정 과정에서는 SYN(Synchronize)과 ACK(Acknowledgement) 플래그를 이용하여 연결을 수립하며, 연결 종료 과정에서는 FIN(Finish) 플래그를 이용하여 연결을 종료합니다.

TCP는 다양한 응용 프로그램에서 사용되며, 특히 웹 브라우저와 웹 서버 간의 HTTP 통신에서 사용됩니다.

 

TCP vs UDP

TCP의 특징을 이해하기 위해선 TCP가 아닌 UDP 프로토콜에 대한 이해도 필요합니다.

TCP와 UDP는 모두 인터넷 프로토콜 스위트의 전송 계층(Transport Layer)에서 사용되는 프로토콜입니다. 그러나 두 프로토콜은 목적과 특징에서 차이가 있습니다.

TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하는 연결 지향적(Connection-oriented) 프로토콜입니다. 데이터 전송 전에 연결을 설정하고, 데이터를 송수신할 때마다 확인 응답을 주고받아 데이터 전송의 신뢰성을 보장합니다. 데이터 전송 과정에서 패킷 유실이나 손상이 발생하면 재전송을 요청하여 데이터의 정확성과 신뢰성을 보장합니다. 이러한 특성 때문에 웹, 이메일, 파일 전송 등 신뢰성이 중요한 응용 프로그램에서 사용됩니다.

반면에 UDP(User Datagram Protocol)는 비신뢰성 있는 데이터 전송을 하는 비연결형(Connectionless) 프로토콜입니다. 데이터를 송수신할 때 연결 설정 과정이 없으며, 데이터 전송 과정에서 확인 응답을 보내지 않습니다. 이러한 특성 때문에 TCP보다 빠른 전송 속도를 가지고 있습니다. 그러나 데이터 전송의 신뢰성을 보장하지 않기 때문에, 오류나 손상이 발생하면 복구할 수 없습니다. 이러한 특성 때문에 DNS, 멀티미디어 스트리밍 등 속도가 중요한 응용 프로그램에서 사용됩니다.

따라서, TCP와 UDP는 목적에 따라 선택하여 사용해야 합니다. 만약 데이터의 신뢰성이 중요하다면 TCP를 사용하고, 데이터 전송 속도가 중요하다면 UDP를 사용합니다.

 

3-way handshake

3-way handshake는 TCP 연결을 설정할 때 사용되며, 다음과 같은 과정으로 이루어집니다.


1. 클라이언트가 서버에게 SYN 패킷을 보냅니다.
2. 서버는 SYN 패킷을 받고, 클라이언트에게 ACK와 SYN 패킷을 보냅니다.
3. 클라이언트는 ACK 패킷을 보내서 연결을 완료합니다.

 

4-way handshake

4-way handshake는 TCP 연결을 해제할 때 사용되며, 다음과 같은 과정으로 이루어집니다.



1. 클라이언트가 서버에게 FIN 패킷을 보냅니다.
2. 서버는 FIN 패킷을 받고, ACK 패킷을 보내서 클라이언트에게 확인합니다.
3. 서버가 데이터를 모두 보낼 때까지 대기합니다.
4. 서버가 데이터를 모두 보낸 후, 클라이언트에게 FIN 패킷을 보냅니다.

 

전송계층의 특징

전송 계층은 송신자와 수신자 간의 신뢰성 있는 데이터 전송을 보장하기 위한 계층입니다. 이를 위해 전송 계층은 다음과 같은 특징을 가지고 있습니다.

연결 지향성(Connection-oriented)
TCP(Transmission Control Protocol) 프로토콜은 연결 지향성을 가지고 있습니다. 이는 데이터 전송 전에 먼저 연결을 설정하고, 데이터 전송 후에는 연결을 해제하는 과정을 거치는 것을 의미합니다. 이러한 연결 지향성은 신뢰성 있는 데이터 전송을 보장합니다.


비연결 지향성(Connectionless-oriented)
UDP(User Datagram Protocol) 프로토콜은 비연결 지향성을 가지고 있습니다. 이는 데이터 전송에 앞서 연결 설정을 하지 않고, 단순히 데이터를 전송하는 것을 의미합니다. 이러한 비연결 지향성은 전송 속도가 빠르다는 장점이 있지만, 데이터 전송 중 손실이 발생할 경우 복구할 수 있는 기능이 없습니다.


에러 제어(Error control)
전송된 데이터가 손실되거나 손상되는 경우를 대비하여, 전송 계층에서는 에러 제어 기능을 제공합니다. TCP 프로토콜에서는 수신자가 전송한 데이터를 잘 받았는지 확인하는 기능인 'ACK'와 데이터 전송 중 손실된 패킷을 다시 전송하는 기능인 '재전송' 기능 등을 제공합니다.


흐름 제어(Flow control)
전송 계층에서는 수신자가 처리할 수 있는 데이터 양을 조절하기 위해 흐름 제어 기능을 제공합니다. 이를 통해 송신자와 수신자 간의 데이터 전송 속도 차이로 인해 발생할 수 있는 문제를 예방할 수 있습니다.


다중화(Multiplexing)
하나의 호스트에서 여러 개의 프로세스가 동시에 데이터를 전송할 경우, 전송 계층에서는 각각의 프로세스를 구분하기 위한 다중화 기능을 제공합니다. 이를 통해 하나의 호스트에서 여러 개의 어플리케이션이 동시에 동작할 수 있습니다.

 

확인

사용중인 컴퓨터에서 실제로 연결된 TCP 정보를 확인할 수 있습니다.

CMD 창을 실행한 뒤, netstat -an 명령어를 입력하면 다음과 같이 프로토콜과 로컬 주소, 외부 주소 및 상태를 확인할 수 있습니다.

서버에 요청을 한 뒤 4way handshake를 통해 FIN 명령어를 받아 TIEM_WAIT 상태로 남아있는 연결정보를 확인할 수 있으며, 현재 연결상태로 유지되고 있는  ESTABLISHED, 또한 요청을 기다리고 있는 LISTENING 포트도 확인할 수 있습니다.

+ Recent posts