TCP와 UDP는 '수신 측에 데이터를 전달한다'는 목표를 갖고 있지만 성질이 다른 트랜스포트 층의 프로토콜입니다. 오늘은 인터넷에서 데이터를 주고받을 때, 이 두 프로토콜이 어떤 역할을 하는지, 그리고 각각의 특징과 사용 사례에 대해 알아보겠습니다.
네트워크
네트워크는 컴퓨터, 스마트폰, 서버와 같은 디지털 장치들이 서로 연결되어 데이터를 주고받을 수 있는 통신 시스템입니다. 이러한 연결은 유선 또는 무선 방식으로 이루어질 수 있으며, 네트워크를 통해 전송되는 데이터는 이메일, 웹 페이지, 파일 등 다양한 형태를 취할 수 있습니다.
TCP/IP(Transmission Control Protocol/Internet Protocol)
TCP/IP는 네트워크 상에서 데이터를 주고받기 위한 규약(프로토콜)의 집합입니다. 인터넷의 기반 기술로, 다양한 네트워크 환경에서도 통신이 원활하게 이루어질 수 있도록 설계되었습니다.
TCP/IP의 5계층 모델
TCP/IP는 네트워크를 통해 데이터를 송수신하는 일련의 과정을 하나로 모아 놓은 것으로 다섯 개의 서로 다른 계층으로 구분하여, 각 계층이 특정 기능을 수행하도록 설계되었습니다. 이러한 계층적 규조는 네트워크 통신의 복잡성을 단순화하고, 문제 해결 및 기술 개발을 용이하게 합니다. TCP/IP가 데이터를 전송할 때는 데이터를 일정한 크기로 분할하여 분할된 작은 데이터 하나를 '패킷'이라고 하고, 이러한 통신 방법을 '패킷 통신'이라고 합니다.
1. 물리 계층(Physical Layer)
물리 계층은 네트워크의 가장 기초적인 수준으로, 데이터를 전기 신호로 변환하여 전송하는 역할을 담당합니다. 이 계층은 케이블, 스위치, 허브와 같은 하드웨어 장비를 포함하며, 데이터의 실제 전송 방식(예: 동축 케이블, 광섬유)을 결정합니다.
2. 데이터 링크 계층(Data Link Layer)
데이터 링크 계층은 물리 계층을 통해 전송된 원시 데이터를 프레임(Frame)이라는 단위로 구성하여, 오류 없이 인접한 네트워크 노드 간에 전달하는 역할을 합니다. 이 계층은 MAC 주소(Media Access Control Address)를 사용하여 장치를 식별하며, 데이터의 오류 검출 및 수정, 흐름 제어를 담당합니다.
3. 네트워크 계층(Network Layer)
네트워크 계층은 데이터 패킷을 소스에서 목적지까지 라우팅하는 기능을 수행합니다. IP 주소를 사용하여 장치를 식별하고, 최적의 경로를 선택하여 패킷을 전달합니다. 이 계층은 라우터와 같은 장비를 사용하여 네트워크 간의 연결을 관리합니다.
4. 전송 계층(Transport Layer)
전송 계층은 클라이언트와 서버 간의 통신을 관리하며, 데이터의 신뢰성 있는 전송을 보장합니다. TCP와 UDP 프로토콜이 이 계층에서 작동하며, 데이터의 분할, 전송, 재조립과 같은 기능을 담당합니다. TCP는 연결 지향적이고 신뢰성 있는 통신을 제공하는 반면, UDP는 연결 없이 빠른 데이터 전송을 제공합니다.
5. 응용 계층(Application Layer)
응용 계층은 사용자와 가장 밀접한 계층으로, 웹 브라우저, 이메일 클라이언트, 파일 전송 프로그램과 같은 네트워크 응용 프로그램을 포함합니다. 이 계층은 네트워크 서비스를 사용자에게 제공하며, HTTP, FTP, SMTP와 같은 다양한 프로토콜을 사용하여 응용 프로그램 간의 통신을 가능하게 합니다.
TCP/IP의 5계층 모델은 데이터 통신 과정을 이해하고, 네트워크 문제를 진단하는 데 유용한 프레임워크를 제공합니다. 각 계층은 독립적으로 작동하며, 상위 계층은 하위 계층의 서비스를 사용하여 더 복잡한 기능을 구현합니다.
우리가 알아볼 TCP와 UDP는 TCP/IP 5계층 중 트랜스포트 층에 속하는 프로토콜 입니다.
TCP(Transmission Control Protocol)
TCP는 인터넷 상에서 데이터를 안정적으로, 순서대로, 에러 없이 교환할 수 있게 해주는 핵심 프로토콜 중 하나입니다. TCP를 사용하면 데이터 패킷들이 목적지에 도달할 때까지 송신자와 수신자 간에 연결을 유지하게 되며, 데이터의 손실이나 중복 없이 정확한 순서대로 전달됩니다.
TCP의 주요 특징
- 연결 지향적: TCP는 통신을 시작하기 전에 송신자와 수신자 간에 연결을 설정합니다. 이 과정을 '핸드셰이크'라고 합니다.
- 신뢰성 있는 데이터 전송: 데이터가 손실되거나 손상될 경우, TCP는 데이터의 재전송을 요청합니다.
- 흐름 제어 및 혼잡 제어: 네트워크의 상태에 따라 데이터 전송 속도를 조절하여, 네트워크 혼잡을 방지하고 효율적인 데이터 전송을 보장합니다.
TCP의 통신 절차
컨트롤 플래그(control flag)
TCP 헤더에는 6비트의 컨트롤 플래그가 있는데 이를 통해 통신 상대에게 통신 상태를 전달합니다. 상대에게 전달하고 싶은 항목은 '1'로, 나머지는 '0'으로 만듭니다.
1. URG(Urgent): 1이면 세그먼트가 긴급한 데이터를 갖고 있는 것 입니다.
2. ACK(Acknowledgement): 1이면 확인 응답한 것입니다.
3. PSH(Push): 주로 대화형 패킷에 사용되고 1이면 세그먼트를 바로 애플리케이션 계층에 전달합니다.
4. RST(Reset): 1이면 통신을 강제적으로 해제합니다.
5. SYN(Synchronize): 1이면 통신 개시를 요청합니다.
6. FIN(Finish): 1이면 통신 종료를 요청합니다.
1. 연결 설정(3-way Handshake)
TCP 통신은 먼저 클라이언트와 서버 간에 안정적인 연결을 설정하는 과정에서 시작됩니다. 이 과정을 '3-way handshake'라고 합니다.
1. 클라이언트가 서버에게 연결을 시작하고자 함을 알리는 SYN 패킷을 전송합니다.
2. 서버는 클라이언트의 SYN 패킷을 받고, 연결을 수락한다는 의미의 SYN-ACK 패킷을 클라이언트에게 보냅니다.
3. 클라이언트는 서버의 SYN-ACK 패킷을 받고, ACK 패킷을 서버에게 보내 연결이 성공적으로 수립되었음을 알립니다.
이 과정을 통해 양방향 통신이 가능한 안정적인 연결이 구축됩니다.
2. 데이터 전송
연결이 성공적으로 수립되면, TCP는 데이터를 세그먼트(segment)라는 단위로 나누어 전송합니다. 각 세그먼트는 순서 번호(sequence number)를 가지고 있어, 수신자가 데이터를 올바른 순서로 재조립할 수 있게 합니다. TCP는 전송된 각 세그먼트에 대한 수신 확인(ACK)을 요구합니다. 만약 어떤 세그먼트에 대한 ACK가 일정 시간 내에 수신되지 않으면 해당 세그먼트는 재전송됩니다. 이러한 메커니즘을 통해 TCP는 네트워크 상황에 따라 동적으로 데이터 전송 속도를 조절하고, 신뢰성 있는 데이터 전송을 보장합니다.
3. 연결 종료
데이터 전송이 완료되면, TCP 연결을 종료하는 과정이 시작됩니다. 이 과정은 '4-way handshake'를 통해 이루어집니다.
1. 데이터 전송을 완료한 클라이언트가 연결 종료를 시작하고자 FIN 패킷을 서버에게 전송합니다.
2. 서버는 클라이언트의 FIN 패킷을 받고, ACK 패킷을 보내 확인 응답을 합니다.
3. 서버도 연결 종료 준비가 완료되면, 클라이언트에게 FIN 패킷을 전송합니다.
4. 클라이언트는 서버의 FIN 패킷을 받고, 최종적으로 ACK 패킷을 전송하여 연결 종료를 확인합니다.
이 과정을 통해 양쪽 모두 데이터 전송이 완료되었음을 확인하고, TCP 연결을 안전하게 종료합니다. TCP의 이러한 통신 절차는 데이터의 정확하고 신뢰성 있는 전송을 보장하는데 핵심적인 역할을 합니다.
UDP(User Datagram Protocol)
UDP는 TCP와 달리 연결을 설정하지 않고 데이터를 전송하는 프로토콜입니다. 이는 데이터 전송 과정을 간소화하며, 결과적으로 전송 속도가 빨라집니다. 또한 여러 상대에게 동시에 데이터를 보낼 수 있고 크기가 큰 데이터를 나누지 못해 UDP는 실시간 스트리밍이나 온라인 게임과 같이 고속 전송이 중요한 통신이나 데이터가 작은 네트워크 관리 통신에 주로 사용됩니다.
UDP의 주요 특징
- 비연결성: 연결 설정 과정 없이 데이터를 바로 전송합니다.
- 빠른 데이터 전송: 연결 설정과 에러 복구 과정이 없기 때문에, TCP보다 빠른 전송이 가능합니다.
- 신뢰성 없는 통신: 데이터의 순서나 무결성을 보장하지 않습니다. 데이터의 손실이 발생해도 재전송하지 않습니다.
TCP vs UDP 어느 것을 사용해야 할까?
TCP와 UDP 중 어떤 프로토콜을 사용할지는 전송하려는 데이터의 유형과 애플리케이션의 요구 사항에 따라 달라집니다.
TCP 사용 사례: 이메일 전송(SMTP), 웹 페이지 로딩(HTTP), 파일 다운로드와 같이 데이터의 정확성과 순서가 중요한 경우
UDP 사용 사례: 실시간 비디오 스트리밍, 온라인 게임, VoIP(Voice over Internet Protocol) 통화와 같이 속도와 효율성이 중요한 경우
TCP와 UDP는 각각의 장단점이 있으며, 상황에 따라 적절한 프로토콜을 선택하는 것이 중요합니다. 데이터의 신뢰성과 순서가 중요하다면 TCP를, 속도와 효율성이 우선시된다면 UDP를 고려해볼 수 있겠습니다. 인터넷 상의 다양한 서비스와 애플리케이션들이 이 두 프로토콜 위에서 구현되고 있음을 이해하면, 통신 기술에 대한 더 깊은 이해를 얻을 수 있을 것입니다. 다음번에는 더욱 흥미로운 꼭 알아야하는 IT 지식에 대해서 알아보겠습니다.
참고자료
"개발자가 되기 위해 꼭 알아야 하는 IT 용어", 고승원 외 21명, 비제이퍼블릭, 2022
'꼭 알아야 하는' 카테고리의 다른 글
IP(Internet Protocol)와 DNS(Domain Name System) 기초부터 알아보기 (0) | 2024.03.01 |
---|---|
HTTP(Hyper Text Transfer Protocol) 기초부터 알아보기 (0) | 2024.02.29 |
웹 서버(Web Server)와 웹 애플리케이션 서버(WAS, Web Application Server) 기초부터 알아보기 (0) | 2024.02.29 |