안녕하세요 삽잡이입니다.
이번시간부터는 윈도우즈 네트워크 프로그래밍에 대해서 배워보려고합니다.
네트워크... 그림으로 같이 표현해줘야하는데...
이게... 핑계같지 않은 핑계로 시간 때문에...
글로만 서술하는 것이 참 힘들군요 허허... 아무튼 달려보도록 하겠습니다.
네트워크는 기본적인 개념이 상당히 중요합니다.
네트워크란 우선 무엇일까요?
기본적으로 우리말로 해석하면 Network는 '연결'을 의미합니다.
연결이 되려면 단일 시스템으로 안됩니다.
그래서 네트워크라는 개념이 들어가면 최소한 시스템 두 대가 연결되어야합니다.
네트워크는 연결되어있는 시스템을 가리켜
'네트워크에 물려있는 End System'이라고 부릅니다. 왜 Computer라고 부르지 않을까요?
우리는 컴퓨터로 인터넷 하지 않나요...
굳이 End System은 네트워킹이 가능한 시스템이면 되기 때문입니다...
즉, 컴퓨터일 필요가 없다는 것이지요... 핸드폰, 프린터, PDA, 테플릿, 심지어 네비게이션까지...
상관 없다 이겁니다...
중요한 것은 '또 다른 End System과 연결되어 있어야 한다는 것이지요...'
그렇다면 다시 네트워크에 대해서 정의를 내려보도록 하겠습니다.
'두 대이상의 End System이 연결되어있는 모양, 개념, 체계'를 가리켜
우리는 네트워크라고 정의할 수 있습니다.
제가 지금부터 올리는 Network Programming은 네트워킹이 가능한 컴퓨터 프로그래밍,
그 중에서도 Window Network Programming에 관련된 내용임을 말씀드립니다...
혹여나,
'소프트웨어의 일부와 하드웨어를 서로간에 연결을 어떻게 지을지,'
'통신 규칙은 어떻게 잡을지,'
'신호의 세기는 어떻게 할 것인지'
이와 같은 내용은 하드웨어와 관련된 내용으로써, 저는 다루지 않을 것입니다...
이런 내용을 찾고 계신분들은 주저하시지 말고 뒤로가기가 아닌 그래도 정독을... 허허...
아무튼... 네트워크에 관련된 소프트웨어... 시작해보겠습니다...
(사실 시작하고 있었습니다...)
전세계계적으로 가장 큰 네트워크는 뭔가요? 바로 'Internet'입니다.
우리들의 컴퓨터는 지금 End System입니다..
뭔말이냐... 각 컴퓨터들은 네트워크에 물려있다는 것인데,
정확하게 라우터에 연결되어있는 것입니다.
그렇다면 라우터는 뭔데요?
End System들과 일대일로 물려있는 소프트웨어를 장착한 하드웨어를 말합니다.
아무튼... 라우터는 End System들을 여러개 물고 있는 컴퓨터라고 생각하시면
이해하기 쉬우시지 않을까요...
마음이 아픕니다.. 저런 저질 그림 설명...
아무튼... 이 라우터들을 거쳐서 또 다른 라우터들이 우글우글 합니다.
또 라우터를 거치고 또 거치고, 거치다 보면 여러 대의 컴퓨터를 거느리고 있는 라우터를 볼 수 있습니다.
그런데, 우리가 저 저질스러운 그림을 통해 알 수 있는 사실이 있습니다.
'라우터는 여러 대의 컴퓨터를 거느릴 수 있지만, 또 다른 라우터와 연결되어 있다.'
그런데, 수 많은 라우터는 일대일로 연결되어 있지 않는 모습이 보입니다.
아무튼... End System에서 라우터에 데이터를 던지고 던지고 던지고 그러다보면
원하는 End System에게 데이터에게 도착하는 그런 방식으로 우리는 네트워크 통신을 하게 됩니다...
막장 설명이지요...
아무튼... 위의 그림을 보세요... 저질스럽지만... 보세요...
모든 라우터가 End System을 가지고 있는 것이 아닙니다.
라우터가 한대 있으면 라우터에 물려있는 컴퓨터들을 확인하실 수 있습니다.
우리가 사용하는 컴퓨터도 어디엔가 있는 라우터에 물려있는 것입니다...
이 라우터에 물려있는 컴퓨터들을 로컬 네트워크라고 부르지요...
그림에서는 빨간 지역의 있는 컴퓨터들을 뜻합니다...
지역적으로 연결되어있는 EndSystem들의 집합... LAN이라고 부르지요...
일반적으로 LAN을 설치하라고 하면 우리 라우터에 물리라고 하는 소리입니다...
물론, 그 로컬 네트워크 사이에는
여러 분배기, 스위칭, 공유기, 허브 같은 것들이 있지만, 이는 하드웨어에 관련된 내용임으로
최소한 적으로 '프로그램이 문제가 있을 때 왜 문제가 있는지'
생각할 수 있을 정도만 이해하도록 하겠습니다...
어떤 라우터가 일대일로 라우터만 알고 있다고 해봅시다...
그러면 그 라우터에는 주변 라우터를 테이블로 유지합니다...
'얘는 내가 알고 있다...' 이렇게 말입니다...
새로운 라우터가 물리게 되면 테이블이 새로 갱신되지요...
참고로, 이렇게 라우터들은 트리 방식으로 이루어져 있습니다...
아무튼...
라우터와 연결되어 있는 End System들은 각각 라우터와 '일대일'관계입니다.
로컬 네트워크 상에 물려있는 다른 End System들과 별로 관련이 없지요...
아.. End System이라고 영어 쓰기가 귀찮군요... 편의상 컴퓨터라고 하겠습니다.
이놈의 귀차니즘... 다시 시작~
그런데, 컴퓨터들이 여러대 물려있는데 라우터는 어떻게 컴퓨터를 구분할 수 있을까요?
컴퓨터들을 구분하기 위한 번호들을 통해 구분합니다.
Uniqe한 번호... 바로 MAC Address입니다.
이 MAC이라는 놈은 (화장품이 아닙니다 여성 여러분... 죄송합니다)
네트워크 카드 (통신이 가능한 모든 것들은 네트워크 카드를 들고 있습니다.)를 가지고 있는
놈들은 네트워킹이 가능한 놈들이라고 할 수 있습니다.
제조될 때부터 이 주소를 가지고 있지요...
컴퓨터에있는 네트워크 카드를 뽑고 비교해보면 다 다릅니다...
전세계적으로 유일성을 보장하지요...
그런데, 이 MAC 주소를 보고 실제 통신을 하지 않습니다...
MAC주소는 바뀌지 않는 것인데, 컴퓨터가 버려지면 그 번호도 버려지는데 재활용이 불가능하지요...
그래서 네트워크 세계에서는 상대적인 번호를 할당해주는데, 그게 바로 IP입니다.
정리하자면, 컴퓨터에는 네트워크 카드만 있다면 무조건 MAC주소가 존재하는 것이고,
IP 주소는 있을수도 혹은, 없을수도 있다는 것입니다....
왜냐, 상대적이기 때문에!
IP주소는 바꿀 수 있는 상대적인 번호라는 것입니다.
지금 가장 많이 사용되는 IP 주소의 버전은 IPV4이지요... 물론, IPV6도 있습니다.
IPV4의 주소 체계로 수용할 수 있는 주소가 바닥을 보이기 때문이지요...
요즘은 IPV4와 V6이 호환이 되서 쓰고 있는 곳들이 많습니다...
아무튼... IPV4는 4바이트로 이루어져 있습니다...
0부터 255까지....
예를 덜어서 203.127.210.40과 같이 사용하는 것이지요...
IP에는 크게 두 가지의 정보가 있습니다.
바로, 네트워크 ID와 Host ID입니다.
Host는 '어딘가 낑겨져서 조합되는' , '받아지는' 이라는 의미를 가지고 있습니다.
여기서 host는 네트워크가 연결되어서 서로 맞불려 동작할 수 있는 이라는 뜻으로,
End System을 지칭합니다.
라우터 이후에 있는 엔드 시스템들은 모두 네트워크 ID가 동일합니다.
Host ID만 다를 뿐이지요...
음... 실질적으로 데이터가 날라올 때, 목적 PC가 있는 라우터까지 도착하기전에는
모두 네트워크 ID만을 보고 데이터가 옮겨지는 것입니다....
왜 host ID는 안볼까요... 빠르게 해석하기 위해서입니다.
네트워크 ID만을 통해 식별하여 자기 라우터 내의 PC가 아니면 다른 곳으로 보내면 되니까요...
이 네트워크 ID와 Host ID를 구분하기 위해서는 우선 IP 클래스를 확인해야합니다...
IP클래스는 네트워크 충돌을 피하기 위해 규모에 따른 IP 주소 할당을 한것입니다...
IP 클래스에 따라서 네트워크 ID를 구분 지었다면,
그 외 나머지 범위가 Host ID가 되는 것이지요...
예를 들어서 네트워크 ID가 203.127.210 이라고 해봅시다.
그렇다면 0~255 그중에서도 0과 255는 예약되어있는 주소이기에 빼면 253개의 Host ID가 존재한다는 것인데,
과연 253대로 로컬 네트워크상 컴퓨터들에 다 할당할 수 있을까요?
그래서 고정 IP를 사용하지 않고 로컬 네트워크상 라우터만이 아는 IP를 사용합니다...
실제 할당 되어있는 IP는 외부로 나가는 라우터가 하나 가지고 있고,
그 외 내부에서 내부만 아는 IP를 만들어서 사용하는 것이지요...
즉, 내부 라우터들에 의해 내부 IP를 End System에 할당해주는 것입니다...
예를 들어 삽잡이가 사는 삽동네 (ㅋㅋㅋ)에서 외부로 가는 라우터가 하나일지라도,
외부에는 수많은 라우터들이 있을 것입니다.
외부로 가는 라우터는 자신 근처에 있는 외부 라우터들을 알겠지요...
내부에 있는 라우터들은 그걸 모릅니다...
달동네라는 곳의 컴퓨터를 B라고 하고 삽동네에 있는 컴퓨터를 A라고 해보겠습니다...
삽동네의 PC와 달동네의 PC는 어떻게 통신할까요?
삽PC (편의상)에서 데이터를 쏘면 삽동네의 외부와 접점에 있는 라우터가 우선 받습니다.
그리고 인접 라우터에게 데이터를 보내지요...
그리고 데이터를 받은 라우터들은 네트워크 ID를 확인하고 아니면 다른 인접 라우터로 넘깁니다...
여기서 알 수 있는 것은,
삽마을에서 외부로 나갈 수 있는.... 가장 끝점에 있는 라우터를 우리는 'GateWay'라고 부릅니다.
참고로 GateWay 안에 있는 소프트웨어를 우리는 GateWare라고 부르지요..
왜 GateWay라고 부를까요?
게이트웨니가 내 네트워크 망을 벗어나는 인터페이스 라우터라는 의미를 가지고 있기 때문입니다...
결론적으로 GateWay가 네트워크 ID를 가지고 있습니다.
그렇다면 달 동네 컴퓨터에도 최종 라우터가 있을 터인데,
그 최종 라우터도 GateWay라는 소리겠지요...
그리고 달동네에 있는 라우터의 네트워크 ID는? 당연히 다르겠지요...
다음시간에 배울 TCP/IP 계층 중 IP 계층에는 출발할 IP와 도착할 IP가 같이 실리는데,
도착점의 네트워크 ID를 보고 내것이 아니면 다른 라우터에게 던지는 방식으로 데이터가 전송되는 것입니다.
'내 주변 것들만 알고, 주변것들에게 데이터를 흘려보내는!'
그래서 라우터는 분배기라고 합니다...
라우터가 인접 라우터에게 데이터를 던지고 받는 과정을 '핑퐁'이라고 하구요...
정리해볼까요?
계속 데이터를 보면서 네트워크 ID만을 봅니다.
그래서 대충 누가 데이터를 날린지 보고 라우터들은 네트워크 ID만을 보고 식별하여 던지는 것입니다...
라우터에는 네트워크 ID가 있으니깐요...
이번시간은 여기까지 알아보겠습니다.
이상 삽잡이였습니다!
'삽질의 현장 > - 네트워크 프로그래밍' 카테고리의 다른 글
#006_Window_Network_IP, DNS (0) | 2015.10.02 |
---|---|
#005_Window_Network_구조체 멤버 정렬 (0) | 2015.10.02 |
#004_Window_Network_바이트 정렬 (0) | 2015.10.02 |
#003_Window_Network_ 윈도우 소켓 초기화 및 종료 (0) | 2015.10.02 |
#002_Window_Network_ Intro (TCP/IP 4계층) (0) | 2015.10.01 |