CS | Network
[네트워크] 전송 계층 프로토콜 (TCP/UDP)
seulll
2024. 10. 21. 17:13
전송 계층의 역할
- 전송 계층은 애플리케이션 계층의 하위 계층으로서 종단 호스트(예: 클라이언트-서버)간의 신뢰성 있는 데이터 전송을 담당한다.
- 전송 계층은 네트워크 상에서 데이터를 전달할 때 1)오류 없이, 2) 순서대로, 3)중복 없이, 4)손실 없이 데이터를 전송하는 것을 목표로 한다.
- 전송 계층은 위 4가지 목표를 달성하기 위해 대표적으로 2가지 프로토콜 (UDP, TCP)을 사용한다.
전송 계층의 동작 방식
소켓과 애플리케이션 계층
- 소켓을 생성할 때, 애플리케이션 계층에서 IP 주소와 포트 번호를 설정한다. 애플리케이션은 이를 통해 통신을 설정하고, 전송 계층에 데이터를 보낸다.
- 소켓이 생성되면, 전송 계층은 애플리케이션 계층으로부터 전달된 데이터와 포트 번호, IP 주소를 받게 된다.
전송 계층(TCP/UDP)
-전송 계층은 애플리케이션 계층으로부터 받은 데이터와 포트 번호를 사용하여 세그먼트(TCP)또는 데이터그램(UDP)을 생성한다.
-이 세그먼트는 하위 계층인 네트워크 계층으로 전달된다. 이때 전송 계층은 포트 번호와 데이터만 처리하며, IP 주소는 직접적으로 다루지 않고 네트워크 계층으로 전달만 한다.
UDP(User Datagram Protocol)란?
UDP는 전송계층에서 동작하는 비연결형 프로토콜로, 빠른 데이터 전송을 제공하는 것이 특징이다.
UDP의 특징
- 비연결형: 데이터를 전송하기 전,송신자와 수신자 간에 연결을 설정하지 않음.
- 신뢰성 없음: 데이터가 손실되거나 순서가 뒤바뀔 수 있으며, 오류 제어 및 흐름 제어가 없음.
- 헤더 크기가 작음: UDP 헤더는 8바이트로 TCP 보다 훨씬 가볍다.
- 빠른 속도: 연결 설정과 관리가 없기 때문에 TCP보다 빠르게 데이터 전송이 가능.
UDP 헤더 구조
-UDP는 매우 간단한 구조를 가지며, 총 8바이트의 헤더를 사용한다.
UDP의 동작 원리
- UDP는 비연결형이기 때문에, 데이터를 보내는 쪽(송신자)은 데이터를 수신자에게 전송만 하며, 중간에 손실되거나 순서가 바뀌어도 이를 복구하는 과정이 없다.
UDP의 동작 과정
- 데이터 송신: 송신자는 UDP 헤더와 데이터를 포함한 데이터그램을 생성한다.
- 네트워크 전송: UDP는 패킷을 네트워크 계층(IP)에 전달한다.
- 데이터 수신: 수신자는 받은 데이터를 기반으로 포트 번호를 확인하고, 애플리케이션에 전달한다.
- 오류 검출 불가: 패킷이 손실되거나 순서가 뒤바뀌어도 재전송을 요청하지 않는다.
UDP의 장점
- 빠른 전송 속도: 연결을 설정하거나 관리하지 않기 때문에 TCP보다 빠르다.
- 오버헤드가 적음: UDP 헤더가 단순하고 작아서 트래픽이 적다.
- 실시간 애플리케이션에 적합: 빠른 데이터 전송이 중요한 VoIP,
스트리밍, 온라인 게임 등에 적합하다.
UDP의 단점
-신뢰성 부족: 패킷이 손실되거나 순서가 틀릴 수 있으며, 이를 보장하는 메커니즘이 없다.
-흐름 제어 없음: 데이터를 얼마나 빠르게 전송할지에 대한 제어가 없으므로, 네트워크 과부하 시 문제가 발생할 수 있다.
TCP(Transmission Control Protocol)란
- TCP는 전송계층에서 동작하는 연결형 프로토콜로, UDP에 비해 상대적으로 느리지만 신뢰성 있는 데이터 전송을 제공하는 것이 특징이다.
TCP의 특징
- 연결형: 데이터 전송 전에 송신자와 수신자 간에 연결을 설정한다.
- 신뢰성: 데이터의 손실이나 오류를 감지하고, 재전송 메커니즘을 통해 신뢰성 있는 데이터 전송을 보장한다.
- 흐름 제어: 수신자의 처리 능력에 맞춰 데이터 전송 속도를 조절한다.
TCP의 흐름 제어(Flow control)란?
- 송신측의 데이터 전송량이 수신측의 데이터 처리 속도보다 빠를 경우 버퍼 오버플로우(buffer overflow)문제가 발생한다.
- 즉, 수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실될 수 있으며, 만약 손실 된다면 불필요하게 응답과 데이터 전송이 송/수신 측 간에 빈번이 발생한다.
- TCP는 흐름 제어를 통해 송신 측의 데이터 전송량을 수신측 버퍼 상태에 따라 적절히 조절한다.
TCP 헤더구조
- TCP 헤더는 최소 20바이트의 고정 크기를 가지며, 추가 옵션 필드에 따라 크기가 달라질 수 있다.
TCP 동작 원리
- TCP는 연결 지향적 프로토콜로서, 클라이언트는 데이터 전송 전에 서버와 연결을 설정하고, 데이터 전송 후에는 연결을 종료하는 과정이 포함된다.
- 클라이언트-서버 간의 연결을 설정하는 이유는?
- 연결 확인: 초기 연결 설정을 통해 클라이언트와 서버는 서로의 존재를 확인할 수 있으며, 송신자가 데이터 전송을 시작하기 전에 수신자가 준비가 되었음을 보장할 수 있음
- ACK 기반의 확인: 클라이언트와 서버 간의 데이터 패킷 전송이 시작되기 전에, 서로 ACK(응답)를 주고받아 데이터가 제대로 도착했는지 확인이 가능함
- 버퍼 상태 파악: 연결 설정 과정에서 송신자는 수신자의 버퍼 크기를 확인하여 데이터 전송 속도를 조절할 수 있음
TCP 동작 과정-1: 연결 설정
- 연결 설정 (3-way handshake)
- SYN: 송신자가 연결 요청을 위해 SYN 패킷을 보낸다.
- SYN-ACK: 수신자가 요청을 수락하고, SYN-ACK 패킷을 송신자에게 보낸다.
- ACK: 송신자가 ACK 패킷을 보내 연결을 확립한다.
TCP 동작 과정-2: 데이터 전송
- 데이터 전송
- 송신자는 데이터를 세그먼트로 나누어 전송한다.
- 각 세그먼트는 순서 번호(Sequence number)를 가지고 있으며, 이를 기반으로 수신자가 세그먼트를 순서대로 배열한 뒤 애플리케이션 계층으로 전달한다.
- 수신자는 데이터가 성공적으로 수신되었음을 ACK 패킷으로 송신자에게 알린다.
- 주어진 시간 동안 ACK 패킷을 수신하지 못하면,클라이언트는 재전송을 수행한다.
TCP 동작 과정-2: 데이터 전송 예시
TCP 동작 과정-3: 연결 종료
- 연결 종료 (4-way handshake)
- FIN: 한쪽 끝이 연결 종료를 요청한다 (나는 보낼 데이터가 더 이상 없다).
- ACK: 상대방이 종료 요청을 수락하고 ACK를 보낸다.
- FIN: 상대방도 연결 종료를 요청한다(나도 더 이상 보낼 데이터가 없다).
- ACK: 마지막으로 ACK를 보내 연결이 종료된다.
TCP의 장점
- 신뢰성: 데이터의 손실이나 오류를 감지하고 재전송하여 신뢰성 있는 데이터 전송을 보장한다.
- 순서 보장: 수신자는 데이터를 전송된 순서대로 수신하므로, 순서가 보장된다(TCP가 시퀀스 넘버 순서대로 애플리케이션으로 데이터를 전달).
- 흐름 제어: 수신자가 처리할 수 있는 데이터의 양을 조절하여 데이터 전송 속도를 관리한다.
TCP의 단점
- 속도 저하: 신뢰성과 연결 설정 때문에 UDP에 비해 상대적으로 느릴 수 있다.
- 오버헤드: 헤더 크기가 크고 연결 관리를 위한 추가적인 자원이 필요하다.