TCP, UDP: 5 layer 중 Transport Layer의 통신 프로토콜: 엔드포인트간 신뢰성 있는 데이터 전송을 담당하는 계층
TCP와 UDP는 모두 두 가지 방식으로 데이터 전송을 지원. TCP는 연결 지향, UDP는 연결 지양
신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
양방향 통신을 통해 Connection 을 연결한다 (3-way handshake)
데이터 순차 전송을 보장한다.
Flow Control, 흐름을 제어 한다.
Congestion Control, 혼잡을 제어한다.
Error Detection , 오류를 감지한다.
데이터 전송단위: Segment
상위 레이어에서 전송된 데이터를 TCP 내부에서 자르고 TCP 헤더를 추가
TCP 3-way handshake (Connection 연결)

1. 클라이언트 측에서 SYN 비트를 1로 설정하여 패킷을 전송한다.
2. 서버 측에서 응답을 알리기 위해 SYN, ACK 비트를 1로 설정하여 패킷을 전송한다.
3. 클라이언트측에서 다시 ACK 비트를 1로 설정하여 패킷을 전송한다.
양방향 커넥션이 연결 -> 데이터 전송 함
데이터 전송 과정
Client가 패킷 송신
Server에서 ACK 송신
ACK를 수신하지 못하면 재전송
4 way-handshake (Connection close)
1. 클라이언트 측에서 FIN 비트를 1로 설정하고 서버측에 전송.
2. 서버측에서 응답을 알리기 위해 ACK 를 전송.
(TIME_WAIT) 서버측에서 남은 패킷을 클라이언트 측에 전송한다.
3. 서버측에서 남은 패킷을 모두 전송한 후, 클라이언트 측에 FIN을 전송.
4. 클라이언트 측에서 응답을 알리기 위해 ACK를 전송.
TCP 의 문제점
매번 커넥션을 연결해서 시간 손실 발생, 패킷을 조금만 손실해도 재전송하는 문제점
TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜
무연결성
Error Detection
비교적 데이터의 신뢰성이 중요하지 않을 때 사용
세그먼트 단위로 쪼개지 않고, UDP 헤더만 붙여 데이터그램 단위로 처리.
전송 단위: Datagram
data -> header+data
UDP의 데이터 전송방식
Client는 패킷을 확인 안하고 무조건 송신. Server는 소캣 무조건 열어두고 있음
client -> packet -> server
(1) TCP는 연결 지향적이고 신뢰할 수 있으며 UDP는 연결이 적고 신뢰할 수 없음.
(2) TCP는 UDP가 아닌 네트워크 인터페이스 수준에서 더 많은 처리가 필요.
(3) TCP는 3 방향 핸드 셰이크, 혼잡 제어, 흐름 제어 및 기타 메커니즘을 사용하여 안정적인 전송을 보장.
(4) UDP는 패킷 손실보다 패킷 지연이 더 심각한 경우에 주로 사용. (실시간 애플리케이션)