네트워크의 신: 네트워크 이렇게 하니까 이해 되던데 #1
2025년을 살아가는 우리에게 AI, 인공지능, 로봇, 빅데이터, IT, 전산, 인터넷 등등 우리가 하루도 빼놓지 않고 접하는 기술에는 대부분 네트워크가 근간을 차지하고 있다. 그렇다면 네트워크를 이해하는게 이 모든 기술의 공통분모를 이해하는 것 아닐까? 오늘 그 본질적인 질문과 답을 논의해본다. 그것도 아주 속시원하게!
자 그럼 질문,
#1 장비와 장비간 통신을 할때, 왜 IP만 써도 될 거 같은데 MAC address도 같이 쓰는 것인가?
위의 질문을 다시하면 IP가 이미 장비의 고유 값인데, 굳이 MAC을 쓰는 이유가 무엇인가?
이것에 대해, 명확한 짧은 답은 IP를 처리하는 장비와 MAC을 처리하는 장비가 서로 다르기 때문이다. 하지만, 이것은 좋은 대답은 아니다. 그럼 좀 더 좋은 대답을 해보자.
좀더 좋지만 긴 대답은, 네트워크의 시작은 "주소" 이고 이 주소는 "진화" 했기 때문이라는 것이다. 헉! 네트워크의 본질이 '주소' 이고 '진화'를 했다고? 이게 무슨 귀신 씨나락 까먹는 소리인가? 하겠지만, 들어보면, 이제 무릎을 탁! 하고 치게 될 것이다. 즉, 처음 장비와 장비가 통신을 하던 시절에는 A라는 장비와 B라는 장비가 통신을 할 때, 그 장비의 고유 번호같은 것으로 했다는 것이다. 지금처럼 무슨, www.naver.com 또는 www.google.com 과 같은 문자 주소는 존재하지 않았다. 그래서 전산과 네트워크가 겨우 걸을마를 시작할 즈음에는 가령, A라는 PC와 B라는 PC를 케이블로 연결하고, 각 장비의 고유 번호로 통신을 한것이다. 이것을 눈치 빠른 사람이라면 눈치 챘겠지만, MAC 주소의 시초라고 할 수 있다.
아래의 그림은 단순히 두개의 PC를 케이블로 연결한 것이다. 그래도 통신이 된다!!!
위에서 보시다 시피 PC0에서 PC1로 ping 이 되는게 보인다. 여기에서 오해하지 말아야 할것은, PC 대 PC와 같이 단순히 케이블만 연결되어있어도 통신이 가능한것은 MAC protocol(L2 Layer)을 사용한다는 것이다. Ping은 통신이 되는 것을 보여주기 위해 L3 Protocol을 사용하였지만, 저것은 연결이 된다는 것을 시각적으로 보이기 위해 그렇게 한것이다. 실제로 PC를 여러대 연결해서 통신을 할때에는 MAC address를 사용한다. 즉, IP같은건 없었을 시대에는 그렇게 했고, 지금 현재에도 그때의 흔적이 있어, IP를 사용하는 라우터 같은 장비(L3 Layer)를 사용하는게 아니라면 MAC으로 통신을 하게 되는 것이다.
그렇다면 여기서 중요한 질문하나? PC의 NIC는 몇개층 장비일까?
NIC는 MAC을 처리하는 2계층 장비이다. 그래서 MAC Address를 처리하여 통신하는 것이다. 앗! 그런데, 잠깐, 어떻게 ping의 IP를 처리하는 거지? 왜냐면 PC의 OS가 L3Layer 장비의 역할을 한다. 흔히 L3Layer 장비는 Router를 떠올리지만, IP처리하는 L3역할을 OS가 Software적으로 처리하기 때문이다~~ 휴우~ 어쩐지 NIC가 2계층 장비라서 안되는게 맞는데, 그래서 가능 했구나. CLI에서 Ping이 된다는 것 부터 L3Layer 장비라는 것을 암시한것이다. OS 대단하구나! 못하는게 없어!
다시 원래얘기로 돌아가면, 허브나 L2SW(L1Layer, L2Layer)는 MAC address 밖에 인식을 못한다. 자 그렇다면, 이제 두대의 PC가 아니라 여러대의 PC를 연결한다고 생각해보자. 그렇다면 Hub나 스위치가 필요하다. 아래의 그림처럼 말이다.
아래의 그림은 switch 라는 장비를 통해서 두개의 PC를 연결한 것이다. 그래도 통신이 된다.
별다른 작업을 안해줘도 말이다.
이제 알게 되었다!
아래와 같이, PC를 아무리 많이 연결해도 스위치(L2Layer 장비)나 HUB(L1Layer 장비)에 연결하면 서로 서로 연결이 된다는 것이다.
쉽네! ㅋㅋㅋ
자 지금까지 위의 컴퓨터 세팅이 LA라고 하자. 그리고 아래와 같이 뉴욕에도 PC를 세팅했다고 해보자.
그리고 아래와 통신을 해봤더니 New York의 연구소에 있는 PC도 통신이 잘된다. 그냥 두개의 PC를 연결해도 되고, 위와 같이 스위치에 연결해도 된다. 이와 같이 switch에 연결한 이유는 곧 LA와 NY의 네트워크를 연결해야 하기 때문이다.
위의 이미지에서 보면 New York의 내부망은 10.0.0.0 망을 사용했다. LA의 내부방은 192.168.10.0 망을 사용했고, 나중에 연결할때 어디에서 어디로 연결했는지 구분할려고 달리한것 뿐이다. 헷갈리지 않을려고 한것뿐이다. ㅎㅎㅎ
위의 그림에서 A라는 장비의 IP는 192.168.1.0대역에 속하는 장비이다. 그래서, B라는 장비를 찾을때도 같은 대역에서 찾으면 같은 IP 대역인 192.168.1.0대역인 것을 알 수 있다. 하지만, C라는 장비는 A와 B와는 달리, 192.168.5.0대역의 장비이다. 다른 위치에 있다는 것을 알 수 있는 것이다. 자, 이제 다시 질문으로 돌아가서,
#1 장비와 장비간 통신을 할때, 왜 IP만 써도 될 거 같은데 MAC address도 같이 쓰는 것인가?
위의 질문에 대답을 한다면, 예전에 장비가 얼마 없었을때는 MAC 주소만으로 충분했지만, 지금의 통신은 지역적으로 매우 넓어졌고 장비도 많아졌기 때문에 IP 주소를 써서 장비의 위치를 훨씬 쉽게 확인 할 수 있기 때문이다. 또한, 그렇게 하기 위해, hub, switch, 게이트웨이, 라우터 등의 장비가 만들어졌고, 이러한 장비는 각 용도에 따라, MAC 주소만을 처리하고(2계층 장비), IP 주소를 처리(3계층) 장비 등으로 나누어 지게되었다.
자 그럼 네트워크의 본질을 이해하기 위한 두번째 질문이다.
#2 네트워크에서 말하는 계층이라는 게 무엇인가? 무엇을 기준으로 소위 말하는 7계층이라는 것이 나온것인가?
이것에 대한 답도 역시 "주소"이다. 네트워크의 본질은 '주소'라고 위에서 이미 말을 했다. 그렇다면, 주소만 쓰면 되지 계층은 왜 나왔을까 하는 것이다. 이것은 1번의 질문과도 연관이 있는데, 가령 1계층 장비라고 하면, hub와 같은 것인데, 이 hub는 주소라는 것이 없다. 즉, 위의 그림에서 1계층 장비는 같은 LAN 내에서 허브를 쓴다고 하면, 그것은 LAN내에 장비가 많아서, 전기적 신호를 증폭시켜야 할때 사용하게 되는 것이다. 즉, hub는 MAC이나, IP를 전혀 사용하지 않고 전달한 하는 것이다.
추가적으로 2계층 장비는 MAC주소를 기반으로 처리하는 switch와 같은 장비를 말한다. 3계층 장비는 위의 그림에서 gateway와 같이 네트워크 대역이 바뀔때, IP를 사용하여 정보 전달을 하는 장비이다. 여기서 알아둬야 할 것으로 7계층 주소가 있다. Fully Qualified Domain Name(FQDN, 7계층 주소) 이것은 Host Name + Domain Name으로 된 주소로 인간이 이해하기 편하게 만든 www.naver.com과 같은 주소이다. 이 주소는 인간의 이해를 돕기 위한 것일뿐 실제로 데이터 송/수신에 일절 영향을 끼치지 않는다.
잠깐 정리를 하면, 주소에는 3가지 종류가 있다고 생각하면 된다.
1. MAC 주소
2. IP 주소
3. 문자 주소
실제로 네트워크를 위한 '주소'는 위의 순서대로 '진화'되어왔다. 그렇다고 생물학에서 처럼 최후의 진화만 살아남은 것은 아니고, MAC주소, IP주소, 문자 주소 3가지가 모두 사용되고 있다.
#3 그렇다면 포트라는 것은 무엇인가? 가령, well-known 포트, registered port, dynamic port 이런건 다 무엇이란 말인가?
위의 질문에 제대로 된 대답을 할 수 있다면, 네트워크의 본질을 꽤나 알고 있다고 할 수 있다.그럼 먼저 well-known port라는 것은 무엇일까? 말뜻 그대로 "잘 알려진 포트"라는 것은 무엇인가? 80번은 잘 알려진 웹서비스 포트인가? 이렇게만 대답하면 30점짜리 라고 할 수 있다. 그럼 제대로 된 대답을 하면 아래와 같다.
포트를 말할 때는 서버의 입장인지, 클라이언트의 입장인지를 뭔저 파악해야 한다. 가령, 내가 PC를 켜서 '크롬'을 열었다고 하자. 크롬 창마다 구글, 네이버, 다음 3개을 열었다고 하자. 그러면 네 PC에서는 각 창마다, 네트워크 선을 타고 혹은 무선으로 각 서버에게 요청을 할 것이다. 먼저 첫번째 창은 192.168.1.10:50010에서 요청을 했다고 하자.
그렇다면, 클라이언트는 구글 서버에게 142.251.42.174:80으로 가서 "구글 홈페이지" 자료를 달라고 할 것이다. 이때, 다른 포트가 아닌 80번 포트로 가서 알려달라고 하는 것이다. 이게 바로 잘 알려진 포트 번호의 대표적인 예이다. 즉, 클라이언트는 서버가 어떤 포트에서 서비스를 해줄지 알고 있는 것이다. 잘알려져 있다는 것은, 서버가 몇번에서 서비스를 할지 클라이언트가 알고 있다는 뜻이다. 그렇다면 클라이언트는 이것을 어떻게 알고 있을까?
C:\Windows\System32\drivers\etc 밑에 services를 파일을 메모장으로 열어 보면 보일 것이다.
serrvices에는 각 서비스에 대한 '포트' 정보가 아래와 같이 나와 있다.
domain 53/tcp #Domain Name Server
domain 53/udp #Domain Name Server
bootps 67/udp dhcps #Bootstrap Protocol Server
bootpc 68/udp dhcpc #Bootstrap Protocol Client
tftp 69/udp #Trivial File Transfer
gopher 70/tcp
finger 79/tcp
http 80/tcp www www-http #World Wide Web
hosts2-ns 81/tcp #HOSTS2 Name Server
hosts2-ns 81/udp #HOSTS2 Name Server
kerberos 88/tcp krb5 kerberos-sec #Kerberos
즉, 크롬을 열고, 주소창에 www.google.com을 치고 엔터를 치는 순간, 브라우저는 services 파일의 내용을 훝어보고, http 서비스는 80번 포트로 서버에게 요청하면 된다는 것을 알고 요청 하는 것이다.
그렇다면, 클라이언트는 몇번 포트에서 서버의 80포트 데이터를 처리할까? 이것은 클라이언트의 OS가 동적으로 처리하게 되는데, 즉 임시적으로 부여했다가 사용자가 크롬을 끄거나 하면 다시 회수하고 한다는 뜻이다. 위에서 예로 들었던, 50010포트는 OS가 클라이언트, 즉 크롬에게 부여하게 되는 것이다. 이것을 dynamic포트라고 하는 것이다.
고놈의 OSI 7계층때문에....
OSI 7계층이 네트워크를 하는 사람들을 꽤나 헷갈리게 한다. 그 이유는 OSI 7계층이 단일 장비나 단일 s/w를 의미하는게 아니기 때문이다. 실제로 OSI 7계층에서 네트워크 측면에서는 L1 ~ L4, L7 정도이고 L5, L6는 소프트웨어 측면이 강하다.
OSI 7계층은 "네트워크의 신: 네트워크 이렇게 하니까 이해 되던데 #2" 에서 이야기를 해보도록 하겠다.
댓글
댓글 쓰기