인터넷 프로토콜 스위트(영어: Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다. 인터넷 프로토콜 슈트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다.
TCP/IP 를 검색했을 때 위키백과에서 얻을 수 있었던 정보입니다. 내용이 조금 부실해보여 영어 문서도 확인해보았는데요. 인터넷 프로토콜 전반에 관한 문서라 TCP/IP 가 그래서 무엇일지에 대한 정확한 정보를 얻기는 어려웠습니다.
TCP 와 IP 로 쪼개어 검색해보니 개별적으로 문서가 정리되어 있었습니다. 물론 여전히 어려운 단어들의 조합으로 설명하고 있지만 말이죠. 어릴 적 스타를 할때야 UDP 니 TCP/IP 니 몰라도 게임만 되면 그만이었지만, 그래도 웹 개발자를 준비중인 마당에 아예 몰라서는 곤란하겠죠. 그래서 일단 오늘 소화 가능한 선에서 정리를 좀 해보려고 합니다.
IP 는 Internet Protocol 의 약자입니다. 프로토콜은 위에서 통신규약이라고 번역되어 있죠. 통신을 하기 위해서 서로 지키기로 약속한 사항들이라고 이해할 수 있습니다.
IP has the task of delivering packets from the source host to the destination host solely based on the IP addresses in the packet headers.
영문 위키백과는 IP 가 하는 역할을 이렇게 정리하고 있습니다. 보내는 쪽인 source host
에서 받는 쪽인 destination host
까지 패킷의 헤더 부분에 기록된 IP 주소를 기반으로 패킷(packets)
을 전달한다는 것인데요. 여기서 패킷이란 우리가 전달하고자 하는 데이터의 조각 + 헤더에 담겨진 내용이라고 할 수 있습니다.
비유를 들어 이해하면 조금 더 이해가 쉬울 수 있습니다. 택배를 보낼 때 우리는 송장이라는 걸 붙여 보내는 쪽과 받는 쪽, 그리고 주소 등을 기록하게 되죠. 그리고 택배 안에는 당연히 우리가 보내고 싶은 내용물이 들어있을 겁니다. IP 가 하는 역할도 이와 매우 흡사합니다. 다른 점이 있다면 전달하고자 하는 데이터를 통째로 보내지 않고 나누어 보낸다는 점이죠.
IP 가 갖는 특징으로 비연결성(connectionless)과 비신뢰성(unreliable)이 있다고 하는데요. 비연결성이란 받는 쪽의 상태 여부에 관계 없이 패킷을 전송한다는 것이고, 비신뢰성이란 나누어진 패킷이 전부 다 도착하지 않을 수도 있고, 순서대로 도착하지도 않을 수 있다는 뜻이라고 합니다.
비연결성이야 그렇다 치고 비신뢰성은 데이터를 쪼개지 않으면 그만이지 않을까 싶지만, 아마 이렇게 된 배경이 있겠죠. 제가 참고한 자료에서는 전쟁과 관련한 보안 강화를 그 이유로 보고 있었는데요. 재미있으면서도 매우 유익한 글이니 참고해보실 수 있도록 링크를 남기도록 하겠습니다.
앞서서 IP 를 설명하며 IP 가 갖는 한계가 무엇인지를 짧게 이야기했습니다. 특히 비신뢰성에서 나오는 한계가 좀 크지 않나 싶은데요. 이러한 점을 보완할 수 있도록 나타난 것이 바로 TCP 라고 할 수 있습니다.
영어 위키백과에서는 TCP 가 어떻게 IP 를 보완하는지를 아래의 문장으로 설명하고 있었습니다.
TCP is connection-oriented, and a connection between client and server is established before data can be sent. The server must be listening (passive open) for connection requests from clients before a connection is established. Three-way handshake (active open), retransmission, and error-detection adds to reliability but lengthens latency.
TCP 는 데이터를 전달하기 전 먼저 연결(connection)을 한다고 합니다. 구글링해본 바로는 마지막 문장에서 언급된 Three-way handshake 라는 것을 통해 연결을 하게 되는데요. 아직은 이 부분까지 다룰 만큼은 아닌 것 같아, 왜 비연결성, 비신뢰성이 보완되는지 이해한 것만 정리해보겠습니다.
앞서 IP 는 받는 쪽이 어떤 문제가 있든지에 상관하지 않고 패킷을 전송한다고(비연결성) 했었는데요. TCP 는 그 전에 앞서 상호 간의 연결을 만들게 됩니다. 따라서 연결이 되지 않는다면 데이터를 전송하지 않게 되죠. 또한 데이터가 성공적으로 전송되었을 경우에는 이에 대한 응답도 돌려준다고 하네요.
또한 TCP 는 나누어진 데이터들의 순서를 함께 전달하기 때문에 받는 쪽에서 만약 순서가 다를 경우(비연결성) 전달받은 정보를 기초로 재전송을 요구하게 된다고 합니다. 순서 정보를 전달받기 때문에 데이터 패킷이 누락된 경우에도 마찬가지로 재전송을 요구하게 되겠죠.
앞에서 설명한 보완적인 특성 덕분에 TCP 와 IP 는 TCP/IP 라고 묶여서 지칭하는 경우가 일반적입니다.
IPv4 는 인터넷에서 가장 지배적인 프로토콜 이지만, 고유한 주소 값이 거의 다 소진된 관계로 IPv6 의 도입을 검토하게 된다고 합니다. 다만 기존의 IPv4 주소값이 무효화되는 것은 아니기 때문에 국내 상황에 한정해서는 아직 빠르게 전환되지는 않는다고 하네요. 관련한 여러 내용이 궁금하시다면 나무위키에서 보다 더 상세한 내용을 확인하실 수 있습니다.