전송 계층이 없다면TCP와 UDP의 특징 비교TCP (Transmission Control Protocol)TCP 3 Way HandshakeTCP의 데이터 전송 방식TCP 4-way-handshake (Connection close)문제점TCP hole-punchingUDPUDP 헤더UDP 사용처
TCP/IP 프로토콜 스택의 4계층에서 동작하는 프로토콜들임(TCP, UDP)
- TCP/IP는 사실 프로토콜의 집합임. 각각은 다른 기능을 제공함
- IP 프로토콜은 기본적인 네이밍 스킴과 패킷(known as datagrams)을 보낼 수 있는 배송 메커니즘을 제공함
- IP 프로토콜은 기본적으로 패킷이 손실되거나 복제되었을 때에 회복하려는 노력을 전혀 하지 않기에 믿을만 하지는 않음
- UDP(Unreliable Datagram Protocol) 은 IP 프로토콜을 아주 약간 확장한 것으로 패킷을 프로세스에서 프로세스로 전달함. host에서 host가 아닌
- TCP는 IP 프로토콜 위에 뭘 더 얹어서 만든 복잡한 프로토콜로 프로세스 간에 reliable full duplex (bidirectional) 연결을 맺음
- 패킷을 분할하고 조합하기 위해 TCP 프로토콜에서는 시퀀스 번호와 ACK 번호를 사용함
전송 계층이 없다면
- 데이터의 순차 전송을 책임져줌 송신자 (1 ,2, 3) ⇒ 수신자 (2, 3 ,1) 이렇게 될 수 있음
- Flow (흐름 문제)
- 송수신자 간의 데이터 처리 속도 차이.
- Congestion (네트워크 문제)
⇒ 데이터의 손실이 발생할 수 있음
TCP와 UDP의 특징 비교
TCP | UDP |
연결 지향 | 비연결형 |
오류 제어 수행함 | 오류 제어 수행 안함 |
흐름 제어 수행함 | 흐름 제어 수행 안함 |
유니캐스트 | 유니캐스트, 멀티캐스트, 브로드캐스트 |
전이중 | 반이중 |
데이터 전송 | 실시간 트래픽 전송 |
TCP (Transmission Control Protocol)
- 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
- 특징 : Connection 연결 ( 3-way-handshake) - 양방향 통신
- 데이터의 순차 전송을 보장
- Flow Control (흐름 제어)
- Congestion Control (혼잡 제어)
- Error Detection (오류 감지) — checksum 확인


TCP 3 Way Handshake
- TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정임

- 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보냄. 그리고 SYN/ACK 응답을 기다림
- 서버가 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK, SYN 플래그가 설정된 패킷을 발송
- 클라이언트가 서버에게 ACK을 보내고 이후부터는 연결이 이루어지고 데이터가 오가게 됨
TCP의 데이터 전송 방식
TCP에서는 분할된 패킷을 잘 분할하고 수신 측이 잘 조합하도록 패킷에 순서를 주고 응답 번호를 부여함. 패킷에 순서를 부여하는 것을 시퀀스 번호, 응답 번호를 부여하는 것을 ACK 번호라고 부름
보내는 쪽에서 패킷에 번호를 부여하고(시퀀스 번호) 받는 쪽은 이 번호의 순서가 맞는지 확인.
받은 패킷 번호가 맞으면 응답을 주는데, 이 때 다음 번호의 패킷을 요청 → 이게 ACK 번호
예) 송신 측이 1번 패킷을 보냈는데 수신 측이 이 패킷을 잘 받는다면 1번을 잘 받았으니 다음으로 2번 달라고 ACK 번호 2를 줌
- Client가 패킷 송신
- 서버에서 ACK 송신
- 클라이언트가 ACK 를 수신하지 못하면 재전송
TCP 4-way-handshake (Connection close)

- 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송함
- 서버가 확인메시지를(ACK) 보내고 자신의 통신이 끝날 때 까지 기다림. 서버가 보낼 패킷들 더 보냄
- 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그 전송
- 클라이언트가 ACK 플래그 전송
문제점
- 전송의 신뢰성은 보장하지만 매번 Connection을 연결해서 시간 손실 발생 ( 3-way-handshake)
- 패킷을 조금만 손실해도 재전송 ⇒ 이러한 문제점을 해결하기 위해 UDP가 나옴
TCP hole-punching
- 서로 다른 Private 네트워크에 존재하는 호스트들 간의 P2P 연결을 구성하는 가장 효과적인 방법 중 하나가 "홀 펀칭"
- NAT 를 넘나드는 가장 확실한 (그러나 가장 비효과적인) P2P 통신 방법은 중계(
relaying
)를 통해서 간단하게 표준 클라이언트/서버 모델처럼 만드는 것 이다
사용 케이스(게임 클라이언트 측면)
- 모바일 게임 유저가 이쪽 네트워크에서 저쪽 네트워크로 옮겨 탔을 때 서버로의 연결이 더 빠르게 됨
- 연결 옮기는 것이 빠르게 되지 않으면 사용하는 유저가 불편을 겪음
UDP
- TCP 보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜(순차 전송 x, 흐름 제어 x, 혼잡 제어 x)
- Connectionless (3-way-handshake x)
- Error Detection(Checksum으로)
- 비교적 데이터의 신뢰성이 중요하지 않을 때 사용(ex. 영상 스트리밍)
.png?table=block&id=7bb0410a-debc-4114-b9da-031b63dc2068&cache=v2)
- TCP에서는 데이터를 조각내었지만 UDP는 조각내지 않고 그대로 사용함
UDP 헤더

UDP 사용처
- 데이터 전송을 보장하지 않는 프로토콜이므로 제한된 용도로만 사용됨 →
- 음성 데이터나 실시간 스트리밍과 같이 시간에 민감한 프로토콜이나 애플리케이션을 사용하는 경우
- 사내 방송, 증권 시세 데이터 전송에 사용되는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답을 받기 어려운 환경에서 주로 사용
- 즉, 데이터를 전송하는 데 신뢰성보다 일부 데이터가 유실되더라도 시간에 맞추어 계속 전송하는 것이 중요한 화상회의 시스템과 같은 서비스인 경우 udp 사용