TCP와 UDP는 OSI 7계층 중 전송 계층에서 사용되는 프로토콜이다.
전송계층은 네트워크의 end point에서 통신을 수행하는 통신 대상자간의 end to end 연결을 제공하게 된다.
TCP
Transmission Control Protocol (전송 제어 프로토콜)
TCP는 연결지향 프로토콜이며, 데이터가 네트워크를 통해 전송되기 전에 연결이 설정되어야 함을 의미한다.
연결을 설정하여 신뢰성을 보장하게 되는데, 이는 뒤에서 알아볼 UDP와의 가장 큰 차이점이 된다.
(UDP는 비연결형)
연결을 통해 안정적으로, 순서대로, 에러없이 데이터를 교환하게 되는것이다.
TCP의 특징
- 연결을 반드시 설정해야 함
- 데이터 패킷 전달을 보장하기 때문에 신뢰성 있는 프로토콜임
- TCP는 오류검사, 흐름제어를 수행함. 때문에 UDP보다 속도측면에서 느림
- TCP의 헤더 크기는 20byte
- 3-way-handshake를 통해 연결을 성립하게 된다. 4-way-handshake로 연결을 해제하게 됨
- Checksum을 사용하여 오류검사를 수행함
3-way-handshake 과정
SYN(synchronize sequence number) - 연결 확인을 보내는 무작위의 숫자 값
ACK(acknowlegements) - Clinet 혹은 Server로 부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK
- 클라이언트가 SYN 플래그(SYNbit)를 설정하여 서버에 연결 설정을 요청한다.
- 서버가 SYN 플래그(SYNbit)를 설정하여 클라이언트에게 연결 설정 요청에 응답한다. 동시에 ACK비트도 설정하여 SYN을 수신했다고 알려준다.
- 클라이언트가 ACK비트를 설정하여 서버에게 SYN을 수신했다고 알리며 연결을 설정함.
4-way-handshake 과정
3way handshake가 연결을 수립하는 과정이라면, 4way는 연결을 해제하는 과정이다.
- 먼저 클라이언트가 더이상 보낼 데이터가 없다면 FINbit를 설정하여 서버에 보낸다
- 서버는 FINbit를 확인하고 ACK을 전달한다. 동시에 해당 포트에 있는 어플리케이션에게 close를 요청한다.
- ACK을 받은 클라이언트는 상태를 FIN_WAIT_2로 변경
- 2번에서 진행했던 어플리케이션이 close가 되면 서버에서도 FINbit를 설정하여 클라이언트에게 보냄 (LAST_ACK 상태)
- FIN을 받은 클라이언트는 다시 ACK을 보낸 후 TIME_WAIT으로 변경. 이후 일정시간이 지나며 close됨
UDP
TCP와 달리 UDP는 비연결형 서비스로 handshake의 과정이 없다.
TCP는 연결형이기 때문에 신뢰성이 높은 대신 속도가 느리다는 특징이 있지만 UDP는 이와 반대된다.
UDP의 특징
- 비연결형 서비스
- 패킷 전달을 보장하지 않기 때문에 신뢰할 수 없는 프로토콜
- 승인을 기다리지 않고 데이터를 보냄
- 흐름제어, 오류 검사 수행하지 않음 (손실된 데이터 패킷일지라도 재전송 X)
- 속도가 빠르다
- 1:1 & 1:N & N:N 통신이 가능하다
UDP라고 하면 보통 스트리밍 서비스 (동영상) 에서 주로 사용한다고 하지만 실제로 실시간 스트리밍에서도 TCP를 많이 활용한다고 한다.