- UDP(User Datagram Protocol)
UDP(User Datagram Protocol)는 간단하고 경량화된 프로토콜이며, 아래와 같은 특징을 가지고 있습니다.
- 비연결성(Connectionless): UDP는 데이터를 전송하기 전에 연결을 설정하지 않습니다. 전송은 독립된 패킷인 데이터그램으로 전송합니다.
- 비신뢰성(Unreliable): UDP는 데이터 전송의 신뢰성을 보장하지 않습니다. 패킷이 손실되거나 순서가 바뀌거나 중복되더라도 이를 감지하거나 재전송하지 않습니다.
- 패킷 헤더 축소: UDP 헤더는 8바이트, TCP 헤더는 20바이트로 TCP 헤더에 비해 가볍습니다. 이로 인해 오버헤드가 적어 전송 효율이 높아집니다.
-
장점
- 사전 연결 설정이 필요 없고, 데이터 전송 과정에서의 확인 절차가 생략되며, 오버헤드가 적어 전송 속도가 매우 빠릅니다.
- 프로토콜이 단순하고, 리소스 소모가 적습니다.
-
단점
- 데이터의 신뢰성이 없어 패킷 손실, 중복, 순서 변경 등의 문제가 발생할 수 있습니다.
- 패킷 손실에 민감한 애플리케이션에는 사용이 부적합합니다.
- UDP 체크섬
UDP 체크섬이란 데이터의 무결성을 확인하기 위한 메커니즘입니다. UDP 체크섬은 선택사항이지만 UDP를 사용하는 대부분의 네트워크에서 사용됩니다.
체크섬 값은 송신 측에서 계산되어 UDP 헤더에 포함되며, 수신 측에서는 이 값을 사용해 수신한 데이터그램의 무결성을 검증합니다. 다만 무결성을 검증하기 위한 최소한의 기능을 제공하지만, 문제가 생겼을 때, 문제에 대한 해결 기능은 없습니다. 데이터에 대한 문제가 생겼다면 해당 데이터그램은 폐기되고, 재전송은 상위 계층(ex. TCP, 응용계층)에서 처리해야 합니다.
- 신뢰적 데이터 전송
전송후 대기 프로토콜(Stop-and-Wait Protocol)
전송후 대기 프로토콜(Stop-and-Wait Protocol)이란 데이터 통신에서 사용되는 간단한 신뢰성 전송 프로토콜 중 하나입니다. 이 프로토콜은 송신자가 데이터를 전송한 후, 수신자로부터 해당 데이터에 대한 확인 응답을 받을 때까지 대기하는 방식으로 작동합니다. 즉, 한 번에 하나의 데이터 패킷을 전송하고, 그 패킷이 제대로 수신되었는지 확인한 후 다음 데이터를 전송하는 것입니다.
- 데이터 전송: 송신자가 수신자에게 데이터 전송
- 응답 대기: 송신자는 수신자로부터 데이터 도착 응답을 기다림
- 응답 수신: 송신자는 수신자로부터 응답 신호를 받으면, 다음 데이터 패킷을 전송
=> 만약 일정 시간 내에 응답을 받지 못하면, 송신자는 동일한 데이터를 다시 전송
- 장점
- 프로세스가 간단합니다.
- 각 데이터 패킷마다 확인 응답을 받으므로 손실된 데이터가 있을 경우 재전송하여 신뢰성을 보장할 수 있습니다.
- 단점
파이프라인 프로토콜 (Pipeline Protocol)
파이프라인 프로토콜(Pipeline Protocol)은 여러 데이터 패킷을 동시에 전송하고 처리하는 방식을 말합니다. 이 방식은 전송 후 대기 프로토콜과는 달리 한 번에 하나의 패킷이 아닌 여러 패킷을 연속적으로 전송함으로써 네트워크 대역폭을 보다 효율적으로 활용하고 네트워크 전송 지연(latency)을 줄입니다.
- 데이터 전송: 송신자는 수신자에게 여러 데이터를 연속적으로 전송
- 데이터 수신: 수신자는 데이터를 받아 순차적으로 처리 (패킷 손실 및 순서 확인)
- 응답: 수신자가 데이터를 정상적으로 수신했을 때, 응답을 송신자에게 보내고 다음 데이터를 처리
=> 만약 수신자가 패킷을 손실하면 송신자는 해당 패킷을 재전송
- 장점
- 여러 패킷을 동시에 전송하기 때문에 전송 지연을 줄이고 네트워크 대역폭을 효율적으로 활용할 수 있습니다.
- 응답을 기다리지 않고 데이터를 연속적으로 전송하기 때문에 전송 속도가 빠릅니다.
- 네트워크 지연 시간이 큰 경우에도 데이터 전송이 중단되지 않고 계속 진행되기 때문에 성능이 향상됩니다.
- 단점
- 전송 및 오류 처리 과정이 복잡해집니다. 예를 들면, 송신 측과 수신 측에서 데이터 패킷의 순서를 추적하고 오류를 처리하는 복잡한 알고리즘이 필요합니다.
- 여러 패킷을 동시에 전송하는 과정에서 패킷 손실이나 오류가 발생할 경우, 오류가 발생한 패킷뿐만 아니라 그 이후의 정상 전송된 패킷도 재전송해야 할 수 있습니다.
대표적으로 TCP(Transmission Control Protocol) 프로토콜이 파이프라인 방식으로 데이터를 송수신하고 있습니다.
TCP(Transmission Control Protocol)
TCP(Transmission Control Protocol, 전송 제어 프로토콜)는 전송 계층에 속하는 주요 프로토콜로, 신뢰성 있는 데이터 전송을 보장하는 데 중요한 역할을 합니다.
TCP는 연결 지향적 프로토콜로, 데이터를 보내기 전에 송신자와 수신자 간의 연결을 설정하고, 전송 중 데이터의 손실, 중복, 순서 변경을 방지하는 여러 메커니즘을 사용합니다.
TCP 특징
- 연결 지향 프로토콜
TCP는 송신자와 수신자 간에 데이터 전송을 하기 전에 먼저 연결을 설정합니다. 이 연결은 3-way 핸드셰이크 과정을 통해 설정되며, 데이터를 모두 전송한 후에는 연결을 종료합니다.
- 신뢰성 보장
TCP는 데이터가 손실되거나 손상되지 않고, 순서대로 도착하도록 보장합니다. 이를 위해 확인 응답(ACK), 재전송, 순서 제어 등의 기능을 사용합니다.
- 흐름 제어
송신자가 수신자의 처리 능력을 초과하는 양의 데이터를 전송하지 않도록 흐름을 제어합니다. 수신자는 송신자에게 자신의 처리 가능 크기를 알리며, 송신자는 그에 맞춰 데이터를 전송합니다.
- 혼잡 제어
네트워크가 혼잡해지는 것을 방지하기 위해 TCP는 혼잡 제어 메커니즘을 사용합니다. 송신자는 네트워크 상태에 따라 전송 속도를 조절하여 네트워크 트래픽을 제어합니다.
- 순서 제어
TCP는 각 데이터 패킷에 시퀀스 번호를 부여하여 패킷이 순서대로 도착하지 않더라도 올바른 순서로 재구성할 수 있도록 합니다. 이는 수신자가 데이터를 올바른 순서로 처리할 수 있게 해줍니다.
3-way Handshake
TCP는 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정합니다. 이를 3-way Handshake라고 합니다.
- 3-way Handshake 과정
1. SYN: 송신자가 연결 요청을 위해 SYN 패킷을 수신자에게 보냅니다.
2. SYN/ACK: 수신자는 송신자의 SYN을 수신하고, 이에 대한 응답 ACK 패킷과 함께 수신자가 송신자에게 연결 요청을하는 SYN 패킷을 송신자에게 보냅니다.
3. ACK: 송신자는 SYN/ACK 패킷을 수신한 후, 이를 확인 후 응답하는 ACK 패킷을 다시 수신자에게 보냅니다.
위의 3단계 과정을 거쳐 송신자와 수신자는 서로 연결 상태에 있게 되며, 데이터 전송을 시작할 수 있습니다.
4-way Handshake
TCP는 3-way Handshake로 연결이되고 데이터를 주고 받습니다. 그 이후 데이터를 다 주고 받았다면, 연결을 해제하게되는 과정을 거칩니다. 이를 4-way Handshake라고 합니다.
- 4-way Handshake 과정
1. FIN: 송신자가 연결을 종료하고 싶다는 의사 표시로 FIN 패킷을 보냅니다.
2. ACK: 수신자는 FIN 패킷을 받고 이를 확인하는 ACK 패킷을 보냅니다.
3. FIN: 수신자도 연결 종료를 위해 FIN 패킷을 보냅니다.
4. ACK: 송신자는 수신자의 FIN을 확인하는 ACK 패킷을 보내고 연결이 종료됩니다.