TCP, UDP

·2023년 1월 29일
0

개발 지식

목록 보기
14/96
post-thumbnail

전송 계층 Transport layer

전송 계층은 클라이언트와 서버 간 즉, 컴퓨터 간의 데이터 전송 조율을 담당하는 계층이다. 보낼 데이터의 용량과 속도, 목적지 등을 처리한다. 전송 계층의 예로 가장 잘 알려진 것이 바로 TCP 와 UDP 이다.

TCP 란

키워드
신뢰성 및 순서 보장, 안정적, 세그먼트

Transmission Control Protocol 의 약자로, 장치들 사이에 논리적인 접속을 성립하여, PC 간 연결 시 신뢰성을 보장하는 연결 서비스이다. 연결 시 일련의 과정을 거쳐, 데이터를 안정적으로, 순서대로 데이터 교환을 가능하게 하는 것이 큰 특징이다.

개발동기

TCP의 개발 동기는 전쟁과정에서 비롯된다. 전쟁 당시 일반적으로 사용되던 통신 방식은 회선교환(Circuit Switching) 방식이었다. 간단하게 설명하자면, A와 B가 통신 할 때 AB 회선을 사용한다고 정해놓는 방식이다. 단 이방식의 단점은 AB 회선이 고장나면 통신이 중단되는 상태가 발생한다는 것이다.

해당 통신을 담당하던 개발 팀은 어떠한 회선이 고장이 나도 안정적으로 동작하는 네트워크를 원했고, 이에 대한 결과가 패킷 교환(Packet Switching) 방식이다. 이 방식은 AB 회선이 끊어져도 다른 회선으로 우회하는 것으로 연결을 보장한다. 단, 이 방식은 어떻게든 통신을 유지하는 것이 목적이기에 네트워크 환경의 안정성이 떨어진다. 이러한 패킷 교환 방식을 기반으로 안정성을 보완한 방식이 가상회선 패킷 교환 방식의 TCP 이다.

연결 설정

TCP는 연결형 서비스로서, 전화를 거는 것처럼 상대와 연결을 설정하고 통신을 시작한다. 시작할 때 사용되는 연결과정을 3-way-handshake 종료할 때 사용되는 연결과정을 4-way-handshake 라고 한다.

3-way-handshake

  1. 클라이언트는 인터넷을 통해 서버에 SYN 패킷을 보내 새 연결이 가능한지 여부를 묻는다. 이때 클라이언트는 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
    client -> server
  2. 서버에 새 연결을 수락할 수 있는 열린 포트가 있는 경우, SYN/ACK 패킷으로 응답을 보낸다. 이 때 서버는 클라이언트가 다시 ACK로 응답하기를 기다리는 SYN_RECEIVED 상태가 된다.
    server → client
  3. 클라어언트는 서버로 부터 SYN/ACK 패킷을 수신한 다음 서버에게 ACK 패킷을 전송한다. 이 후부터는 연결이 이루어지고 데이터가 오가게 되는 상태가 된다. 이때 서버는 ESTABLISHED 상태가 된다.
    client → server

4-way-handshake

  1. 클라이언트가 연결을 종료하겠다는 FIN 패킷을 전송한다.
  2. 서버는 이를 확인하고 ACK 패킷을 보낸다. 자신의 보내는 통신이 마쳐지기끼지인 TIME_WAIT 상태가 된다.
  3. 보낼 것을 모두 보냈다면 연결을 종료하겠다는 FIN 패킷을 클라이언트에게 보낸다.
  4. 클라이언트는 이를 확인했다는 ACK 패킷을 서버로 보낸다.

전송 순서보장

데이터 전송 시 sequence 넘버가 부여되어, 행여 데이터가 다르게 오더라도 수신자에서 sequence 넘버에 맞게 순서를 이어붙인다. 따라서 전송했을 때와 받았을 때의 순서가 보장된다.

신뢰성 보장

TCP의 특성 상 자신이 보낸 데이터에 대하여 상대방이 받았다는 응답 패킷을 다시 받아야만 통신이 정상적으로 이뤄졌다고 본다. 만약 어떠한 사유로, 클라이언트가 응답 패킷을 받지 못하는 경우 패킷이 유실되어삳고 판단하여 보냈던 패킷을 한번더 보내게 된다. 이를 TCP 재전송이라 한다. TCP 재전송의 경우, 다시 한번 요청작업이 이루어지기 때문에, 네트워크 속도에 저하를 줄 수 있으나, 통신 체계간 신뢰성을 보장할 수 있다.

UDP 란

키워드
신뢰성 및 순서 보장x, 빠름, 데이터그램

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

개발동기

TCP 개발 이후, 신뢰성 보장을 장점으로 많은 프로그램이 TCP를 사용하였다. 누락된 데이터 없이 모두 받기 위한 메커니즘 덕분에 이메일이나 파일전송에는 꼭 필요한 통신 방식이었으나, 실시간 스트리밍의 경우 걸림돌로 작용하였다. 매 데이터 전송마다 연결 설정이 이루어지므로 데이터 전달도 빠르지 않았고, 패킷 유실 시 대용량의 데이터를 다시 받아오는 작업을 진행하여 버퍼링 과정이 오래 지속되기도 했다. 또한, TCP 혼잡 제어를 위해 보내는 양을 조절하기 때문에, 영상 데이터의 퀄리티가 안정적이지 못했다. 이를 해결하기 위해 제시된 것이 UDP 이다.

💥 DTLS
TCP에스 쓰이는 흐름 제어 및 신뢰성 제어 알고리즘은 현대에 들어서 지나치게 구식이고, 성능상 비효율적이라는 평을 받고 있어, 개발자들이 UDP 에 신뢰성을 보장할 수 있는 긴으을 구현하려는 시도가 이어지 고 있다.
해당 노력의 산물로, UDP 기반의 웹 문서 프로토콜인 QUIC와 UDP 기반 보안 소켓인 DTLS 가 그 사례다.

연결 설정 없음

정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다. 이러한 과정이 없기 때문에 TCP 대비 빠른 데이터 전송 속도를 자랑한다. 단, 받는 쪽에서 데이터를 제대로 받고 있는지도 신경 쓰지 않기 때문에, 데이터를 보내면 손실되는 데이터가 발생할 수 있다.

스트리밍 서비스 특화

동영상의 경우에는 데이터 몇개 소실 되었다 하더라도, 일부 구역이 제대로 안나오는 수준일 뿐, 지속적인 렌더링에는 문제가 없기 때문에, TCP 대비 영상 제공에서는 강점을 가지고 있다. 또한 온라인 게임의 서버 클라이언트 통신에도 대부분 UDP가 사용된다. 스킬을 연타하는 과정에서 데이터가 빠짐없이 전송되는 것보다는 빠른 응답속도가 중요하기 때문이다.

TCP, UDP 차이

TCPUDP
패킷교환방식가상회선패킷교환방식데이터그램패킷교환방식
신뢰성 보장OX
오류 검사 매커니즘재전송, 체크섬체크섬
순서 보장sequence number 를 통한 순서 보장순서 보장 x
헤더20~60 바이트 (가변)8바이트 고정
연결 설정연결을 보장
연결을 하고 해제하는데 작업이 필요
3-way-handshake
4-way-handshake
연결 설정 없음
연결을 유지하고 해제하는데 쓰이는 비용이 없음
브로드캐스트XO
속도느림빠름

💥 체크섬
중복 검사의 한 형태로 송신된 자료의 무결성을 보호하는 방법으로 송신된 데이터의 체크섬과 수신이후 계산한 체크섬 계산값을 비교하여 올바른 데이터가 왔는지를 확인한다. 계산 공식이 있긴 한데, 머리가 터질 거 같아서, 이건 나중에 보자.

💥 브로드 캐스트
UDP를 기반으로 자신의 호스트가 속해있는 네트워크 대상의 모든 수신자에게 패킷을 전송하는 방식
TCP는 지원이 되지 않고, UDP는 지원이 된다.

💥 유니 캐스트
출발지와 도착지가 1:1 통신하는 방식, 대부분의 네트워크 방식이 유니 캐스트 방식이다. TCP, UDP 모두 지원한다.

참고
[Network] TCP가 신뢰성을 보장하는 방법
네트워크(Network) - 통신 방식, MAC / IP주소, TCP / UDP 배운 내용 정리 2
유니캐스트(unicast), 브로드캐스트(broadcast), 멀티캐스트(multicast)
Unicast, Broadcast, Mulitcast, Anycast
[네트워크] 체크섬(Checksum)
[네트워크] UDP와 TCP
[Network] TCP가 신뢰성을 보장하는 방법

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

0개의 댓글