[Network] TCP와 UDP

GreenBean·2021년 10월 4일
0
post-thumbnail

TCP와 UDP

  • TCP는 Transmission Control Protocol의 약자이고, UDP는 User Datagram Protocol의 약자
  • 두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있음

Tip! 패킷이란?

  • 네트워크를 통해 전송되는 데이터의 작은 조각
    • 이 조각을 블록이라고 표현
  • 네트워크는 기본적으로 데이터를 보낼 때 하나의 데이터를 더 작은 데이터들로 쪼개서 전송
    • 한 데이터를 쪼개서 보내지 않으면 그 데이터가 네트워크 상에서 대역폭을 크게 차지하기에 자칫 문제를 야기킬 수 있음
  • 각각의 패킷에 담긴 데이터들은 목적지에서 원래 데이터로 되돌리는 작업을 함
    • 이를 위해 전송 시작 전에 순서대로 번호가 부여되며 목적지에서 번호대로 정렬되어 원래의 데이터로 복구가 가능한데, 이렇게 패킷을 통해 네트워크 상에서 데이터를 교환하는 방식을 패킷 교환 방식이라고 부름
  • TCPUDPOSI 표준모델TCP/IP 모델전송계층에서 사용되는 프로토콜
    • 전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어등을 담당하는 계층
      • 쉽게 말해 데이터의 전달을 담당
    • TCPUDP는 포트 번호를 이용하여 주소를 지정하는 것과 데이터 오류 검사를 위한 체크섬이 존재하는 두 가지 공통점을 가지고 있지만 정확성(TCP)을 추구할지 신속성(UDP)을 추구할지를 구분하여 나뉨
  • 데이터를 중요하게 생각하여 확실히 주고받고 싶을 때TCP를 사용
    • TCP는 통신할 컴퓨터끼리 ‘보냈습니다’, ‘도착했습니다’라고 서로 확인 메시지를 보내면서 데이터를 주고 받음으로써 통신의 신뢰성을 높임
    • 웹이나 메일, 파일 공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스TCP를 사용

  • 그에 반해 데이터의 신뢰성은 제쳐두고 빨리 보내고 싶을 때UDP를 사용
    • UDP는 데이터를 보내면 그것으로 끝이므로 신뢰성은 없지만 확인 응답과 같은 절차를 생략할 수 있으므로 통신의 신속성을 높임
    • VoIP(Voice over IP)나 시간 동기, 이름 해결 등과 같이 무엇보다 속도를 필요로 하는 서비스UDP를 사용

  • 즉, 신뢰성이 요구되는 서비스에서는 TCP를 사용하고 간단한 데이터를 빠른 속도로 전송하고자 하는 서비스에서는 UDP를 사용

TCP

  • TCP연결 지향적 프로토콜
    • 연결 지향 프로토콜이란 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜을 의미
    • 클라이언트가 연결 요청(SYN 데이터 전송)을 하고, 서버가 연결을 수락하면 통신 선로가 고정되고, 모든 데이터는 고정된 통신 선로를 통해서 순차적으로 전달
      • 그렇기 때문에 TCP는 데이터를 정확하고 안정적으로 전달할 수 있음
  • TCP호스트 간의 신뢰성 있는 데이터 전달과 흐름 제어를 함
    • TCP 프로토콜은 신뢰성 있는 데이터의 전송을 위해 확인 작업을 거치는데 TCP는 패킷을 성공적으로 전송하면 ACK 라는 신호를 날리고 만약에 ACK 신호가 제 시간에 도착하지 않으면 시간 초과가 발생하여 손실이 발생한 패킷을 다시 전송해줌
    • TCP는 이렇게 데이터를 송신할때마다 확인 응답을 주고받는 절차가 있으므로 통신의 신뢰성이 올라감
    • 주로 lient와 Server 또는 P2P Socket 통신 등, 네트워크를 사용한 통신을 할 때 TCP 통신을 많이 사용

TCP의 단점

  • 데이터로 보내기 전에 반드시 연결이 형성되어야함
  • 1 : 1 통신만 가능
  • 고정된 통신 선로가 최단선(네트워크 길이)이 아닐 경우 상대적으로 UDP보다 데이터 전송 속도가 느림

TCP의 특징

  • 연결형(connnection-oriented) 서비스로 연결이 성공해야 통신이 가능
  • 데이터 경계를 구분하지 않음 (바이트 스트림 서비스)
  • 데이터의 전송 순서를 보장 (데이터의 순서 유지를 위해 각 바이트마다 번호를 부여)
  • 신뢰성 있는 데이터를 전송 (Sequence Number, Ack Number를 통한 신뢰성 보장)
  • 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)
  • 연결의 설정(3-way handshaking)과 해제(4-way handshaking)
  • 전이중(Full-Duplex), 점대점(Point to Point) 서비스
  • UDP보다 전송 속도가 느림

3-way handshaking

  • TCP 통신을 위한 네트워크 연결은 3-way handshake 이라는 방식으로 연결
  • 3-way handshake 방식은 서로의 통신을 위한 관문(port)을 확인하고 연결하기 위하여 3번의 요청 & 응답 후에 연결이 되는 것을 말함
    • 이 과정에서 가장 많은 시간이 소요되어 UDP 방식보다 속도가 느려지는 주요 원인으로 지목됨
  • 연결 과정
    • Client에서 Server에 연결 요청을 하기위해 SYN 데이터를 보냄
    • Server에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV 상태로 변경
    • 요청을 정상적으로 받았다는 대답(ACK)와 Client도 포트를 열어달라는 SYN 을 같이 보냄
    • Client에서는 SYN+ACK 를 받고 ESTABLISHED 상태로 변경하고 서버에 ACK 를 전송
    • ACK를 받은 서버도 ESTABLSHED 상태로 변경
    • 위와 같이 3번의 통신이 정상적으로 이루어지면, 서로의 포트가 ESTABLISHED 되면서 연결이 됨

UDP

  • UDP는 전송 계층의 비연결 지향적 프로토콜
    • 비연결 지향적이란 데이터를 주고받을 때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발신하는 방식을 의미
    • 연결 과정이 없기 때문에 TCP보다는 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어짐
    • UDP는 발신자가 데이터 패킷을 순차적으로 보내더라도 이 패킷들은 서로 다른 통신 선로를 통해 전달 될 수 있음
      • 먼저 보낸 패킷이 느린 선로를 통해 전송될 경우 나중에 보낸 패킷보다 늦게 도착할 수 있으며 최악의 경우 잘못된 선로로 전송되어 유실될 수도 있음
      • 이럴 경우 TCP와는 다르게 UDP중간에 패킷이 유실이나 변조가 되어도 재전송을 하지 않음

UDP의 단점

  • 데이터의 신뢰성이 없음
  • 의미있는 서버를 구축하기 위해서는 패킷을 하나하나 관리해주어야 함

UDP의 특징

  • 비연결형 서비스로 연결 없이 통신이 가능하며 데이터그램 방식을 제공
  • 데이터 경계를 구분 (데이터그램 서비스)
  • 정보를 주고 받을때 정보를 보내거나 받는다는 신호 절차를 거치지 않음
  • 신뢰성 없는 데이터를 전송 (데이터 재전송과 데이터 순서 유지를 위한 작업을 하지 않음)
  • 패킷 관리가 필요
  • 패킷 오버헤드가 적어 네트워크 부하가 감소되는 장점이 있음
  • 상대적으로 TCP보다 전송 속도가 빠름

TCP / UDP 비교

공통점

  • 포트 번호를 이용하여 주소를 지정
  • 데이터 오류 검사를 위한 체크섬 존재

차이점

  • TCP
    • 연결 방식 : 연결형 서비스
    • 패킷 교환 방식 : 가상 회선 방식
    • 전송 순서 : 전송 순서 보장
    • 수신 여부 확인 : 수신 여부를 확인
    • 통신 방식 : 1:1 통신만 가능
    • 신뢰성 : 높음
    • 속도 : 느림
  • UDP
    • 연결 방식 : 비 연결형 서비스
    • 패킷 교환 방식 : 데이터그램 방식
    • 전송 순서 : 전송 순서가 바뀔 수 있음
    • 수신 여부 확인 : 수신 여부 확인하지 않음
    • 통신 방식 : 1:1 & 1:N & N:N 통신 모두 가능
    • 신뢰성 : 낮음
    • 속도 : 빠름
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글