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)가 있는데, 이는 데이터 링크 계층을 통과할 수 있는 최대 패킷 크기입니다. 최대 전송 단위는 일반적으로 통신 인터페이스와 관련이 있습니다.

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

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

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

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

TCP 세그먼트

순번시퀀스 번호는 TCP 연결 설정 시 컴퓨터가 생성하는 난수로, 초기값으로 사용되며 SYN 패킷을 통해 수신자에게 전송됩니다. 데이터 전송 중 송신자는 전송되는 데이터 양에 따라 시퀀스 번호를 증가시킵니다. 수신자는 수신된 시퀀스 번호를 기준으로 데이터의 순서를 판단합니다. 데이터 순서가 잘못된 경우, 수신자는 데이터의 순서를 재정렬하여 올바른 순서를 유지합니다.

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

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

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

UDP란 무엇인가요? (Mylinking의)네트워크 탭그리고네트워크 패킷 브로커TCP 또는 UDP 패킷을 모두 처리할 수 있음)
UDP(User Datagram Protocol)는 비연결형 통신 프로토콜입니다. 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 vs UDP

연결TCP는 데이터 전송 전에 연결이 설정되어야 하는 연결 지향형 전송 프로토콜입니다. 반면 UDP는 연결이 필요하지 않으며 데이터를 즉시 전송할 수 있습니다.

서비스 객체TCP는 일대일 양방향 통신 서비스입니다. 즉, 연결은 서로 통신할 수 있는 두 개의 엔드포인트만 갖습니다. 반면 UDP는 일대일, 일대다, 다대다 상호 작용 통신을 지원하며, 여러 호스트와 동시에 통신할 수 있습니다.

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

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

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

TCP vs UDP

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

TCP는 연결 지향 프로토콜이므로 안정적인 데이터 전송이 요구되는 시나리오에서 주로 사용됩니다. 일반적인 사용 사례는 다음과 같습니다.

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

DNS(도메인 이름 시스템)와 같은 저패킷 트래픽DNS 쿼리는 일반적으로 짧은 패킷이며 UDP는 이를 더 빠르게 처리할 수 있습니다.
영상 및 음성과 같은 멀티미디어 통신실시간 처리가 매우 중요한 멀티미디어 전송의 경우, UDP는 지연 시간을 최소화하여 데이터가 적시에 전송될 수 있도록 합니다.
방송통신UDP는 일대다 및 다대다 통신을 지원하며 브로드캐스트 메시지 전송에 사용할 수 있습니다.

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


게시 시간: 2024년 12월 3일