본문 바로가기

이것저것 스터디📚/CS 스터디

TCP와 UDP

TCP(Transmission Control Protocol)

- 인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.

- 연결 지향 방식으로 패킷 교환 방식을 사용한다.

- 3-way handshaking 과정을 통해 연결을 설정한다.

- 4-way handshaking 과정을 통해 연결을 해제한다.

- 흐름 제어(데이터를 송신하는 곳과 수신하는 곳에서 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것. 예를 들어 송신하는 곳에서 감당이 안되게 데이터를 빠르게 많이 보내면 수신자에서 문제가 발생하기 때문) 및 혼잡 제어(데이터를 송신하는 곳의 데이터 전달과 네트워크 처리 속도 차이를 해결하기 위한 기법), 높은 신뢰성 보장

UDP(User Datagram Protocol)

- 데이터를 데이터그램 단위로 처리하는 프로토콜이다.

- 데이트그램이란 독립적인 관계를 지니는 패킷이라는 뜻이다.

- 비연결형 프로토콜로써 연결을 위해 할당되는 논리적인 경로가 없다.

- 즉, 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 된다.

- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.

- 신뢰성이 낮다.

TCP와 UDP 비교

프로토콜 종류 TCP UDP
연결방식 연결형 서비스
(패킷 교환 방식)
비연결형 서비스
(데이터그램 방식)
전송 순서 전송 순서 보장 전송 순서 비보장
수신 여부 확인 수신 여부 확인 수신 여부 미확인
통신 방식 1:1 통신 1:1 or 1:N or N:N 통신
신뢰성 높다 낮다
속도 느리다 빠르다

* 정리

TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 둘 다 인터넷 프로토콜로서, 데이터 통신을 위한 두 가지 주요 프로토콜이다.

먼저 TCP는 연결 지향적인 프로토콜로, 신뢰성 있는 데이터 전송을 제공하는 프로토콜로서 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다. 또한, 전송 중에 데이터의 순서를 보장하고, 손실된 데이터를 다시 전송하고, 데이터 전송 완료 후 연결을 정리하는 등의 기능을 제공한다.

 

UDP는 비연결성 프로토콜로, 데이터를 신속하게 전송하고자 할 때 사용되며, 데이터 전송의 신뢰성은 제공하지 않는다. 데이터 그램을 사용하여 데이터를 전송하며, 데이터 전송 후 연결을 설정하거나 정리하지 않는다.

 

TCP와 UDP의 차이점은 먼저 TCP는 데이터의 신뢰성을 보장하고, 손실된 데이터의 재전송을 지원하지만, UDP는 데이터를 그대로 전송하고 손실이나 중복 전송이 발생할 수 있다.

또한, TCP는 연결을 설정하고 해제하는 과정을 거치지만, UDP는 단순히 데이터를 전송한다.

대신 UDP는 TCP에 비해서 빠른 속도로 데이터를 전송할 수 있다.

TCP는 주로 파일 전송, 이메일 전송, 웹 브라우징과 같이 신뢰성이 중요한 응용프로그램에서 사용되고, UDP는 음성 및 영상 스트리밍, 온라인 게임, DNS와 같이 신속한 데이터 전송이 중요한 응용프로그램에서 주로 사용된다.


* 추가 학습 내용

 

HTTP가 TCP를 사용하는 이유

- 안정성과 신뢰성 : TCP 는 안정적인 데이터 전송을 보장하기 위한 매커니즘(데이터의 무손실 전송과 순서 보장 제공)을 가지고 있으며 이는 데이터 전송에 대한 신뢰성이 있다. UDP는 데이터 손실 및 패킷 순서가 바뀔 수 있는 비연결형 프로토콜로, TCP에 비해 안정성과 신뢰성이 낮다.

HTTP 3.0에서는 UDP 기반인 QUIC을 사용하는 이유는?

1. 연결 설정의 빠른 속도: QUIC는 연결 설정이 빠르며, 특히 기존의 TCP + TLS(HTTPS)와 비교했을 때 더 빠르다. 

2. 다중 스트림: QUIC는 다중 스트림을 지원하므로, 여러 개의 데이터 스트림을 병렬로 전송할 수 있습니다. 이는 웹 페이지 로딩 및 데이터 전송의 효율성을 높이며 더 빠른 성능을 제공합니다.

3. 혼잡 제어와 패킷 손실 복구: QUIC는 TCP와 유사한 혼잡 제어 메커니즘을 제공하면서도 더 빠르게 혼잡 상황을 탐지하고 처리할 수 있습니다. 또한 QUIC은 UDP를 기반으로 하지만, 패킷 손실 시 빠르게 복구할 수 있는 기능도 포함하고 있습니다.

Checksum이란?

- Checksum(체크섬)은 데이터의 무결성을 검사하기 위해 사용되는 값으로써. 주로 데이터 전송 과정에서 오류 검출 및 수정을 위해 활용된다. Checksum은 데이터 블록 또는 메시지의 모든 비트를 계산하여 얻어지며, 이 값은 데이터의 일부분을 포함하는 경우 해당 데이터 블록의 정확성을 확인하는 데 사용된다.

- Checksum의 작동 방식은 데이터 블록 내의 모든 비트를 합산하거나 연산하여 특정 값을 계산하여 데이터를 전송할 때, 이 Checksum 값을 함께 보내며, 데이터를 수신한 측에서는 받은 데이터 블록의 모든 비트를 다시 합산하거나 연산하여 새로운 Checksum 값을 계산한다. 그런 다음, 송신자가 보낸 Checksum 값과 수신자가 계산한 Checksum 값이 동일한지 비교한다.

- 만약 Checksum 값이 다르다면 데이터 블록에 오류가 있는 것으로 간주되며. 이를 통해 데이터 전송 중 발생한 오류를 감지하고, 필요한 경우 오류 복구를 시도할 수 있다.

- Checksum은 네트워크 통신, 데이터 저장 및 파일 전송과 같은 다양한 응용 분야에서 사용되는데, 예를 들어, 인터넷 프로토콜인 TCP/IP에서는 데이터 패킷의 무결성을 검사하기 위해 Checksum을 사용한다.

TCP와 UDP 중 Checksum을 수행하는 것은?

- TCP와 UDP 모두 데이터의 무결성을 검사하기 위해 Checksum을 사용한다.

- TCP의 경우, TCP 헤더에는 Checksum 필드가 있어서 TCP 세그먼트에 포함된 데이터와 헤더에 대한 Checksum을 계산하여 검사한다. 데이터를 수신한 TCP 수신자는 이 Checksum 값을 사용하여 데이터의 무결성을 확인하고, 오류가 발생한 경우 재전송을 요청할 수 있다.

- UDP는 비연결형 프로토콜로서 신뢰성을 보장하지 않지만, 데이터의 무결성을 검사하기 위해 Checksum을 사용한다. UDP 헤더에도 Checksum 필드가 있어서 UDP 패킷에 포함된 데이터와 헤더에 대한 Checksum을 계산하여 검사한다. UDP는 데이터를 보내고 받을 때 Checksum 값을 사용하여 오류를 감지하며, 오류가 발생한 경우 오류를 무시하거나 처리 방식을 결정할 수 있다.

Checksum을 통해 오류를 정정할 수 있는지?

- Checksum은 주로 데이터의 무결성을 검사하고 오류를 감지하는 데 사용되기 때문에 Checksum을 통해 오류를 정정할 수는 없다. 

- TCP와 UDP에서는 오류를 정정하는 메커니즘을 내장하고 있지 않지만, 오류가 발생한 경우 패킷을 무시하거나 재전송을 요청할 수 있다.

- TCP의 경우 패킷을 수신한 TCP 수신자는 Checksum을 사용하여 데이터의 무결성을 검사하고 오류가 감지되면 해당 패킷을 무시하고 재전송을 요청한다. TCP는 패킷의 순서를 유지하고, 재전송을 통해 오류가 발생한 패킷을 다시 수신자에게 보내어 데이터의 신뢰성을 보장한다.

- UDP는 신뢰성을 보장하지 않는 프로토콜이기 때문에 오류가 발생한 경우 오류 복구를 위한 내장된 메커니즘은 제공하지 않으며, UDP에서는 오류가 발생한 데이터를 무시하거나 오류 처리 방식을 사용자가 정의하게 된다. 따라서 UDP를 사용할 때는 오류 처리를 애플리케이션 레벨에서 수행해야 한다.

TCP가 신뢰성을 보장하는 방법은?

- TCP 프로토콜에서는 데이터를 보낼 때 수신자 측에서도 수신 확인(Acknowledgment, ACK)을 보냄으로써 신뢰성을 보장한다.

- 예를 들어, 데이터를 전송하는 과정은 다음과 같다.

 

1. 송신자는 데이터를 패킷에 담아 수신자에게 보낸다.
2. 수신자는 이전에 수신한 데이터의 순서 번호와 함께 데이터를 받았다는 수신 확인(ACK)을 송신자에게 보낸다. 
3. 송신자는 수신자로부터 ACK를 받으면 해당 데이터 패킷이 올바르게 도착했다고 판단하며, 다음 데이터 패킷을 전송한다.
4. 만약 송신자가 수신 확인을 기다리는 동안 일정 시간 내에 ACK를 받지 못하면, 송신자는 해당 데이터 패킷을 다시 전송한다.

 

- 위와 같은 과정을 통해 TCP는 데이터의 무결성과 순서를 보장한다


학습 단계로 잘못된 정보가 있을 수 있습니다. 잘못된 부분에 대해 알려주시면 정정하도록 하겠습니다.

참고 :  https://mangkyu.tistory.com/15

https://velog.io/@sms8377/Network-TCP%EC%9D%98-%EC%9E%AC%EC%A0%84%EC%86%A1%EA%B3%BC-%ED%83%80%EC%9E%84-%EC%95%84%EC%9B%83

https://gyoogle.dev/blog/computer-science/network/%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4%20&%20%ED%98%BC%EC%9E%A1%EC%A0%9C%EC%96%B4.html

https://code-lab1.tistory.com/30

'이것저것 스터디📚 > CS 스터디' 카테고리의 다른 글

HTTP 프로토콜  (0) 2023.09.11
3-way handshake, 4-way handshake  (0) 2023.09.11
'www.google.com'을 브라우저에 입력하면 일어나는 일  (0) 2023.09.04
TCP/IP 4계층  (0) 2023.09.04
OSI 7계층  (1) 2023.09.04