[Network] TCP와 UDP의 차이

밀크야살빼자·2023년 4월 13일
0

OSI 7 계층 & TCP/IP

TCP

TCP란?

서버와 클라이언트 사이에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이다.

[특징]

  • 데이터를 전송하기 전에 세션을 맺는 연결 지향형 서비스이다.

  • 네트워크 대역폭을 공평하게 공유하도록 TCP 혼잡 제어 방식을 사용한다.

  • 데이터가 전송되는 과정에서 손실이나 순서가 바껴서 전송될 수 있는데, 손실을 검색해서 교정하고 순서를 재조합할 수 있도록 해준다.

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

  • 신뢰성을 보장한다.

  • UDP보다 속도가 느리다.

  • 3 Way-Handshake : 연결 초기화
  • 4 Way-Handshake : 연결 해제, 세션 종료

TCP 프로토콜은 사용자와 서버간의 세션을 맺은 후에 데이터를 전송한다. 3 Way-Handshake 방식으로 세션을 맺는데, 예를 들어, 클라이언트는 서버에게 연결을 요청한다. 여기서 보내는 값이 SYN값입니다. 만약 클라이언트가 SYN값을 0을 보냈다면, 서버는 SYN 값을 잘 받았다면 잘 받았다는 의미로 SYN 값에 +1을해서 ACK 값을 넣고 새로운 SYN 값과 ACK 값을 동시에 보냅니다. 이때 서버에서 클라이언트로 보내는 SYN 값은 다음 전송을 받을 때 중요하다. 서버에서 SYN+ACK 값을 받게 되면 클라이언트는 잘 받았다는 의미로 받은 ACK 값에 +1을 해서 서버에게 다시 보냅니다. 이렇게 클라이언트가 ACK값까지 보내게 되면 두 장비는 TCP로 연결이 된것입니다.

이 후 데이터를 송수신 한 후에 4 Way Handshake를 통해 세션을 종료합니다. 연결을 종료하기 위해 서버에 FIN을 보내면 FIN_WAIT1 상태가 되고(서버가 FIN 보내는 것도 가능하다.), 서버는 클라이언트한테 FIN을 받고 응답으로 ACK을 보내면 상태는 CLOSE_WAIT가 됩니다. 서버의 통신이 끝나면, 클라이언트에게 FIN을 보내고 LAST_WAIT 상태가 됩니다. 클라이언트는 확인했다는 의미로 ACK을 보내고 TIME_WAIT 상태가 됩니다.

상태설명
FIN_WAIT1Close를 호출한 측의 소켓이 진입하는 상태이다. FIN을 보낸다.
CLOSE_WAITClose를 받으면 CLOSE_WAIT 상태로 진입한다. ACK를 보낸다.
FIN_WAIT2ACK 신호를 받은 소켓은 FIN_WAIT1 > FIN_WAIT2로 상태 변경된다.
LAST_WAITCLOSE 호출 후 진입하는 상태이다. FIN을 보낸다.
TIME_WAITCLOSE를 받으면 진입하는 상태이다. ACK를 보낸다.
CLOSED연결을 종료한다.

TCP를 언제 사용해야 하는가?

신뢰도가 높은 데이터를 보내야할 때 사용한다.

=> 데이터 조각, 패킷들을 전송할때 마다 확인하고 목적지에 도착해서도 패킷들을 확인하여 누락과 오류를 찾아내서 재 전송을 요청하기 때문이다. 또한, 송수신지의 데이터를 처리하는 속도를 조절해서 수신자의 오버플로우를 방지하는 흐름제어나, 정보의 소통량이 과다할 때 전송하는 패킷의 양을 조절해서 혼잡을 제어한다.

그러나 TCP는 속도 즉, 성능이 떨어진다.
모든 패킷에 대한 응답이 필수적이여서 시간 지연과 속도가 느려지며, CPU의 소모량이 많아져 성능 저하를 초래할 수 있다.

UDP

UDP란?

서버와 클라이언트간의 연결없이 서비스하여 빠른 데이터를 전송한다.

[특징]

  • 세션 연결없이 바로 데이터를 전송한다.
  • 흐름제어를 하지 않아 전송 속도를 최대한 빠르게 할 수 있다.
  • 흐름제어, 오류제어 또는 손상된 세그먼트의 수신에 대해 재전송하지 않는다.
  • 데이터가 전송 중에 손실이 되거나 순서가 바뀔 수 있다.
  • UDP는 빠른 전송이 목적이다.

UDP는 언제 사용해야 하는가?

UDP는 흐름제어나 오류제어 등이 없어서 전송 속도를 최대한 빠르게 할 수 있지만 신뢰성 있는 전송을 보장할 수 없다. 그렇기 때문에 신뢰성보다 속도가 중요한 부분에서 UDP를 사용한다.
실시간 스트리밍을 통해 동영상이나 음성 데이터는 신뢰성보다 속도가 중요하므로 UDP를 사용한다.
DNS나 SNMP에도 사용된다.

하지만 데이터에 손실이 있을 수 있다.
연결을 하기 위해서 사용되는 논리적인 경로가 없으며, 각각의 패킷이 다른 경로로 전송 처리되는 비연결형 프로토콜이다. 정보 송수신에 대한 신호절차가 없으며, 최소한의 오류를 검증하기 때문에 패킷 손실이 많은편이다.

UDP와 TCP의 공통점

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

UDP와 TCP의 차이점

TCPUDP
연결이 성공해야 통신 가능하다.(연결형 프로토콜)비연결형 프로토콜(연결 없이 통신이 가능)
데이터의 경계를 구분하지 않는다.(Byte-Stream Service)데이터의 경계를 구분한다.(Datagram Service)
신뢰성 있는 데이터 전송을 한다.(데이터의 재전송 존재)비신뢰성 있는 데이터 전송을 한다.(데이터의 재전송이 없다)
1:1 통신한다.1:1, 1:n(Broadcast), n:n(Multicast) 통신한다.
profile
기록기록기록기록기록

0개의 댓글