말장난 같아 보이지만, 대부분의 아티클에서 TCP/IP 와 TCP, IP 용어를 다르게 취급합니다.
제가 IT 용어를 바라볼 때 생각나는 말입니다. 업계에서 쓰이는 용어들은 처음 마주할 때 직관적이지 않다고 생각하게 되고 의심을 먼저 하게됩니다. 학부 시험기간 때 마다 시험공부 시간을 늘리는 주범이었죠. 도대체 왜 이 개념은 뜻과 전혀 상관없어 보이는 이런 이름으로 지어졌을까.
하지만 연관된 배경지식들이 추가되거나 얕게나마 경험이 추가되면 점점 용어에 대한 의심이 해소가 되며 긴밀하게 이해하게 됩니다. 그리고 그러한 개념들은 다른 개념들을 이해하는 데에 직접적인 도움을 주었습니다.
그 중 하나의 이야기를 해보려합니다.
프로토콜 이라는 것은 다들 알고있을 것입니다. 네트워크 통신할 때 지켜야하는 명세, 규약입니다.
TCP IP 정의를 먼저 보겠습니다.
TCP: Transmission Control Protocol
전송을 컨트롤 하는 프로토콜
IP: Internet Protocol
인터넷 계층에서의 프로토콜
오 용어가 생각보다 직관적이고 쉽습니다. 그런데 그 다음 용어를 읽으면 기분이 안좋아집니다.
''' 프로토콜들의 모음집 '''
정의만 읽어도 의심이 들기 시작합니다.
- TCP 도 프로토콜
- IP 도 프로토콜
- 근데 TCP/IP 는 '여러 프로토콜들의 모음집'
심지어 그 "모음집"에는 TCP라는 프로토콜과 IP 라는 프로토콜을 포함한 여러 프로토콜들이 포함되어있습니다.
저는 이러한 용어들로 작성된 문서들을 마주하면 항상 뜬구름을 잡게되었습니다. 하지만 이 근본적인 모호함과 의구심을 해소하고 나니 TCP/IP 에 대한 아티클들을 좀 더 수월하게 독해할 수 있었습니다.
이러한 모호함을 해소하는데에 도움이 되었던 관점을 공유해드리려고합니다.
말장난 같아 보이지만, 대부분의 글에서 위 개념들을 다르게 취급합니다.
이를 이해하기 위해 아래 용어의 대해 이해해야합니다. 아래 용어는 TCP/IP 의 정체성입니다.
프로토콜 스위트 란 프로토콜들의 계층화된 구조를 의미합니다. 다시말해 이 것은 프로토콜들의 집합이고, 그 집합 속에서 네트워크 커뮤니케이션에서 본인들이 맡고있는 역할에 따라 계층이 나눠져있는 것입니다. (프로토콜 스택이라고도 합니다)
프로토콜 스위트의 계층을 어떻게 나누냐에 대한것에는 여러가지 의견과 표준들이 존재합니다. 대표적으로 TCP/IP 모델과 OSI 모델 이 있습니다. 모두 네트워크 통신을 이해하는데에 도움을 주는 개념입니다.
TCP 와 IP 는 각각 프로토콜 스위트에 속하는 구성원이며, 그저 다른 계층의 프로토콜들과 긴밀하게 연결되어있고 중심적인 프로토콜이기 때문에 프로토콜 스위트에 TCP/IP 라는 이름이 붙여진 것입니다.
1970년대에 이 모델이 탄생하는 시점에 TCP, IP 를 중심으로 모델링 되었던 것으로 예상하고있습니다.
따라서 TCP/IP 는 프로토콜 스위트로, TCP 와 IP 는 각각의 프로토콜로 인지를 하고있는 것이 도움이 되었습니다. 사실 용어가 사용되는 컨텍스트 자체에 차이가 있기도 합니다. TCP/IP 프로토콜 스위트는 네트워크 구조를 파악하거나 설계에 도움을 주기 위해 만들어진 "모델"이고, TCP, IP 는 실제로 사용되고있는 프로토콜입니다.
TCP/IP 스위트를 먼저 이해하고 나면 좀 더 프로토콜들을 명료하게 생각할 수 있습니다. 어떤 역할에 따라 어떻게 계층이 나뉘어져있을까요?
TCP/IP 4계층이라고 했지만 표에는 계층이 5개로 되어있습니다. 국제표준문서인 RFC 에서는 4계층으로 소개하고 있지만, 최근들어 OSI 7계층과 비교하며 최신화되오던 과정에서 4번째 계층인 네트워크 액세스계층을 Data Link 계층과 Physical 계층으로 나누는 방식이 주류가 되고 있습니다. 네트워크 쪽에서 권위있는 Cisco 공식문서에서도 최근 5계층으로 업데이트한 것을 볼 수 있습니다. Cisco 5 Layer Model / RFC 4 Layer Model
결국은 이러한 모델들은 네트워크 통신을 이해하는데에 도움을 주기 위해 추상적으로 만들어진 개념입니다. 모델은 시간이 지나면서 업데이트가 될 수 있기에 권위있는 곳에서 발행한 문서를 자주 참고하여 이해하는 것에 도움을 주는 명분을 만드는것이 중요한 것 같습니다. 이전 글 참고
최신문서에 기반하여 5계층으로, 어떤 역할들에 따라 계층이 나뉘어있는지 간단하게 적어보았습니다.
Domain Developers 가 사용한다고 Cisco 문서에서 볼 수 있습니다. 이 아래계층은 네트워크 엔지니어들이 다룬다고 되어있죠. 서비스를 만들어보면 HTTP, SMTP, FTP 등 여러 프로토콜들을 사용해보게 됩니다. 다양하게 추상화된 라이브러리나 프레임워크 덕에 프로토콜 별 특징들을 잘 몰라도 만들 수 있는 상황이 많지만, 내가 만든 기능이 네트워크 통신을 할 때 어떤 프로토콜을 사용하고 어떤 특징들이 있는지는 알면 좋을 것 같습니다. 특히 특정 기능들을 만들때에는 어떤 프로토콜을 이용하는지에 따라 완전히 다른 장단점과 특징을 보이기도 합니다. 재밌게 읽었던 글
Message Segmentation 역할을 하는 계층입니다. 몸집있는 Message 유닛을 하위 계층에서 송수신 할 수 있도록 작은 Segments 들로 분할을 하거나 Assemble을 하는 방식에 대한 규약들이 존재합니다.
TCP, UDP 두가지가 대표적입니다. 둘의 차이를 비교하는 것도 재미있습니다. 컴퓨터 네트워크 수업 단골 시험문제였던 것으로 기억합니다 TCP vs UDP
UDP 는 소싯적 스타크래프트해본 사람에게는 아주 익숙하죠
인터넷 계층에서는 IP 주소를 사용하여 여러 네트워크들을 연결하는 역할을 합니다. 이 계층에서는 전송 계층에서 받은 데이터 Segment 들을 패킷이라는 작은 단위로 또 분할하고, 해당 패킷에 목적지 IP 주소와 출발지 IP 주소를 패킷에 할당합니다. 이 때 할당된 목적지 IP 주소를 이용하여 다음 네트워크로 전달하는 역할 까지 수행합니다.
네트워크 통신시에는 라우터라는 중개기기를 이용하여 네트워크를 연결하는데, 패킷이 전송되는 경로를 결정하는 역할도 합니다. 이를 라우팅이라고 하며, 라우터들은 IP 계층 프로토콜이 할당해둔 패킷의 목적지 IP 주소를 보고 패킷을 전달할 다음 네트워크로 결정합니다. 이렇게 인터넷 계층에서 결정된 경로를 따라 패킷이 전달되면, 패킷은 목적지 네트워크의 데이터 링크 계층에서 Assemble 되고 4계층으로 넘어갑니다.
IP 주소와 IP 도 다르게 읽어야합니다. IP 주소는 네트워크 상의 컴퓨터들 각각의 논리적인 Address 입니다. 이걸 IP 주소 라고 부르는 이유는 IP 계층에서 사용할 주소이기 떄문입니다. 이 모호함의 포인트가 공감되지 않으시는 분들도 많을것같습니다. 저의 경우 모호하다고 느꼈던 부분은, IP 주소 (IP Address) 를 그냥 줄여서 IP 라고 부르는 글들이 많다는 부분입니다. 저는 인터넷 계층 프로토콜에서 송수신 위치를 표현하기 위해 사용하는 표준 주소가 IP 주소 라고 이해하고있습니다. 그리고 IP 는 인터넷 계층 프로토콜중에 하나이죠.
Cisco 문서를 보면 node-to-node connectivity 라는 용어가 등장합니다. node 란 통신이 가능한 장비들을 일컫습니다. 저의 경우 MAC 주소를 가진 장비들을 노드로 인지했습니다.
기기들 사이에 전파를 송수신 할때의 프로토콜들을 다룹니다. 기기간에 데이터를 주고받을 때 충돌이 없어야하는 등의 경우들을 핸들링합니다. 대표적으로 이더넷 이라는 프로토콜이 있습니다.
지금까지 주고받던 0과 1들의 비트 데이터를 전기신호로 변환합니다. wired 된 전기신호일 수도 있고, 라디오파와 같은 non-wired 전기신호 일 수도 있습니다.
네트워킹의 과정을 택배 배송에 비유하는 글들이 많은데, 정말 좋은 비유인것 같습니다. 수많은 물품들을 택배라는 패킷 개념에 담고, 많은 트럭들을 기반으로 Segmentation과 Assemble이 이루어지기도 하고, 또 도로에서는 충돌을 피하기 위한 규칙들도 있습니다. 신호등에 의해 차례를 기다리고, 과속 방지턱이나 과속 방지 카메라, 교통량이 많은 구간에서는 적절히 차선이 늘어나면서 유량이 줄어들기도 합니다. 그리고 교통량이 너무 늘어나면 traffic jam 이 생겨 택배 도착일이 늦어지기도 하고, 누락건도 생기기도 하죠. 다양한 모호해보이는 용어들도 등장하고 서로다른 특징의 개념들이 많이 나와도, 결국은 그저 데이터를 이곳에서 저곳으로 보내기 위한 일들을 한다고 생각하면 한결 더 가까워지는 것 같습니다.
위에서 언급했듯이 계층을 어떻게 나누냐에 대한 여러 표준들이 있고, 같이 읽어본 TCP/IP 모델 외에 OSI 모델이 존재합니다. 여기서는 조금 더 세부적으로 7개의 계층으로 나누고있습니다.
TCP/IP 모델은 인터넷에서 통신을 하기 위한 프로토콜을 설명하기 위해 만들어졌고, OSI 모델은 표준화된 네트워크 프로토콜을 설계하기 위해 만들어졌습니다.
다만 TCP/IP 모델은 인터넷의 발전에 따라 계속해서 업데이트되어 왔으며, 실제로 인터넷에서 사용되는 프로토콜들을 기반으로 수정되어왔습니다. 그래서 TCP/IP 모델은 실제로 사용되고 있는 프로토콜들을 설명하기 위해 더 적합하다고 할 수 있습니다.
반면에 OSI 모델은 표준화된 네트워크 프로토콜을 설계하기 위해 만들어졌지만, 실제로는 네트워크에서 사용되는 프로토콜들과의 차이가 있어서 널리 채택되지 않았습니다. 그러나 OSI 모델은 계층적인 구조를 통해 네트워크 프로토콜을 이해하기 쉽게 만들어주는데, 이러한 모델링 방식은 현재까지도 많은 네트워크 기술에서 사용되고 있습니다. 이러한 OSI 의 추상화된 각 계층들을 TCP/IP 모델에서 실제 프로토콜들에 기반하여 풀어서 설명해줍니다.
TCP/IP model is implementation of OSI model 이라는 문장이 있습니다.
OSI 7계층 문서를 읽을때에도 TCP/IP 모델과 함께 바라보면 좀 더 수월하게 읽을 수 있습니다. Cisco 문서
네트워크의 구조와 흐름을 파악하기위해서는 OSI 7계층을, 실제로 사용하게될 프로토콜들에 대한 특징을 파악하기 위해서는 TCP/IP 4계층(5계층) 을 보는것이 좋을 것 같습니다.
제가 사용하고 있는 프로토콜들은 자세히 설명할 수 있지만, 네트워크 엔지니어가 아니기 때문에 네트워킹이 어떻게 이루어지는지 경험해보기 쉽지 않았습니다. 하지만 정말 잘 정리된 이러한 프로토콜 스위트 모델들 덕에 조금은 더 친숙해질 수 있는 것 같습니다. 위에서도 언급했지만, 결국은 데이터를 이곳에서 저곳으로 옮기기 위해 하는 일들을 잘짜여진 아키텍처 속에 녹인 결정체가 네트워크 모델입니다. 모델링을 하는건 매우 어렵지만, 모델을 이해해보는건 생각보다 어렵지 않은것같습니다.
아직 많이 부족하지만 좋은 레퍼런스를 많이 참고하면서 공부할 수 있어 항상 감사합니다.
읽어주셔서 감사합니다. 의견 및 피드백 댓글은 환영입니다 :)
Thanks for the information, I found a lot of interesting information here. Keep sharing such informative post. Sanford Chart