[Network] TCP, UDP - Web 개발 필수 프로토콜 이해하기

·2024년 1월 15일
0

Network

목록 보기
2/5
post-thumbnail

TCP

Transmission Control Protocol 의 약자로, 4계층에서 장치들 사이에 논리적인 접속을 성립하여, 통신의 신뢰성을 보장하는 연결 서비스이다.

연결 시 일련의 준비과정을 통해, 데이터를 안정적으로 순서대로 데이터 교환을 가능하게 하는 것이 큰 특징이다.

등장배경

전쟁 당시 일반적으로 사용되던 통신 방식은 회선교환 Circuit Switching 방식이었다. 간단하게 설명하자면, A와 B가 통신 할 때 고정 통신 루트를 정하고 사용하는 방식이다. 단 이 방식의 단점은 본래 통신 루트가 고장이 나버리면 통신이 중단되는 상태가 발생한다는 것이다.

해당 통신을 담당하던 개발 팀은 일부 회선이 고장나더도 새로운 회선을 찾아 연결을 계속해서 유지하는 네트워크를 원했고, 이에 대한 결과가 패킷 교환 Packet Switching 방식이다. 이 방식은 일부 회선이 끊어져도 다른 회선으로 우회하는 것을 통해 연결을 보장한다. 이러한 패킷 교환 방식을 기반으로 안정성을 보완한 방식이 현재 사용하고 있는 가상회선 패킷 교환 방식의 TCP 이다.

참고 - 나무위키

특징

  • 인터넷 상에서 데이터를 메시지의 형태(세그먼트 단위)로 보내고자 IP 프로토콜과 함께 사용하는 프로토콜이다.

  • 3way-handshake , 4way-handshake 의 과정을 통해 연결을 설정하거나 해제한다.

    데이터를 전송하기 전 준비과정을 위해 논리적 연결이 진행되는데 이를 가상회선이라고 한다.

  • 흐름 제어혼잡 제어를 제공한다.

    • 흐름 제어 : 데이터를 송신하는 곳과 수신하는 곳의 속도 차이로 나타날 수 있는 데이터 손실(버퍼 오버플로우)를 방지하는 기술로, 송신 측에서 수신 측이 허용할 수 있는 처리량 만큼만 양을 조절하여 데이터를 보낸다.
    • 혼잡 제어 : 네트워크에서 발생할 수 있는 혼잡을 방지하여 효율적인 데이터 전송을 유지하는 매커니즘으로, 네트워크내 혼잡 상태를 감지하여, 송신자는 자체적으로 전송 속도를 낮추거나, 이후에는 점진적으로 속도를 증가시키는 방법으로 혼잡을 완화한다.
  • 속도 (응답성) 보다는 안정적이고 신뢰성 있는 통신이 중요한 경우 사용된다.

연결과정 3way-handshake

TCP는 연결지향형 서비스로, 통신하는 기기간의 일종의 의식을 통해 클라이언트-서버간의 신뢰성을 보장하는 연결 설정을 진행한다. 해당 과정은 다음과 같다.

  1. 클라이언트는 서버에 SYN 패킷을 보낸다. 이 패킷에는 난수의 시퀀스 번호가 포함되어 있다.

  2. 서버는 SYN 패킷을 받고, 클라이언트에게 ACK 패킷과 SYN 패킷을 함께 보낸다. ACK 패킷에는 클라이언트에서 보냈던 SYN 패킷의 시퀀스 번호의 +1 한 숫자 값이 포함되어 있다. 더불어 SYN 패킷에는 서버가 생성한 난수의 시퀀스 번호를 함께 보낸다. 이를 통해 클라이언트는 어떤 서버가 보낸 응답인지를 파악한다.

  3. 클라이언트는 서버의 SYN, ACK 패킷을 받고, 이를 보낸 서버에게 응답을 수락함을 의미하는 ACK 패킷을 다시 서버에 보낸다. 이때 클라이언트가 보내는 ACK 패킷에는 서버가 보낸 SYN 패킷에 담긴 난수의 시퀀스 번호의 +1 한 숫자 값이 포함되어 서버에게 보낸다. 서버는 이를 통해 ACK 패킷을 보낸 클라이언트를 확인하게 된다.
    해당 클라이언트와 서버는 데이터 전송을 위한 연결 설정이 완료된 것이다.

연결과정 4way-handshake

TCP의 연결을 해제하는 과정은 다음과 같다.

  1. 클라이언트는 요청을 중지하기 위해, ACK 패킷과, FIN 패킷을 보낸다. FIN 패킷에는 난수의 시퀀스 넘버가 존재한다. 해당 커넥션을 서버가 FIN 패킷으로 응답할 때 까지 연결을 계속 유지한다.

  2. 서버는 클라이언트의 요청 중지를 확인하고, ACK 패킷을 보낸다. 서버가 현재 통신에 필요한 데이터를 모두 보낸 경우라면 ACK, FIN 패킷을 모두 보내고, 보낼 데이터가 남은 경우에는 ACK 패킷만 전송한다. ACK 패킷에는 클라이언트가 보낸 시퀀스 번호의 + 1 한 값을 보낸다.

    서버가 데이터를 보내는 동안, 남은 데이터에 대한 정보 Data 를 함께 보낸다. 이 때, 서버가 보낸 정보를 기반으로 클라이언트가 확인했다는 의미에서 클라이언트에서 ACK 패킷을 서버에게 보내는데, 이 때 ACK 의 숫자 값은 기존 서버가 생성한 난수 시퀀스 번호에 Data 의 숫자값을 합한 값을 서버에게 보낸다.

  3. 데이터 전송을 모두 마친 서버는 FIN 패킷을 보낸다. FIN 패킷에는 서버가 생성한 난수 시퀀스 번호가 포함되어 있다.

  4. 클라이언트는 서버가 보낸 FIN 패킷을 확인하고 서버에게 ACK 패킷을 보낸다. 해당 ACK 패킷에는 서버가 생성하여 보낸 난수 시퀀스 번호의 +1 한 숫자값이 포함되어 서버에게 전송된다.

UDP

User Datagram Protocol 약자로, 전송계층의 비연결 지향적 프로토콜이다. TCP와는 다르게, 연결 설정 없이 송신자에서 일방적으로 데이터를 발신하는 방식으로, 다이렉트로 연결이 이루어지기에 TCP 보다 빠른 전송이 가능하지만, 데이터 전달의 신뢰성이 떨어진다.

개발동기

웹 시장이 커지면서, TCP 프로토콜을 통해 수많은 요청이 오고 갔다. 단 데이터가 큰 요청이나, 비디오와 같은 지속적인 연결이 필요한 요청에서는 단점이 나타났다. 매 데이터 전송마다 연결 설정과정을 반복해야했고, 데이터 전달자체도 빠르지 않았다. 심지어 이미지나 파일의 경우는 패킷의 일부가 잘못 보내지면 이를 처음부터 다시 받아오는 작업을 진행하여 사용자가 기다리는 시간이 오래걸리기도 했다. 이를 위해 등장한 것이 속도성을 중요시하는 UDP 이다.

특징

  • TCP 와 같은 연결설정이 존재하지 않아, 오버헤드가 발생하지 않는다.
  • TCP세그먼트의 헤더 대비 UDP가 사용하는 데이터그램의 헤더는 더욱 가볍다. UDP 는 출발지, 목적지, 데이터 길이, 체크섬 정도만 포함하는데, TCPUDP 의 4가지와 더불어 플래그, 순서 번호, 확인 응답 등 신뢰성을 위한 정보가 포함된다.

    체크섬 : 중복 검사의 한 형태로 송신된 자료의 무결성을 보호하는 방법으로 송신된 데이터의 체크섬과 수신이후 계산한 체크섬. 계산값을 비교하여 올바른 데이터가 왔는지를 확인한다.

  • 송신자는 수신자에게 다이렉트 필요한 데이터를 일괄적으로 보내는 방식을 사용하며, 보내지는 데이터의 순서가 바뀌거나, 손실이 일어날 수 있다.
  • 신뢰성 있는 통신 보다는 빠른 응답이 중요한 통신의 경우 사용된다.

스트리밍, 게임 서비스 특화

실시간 스트리밍 서비스 경우, 보내지는 동영상 데이터의 안정성보다는, 일부 화면이 나오지 않더라도, 지속적이고 빠른 렌더링을 중점에 두기 때문에 UDP 프로토콜을 활용한다.

또한 실시간 온라인 게임의 경우에도 UDP가 사용된다. 스킬을 정확하게 100번 수행하는 것보다는 빠르게 스킬이 수행되어 게임을 이끄는 것이 중요하기 때문이다.

profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글