UDP와 TCP

Stray·2024년 4월 8일

UDP와 TCP

TCP(Transmission Control Protocol)

네트워크에서 데이터를 안정적으로 전송하기 위한 프로토콜로 데이터를 패킷단위로 전송합니다.

전송계층


데이터를 전송하는 프로토콜로 4단계인 전송계층에 해당합니다.

데이터 전송 과정

TCP는 연결지향적 프로토콜이기 때문에 서로 연결된 상태에서 데이터를 전송합니다.

TCP는3Way-handshake방식으로 연결하고, 데이터를 전송하고, 4way handshake방식으로 연결을 종료하는과정을 거칩니다.

연결지향적 (3-Way handshake)


source port : 출발지 포트
destination port : 도착지 포트


(출처:https://github.com/gyoogle/tech-interview-for-developer)

클라이언트(HOST P)가 서버(HOST Q)에게 연결요청을 할때, 클라이언트는 SYN (Synchronize) 패킷을 서버로 전송합니다. 이때 SYN 패킷의 시퀀스(seq) 번호는 무작위로 선택된 값인 x입니다.(seq=x)

서버는 클라이언트로부터 받은 SYN 패킷을 수신하고, 이를 받았다는 응답 신호인 ACK()와 함께 자신도 통신을 시작하겠다는 의미로 SYN 패킷(시퀀스 번호는 무작위한 값 y)을 다시 클라이언트로 전송합니다. ACK 번호는 클라이언트가 보낸 SYN 패킷의 시퀀스 번호에 1을 더한 값입니다.

클라이언트는 서버로부터 받은 응답을 확인하고, 서버의 SYN 패킷의 시퀀스 번호인 y를 ACK 번호로 설정하여 ACK 패킷을 서버로 전송합니다. 이때 클라이언트가 보내는 ACK 패킷의 ACK 번호는 서버의 SYN 패킷의 시퀀스 번호인 y에 1을 더한 값, 즉 y+1입니다.

이렇게 서로의 시퀀스 번호와 ACK 번호를 확인하고 교환한 후, 연결이 설정됩니다. 이러한 과정을 통해 양쪽 간에 안정적인 통신이 이루어질 수 있습니다.

3줄요약
1.클라이언트가 syn패킷(x) 보냄
2.서버는 syn패킷(x)받고 ack랑 syn(y)보냄
3.클라이언트는 ack랑 syn(y)받고 ack(y+1) 서버로 보냄 서버가 받으면 연결성공

흐름 제어,혼잡 제어

이제 3 way handshake로 연결을 완료했으니 데이터를 전송합니다.
이때 TCP의 특징은 흐름제어와 혼잡제어를 수행한다는 점 입니다.

흐름제어는 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법입니다.
송신측은 데이터 처리속도가 빠르고 수신측은 데이터 처리속도가 느리면,
수신측이 처리속도가 못따라가서 네트워크의 혼잡이 발생할 수 있습니다.
이때 핵심은 수신측이 패킷을 지나치게 많이 받지 않도록 조절해서 방지하는 것입니다.
슬라이딩 윈도우 (Sliding Window),수신자 창 광고 (Receiver Window advertisement)등 다양한 방법이 있습니다.

혼잡 제어는 네트워크의 혼잡을 감지하고,
네트워크 혼잡을 최소화하기 위해 데이터 전송 속도를 조절하는 메커니즘입니다.

이렇게 TCP는 흐름제어와 혼잡제어가 있기 때문에 안정성신뢰성을 보장합니다.

4-way handshake


(출처:https://commons.wikimedia.org/wiki/File:TCP_CLOSE.svg)

4way 헨드쉐이크는 3way핸드쉐이크와 비슷한 방식으로 송신자와 수신자가 서로에게
FIN(Finish)ACK(Acknowledge) 패킷을 교환하여 연결을 안전하게 종료하는 과정입니다.

tcp는 이렇게 연결전후 과정이 존재하기 때문에 신뢰성은 높지만, 오버헤드가 발생해서 속도가 느릴 수 있습니다.(UDP에 비해)

UDP(User Datagram Protocol)

데이터를 데이터그램 단위로 처리하는 프로토콜

전송계층

UDP도 TCP와 마찬가지로 데이터를 전송하는 프로토콜로 송계층에 해당합니다.

비연결형(connectionless)

UDP는 TCP와는 다르게 비연결형 프로토콜로 연결하지 않고 데이터를 전송하기 때문에 연결절차가 필요없어서 전송속도가 빠르다는 장점이 있습니다.

신뢰성↓(흐름제어x,혼잡제어x)

데이터의 수신 여부를 확인하지 않고 바로 보내기 때문에, 흐름제어나 혼잡제어를 하지 않습니다.
그래서 TCP보다 신뢰성이 낮다는 단점이 있습니다.

신뢰성이 중요하지 않고 빠른 데이터 전송이 필요한 경우 사용

그래서 UDP는 실시간 스트리밍이나 온라인 게임 같이 신뢰성이 중요하지 않고 빠른 데이터 전송이 필요한 경우 사용됩니다.
(신뢰성이 낮기 때문에 네트워크 환경이 안 좋을때, 스트리밍이 끊기거나 한다.)

UDP헤더


(출처:https://www.ccnahub.com/ip-fundamentals/understanding-tcp-and-udp-protocols/)

Source Port: 출발지 포트,
Destination Port: 도착지 포트,
Length : 길이,
Checksum_ : 오류 검출 - 중복 검사의 한 형태 으로 이루어져 있으며,

UDP는 데이터를 전송할 때 순서를 유지하지 않습니다. 따라서 수신자가 UDP로 전송된 데이터를 받으면, 데이터의 순서를 재조립하는 작업이 필요할 수 있습니다.

profile
Hi,

1개의 댓글

comment-user-thumbnail
2024년 4월 20일

UDP와 TCP라니! 생소한 개념이었는데 잘 읽고 갑니다!!

답글 달기