seegongsik
네트워크

어떻게 믿을 수 있게 보내기, TCP

보낸 편지 가운데 한 장이 도중에 빠지거나 뒷장이 먼저 도착하면 어떻게 될까? 인터넷의 패킷도 그렇다. 길에서 사라지기도 하고 순서가 뒤바뀌기도 한다. 그런데도 글이 멀쩡히 도착하는 것은 TCP 덕분이에요.

01

빠짐없이, 정확히

앞에서 보았듯 데이터는 패킷이라는 작은 조각이 되어 여러 길로 따로따로 건너간다. 그런데 그 길은 완벽하지 않다. 조각 하나가 도중에 사라질 수도 있고, 뒤 조각이 먼저 도착할 수도 있어요.
그래도 받는 쪽에는 하나도 빠지지 않고 순서대로 닿아야 한다. 그 일을 맡은 약속이 TCP다.

두 카드를 눌러 TCP의 약속을 켜봐요

두 카드를 눌러 TCP가 지키는 약속 두 가지를 켠다. 하나도 빠지지 않게, 그리고 보낸 순서 그대로 전하는 것이에요.

목표는 분명해졌다. 빠짐없이, 순서대로. 말은 쉽지만 길이 완벽하지 않으니 지키기는 쉽지 않아요.
TCP는 이것을 세 가지 습관으로 해낸다. 받았다고 알리기, 안 오면 다시 보내기, 번호를 보고 순서 맞추기다.
참고로 TCP는 데이터를 보내기 전에 상대와 짧은 인사를 세 번 주고받아 연결부터 맺는다.

02

받았다고 알린다

첫 번째 습관은 확인이다. 받는 쪽은 조각이 도착할 때마다 '잘 받았어요' 하고 짧게 답하는데, 이 답을 확인 신호, 곧 ACK라고 부른다.
택배를 받고 수령 확인을 누르는 것과 같아요. 보낸 쪽은 ACK가 와야 그 조각이 무사히 닿았다는 것을 안다. ACK가 없으면 아직 모르는 것이다.

보낸 쪽받는 쪽
도착한 패킷을 눌러 확인(ACK)을 돌려보내요

도착한 패킷을 하나씩 누르면 받는 쪽이 확인(ACK)을 돌려보낸다. 네 개 모두에 확인이 돌아가면 보낸 쪽은 전부 닿았다는 것을 알아요.

조각마다 ACK가 오가니 보낸 쪽은 무엇이 닿았는지 알게 되었다. 주고받는 말이 하나 늘어 조금 느려 보일 수도 있다.
하지만 이 한마디 덕분에 빠진 조각을 콕 집어낼 수 있어요. 그렇다면 ACK가 오지 않은 조각은 어떻게 해야 할까? 답은 간단하다. 다시 보낸다.

03

안 오면 다시 보낸다

두 번째 습관은 재전송이다. 보낸 쪽은 정해 둔 시간만큼 기다려도 어떤 조각의 ACK가 오지 않으면, 그 조각이 길에서 사라졌다고 보고 똑같이 다시 보낸다.
받는 쪽은 다시 온 조각을 받고 이번에는 ACK를 돌려준다. 이렇게 빠진 조각을 메우니 결국 하나도 빠지지 않아요.

빠진 조각(빈자리)을 눌러 다시 보내요

확인(ACK)이 돌아오지 않은 빈자리 두 곳을 눌러 그 조각을 다시 보낸다. 다시 보낸 조각이 도착하면 빈자리가 메워져요.

재전송 덕분에 빠진 조각은 더 이상 없다. 받는 쪽 손에 모든 조각이 모였다.
그런데 한 가지가 남았어요. 조각들이 따로따로 길을 건너왔기 때문에 도착한 차례가 뒤죽박죽이다. 2번보다 5번이 먼저 와 있기도 하다. 이 순서는 어떻게 바로잡을까?

04

번호를 보고 순서를 맞춘다

세 번째 습관은 순서 맞추기다. TCP는 조각마다 1번, 2번, 3번 하고 번호를 붙여 보낸다.
도착 차례가 뒤바뀌어도 괜찮아요. 받는 쪽이 번호를 보고 작은 번호부터 차례로 줄을 세우기 때문이다. 5번이 먼저 와도 2번 자리를 비워 두고 기다리고, 번호 순으로 다 채워지면 원래 글이 그대로 되살아난다.
실제 TCP는 조각 단위가 아니라 데이터의 몇 번째 바이트인지로 번호를 매기지만, 생각은 같다.

뒤섞여 도착
번호 순으로 정렬
1
.
2
.
3
.
4
.
번호 순(1, 2, 3, 4)으로 눌러 줄을 세워요

뒤섞여 도착한 조각을 번호 순서(1, 2, 3, 4)대로 누르면 줄이 맞춰진다. 순서를 틀리면 다음 번호를 누르라고 알려 주고, 다 맞추면 원래 글이 살아나요.

번호대로 줄을 세우자 뒤섞였던 조각이 원래 글로 딱 맞춰졌다. 빠진 것은 다시 받아 메웠고, 순서는 번호로 바로잡았다.
받는 사람 눈에는 패킷이 빠진 적도 뒤바뀐 적도 없는 것처럼 보여요. 그 모든 수고를 TCP가 뒤에서 조용히 해 준 것이다.

05

정리

한 줄로 모으면 이렇다. 패킷은 빠지거나 순서가 뒤바뀔 수 있다. TCP는 받으면 확인(ACK)을 보내고, 안 오면 다시 보내고(재전송), 번호로 순서를 맞춘다.
그래서 받는 쪽에는 늘 빠짐없이, 순서대로 도착한다. 빠르기보다 믿음직함, 그것이 TCP의 약속이에요.

핵심을 차례로 눌러 되짚어봐요

버튼을 누를 때마다 핵심이 하나씩 나타난다. (빠짐/뒤섞임 → 받으면 ACK → 안 오면 재전송 → 번호로 순서 맞춤) 네 가지가 다 나오면 정리가 끝나요.

TCP는 안전을 위해 확인하고, 다시 보내고, 줄을 세운다. 그만큼 조금 더 기다리는 셈이다.
그런데 그 기다림이 아까운 경우도 있다. 목소리 통화나 게임처럼, 조금 빠지더라도 빠른 편이 나은 일이에요. 다음 레슨에서는 확인을 생략하고 빠르게 보내는 방식을 다룬다.

한 줄 정리패킷은 도중에 빠지거나 순서가 뒤바뀔 수 있는데, TCP가 이것을 알아서 메워 준다. 받으면 확인(ACK)을 보내고, 확인이 안 오면 그 조각을 다시 보내고(재전송), 조각에 붙은 번호로 순서를 맞춘다. 그래서 받는 쪽에는 늘 빠짐없이, 순서대로 도착해요. 빠르기만 한 것이 아니라 믿을 수 있게 보내는 약속, 그것이 TCP예요.
← 네트워크
이 페이지가 도움 됐다면 후원하기