OSI Transport Layer
전송 계층(Transport Layer)은 네트워크 계층에서 전달된 데이터를 최종 목적지에 전달하는 역할을 합니다. 이 계층에서는 데이터의 전송이 신뢰성 있게 이루어지도록 보장하며, 대표적으로 TCP와 UDP 프로토콜이 있습니다.
Protocol
TCP
TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 보장하는 연결 지향적 프로토콜입니다. 데이터를 전송하기 전에 연결을 설정하고, 전송 중 데이터의 순서와 무결성을 확인하는 등의 기능을 제공합니다.
- 연결 지향적: 데이터를 전송하기 전에 상대방과 연결을 설정해야 합니다.
- 신뢰성 있는 데이터 전송: 데이터가 손실되거나 순서가 뒤바뀌지 않도록 보장합니다.
- 흐름 제어 및 혼잡 제어: 네트워크의 상태를 고려하여 데이터를 효율적으로 전송합니다.
3-Way Handshake
TCP 연결을 설정할 때, 데이터 전송이 가능하도록 상대방과의 연결을 확립하는 3단계 과정으로 이루어집니다.
SYN
: 클라이언트가 서버에게 연결을 요청하는 패킷을 보냅니다.SYN-ACK
: 서버는 클라이언트의 요청을 받아들이고, 그에 대한 응답을 보냅니다.ACK
: 클라이언트는 서버의 응답을 확인하고, 연결을 확립합니다.
4-Way Handshake
TCP 연결을 종료할 때에는 4단계 종료 절차가 필요합니다. 이를 통해 양측은 안전하게 연결을 종료할 수 있습니다.
FIN
: 한 쪽이 연결 종료를 요청합니다.ACK
: 상대방은 연결 종료 요청을 받아들이고, ACK 패킷을 보냅니다.FIN
: 상대방도 연결 종료를 요청합니다.ACK
: 요청을 받은 쪽은 최종적으로 ACK 패킷을 보내며 연결이 종료됩니다.
UDP
UDP(User Datagram Protocol)는 비연결 지향적 프로토콜로, 데이터를 전송하기 전에 연결을 설정하지 않습니다. 이로 인해 전송 속도가 빠르고, 오버헤드가 적지만 신뢰성 있는 데이터 전송을 보장하지 않습니다.
- 비연결 지향적: 연결을 설정하지 않고 데이터를 전송합니다.
- 빠른 전송: 오버헤드가 적고, 연결 설정 과정이 없기 때문에 빠른 속도로 데이터를 전송할 수 있습니다.
- 신뢰성 부족: 패킷 손실이나 순서 오류를 복구하지 않으며, 애플리케이션에서 신뢰성을 구현해야 합니다.
프로토콜 | 연결 방식 | 신뢰성 | 속도 | 데이터 순서 보장 |
---|---|---|---|---|
TCP | 연결 지향적 | 신뢰성 있는 데이터 전송 | 느림 | 보장 |
UDP | 비연결 지향적 | 신뢰성 부족 | 빠름 | 미보장 |
Control
Flow Control
Flow Control
은 송신자가 데이터를 전송할 때 수신자가 처리할 수 있는 속도를 초과하지 않도록 제어하는 기법입니다. 이는 데이터가 과도하게 전송되어 수신자가 처리하지 못하는 상황을 방지하고, 네트워크의 효율성을 유지하는 데 중요한 역할을 합니다.
Sliding Window
: 송신자가 일정량의 데이터를 전송한 후, 수신자가ACK
을 보내면 그에 맞춰 송신자가 더 많은 데이터를 보냅니다. 이를 통해 송신 속도가 수신자의 처리 능력에 맞춰 조절됩니다.
Congestion Control
Congestion Control은 네트워크의 혼잡 상태를 감지하고, 송신자가 데이터를 전송하는 속도를 동적으로 조절하여 네트워크의 과부하를 방지하는 기법입니다. 이는 네트워크 혼잡을 예방하고 네트워크의 안정성을 유지하는 데 중요한 역할을 합니다.
- AIMD (Additive Increase/Multiplicative Decrease)
Additive Increase
: 네트워크가 혼잡하지 않으면 송신 윈도우 크기를 점진적으로 증가시킵니다.Multiplicative Decrease
: 네트워크 혼잡이 감지되면 송신 윈도우 크기를 급격히 줄여서 네트워크 부하를 감소시킵니다.
Reliable Data
ACK
ACK(Acknowledgment)은 송신자가 보낸 데이터가 수신자에게 성공적으로 도달했음을 확인하는 응답 패킷입니다. 수신자는 데이터 수신을 확인한 후 송신자에게 ACK 패킷을 보내며, 이를 통해 데이터 손실 여부를 파악하고 필요한 경우 재전송을 요청할 수 있습니다.
Retransmission
Retransmission
은 데이터 전송 중 손실이나 오류가 발생하면 송신자가 해당 데이터를 재전송하는 기법입니다. 송신자는 일정 시간 동안 ACK을 받지 못하면 해당 데이터를 다시 전송하여 신뢰성을 확보합니다.
Checksum
Checksum
은 데이터 전송 시 발생할 수 있는 오류를 검출하기 위한 방법입니다. 송신자는 데이터와 함께 체크섬 값을 계산해 전송하고, 수신자는 받은 데이터와 체크섬 값을 비교하여 데이터 무결성을 확인합니다. 오류가 발생하면 재전송을 요청할 수 있습니다.