TCP & UDP

JiwonMoon·2022년 6월 30일
0

네트워크(Network)

목록 보기
3/10
post-thumbnail

🤔 목적

컴퓨터공학의 기초가 되는 cs지식을 되새기면서 이 후 있을 기술면접을 대비 하고자한다.

이전의 포스트인 인터넷(Internet) 파트에서 인터넷을 이해하기 위한 정도의 TCP/IP를 알아보았다.
이번 포스트에서는 TCP/IP에 대해 자세히 알아보고 연관이 있는 UDP까지 알아보려고 한다.

TCP/IP 란 무엇일까?

TCP와 UDP에 대해서 알아보기 전에 TCP/IP를 먼저 알아야할 필요성이 있다.
이전 포스트에서 언급했지만 < Transfer Control Protocol / Internet Protocol > 를 줄여서 TCP/IP 라고 한다.
이는 인터넷 표준 프로토콜로서 컴퓨터 간의 주고받는 데이터를 전송할 때 에러가 발생하지 않도록 알맞게 나누어 전송하고 이를 수신하여 다시 기존의 정보로 변환하는 것을 약속해 놓은 것을 말한다.

인터넷 프로토콜 중 가장 중요한 역할을 하는 TCP와 IP의 합성어로 데이터의 흐름 관리, 정확성 확인, 패킷의 목적지 보장을 담당한다. (데이터의 정확성 확인은 TCP가, 패킷을 목적지까지의 전송은 IP가 담당한다)

TCP/IP는 DARPA 모델(TCP/IP를 개발한 미 정보 조직의 이름에서 유래)로 알려진 4개의 계층의 개념적인 모델에 매핑되어 있습니다. 4개의 계층은 응용(Application), 전송(Transport), 인터넷(Internet), 네트워크 인터페이스(Network Interface) 계층으로 구성됩니다.

"여기서 말하는 TCP/IP 4계층은 OSI 7계층과 다르다"

위 TCP/IP의 전송(Transport) 계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층이다. 이곳에서 TCP와 UDP라는 두 종류의 프로토콜이 사용됩니다.

TCP의 특징

  • 연결형 서비스로 가상 회선 방식을 제공한다.

  • 3-way handshaking과정을 통해 연결을 설정하고
    4-way handshaking을 통해 해제한다.

  • 흐름 제어 및 혼잡 제어.높은 신뢰성을 보장한다.

  • UDP보다 속도가 느리다.

  • 전이중(Full-Duplex), 점대점(Point to Point) 방식.

  • 전이중 (Full-Duplex)
    전송이 양방향으로 동시에 일어날 수 있다.
  • 점대점 (Point to Point)
    각 연결이 정확히 2개의 종단점을 가지고 있다.

=> 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.

UDP 란 무엇일까?

UDP는 User Datagram Protocol의 약자이다.
이는 TCP와는 다르게 데이터를 패킷으로 나누고 반대편에서 재조립하는 과정을 거치지 않으며 수신지에서 제대로 받던 받지 않던 상관안하고 데이터를 보내기만 한다.

또 목적지에 도달하려고 하지만 (Best-effort) 에러가 날 수도 있고 재전송이나, 순서 뒤바뀜에 대한 대체는 어플리케이션에서 처리해 주어야 한다.

하지만 속도가 빠르다 별도의 연결도 필요하지않고 ACK메시지를 통해서 확인을 받거나 하는것이 없기 때문에 TCP 프로토콜 보다는 더 빠른 속도를 낼수 있으며, 이러한 빠른 속도로 UDP는 실시간 방송 등 사용을 하는데 데이터 처리가 신속하고 한 두장의 프레임이 빠저도 보정이 가능하다.

UDP 특징

UDP는 TCP와 다르게 비연결성을 가지며 수신측이 제대로 도착하였는지 확인 여부를 보장하지 않는 비신뢰성 서비스이다. 사용자 데이터를 데이터그램에 포함해 전송한다

  • 비연결형 서비스로 데이터그램 방식을 제공한다.

  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.

  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.

  • 신뢰성이 낮다.

  • TCP보다 속도가 빠르다.

TCP vs UDP

TCP의 모습

UDP의 모습

즉, 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에서는 UDP를 사용합니다.

표로 확인해보자면 아래의 그림과 같다.

TCP Flow

UDP Flow

TCP 3-way Handshaking 란?

TCP는 장치들 사이에 논리적인 접속을 성립하기위해 이 과정이 이용된다.( TCP의 특징이기도 하다. )

  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기전에 한쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.

  • 양쪽 모두 상대편에 대한 초기 순차일련번호를 얻을 수 있도록 한다.

TCP의 3-way Handshaking 과정

  1. 클라이언트는 서버에 접속을 요청하는 패킷을 보낸다.

  2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 패킷을 발송

  3. 클라이언트는 서버에게 응답을 보낸다

위와 같은 방식으로 통신하는 것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3-Way Handshake 방식이다.

자세히 알아 본다면 두가지 패킷을 알아야 한다.

  1. SYN: 세션을 성립할 때 처음 보내는 패킷
  2. ACK: 패킷을 받았다는 걸 알려주는 패킷

다시 한번 TCP의 3-way Handshaking 과정을 본다면

  1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 된다.

2. 서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.

  1. 클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 서버 상태가 ESTABLISHED 이다.

TCP 4-way Handshaking 란?

3-Way handshake는 TCP의 연결을 초기화 할 때 사용한다면, 4-Way handshake는 세션을 종료하기 위해 수행되는 절차

TCP의 4-way Handshaking 과정
1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다.

  1. 서버는 일단 확인 메시지를 보내고 자신의 통신이 끝날때까지 기다린다.

  2. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그를 전송한다.

  3. 클라이언트는 확인했다는 메시지를 보낸다.

FIN : 연결 종료 요청
세션 연결을 종료시킬 때 사용되며 더 이상 전송할 데이터가 없음을 나타낸다.

정리

기억에 남도록 정리한다면,

TCP는 연결형 서비스로 가상 회선 방식을 제공하고 이에 따라 신뢰성이 높지만 UDP에 비해 속도는 느리다

UDP는 비연결형 서비스로 데이터 그램방식을 제공하고 이에 따라 속도는 빠르지만 TCP에 비해 신뢰성이 떨어진다.

References (참고 자료)

0개의 댓글