
컴퓨터 사이언스의 4대 꽃 중, 큰 한축을 담당하는 CN입니다. OS와 Computer Architecture은
컴퓨터 1대안에서의 이야기라면, 이제 Computer Network는 컴퓨터 - 컴퓨터 간의 연결을 만들어서 서로 잘 통신하는 이야기입니다.
개인적으로, 각 과목의 역사는 알아두면 좋다고 생각은 하지만, 큰 관심사는 아닐 수 있습니다. 하지만, 어떤 분야던지 초창기의 모습을 잘 알아두면 거시적인 관점에서 봤을 때 이해가 되는 부분들이 많으므로, 짧게라도 언급하고 넘어가겠습니다.
의외로, 인터넷은 군사기술 입니다. 미소냉전 시대일 때, 미국의 중앙시스템이 마비되면 어떻게 될것이냐?라는 질문으로 시스템을 분산시킬 필요성이 생겼고, 시스템을 분산시키기 시작한다면, 통신이라는 개념이 컴퓨터 간에도 성립이 되어야했습니다.
그래서, 미국 국방부 고등 연구소에서 처음 제안된 모델이 arpanet 입니다. 알파-오메가할 때 알파를 의도한 것도 있을거 같은데 공식적으로는, Advanced Research Projects Agency Network 입니다. 이 제안으로 미국의 4개 대학교 (UCLA, UCSB, 스탠퍼드 연구소, 유타대학)에 최초로 서로 연결을 시작했고, 미국 전역으로 퍼지게 됩니다.

군사기술이니 뭐니는 사실 저희 입장에서는 중요하지 않을 수 있습니다. 하지만, 굳이 이 점을 강조하는 이유는 추후에 다룰 라우팅, 단순한 네트워크와 똑똑한 호스트와 같은 개념들이 인터넷이라는 개념을 설계할 때 부터 기획되었다는 점 입니다.
인터넷의 목표는 단순합니다.
한 곳이 끊어지더라도, 느리더라도 무조건 통신은 되어야한다

네트워크를 설계할 때, 컴퓨터의 태동의 시기(?)라고 들었습니다. 학계에서 막 OS에 대한 이론과, 컴퓨터 구조에 대한 이론들을 토론하는 분위기 였다고 합니다. 그때, OS도 그렇고, 컴퓨터 아키텍처도 그렇고 사람들이 계층적 구조에 대한 정의를 하면서, 각자의 관심사를 분리시키고 서로의 할일을 정의하는게(?) 정론처럼 받아들여지고 있었다는 썰이 있고..(이게 아마, 나중에 개체지향까지 가지않았을까요)
다른 하나는 현실에 있었던 통신 시스템인, 우편배달 과정을 따라하다보니, 계층적이게 됬다라는 썰도 있습니다.
아무튼, 네트워크는 각 계층에 따라서, 할 일을 명확하게 나누고 각자의 역할을 충실히 수행함으로써 이뤄지는 구조를 띄게 됩니다. 여기서 파생되는 특징이 여러가지가 있지만, 대표적으로 2개만 소개하겠습니다.
이 부분은 당장 이해가 가지 않을 수 있지만, 컴퓨터 네트워크 계층을 하나씩 다루다보면 자연스럽게 이해가 되는 부분입니다.
네트워크는 각 계층에 따라, 할 일을 명확하게 나누고 각자의 역할을 충실히 수행하도록 설계 되었다.
제가 이 개념을 처음부터 알았다면, 컴퓨터 네트워크를 더 빨리 이해할 수 있었을텐데 라는 아쉬움이 있는 개념입니다. 네트워크는 똑똑한 호스트와 단순한 연결을 지향하도록 설계 되었습니다.
무슨 말이나면, 호스트 (통신의 끝, 단말장치)들은 송/수신/메시지 해독과 같은 모든일을 수행할 수 있어야하고, 그 둘을 연결하는 수단은 단순해야한다는 소리입니다. 이게 왜 중요하냐면, 연결이 단순하지 않다면 물리적인 망이 파괴된다면 새롭게 설치하고 인프라를 세우는데 큰 비용이 들게 됩니다.
추후에 다룰, 라우팅 프로토콜들을 보다보면 다소 무식하게(?) 동작하고, 다소 비효율적으로 동작하게 되는 이유 입니다.

ISO가 1970년대 말에 발표한 네트워크 모델에 대한 표준입니다.사실, 미국은 그전부터 네트워크를 써왔기 때문에, 먼저 쓰이다가, 후에 표준이 발표된거라 현재 네트워크 생태는 위의 7Layer을 엄격하게 따르진 않습니다.
각 계층별 역할이 정해진게 있지만, 여기서 쭉 설명하면 뜬구름 잡는 소리를 할 것 같기도 하고, 한개씩 찬찬히 다루도록 하겠습니다. 하지만, 용어는 알아야하기 때문에, 눈에 충분히 익혀두시는게 좋습니다.
TCP/IP는 현재 사용하는 인터넷 모델입니다. 4계층으로 이루어져 있으며, 5~7계층을 하나로 묶고, 1~2계층을 하나로 묶으면 완성이 됩니다. 묶은 계층들은 TCP/IP에서 프로토콜 단위로 나누고 있습니다.
예를들어, Presentation 계층에서 암호화와 복호화를 담당해야 하는데, 그 역할을 TCP/IP에서는 SSL/TLS , HTTPS와 같은 보안 프로토콜이 담당합니다. TCP/IP에서 중요한 건, TCP와 IP,ARP, 웹을 하신다면 HTTP,DNS정도가 있습니다. UDP도 요즘 꽤 중요해지는것 같습니다. 자신들만의 신뢰성을 구축해서 RUDP를 만들어내는 사례들이 점점 늘어나고 있고, 무선통신의 시대니까요.
네트워크는 계층적 구조이기 때문에, 각 계층별로 다루는 데이터 단위와 주소가 모두 다릅니다. 여기서, 각 계층별로 다루는 데이터 단위를 PDU(Protocol Data Unit)이라고 합니다.
1계층은 전기적 신호(Signal), 2계층은 Ethernet기준이라면 프레임(frame), 3계층은 Packet, 4계층은 Segment,5~7계층은 Message라고 합니다. 사실, 3계층 위부터는 퉁쳐서 패킷이라고 부르기도 합니다.
주소는 2계층은 MAC, 3계층은 IP, 4계층은 Port, 7계층은 프로토콜마다 다릅니다.
각 계층별로 다루는 데이터와 주소가 모두 다르다.
이제, 본격적으로 제일 아랫단인 L2(Layer 2)를 보도록 합시다. 컴퓨터가 사용하는 2계층은 이더넷 프로토콜이고, 아래의 특징을 가집니다.

MTU(Maximum Transport Unit)
이더넷 표준에서 정의하는 최대로 보낼 수 있는 크기(1500byte)
같은 LAN이라는 개념은 NetId가 같다는 이야기인데, IP를 다루지 않았기 때문에 지금은 나와 같은 영역(?)에 있는 친구한테만 보낼 수 있다 정도로 받아들이면 될 것 같습니다.
2계층에서는 사실, 다중화라는 중요한 개념이 있습니다. 이건 깊게 들어가면 다룰 내용이 엄청 많고, 프로그래머 입장에서는 큰 관심이 있는 분야는 아닙니다. 따라서, 개념정도만 익히고 갑시다.
핵심은, 다중화는 고속 회선은 아주 비싼 자원이기 때문에, 고속 회선 1개를 냅두고(보통 백본 네트워크라고 하죠 이걸) 각 주파수 대역별로 여러개의 장치들이 한번에 자신의 데이터를 담아서 보내도록 지원하는 겁니다.
예를들어, 10Ghz면 1초에 100억번 떨림이 생긴다는거니까, 1초에 이론적으로 0과1의 신호를 100억개 만들 수 있다는 겁니다. 그럼 그 100억번 떨리는 대역을 나눠서 0~25억번까지는 너가, 25~49억까지는 내 친구가 이런식으로 나누어서 쓸 수 있도록 지원할수도 있고, 시간에 따라서 주르륵 보낼 수도 있고.. 다양한 방법론이 있습니다. (TDM, FDM 등)

AA:BB:CC:DD:EE:FF 이런식으로 됨.여러개의 컴퓨터를 서로서로 연결해도 되지만, 그렇게되면 관리가 힘들기 때문에 중간에 중계해주는 역할을 하는 장치가 필요합니다. 이게 Switch 입니다.

통신을 중계해주는 역할만 하기 때문에, 도착지가 될 수 없습니다. 자신에게 꽂혀있는 포트(물리적인 포트)의 상황을 내부적으로 Table(arp table)로 기록해서 빠르게 중계해주는 역할을 하고, 정확한 목적지(해당 MAC을 가진 컴퓨터)에만 프레임이 가도록 해줍니다.
사실, switch도 이렇게 간단하게 넘어갈 건 아니긴하지만, 1:1 통신부터 시작해서, DummyHub -> 허브 -> 스위치 이렇게 발전되는 과정을 알면 더 와닿을 수 있습니다. 그러면, 다중화와 스위치에 대한 이야기로 한 3~4개 글을 적어야합니다.
여러 컴퓨터를 하나로 묶어서, 내가 원하는 컴퓨터로 딱딱 보내주는 중계기구나라고 생각합시다.
3계층의 ARP를 할 때, Switch에 대한 소개는 조금 더 하도록 하겠습니다.