데이터를 데이터그램 단위로 처리하는 프로토콜
UDP는 비연결형 프로토콜로써, 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다. TCP와는 다르게 연결 설정이 없으며, 혼잡 제어를 하지 않기 때문에 TCP보다 전송 속도가 빠르다. 그러나 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있다.
비연결형 서비스로 데이터그램 방식을 제공
정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않음
UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
신뢰성이 낮음
TCP보다 속도가 빠름
인터넷상에서 데이터를 메시지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
TCP는 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜이다. 일반적으로 TCP와 IP가 함께 사용되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 하게 된다. 연결 지향형인 TCP는 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작하는데, 흐름 제어와 혼잡 제어를 지원하며 데이터의 순서를 보장한다.
흐름 제어: 보내는 측과 받는 측의 데이터 처리속도 차이를 조절해주는 것
혼잡 제어: 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
연결형 서비스로 가상 회선 방식을 제공
데이터의 전송 순서 보장
데이터의 경계를 구분하지 않음
신뢰성 있는 데이터 전송
UDP보다 전송속도가 느림
연결을 설정(3 way handshaking)과 해제(4 way handshaking)
3-way handshake는 TCP/IP 프로토콜에서 연결을 설정할 때 사용되는 과정이다.
3 way handshaking을 알아보기 전에 우선 flag에 대해서 알아야 더 쉽고 정확하게 이해할 수 있다. 여기서 나오는 플래그들 외에도 더 있지만 3 way handshaking에서 사용되는 플래그만 간단하게 알아볼 것이다.
연결 요청 플래그, TCP에서 세션을 성립할 때, 가장 먼저 보내는 패킷이다. 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호(ISN)을 보내게 된다.
상대로부터 패킷을 받았다는 걸 알려주는 플래그, 다른 플래그와 같이 출력되는 경우도 있다. 수신자가 송신자 시퀀스 번호에 길이 또는 데이터 양을 더해 ACK를 전송한다(일반적으로 + 1). ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송한다.
연결 종료 요청 플래그, 세션 연결을 종료시킬 때 사용한다. 더이상 전송할 데이터가 없음을 나타낸다.
TCP 연결 설정은 다음과 같은 3단계의 과정으로 이루어진다.
SYN 전송: 클라이언트가 서버에게 연결 요청을 보내기 위해 SYN(Synchronize) 패킷을 전송한다. 이는 연결을 설정하고 하는 의사를 상대방에게 알리는 신호다. SYN 패킷에는 시퀀스 번호(sequence number)가 포함되어 있다.
SYN-ACK 응답: 서버는 클라이언트로부터 받은 SYN 패킷을 받고, 연결 요청을 수락하고자 SYN-ACK(Synchronize-Acknowledgment) 패킷을 전송한다. 이는 연결 수립에 동의하고, 클라이언트에게 ACK 응답을 보내기 위한 응답이다. SYN-ACK 패킷에는 서버의 시퀀스 번호와 클라이언트의 시퀀스 번호가 포함된다.
ACK 전송: 클라이언트는 서버로부터 받은 SYN-ACK 패킷에 대한 확인 응답(ACK, Acknowledgment) 패킷을 전송한다. 이는 서버의 SYN-ACK 패킷을 받았음을 확인하는 응답이다. ACK 패킷에는 클라이언트의 시퀀스 번호가 포함된다.
이렇게 3-way handshake를 통해 클라이언트와 서버는 상호간에 연결을 설정하고, 신뢰성 있는 데이터 전송을 위한 초기 설정을 완료한다. 이후에는 양쪽 간에 데이터를 주고 받을 수 있는 상태가 된다.
4-way handshake는 TCP/IP 프로토콜에서 연결을 해제할 때 사용되는 과정이다.
TCP 연결 해제는 다음과 같은 4단계의 과정으로 이루어진다.
FIN 전송: 연결을 종료하고자 하는 측에서 상대방에게 FIN(Finish) 패킷을 전송한다. 이는 연결을 종료하고 더 이상 데이터를 보내지 않을 것임을 알리는 신호다.
ACK 전송: 상대방은 FIN 패킷을 받고 확인 응답(ACK, Acknowledgment) 패킷을 전송한다. 이는 FIN 패킷을 받았음을 확인하는 응답이다.
상대방 FIN 패킷 처리: 상대방은 자신도 연결을 종료하고자 할 때 FIN 패킷을 전송한다.
종료 확인 ACK 전송: FIN 패킷을 받은 측은 확인 응답(ACK) 패킷을 전송하여 연결 해제를 완료한다. 이로써 양쪽 모두 연결이 정상적으로 종료된다.
4-way handshake를 통해 양쪽의 해제 의사를 확인하고 순차적으로 종료 과정을 거치는 것으로, 안정적인 연결의 해제를 보장한다. 이 과정을 통해 양쪽이 동의하에 연결을 종료할 수 있고, 이후에는 더 이상 데이터를 주고받지 않는 상태가 된다.
TCP는 연속성보다 신뢰성있는 전송이 중요할 때에 사용되는 프로토콜이며, UDP는 TCP보다 빠르고 네트워크 부하가 적다는 장점이 있지만, 신뢰성있는 데이터 전송을 보장하지는 않는다. 그렇기 때문에 신뢰성보다는 연속성이 중요한 실시간 스트리밍과 같은 서비스에 자주 사용된다.
참고
[Network] TCP와 UDP의 특징과 차이점
[TCP/UDP] TCP와 UDP의 특징과 차이
TCP와 3-Way, 4-Way Handshake란? (개념/ 동작 방식)
[TCP] 연결, 해제, FLAG/ 3-way handshake, 4-way handshake