TCP와 UDP

hyomkim·2021년 2월 23일
0

네트워크

목록 보기
1/4

TCPUDP는 모두 전송 계층(layer 4 - Transport layer)에서 사용하는 프로토콜 입니다.

여기서 전송 계층은 전송 받은 데이터에 이상이 있는지 확인하여 그에 따른 대처를 해주는 계층입니다.

그렇게 때문에 전송 계층에서 사용되는 프로토콜들 또한 이와 관련이 있습니다.

이 점을 먼저 인지한 후에 전송 계체의 대표적인 프로토콜인 TCP 와 UDP에 대하여 정리해 보겠습니다.

TCP(Transmission Control Protocal)

3m정도 되는 벽을 사이에 두고 두 사람이 벽의 각 맞은편이 있다고 상상해 보겠습니다.

어느 한 쪽에서 다른쪽에 있는 사람에게 작은 물건을 전달하고 싶은데 벽에는 구멍도 없고 돌아가자니 너무 오래걸립니다.

그래서 물건을 벽 위로 던져서 다른 사람에게 전달하고자 합니다.

물건을 던지는 쪽의 사람은 벽의 반대쪽의 상황을 모르니
"물건 던질것인데 받을 준비가 되었니?" 하고 건너편에 물어봅니다.

응답이 없다면 잠시 후에 다시한번 같은 질문을 할 것이고, 반대편에서
"받을 준비 완료!" 라는 대답이 돌아오면 물건을 던집니다 입니다.

이후에 반대편에서 물건을 잘 받았는지, 보낸 물건이 맞는 물건인지 반대편에 물어봅니다.

이런식으로 메세지를 보내는 측에서 받는측의 대답을 확인하는 방식을 TCP(전송 제어 프로토콜)방식 이라고 합니다.

TCP는 대표적인 Connection Oriented(연결 지향)프로토콜입니다.
데이터를 전송할 때 안정적인 연결에 높은 가치를 두는 형식이지요.
그래서 속도가 느리다는 단점 등이 있지만, 안정적인 데이터의 전송이 가능하며, 전송된 데이터 또한 순서대로 도착하게 됩니다.

TCP는 데이터 전송간에 ACK(ACKnowledgement)를 주고 받습니다.

데이터르 전송 받는 수신자의 ACK가 있어야지만 데이터의 전송이 이루어지기 때문에
수신자의 상황에 따라 데이터의 전송에 안정성이 향상됩니다.

ACK가 일정시간 이상 돌아오지 않거나 ACK의 값이 중복적으로 오는 등의 비 정상적인 경우에는 패킷 이상을 감지하고 재전송을 진행합니다.

그리고 ACK가 오는 속도에 맞춰서 데이터가 전송되기 때문에
수신자가 감당할 수 있는 데이터 전송 속도로 데이터를 전송(흐름 제어)할 수 있습니다.

하지만,
항상 ACK를 받아야 하기 때문에, 그만큼 UDP에 비하여 데이터의 전송 속도가 느립니다.

또한 브로드케스트멀티케스팅 같은 경우에는 사용할 수 없다는 단점이 있습니다.
(1:1 통신에서만 사용합니다.)

UDP(User Datagram Protocol)

택배를 이용해 보았다면 요즘은 택배가 왔다며 초인종을 누르는 일이 많지 않다는 것을 경험해 보았을 것 입니다.

배송될 물품이 있다면 일단 집 문앞에 두고 가는 경우가 많습니다.
(메세지등으로 미리 그날 택배가 갈 것이라고 미리 연락은 해 주지만요.)

택배를 받는 사람이 받을 준비가 되어 있는지 여부는 중요하지 않습니다.

이렇게 메세지를 보내면서 받는 측의 상태나 응답을 확인하지 않고 일방적으로 전송하는 방식이 UDP입니다.

UDP는 datagram 지향형 프로토콜 이라고 합니다.

datagram : IP계층의 가변길이 패킷

데이터의 연결보단 빠른 전송에 중점을 둔 프로콜로, 어떤 방식이던간에 빠르게 전송되기만 하면됩니다.
심지어 데이터의 순서가 뒤죽박죽이라도 상관없어요!

UDP의 전송방식은 통보에 가깝습니다.
상대방이 받을 준비가 되어 있던지, 아닌지 전혀 상관하지 않고 무조건 전송하는 것이에요.

그렇기 때문에 TCP와 대조해 봤을 때 전송되는 데이터의 신뢰성은 상당히 떨어지는 편 입니다.
(대신 송신측에서 별도의 데이터 오류 검사를 통해 문제 발견시 추가적으로 재전송을 요청할 수 있습니다.)

하지만, ACK의 응답을 기다리는 과정이 없기때문에 TCP와 비교하여 상당히 빠른 전송속도를 가지고 있습니다.

또한 브로트캐스트멀티태스킹에서도 사용할 수 있는 프로토콜 입니다.
(1:1은 물론. 1:다 나 다:다 통신에서도 사용 가능합니다.)

Reference :
https://www.clien.net/service/board/lecture/15873771?od=T31&po=0&category=&groupCd=

https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://simhyejin.github.io/2016/07/04/connectionoriented-connectionless/

profile
C++을 좋아하는 조금 모자란 사람이랍니다!

0개의 댓글