TCP 대 UDP: 안정성 대 효율성 논쟁의 신비를 풀어보자

오늘은 TCP에 초점을 맞춰 살펴보겠습니다. 앞서 계층화에 대한 장에서 중요한 점을 언급했었습니다. 네트워크 계층과 그 이하 계층에서는 호스트 간 연결에 더 중점을 둡니다. 즉, 컴퓨터가 다른 컴퓨터에 연결하려면 컴퓨터의 위치를 ​​알아야 합니다. 그러나 네트워크 통신은 기계 간 통신보다는 프로세스 간 통신인 경우가 많습니다. 따라서 TCP 프로토콜은 포트라는 개념을 도입합니다. 포트는 하나의 프로세스만 사용할 수 있으며, 서로 다른 호스트에서 실행되는 애플리케이션 프로세스 간의 직접 통신을 제공합니다.

전송 계층의 역할은 서로 다른 호스트에서 실행되는 애플리케이션 프로세스 간에 직접 통신 서비스를 제공하는 방법이므로 종단 간 프로토콜이라고도 합니다. 전송 계층은 네트워크의 핵심 세부 정보를 숨기므로 애플리케이션 프로세스는 두 전송 계층 엔터티 간에 논리적인 종단 간 통신 채널이 있는 것처럼 인식할 수 있습니다.

TCP는 전송 제어 프로토콜(Transmission Control Protocol)의 약자로, 연결 지향 프로토콜로 알려져 있습니다. 즉, 한 애플리케이션이 다른 애플리케이션으로 데이터를 전송하기 전에 두 프로세스가 핸드셰이크를 수행해야 합니다. 핸드셰이크는 데이터의 안정적인 전송과 순차적인 수신을 보장하는 논리적으로 연결된 프로세스입니다. 핸드셰이크 과정에서 소스 호스트와 목적지 호스트는 일련의 제어 패킷을 교환하고, 성공적인 데이터 전송을 위한 몇 가지 매개변수와 규칙에 동의함으로써 연결이 설정됩니다.

TCP란 무엇인가요? (마이링킹의네트워크 탭그리고네트워크 패킷 브로커TCP 또는 UDP 패킷을 모두 처리할 수 있습니다.)
TCP(전송 제어 프로토콜)는 연결 지향적이고 신뢰할 수 있는 바이트 스트림 기반의 전송 계층 통신 프로토콜입니다.

연결 지향형: 연결 지향적이란 TCP 통신이 일대일, 즉 지점 대 지점 간 통신인 반면, UDP는 여러 호스트에 동시에 메시지를 보낼 수 있으므로 일대다 통신이 이루어질 수 없습니다.
믿을 수 있는: TCP의 안정성은 네트워크 링크의 변경에 관계없이 패킷이 수신자에게 안정적으로 전달되도록 보장하는데, 이로 인해 TCP의 프로토콜 패킷 형식은 UDP보다 더 복잡합니다.
바이트 스트림 기반: TCP의 바이트 스트림 기반 특성은 어떤 크기의 메시지 전송도 허용하고 메시지 순서를 보장합니다. 즉, 이전 메시지가 완전히 수신되지 않았거나 후속 바이트가 수신되었더라도 TCP는 처리를 위해 이를 애플리케이션 계층에 전달하지 않고 중복 패킷을 자동으로 삭제합니다.
호스트 A와 호스트 B가 연결을 설정하면, 애플리케이션은 가상 통신 회선만 사용하여 데이터를 송수신하면 되므로 데이터 전송이 보장됩니다. TCP 프로토콜은 연결 설정, 연결 해제, 연결 유지 등의 작업을 제어합니다. 여기서 가상 회선은 연결 설정만을 의미하며, TCP 프로토콜 연결은 양측이 데이터 전송을 시작하고 데이터의 신뢰성을 보장하는 것을 의미합니다. 라우팅 및 전송 노드는 네트워크 장치에서 처리하며, TCP 프로토콜 자체는 이러한 세부적인 사항과는 관련이 없습니다.

TCP 연결은 전이중 서비스입니다. 즉, 호스트 A와 호스트 B는 TCP 연결에서 양방향으로 데이터를 전송할 수 있습니다. 즉, 호스트 A와 호스트 B 간에 양방향으로 데이터가 전송될 수 있습니다.

TCP는 연결의 송신 버퍼에 데이터를 임시로 저장합니다. 이 송신 버퍼는 3방향 핸드셰이크 중에 설정되는 캐시 중 하나입니다. 이후 TCP는 적절한 시점에 송신 캐시에 있는 데이터를 대상 호스트의 수신 캐시로 전송합니다. 실제로 각 피어는 다음과 같이 송신 캐시와 수신 캐시를 하나씩 갖습니다.

TCP-UDP

송신 버퍼는 송신 측 TCP 구현에서 관리하는 메모리 영역으로, 전송할 데이터를 임시로 저장하는 데 사용됩니다. 연결을 설정하기 위해 3방향 핸드셰이크가 수행되면 송신 캐시가 설정되어 데이터를 저장하는 데 사용됩니다. 송신 버퍼는 네트워크 혼잡 및 수신자의 피드백에 따라 동적으로 조정됩니다.

수신 버퍼는 수신 측 TCP 구현에서 유지되는 메모리 영역으로, 수신된 데이터를 임시로 저장하는 데 사용됩니다. TCP는 수신된 데이터를 수신 캐시에 저장하고 상위 애플리케이션이 이를 읽을 때까지 기다립니다.

전송 캐시와 수신 캐시의 크기는 제한되어 있으며, 캐시가 가득 차면 TCP는 혼잡 제어, 흐름 제어 등의 전략을 채택하여 안정적인 데이터 전송과 네트워크 안정성을 보장합니다.

컴퓨터 네트워크에서 호스트 간의 데이터 전송은 세그먼트를 통해 이루어집니다. 그렇다면 패킷 세그먼트란 무엇일까요?

TCP는 수신 스트림을 청크로 분할하고 각 청크에 TCP 헤더를 추가하여 TCP 세그먼트 또는 패킷 세그먼트를 생성합니다. 각 세그먼트는 제한된 시간 동안만 전송될 수 있으며 최대 세그먼트 크기(MSS)를 초과할 수 없습니다. 패킷 세그먼트는 전송 과정에서 링크 계층을 통과합니다. 링크 계층에는 데이터 링크 계층을 통과할 수 있는 최대 패킷 크기인 ​​MTU(Maximum Transmission Unit)가 있습니다. 최대 전송 단위는 일반적으로 통신 인터페이스와 관련이 있습니다.

그렇다면 MSS와 MTU의 차이점은 무엇일까요?

컴퓨터 네트워크에서 계층 구조는 각 계층 간의 차이를 고려하기 때문에 매우 중요합니다. 각 계층은 서로 다른 명칭을 가지고 있는데, 전송 계층에서는 데이터를 세그먼트라고 하고, 네트워크 계층에서는 데이터를 IP 패킷이라고 합니다. 따라서 최대 전송 단위(MTU)는 네트워크 계층에서 전송할 수 있는 최대 IP 패킷 크기로 볼 수 있으며, 최대 세그먼트 크기(MSS)는 TCP 패킷이 한 번에 전송할 수 있는 최대 데이터 양을 나타내는 전송 계층 개념입니다.

최대 세그먼트 크기(MSS)가 최대 전송 단위(MTU)보다 큰 경우, 네트워크 계층에서 IP 단편화가 수행되고 TCP는 더 큰 데이터를 MTU 크기에 적합한 세그먼트로 분할하지 않습니다. 네트워크 계층에는 IP 계층 전용 섹션이 있습니다.

TCP 패킷 세그먼트 구조
TCP 헤더의 형식과 내용을 살펴보겠습니다.

TCP 세그먼트

시퀀스 번호: TCP 연결이 설정될 때 컴퓨터가 생성하는 난수이며, 초기값으로 사용됩니다. 이 난수는 SYN 패킷을 통해 수신자에게 전송됩니다. 데이터 전송 시, 송신자는 전송된 데이터 양에 따라 일련 번호를 증가시킵니다. 수신자는 수신된 일련 번호를 통해 데이터의 순서를 판단합니다. 만약 데이터 순서가 맞지 않으면, 수신자는 데이터 순서를 재정렬하여 데이터 순서를 유지합니다.

확인 번호: TCP에서 데이터 수신을 확인하는 데 사용되는 일련 번호입니다. 송신자가 다음 수신을 예상하는 데이터의 일련 번호를 나타냅니다. TCP 연결에서 수신자는 수신된 데이터 패킷 세그먼트의 일련 번호를 기반으로 어떤 데이터가 성공적으로 수신되었는지 판단합니다. 수신자가 데이터를 성공적으로 수신하면, 송신자에게 확인 응답 번호가 포함된 ACK 패킷을 보냅니다. 송신자는 ACK 패킷을 수신한 후, 응답 번호를 확인하기 전에 데이터가 성공적으로 수신되었음을 확인할 수 있습니다.

TCP 세그먼트의 제어 비트는 다음과 같습니다.

ACK 비트: 이 비트가 1이면 확인 응답 필드가 유효함을 의미합니다. TCP는 연결이 처음 설정될 때 SYN 패킷을 제외하고 이 비트를 1로 설정해야 한다고 명시합니다.
RST 비트: 이 비트가 1이면 TCP 연결에 예외가 발생하여 연결을 강제로 끊어야 함을 나타냅니다.
SYN 비트: 이 비트가 1로 설정되면 연결이 설정되고 시퀀스 번호 필드에 시퀀스 번호의 초기 값이 설정됨을 의미합니다.
FIN 비트: 이 비트가 1이면 앞으로 더 이상 데이터가 전송되지 않으며 연결이 필요하다는 것을 의미합니다.
TCP의 다양한 기능과 특성은 TCP 패킷 세그먼트의 구조에 의해 구현됩니다.

UDP란 무엇입니까? (Mylinking의네트워크 탭그리고네트워크 패킷 브로커TCP 또는 UDP 패킷을 모두 처리할 수 있음)
사용자 데이터그램 프로토콜(UDP)은 비연결형 통신 프로토콜입니다. TCP와 달리 UDP는 복잡한 제어 메커니즘을 제공하지 않습니다. UDP 프로토콜을 사용하면 애플리케이션이 연결을 설정하지 않고도 캡슐화된 IP 패킷을 직접 전송할 수 있습니다. 개발자가 TCP 대신 UDP를 사용하면 애플리케이션은 IP와 직접 통신합니다.

UDP 프로토콜의 전체 이름은 User Datagram Protocol(사용자 데이터그램 프로토콜)이며, 헤더는 8바이트(64비트)로 매우 간결합니다. UDP 헤더의 형식은 다음과 같습니다.

UDP 세그먼트

목적지 및 소스 포트: 주된 목적은 UDP가 어떤 프로세스에 패킷을 보내야 하는지 나타내는 것입니다.
패킷 크기: 패킷 크기 필드는 UDP 헤더 크기와 데이터 크기를 포함합니다.
체크섬: UDP 헤더와 데이터의 안정적인 전달을 보장하도록 설계되었습니다. 체크섬의 역할은 UDP 패킷 전송 중에 오류나 손상이 발생했는지 감지하여 데이터 무결성을 보장하는 것입니다.

Mylinking의 TCP와 UDP의 차이점네트워크 탭그리고네트워크 패킷 브로커TCP 또는 UDP 패킷을 모두 처리할 수 있습니다.
TCP와 UDP는 다음과 같은 측면에서 다릅니다.

TCP 대 UDP

연결: TCP는 연결 지향 전송 프로토콜로, 데이터 전송 전에 연결이 필요합니다. 반면 UDP는 연결이 필요하지 않으며 즉시 데이터를 전송할 수 있습니다.

서비스 객체: TCP는 일대일 2점 서비스입니다. 즉, 연결은 서로 통신할 수 있는 두 개의 종점만 갖습니다. 반면 UDP는 일대일, 일대다, 그리고 다대다의 상호 작용 통신을 지원하여 여러 호스트와 동시에 통신할 수 있습니다.

신뢰할 수 있음: TCP는 데이터가 오류, 손실, 중복 없이 요청 시 정확하게 도착하도록 안정적으로 데이터를 전송하는 서비스를 제공합니다. 반면 UDP는 최선을 다하지만 안정적인 전송을 보장하지 않습니다. UDP는 전송 중 데이터 손실 및 기타 문제가 발생할 수 있습니다.

혼잡 제어, 흐름 제어: TCP는 혼잡 제어 및 흐름 제어 메커니즘을 갖추고 있어 네트워크 상황에 따라 데이터 전송 속도를 조절하여 데이터 전송의 보안과 안정성을 보장합니다. UDP는 혼잡 제어 및 흐름 제어 메커니즘을 갖추고 있지 않으므로 네트워크 혼잡도가 매우 높더라도 UDP 전송 속도를 조정하지 않습니다.

헤더 오버헤드: TCP는 일반적으로 20바이트의 긴 헤더 길이를 가지고 있으며, 옵션 필드를 사용하면 헤더 길이가 늘어납니다. 반면 UDP는 8바이트의 고정 헤더를 가지고 있어 헤더 오버헤드가 더 낮습니다.

TCP 대 UDP

TCP 및 UDP 응용 프로그램 시나리오:
TCP와 UDP는 서로 다른 두 가지 전송 계층 프로토콜이며, 애플리케이션 시나리오에서 몇 가지 차이점이 있습니다.

TCP는 연결 지향 프로토콜이므로 주로 안정적인 데이터 전송이 필요한 상황에서 사용됩니다. 일반적인 사용 사례는 다음과 같습니다.

FTP 파일 전송: TCP는 전송 중에 파일이 손실되거나 손상되는 것을 방지할 수 있습니다.
HTTP/HTTPS: TCP는 웹 콘텐츠의 무결성과 정확성을 보장합니다.
UDP는 비연결형 프로토콜이므로 신뢰성을 보장하지는 않지만, 효율성과 실시간성을 갖추고 있습니다. UDP는 다음과 같은 시나리오에 적합합니다.

DNS(도메인 이름 시스템)와 같은 저패킷 트래픽: DNS 쿼리는 일반적으로 짧은 패킷이며 UDP는 이를 더 빨리 완료할 수 있습니다.
비디오, 오디오 등 멀티미디어 통신: 높은 실시간성이 요구되는 멀티미디어 전송의 경우 UDP는 더 낮은 지연 시간을 제공하여 적절한 시기에 데이터가 전송될 수 있도록 보장합니다.
방송통신: UDP는 일대다 및 다대다 통신을 지원하며 브로드캐스트 메시지 전송에 사용될 수 있습니다.

요약
오늘 우리는 TCP에 대해 배웠습니다. TCP는 연결 지향적이고 신뢰성 있는 바이트 스트림 기반 전송 계층 통신 프로토콜입니다. 연결 설정, 핸드셰이크, 확인 응답을 통해 데이터의 안정적인 전송과 순차적인 수신을 보장합니다. TCP 프로토콜은 포트를 사용하여 프로세스 간 통신을 구현하고, 서로 다른 호스트에서 실행되는 애플리케이션 프로세스에 직접 통신 서비스를 제공합니다. TCP 연결은 전이중(full-duplex) 방식으로 양방향 데이터 전송을 동시에 지원합니다. 반면, UDP는 비연결 지향 통신 프로토콜로, 신뢰성을 보장하지 않으며 실시간 요구 사항이 높은 일부 시나리오에 적합합니다. TCP와 UDP는 연결 모드, 서비스 객체, 신뢰성, 혼잡 제어, 흐름 제어 등 여러 측면에서 서로 다르며, 적용 시나리오 또한 서로 다릅니다.


게시 시간: 2024년 12월 3일