brunch

You can make anything
by writing

C.S.Lewis

by swimjiy Jun 24. 2021

그림으로 쉽게 보는 TCP

그래서 TCP/IP의 TCP가 뭘까

저번 시간에 우리는 원활한 인터넷 통신을 위한 프로토콜인 IP에 대해 알아봤습니다. IP는 데이터가 원하는 주소로 정확하게 전송될 수 있도록 사회적으로 약속한 규약이었죠.

그러나 사실 정확하게 원하는 정보를 주고받기 위해서는 우리가 생각하는 것보다 더 많은 규약이 필요합니다. 택배만 하더라고 도착은 했지만 내용물이 다를 때, 배송 지연이 될 때 등 다양한 예외사항이 생기고 이를 해결하기 위해 많은 규칙이 정해져 있으니까요.

이처럼 네트워크의 세계에서도 IP와 함께 원활한 인터넷 통신을 위해 만든 프로토콜이 있으니 그중 하나가 오늘 얘기할 주제인 TCP입니다.




왜 필요할까?

TCP에 대해 얘기하기 전에 먼저 어떻게 인터넷에서 데이터를 주고받는지 잠깐 알아볼까요?


현재 우리는 데이터를 패킷(Packet)이라는 작은 조각으로 쪼갠 뒤 주고받고 있습니다. 원래 패킷은 우체국의 소포를 의미하는 말인데 데이터를 전송하기 쉽게 쪼갠 모습이 화물을 적당한 크기로 분할한 소포와 비슷해 붙여진 이름입니다. 아무튼 이렇게 패킷으로 쪼개는 이유는 만약 무거운 데이터를 통으로 보낸다면 가는 도중 회선에 문제가 생길 때 다시 전송하기 위해 많은 리소스를 낭비할 수 있기 때문입니다. 택배에 비유하면 옥천 허브같이 지연되기로 유명한 장소로 보내질 위험이 있다는 거죠.


그래서 컴퓨터는 패킷을 쪼갠 뒤 빠르다고 생각되는 회선으로 각각 전달합니다. 이렇게 패킷 단위로 전송하게 되면 각 패킷은 다양한 경로를 사용하여 이동할 수 있고 또 중간에 회선 하나가 끊겨도 다른 패킷들이 안정적으로 들어올 수 있다는 장점이 있습니다.


가령 맨 위 경로가 망가져도 빨강, 노랑 패킷은 잘 들어오겠죠?


다만 문제는 조각난 채로 도착한 데이터들이 전부, 그것도 순서대로 잘 들어왔는지 확인하기 힘들다는 점입니다. 내가 만화책을 1권부터 3권까지 배송을 요청했는데 만약 2권이 빠진 채로 오거나 1권보다 3권이 먼저 오면 만화책을 제대로 읽을 수 없으니까요.

심지어 우리가 어제 배운 IP도 데이터를 주고받는 데 사용하지만 IP는 정확한 주소로 보내는 데만 집중하다 보니 데이터가 정상적으로 들어왔는지는 고려하지 못했던 거죠.

이 문제를 해결하기 위해 데이터가 정확하게 들어왔는지에 집중하는 규약, 다르게 말하면 안정적인 데이터 전송을 담당하는 프로토콜이 생겼으니 그게 바로 TCP(Transmission Control Protocol)입니다.




TCP 그리고 IP

TCP와 IP의 관계는 택배 기사와 트럭 내비게이션의 관계와 유사합니다. 내비게이션은 용도 그대로 최단 경로로 정확한 목적지에 도착하는 것을 목표로 합니다. 택배를 잘 전달했는지는 관심이 없죠. 실질적으로 물품들을 잘 전달했는지, 그리고 빠진 것은 없는지 확인하는 일은 택배 기사의 몫입니다.


이처럼 IP는 적힌 IP 주소와 일치하는 장소로 보내는 데만 집중합니다. 그러나 TCP는 목적지에 데이터가 안정적으로 도착하는 데 집중하지요. 또 TCP는 안전하게 데이터를 전달하려다 보니 수신자가 데이터를 받을 수 있는 상황인지도 확인하지만 IP는 그런 귀찮은 일은 하지 않습니다. 그래서 TCP를 서로 연결된 상태인지 주기적으로 확인한다고 해서 연결형, 반대로 IP를 비연결형이라고 말합니다.

그렇다면 실제 TCP와 IP는 어떤 방식으로 서로 역할을 주고받을까요?



위쪽은 보내는 쪽의 컴퓨터이고 아래쪽은 받는 쪽의 컴퓨터입니다. TCP와 IP는 각 컴퓨터마다 존재한다고 보시면 좋을 것 같습니다.


보내는 쪽: 먼저 데이터에 대한 요청이 들어오면 TCP에서는 데이터를 적당한 크기의 패킷으로 자른 뒤 IP에 전달합니다. 그다음 IP는 패킷을 받아서 주소를 해석하고 경로를 결정하여 목적지로 전송합니다.

받는 쪽: 패킷이 긴 여정 끝에 받는 컴퓨터에 도착하면 IP는 도착한 패킷의 주소가 내 주소와 일치하는지 확인한 뒤 맞다면 받는 쪽 컴퓨터의 TCP로 전달하고 TCP는 받은 패킷들을 모아 데이터를 재조립합니다. 이 과정에서 손상이 있거나 빠진 패킷이 있다면 재전송을 요청하기도 합니다. 그리고 이런 과정을 겪고 최종으로 완성된 데이터가 우리 화면에 보이게 되는 거죠.

이처럼 IP와 TCP는 정확한 데이터 전송을 위해 서로 긴밀하게 연결되어 있습니다. 그래서 일반적으로 인터넷 데이터 통신을 위한 프로토콜을 한데 묶어 TCP/IP라고 종종 부르지요.




3 way handshake로 더 정확하게

TCP를 사용하여 데이터를 전송하게 되니 순서도 보장되고 손실된 데이터도 최소화되다 보니 보다 신뢰성 있는 데이터를 전송할 수 있게 되었습니다.

그리고 아까 TCP가 수신자가 데이터를 받을 수 있는 상황인지 확인한다고 해서 연결형이라고 했죠? 이때 사용하는 TCP의 중요한 기법(방식) 중 하나가 3 way handshake입니다.

번역하자면 세 방법의 악수(?)인데 이름에서도 알 수 있듯 세 번의 핑퐁을 거쳐 데이터를 보내는 쪽과 받는 쪽 둘 다 준비가 되었는지 확인하는 방식입니다.



먼저 1) 보내는 쪽(클라이언트)에서 받는 쪽(서버)에게 통신을 하고 싶다는 메시지를 보냅니다. 그리고 2) 받는 쪽은 메시지에 대한 답장과 현재 통신 준비가 완료되었다는 메시지를 보냅니다. 3) 마지막으로 클라이언트가 서버 측에 통신 준비가 완료되었다는 메시지를 보내면 본격적으로 서로 데이터를 주고받을 수 있게 됩니다.

이 방법을 통해 더욱 신뢰성 있는 데이터 전송이 가능하게 된 거죠.




TCP의 단점, 그리고 UDP

지금까지의 얘기만 들어 보면 좋은 점만 한가득인 것 같지만 사실 TCP는 데이터를 전송하기 위해 확인할 게 너무 많다 보니 전송 속도가 느리다는 단점이 있습니다. 일반적인 글, 사진 등의 데이터라면 큰 문제가 안되는데 목소리, 영상 등 실시간성이 중요한 데이터의 경우 사용자가 한 번 로딩하는 데 오랜 시간을 기다릴 수 있겠죠.

그래서 TCP와 유사한 역할을 수행하지만 속도는 빠른 UDP(User Datagram Protocol)라는 프로토콜이 생겼습니다. 아까 TCP가 3 way handshake를 통해 데이터를 주고받는다고 했던 거 기억나시나요? UDP는 그런 연결 과정 없이 보내는 쪽이 일방적으로 데이터를 전송하는 방식입니다.


평화로운 TCP와 그저 주기에 바쁜 UDP


그래서 TCP보다 용량도 적고 속도도 빠르다는 장점이 있지만 데이터의 신뢰성이 없기 때문에 데이터가 유실되거나 순서가 바뀔 위험이 있습니다. 이런 장단이 있어 UDP속도가 중요하고 데이터가 일부 유실되어도 서비스 이용에  문제가 되지 않는 온라인 게임이나 VoIP라고 부르는 음성 데이터를 주고받을  주로 사용합니다.




세 줄 요약

TCP는 안정적인 데이터 전송을 담당하는 프로토콜이다.

IP는 데이터를 정확한 주소로 전달하는 데 목적을 두는 것에 비해 TCP는 데이터를 손실 없이 안전하게 전달하는 것을 목적으로 한다.

TCP는 3 way handshake 기법을 이용해 송신자와 수신자가 연결된 상태인지 확인한 뒤 데이터를 주고받는다. 그 대신 속도가 느리다는 단점이 있으며 이를 보완하기 위한 UDP가 있다.




마무리

오늘은 IP와 더불어 핵심 프로토콜인 TCP에 대해 알아봤습니다. 앞으로 TCP/IP라는 단어를 봤을 때 어디선가 들어봤다는 생각이 드신다면 제 역할을 다 한 것 같아 기쁠 것 같습니다.

그리고 저 또한 공부하며 정리하는 입장이기 때문에 정정이 필요한 부분이 있다면 언제든 댓글 남겨주시길 바랍니다.

그럼 다음 시간에 뵙겠습니다.




참고 자료

전송 제어 프로토콜 - 위키백과, 우리 모두의 백과사전

TCP와 IP 프로토콜의 역할

[Network]  TCP / UDP의 개념과 특징, 차이점

TCP - 나무위키

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari