TCP와 UDP는 OSI 7 계층과 TCP/IP 4계층(updated 5계층)의 전송 계층(Transport Layer)에서 데이터를 주고 받는데 사용하는 프로토콜입니다.
TCP
TCP 3 & 4way HandShake 라는 과정을 통해 서로간 통신을 활성화하고 해제합니다.
그리고 흐름제어, 혼잡제어, 오류제어를 통해 데이터를 정확하게 주고 받을 수 있음을 보장합니다.
이렇게 해서 TCP는 신뢰성 있는 통신이 가능하게 됩니다.
그렇다면 TCP에서 사용하는 3 & 4 way HandShake 라는 것은 무엇일까요?
3way HandShake는 연결을 맺는 과정입니다.
신뢰성있는 통신을 위해 서로간 통신 가능 여부를 확인하여 연결하는 절차입니다.

SYN : 'synchronize sequence numbers' (임의의 랜덤 숫자)
ACK : acknowledgment(승인) - 받았다는 신호를 의미
2가지 패킷을 통해 서로간 통신이 활성화됩니다.
3way HandShake의 과정은 아래와 같습니다.
HOST P를 클라이언트, HOST Q를 서버라고 가정하겠습니다.
- 클라이언트가 서버에게 연결을 요청하는 SYN 패킷을 보냅니다.
- 서버는 SYN 패킷을 받고 클라이언트에게 받았다는 신호인 ACK 패킷과 자신도 연결을 요청하는 SYN 패킷을 보냅니다.
- 클라이언트는 SYN 패킷과 ACK 패킷을 받고 서버에게 받았다는 신호인 ACK 패킷을 보냅니다.
위와 같이 3번의 통신을 통해 연결이 성립되기 때문에 3way HandShake라고 불립니다.
여기서 의문점이 하나 생깁니다.
SYN 패킷은 '임의의 랜덤 숫자'를 지정하여 보내게 되는데 왜 순차적인 숫자가 아니라 랜덤 숫자를 보내게 되는 걸까요?
사진 상으로 확인되듯이 서로 SYN 패킷을 주고 받는데 각 패킷에 +1한 값을 ACK 패킷으로 보내고 있습니다.
이것의 의미는 +1 값으로 이전의 패킷을 구분하게 된다는 것입니다.
그렇기때문에 랜덤 숫자가 아닌 순차적인 숫자가 전송된다면 이전 연결의 패킷을 인식할 수 있는 문제가 발생할 수 있기 때문에 난수를 사용하게 됩니다.
4way HandShake의 과정도 크게 다르지 않습니다.

위와 같이 두 호스트를 클라이언트, 서버로 가정하겠습니다.
- 클라이언트가 서버에게 연결을 종료하겠다는 FIN 패킷을 보냅니다.
- 서버는 확인했다는 ACK 패킷을 먼저 보내고 자신의 통신이 끝날때까지 기다립니다.
- 서버가 통신이 끝났으면 클라이언트에게 연결을 종료하겠다는 FIN 패킷을 보냅니다.
- 클라이언트는 확인했다는 ACK 패킷을 보냅니다.(TIME_WAIT 상태에서 클라이언트가 통신이 끝난 후 CLOSED가 됩니다.)
위와 같이 4번의 통신을 통해 연결이 해제되기 때문에 4way HandShake라고 불립니다.
그렇다면 흐름제어, 혼잡제어, 오류제어는 무엇일까요?
흐름제어는 송신측과 수신측 사이의 데이터 처리 속도 차이를 제어하기 위한 기법입니다.
혼잡제어는 송신측의 데이터 전달과 네트워크 처리 속도 차이를 해결하는 기법입니다.
네트워크의 혼잡을 피하기 위해 보내는 데이터의 전송 속도를 강제로 줄여야 합니다.
오류제어는 패킷이 잘못 전달됐을 경우 패킷을 재전송하는 등 오류를 복구하는 기법입니다.
위와 같은 제어 기법들로 인해서 서로간 주고 받는 데이터들을 신뢰할 수 있습니다.
UDP
UDP는 TCP와는 달리 3 & 4 way HandShake 하는 과정이 없습니다.
흐름제어, 혼잡제어, 오류제어 등도 하지 않으며 Checksum 헤더 필드를 통해 단순히 오류를 검출할 수 있는 방식만 사용합니다.
그렇다면 여러 과정이 빠져있는 UDP의 장점은 무엇일까요?
여러 과정이 빠져있으니 당연히 데이터를 주고받는 속도가 TCP 보다 빠릅니다.
때문에 신뢰성보다 속도가 중요한 서비스라면 UDP를 이용할 수 있습니다.
TCP VS UDP

위와 같은 과정 상의 차이 외에도 TCP와 UDP가 주고 받는 데이터의 양은 차이가 있습니다.
UDP의 장점을 보자면 거의 정의되어 있는 것이 없기 때문에 기반으로 무언가를 만들 수 있다는 것입니다.
이후 HTTP에 관해서 정리할 예정인데, TCP 기반으로만 동작하던 HTTP가 3.0 버전부터 UDP 기반으로 동작하게 됩니다.
어떤식으로 동작하고 문제점은 없는지 다음에 알아보겠습니다.
출처
'Network' 카테고리의 다른 글
HTTP란?(HTTP/1.1, HTTP/2, HTTP/3, TLS HandShake) (0) | 2022.07.19 |
---|---|
CDN이란? (0) | 2021.09.18 |