전송계층은 애플리케이션(end point)간 신뢰성 있는 데이터 전송을 담당하는 계층이다.
전송계층이 없다면?
데이터의 순차 전송이 원할하지 않다.
흐름 문제 (Flow)
원인 : 송수신자간의 데이터 처리 속도 차이
송신측의 전송량이 수신측의 처리량보다 많은 경우, 처리할 수 있는 데이터량을 초과했을 때 손실될 수 있기 때문에 누락하는 문제가 발생.
혼잡 문제 (Congestion)
원인 : 네트워크의 데이터 처리속도.
송신자가 데이터를 전송할 때, 네트워크를 거쳐 수신자에게 전송된다. 이때 데이터가 경유하는 라우터에 따라 네트워크 상태가 달라진다. 만약, 송신자가 과도하게 데이터를 보내면 네트워크가 혼잡해서 제대로된 전송이 불가능
-> 데이터의 손실 발생
전송계층 프로토콜 중 하나로, 신뢰성있는 데이터 통신을 가능하게 해주는 프로토콜이다.
Connection 연결 (3 way-handshake) - 양방향 통신
데이터의 순차 전송을 보장.
흐름 제어, 혼잡 제어, error detection


TCP 세그먼트 단위로 데이터를 처리한다.
Application단에서 받은 데이터를 잘라서 tcp header+data -> 세그먼트
포트번호로 전송을한다
전송의 신뢰성은 보장하지만, 매번 Connection을 연결해서 시간 손실 발생
패킷을 조금만 손실해도 재전송이 필요하다. 중요한 메일같은 건 이 과정이 장점이 될 수도 있지만, 조금의 손실로도 재전송할땐 비효율
User Datagram Protocol로 전송 계층 프로토콜 중 하나이다. TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜이다.
세그먼트 = tcp 헤더 + 패킷(data)
세그먼트를 udp에서는 데이터그램
UDP는 User Datagram형태로 데이터를 처리한다. Application단에서 데이터가 내려오면 UDP헤더를 추가해서 User Datagram을 만든다. 이때 TCP와 다르게 데이터는 쪼개지 않고 직접 application단에서 쪼개줘야한다.

각 필드의 의미는 다음과 같다.
UDP는 비연결형 서비스를 이용하여 데이터그램을 전송하며, 각 데이터그램은 전송 과정에서 독립적으로 중개되고 데이터그램이 목적지까지 도착할 수 있도록 최선을 다하지만 반드시 목적지에 도착하는 것을 보장하지 않는다.
또한, 슬라이딩 윈도우 프로토콜 같은 흐름 제어 기능도 없어 버퍼 오버플로에 의한 데이터 분실 오류가 발생할 수 있다.
이와 같은 이유로 UDP를 사용해 데이터그램을 전송할 때는 오류 발생 가능성을 항상 염두에 두어야 한다.
오류의 유형은
그림은 전송 과정에서 데이터그램을 분실하는 오류를 설명한다.

송신 프로세스가 전송한 데이터그램 네 개가 첫 번째 라우터에서 두 번째 라우터로 전송되는 과정에서 3번 데이터그램에 오류가 발생하여 다음 라우터에 도착하지 못했다.
UDP는 분실 오류를 복구하는 기능을 수행하지 않으므로, 수신 프로세스에는 1, 2, 4번 데이터그램만 도착한다.UDP에서의 데이터그램 분실 오류는 상위 계층 스스로 데이터 분실을 확인해 복구해야 한다.
➡ UDP에서의 데이터그램 분실 오류는 상위계층 스스로 데이터 분실을 확인하는 기능을 수행하여 복구해야 한다.
그림은 데이터그램의 전송 순서가 뒤바뀌어 수신 프로세스에 도착한 경우이다.

UDP 는 각 데이터그램을 개별 전송 경로를 선택하여 전송한다.
따라서 그림처럼 1번과 2번 데이터 그램은 아래쪽 경로로, 3번과 4번 데이터그램은 위쪽 경로로 전달될 수 있다. 또한, 각 경로에서 데이터를 얼마나 빠르게 전송할 수 있는지도 예측할 수 없다.
그림에서 위쪽 경로를 선택한 3, 4번 데이터그램이 수신 프로세스에 먼저 도착하여 최종적인 도착 순서가 3, 4, 1, 2번으로 변경되었다.
➡ 데이터의 순서 번호 기능이 없기 때문에 도착 순서 변경 오류를 해결하려면 UDP를 사용하는 응용 프로그램의 내부에 순서 번호 기능이 구현되어야 한다.
TCP보다 신뢰성이 떨어져 일반 응용 프로그래머들 사이에서는 덜 선호되지만, 프로토콜을 처리하는 기능이 작아 TCP보다 데이터 처리가 빠르므로 데이터 전송 시간에 민감한 응용 환경에서는 UDP를 사용하는 것이 유리하다.
➡ 영상 스트리밍, 온라인 게임 환경