달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'분류 전체보기'에 해당되는 글 122

  1. 2008.11.10 [Note] 네트워크를 공부하기 위한 계층구조 이해
  2. 2008.11.06 1.1 TCP/IP Protocol 개요

네트워크를 다루는 수많은 책들 중 빠지지 않는 것이 있다면 OSI 7 Layer에 관한 내용일 것이다. 그렇다면 왜 그렇게 강조를 하는 것일까? 당연한 얘기겠지만 그만큼 중요해서 일 것이다. 문제는 OSI 7 Layer라는 것이 사실 초보자들에게는 조금 어렵다는 것인데, 그렇다고 그냥 넘어가서는 안된다. OSI 7 Layer의 핵심은 네트워크라는 하나의 흐름을 몇 개의 계층형태로 정리를 하고 있다는 것이다. 필자가 이것을 중요하게 언급하는 이유는 이러한 계층모델을 이해하고 나서 다음 과정을 공부하는 것과 이해하지 못하고 다음 과정을 공부하는 것은 너무나 큰 차이가 있기 때문이다.


네트워크에서 찾을 수 있는 라우터, 스위치, 허브 등 각종 장비들과, 네트워크상에서 구현되는 웹서비스, 메일서비스 등의 어플리케이션들, 이들 어플리케이션이 만드는 데이터를 전송해 주는 역할을 하는 TCP/IP 프로토콜 등 이 모든 것들이 OSI 7 Layer라고 하는 계층모델과 밀접한 연관성이 있기 때문이다. 그런 이유로 이것을 이해하면 그만큼 네트워크를 이해하는 속도가 빨라지게 된다.  2시간 공부해야 할 것이 1시간이면 이해할 수가 있게 될 것이다. 그렇게 시간을 단축할 수 있다면 다음 단원들을 위해서 조금 시간을 더 투자해 볼만 하다는 생각아닌가?


그렇다면 왜 이렇게 네트워크를 계층구조로서 구분해서 이야기를 하고 있을까? 그것은 네트워크상에서 컴퓨터와 컴퓨터가 데이터를 주고 받는다는 것이 그리 만만치만은 않다는데 있다. 한 컴퓨터에서 응용프로그램을 실행한 다음 데이터를 만들어 내서 상대방 컴퓨터에 이 데이터를 전달하기까지는 많은 작업이 필요하다.


먼저 상대방 컴퓨터가 누구인지를 판단해야 하며, 상대방 컴퓨터가 이 데이터를 인식할 수 있도록 데이터 포맷을 결정해야 하고, 상대방 컴퓨터의 이름을 근거로 해서 상대방 컴퓨터를 찾아갈 수 있는 방법을 결정해야 하고, 또한 데이터가 전송되다가 문제가 생겼을 때 체크할 수 있는 방법도 제공이 되야 한다. 이 모든 것을 하나로서 처리하기는 현실적으로 어렵다. 네트워크를 처음 공부하는 사람들에게나 이러한 네트워크 프로그램 및 프로토콜을 만드는 개발자들 입장에서도 이 모든 통신과정을 한꺼번에 처리하려고 한다면 그만큼 어렵게 느껴질 수 밖에 없을 것이다.


ISO(
국제표준화기구;International Standard Organization)에서는 OSI(Open System Interconnection) Reference Model이라는 계층모델로써 네트워크에서 하나의 표준을 제시하고 있다. OSI Reference Model은 일곱 개의 계층으로 나뉘어 있다고 해서 OSI 7 Layer라고 부르는 것이다. 이것을 원어 그대로오에쓰아이 세븐 레이어혹은오에쓰아이 칠계층이라고 읽으면 된다. 계층모델은 네트워크를 하나로 바라보는 것이 아니라 네트워크 통신을 하는 과정을 단계별로 구분 지어서 각각의 계층별로 네트워크에 접근할 수 있게 해 준다. 결국 혼자서 다 처리하지 말고 맡은바 일만 제대로 처리를 하면 되는 분업을 통해서 효율성, 정확성을 기해 보자는 것이다.


예를 하나 들어보자. 당신이 지금 새로운 네트워크 프로그램을 개발하고 있다고 가정해 보겠다. 일단 먼저 해야 될 일은 사용자들이 컴퓨터를 켜고 실행할 수 있도록 사용자 인터페이스를 개발해야 할 것이고, 다음에 할 일은 이 응용프로그램이 만드는 데이터를 네트워크에 전송해야 할 것이므로 데이터를 실어나를 수 있는 프로토콜을 만들어 내야 할 것이다. TCP/IP와 같은 형태의 프로토콜을 개발해야 한다는 것을 의미한다.


그렇다고 이러한 프로토콜이 당신의 컴퓨터가 통신을 위해서 사용하는 랜케이블, 전화선 등에 데이터를 실어주지는 못한다. 그 작업은 바로 우리가 보통 랜카드라고 부르는 네트워크 어댑터 카드가 해 주는 일이다. 그래서 여러분은 다음 순서로 프로토콜이 네트워크 어댑터 카드에게 데이터 전송을 요청할 수 있도록 프로그래밍 해야만 할 것이다. 이런 일을 다 할 수 있는 개발자가 얼마나 있을까? 물론 한국의 개발자들이라면 해 내겠지만.


계층모델로 접근을 할때는 상황이 달라진다. 프로그램 개발자들은 응용프로그램을 개발한다. 그리고 나서 할일은 이 응용프로그램이 TCP/IP NetBEUI등의 프로토콜을 이용할 수 있도록 지정만 해 주면 된다. 프로토콜 개발자들은 응용프로그램으로부터 데이터를 넘겨 받아서 네트워크에서 통신하기 위한 약속들을 지키도록 몇가지 정보를 추가한 다음 네트워크 어댑터 카드로 보내주는 작업을 해 주면 된다. 네트워크 어댑터 카드는 프로토콜로부터 받은 데이터를 실제 케이블에 실어서 상대방 컴퓨터의 네트워크 어댑터 카드까지 갈 수 있도록 해 주면 된다. 각자 할일만 명확히 처리를 해 주면 되는 것이다. 계층모델을 가장 간단히 표현해 본 예제이다. 위와 같이 처리되는 것을 이해할 필요가 있다.


개발환경만 편해지는 것이 아니다. 더 큰 이점은 바로 당신, 시스템 관리자들에게 제공된다. 어느날 회사의 한 사용자가 인터넷이 안 된다고 불평을 하고 있다. 어떻게 해결해 주어야 할까? 사용자가 인터넷이라는 네트워크를 사용하기 위해 실행시킨 응용프로그램부터 추적을 해 봐야 할텐데 너무나 막연하진 않은가? 하지만 계층모델로 접근하면 보다 명확해 진다. 응용프로그램 자체가 문제가 생겼다면 데이터를 만들지도 못할 테니 당연히 네트워크에 실어보낼 수는 없을 것이다. , 데이터를 전송해 주는 프로토콜상의 문제라면 케이블이 불량이라거나, 허브가 꺼져 있다거나 하는 물리적인 문제와도 무관해진다. 라우터가 꺼져 있다거나 하는 물리적인 문제라면 역시 응용프로그램, 통신 프로토콜 등과도 무관해 지고. 이렇듯 문제가 생겼을 때 계층모델은 문제점을 계층별로 격리시켜서 문제해결을 하는데 도움을 주게 된다. 완전하지는 않더라도 보다 빠르게 문제점을 찾게 도와주는 것이다. , 케이블이 불량인 경우인데도 엉뚱하게 시스템을 껐다 켠다거나 하는 식의 시간낭비는 하지 않게 해 준다는 얘기다.


OSI Reference Model
7계층은 다음과 같다.


Layer 7 – Application

Layer 6 - Presentation

Layer 5 – Session

Layer 4 – Transport

Layer 3 – Network

Layer 2 – Data Link (MAC, LLC)

Layer 1 – Physical


이들을 외우라는 얘기는 아니다. 필자의 경험으로는 외운다고 해도 금방 잊게 될 것이다. 남들이 보기에 유식하게 보일 순 있어도 이것을 단순히 외운다고 큰 도움이 되지는 않는다. 다만 가장 기본이 되는 네트워크를 구분해 놓은 계층모델인 OSI 7 계층이 어떠한 계층들로 이루어져 있는지 살짝 들여다 봐 주기를 바란다. 각각의 계층이 어떤 역할을 하는지도 언급을 하지 않겠다. 그것보다는 네트워크를 계층구조로서 이해해 볼 것을 권한다.


위에서 이미 핵심을 예를 들었다. 다시 한번 마지막으로 정리를 해 보겠다. 한 컴퓨터에서 사용자가 웹브라우저를 실행하고, 네트워크에 있는 웹서버의 홈페이지에 접근을 한다고 가정을 해 볼까? 사용자는 웹브라우저라는 어플리케이션을 실행해야 한다. 이 어플리케이션은 사용자가 원하는 결과를 얻기 위해서 웹서버로 보내는 요청을 만들고 이 요청을 전달해줄 TCP/IP라는 프로토콜을 이용한다. TCP/IP 프로토콜은 네트워크 어댑터 카드에 데이터를 실어주고, 네트워크 어댑터 카드는 유선 혹은 무선을 이용해서 물리적인 환경으로 패킷을 전달한다.


하나의 흐름이지만 몇 개의 구성요소가 모여서 하나의 네트워크를 이룬다는 것을 알 수 있을 것이다. 이것이 네트워크이다. 이렇듯 계층(Layer)의 형태로 네트워크를 바라보는 눈을 키워야 한다. 우리가 무심코 사용하던 네트워크라는 것이이렇게 재미있구나라는 생각을 가지게 됐으면 하는 바램이다.


조금 이야기가 길어졌다. 한가지만 기억하자. 네트워크라는 것은 계층모델로서 이해 해야 겠구나! 라는 생각을 가져 주면 된다. OSI 7 계층은 하나의 표준안을 제시한 것이지 모든 네트워크 환경에 반드시 일곱개의 계층으로 나눠져야 한다는 것은 아니다. 위의 예제를 잘 들여다 보면 완전하진 않지만 계층모델의 기본흐름은 그대로 따르고 있는 것을 알 수 있다.

마지막으로 그림으로 정리를 해 보자.

:
Posted by 새벽예찬
2008. 11. 6. 16:28

1.1 TCP/IP Protocol 개요 Windows Networking2008. 11. 6. 16:28


개별적인 하나하나의 컴퓨터들이 서로간에 자원을 공유하기 위해서는 네트워크가 필요하다. 이를테면 컴퓨터들이 네트워크를 이용해서 데이터를 주고 받는다거나 다른 컴퓨터에 연결된 프린터를 이용해서 내 컴퓨터에서 만든 문서를 출력한다거나 하는 작업을 하는 것을 말하는데, 이것이 안정적으로 이루어지기 위해서는 그들이 네트워크에 데이터를 실어서 상대방에게 정확히 전달하기 위한 서로간의 약속이 필요하다. 데이터를 보내는 방법, 잘 받았는지 확인하는 방법, 문제가 생겼을 때 다시 보낼 수 있는 방법, 등등. 이러한 모든 약속들을 정해서 제대로 된 데이터의 전송을 보장 함으로써 성공적인 네트워킹이 가능하도록 하는 방법이 필요하다.

 

네트워크 통신에서 이러한 약속을프로토콜(Protocol)”이라고 부른다. 네트워크상에서 컴퓨터들은 프로토콜을 통해서 데이터를 전송하고 있다. TCP/IP, NetBEUI, IPX/SPX, AppleTalk 등이 바로 대표적인 프로토콜의 종류이다.

 

그 중에서도 TCP/IP 프로토콜은 가장 인기있고 널리 사용되는 인터넷의 표준 프로토콜이고, 네트워크 관리자라면 반드시 이 프로토콜의 각 구성요소에 대해서 제대로 인지를 하고 있어야 한다. 몰라도 잘 쓸 수는 있다. 누군가가 잘 구성해 놓은 환경에서 쓰기만 하는 사용자라면 그럴 수 있다. 그건 잘 돌아가기만 하는 네트워크 환경에서 얘기일 뿐, TCP/IP를 알지 못하고서 그것에 따른 문제를 해결해 내기란 참 어려운 일이다. 하지만 TCP/IP 프로토콜의 기본원리를 잘 깨우치고 있으면 그것을 이용한 각종 어플리케이션의 학습능력도 향상될 뿐만 아니라 네트워크에서 컴퓨터들이 겪는 문제점을 해결할 때 보다 빠른 시간에 정확하게 문제점을 집어 낼 수 있는데 큰 도움을 준다.

 

마이크로소프트의 윈도우 환경에서도 역시 TCP/IP를 자사의 OS에서 충실히 지원하고 있고 Windows 2000부터는 아예 기본 프로토콜로 채택하여 TCP/IP 프로토콜이 없이는 네트워크가 움직이지 않는다고 해도 과언이 아닐 정도로 중요한 프로토콜이 되었다.


본론으로 들어가서 TCP/IP 프로토콜에 대한 이야기를 해 보도록 하자. TCP/IP라는 프로토콜은 너무나도 유명하여 네트워크를 한다는 사람뿐만 아니라 컴퓨터를 조금이라도 다룰 줄 알고 인터넷이라는 것을 접근하기 위해서 한번이라도 네트워크 설정을 해 본 경험이 있는 사용자라면 누구나 한번쯤 들어보았을 이름이다.

하지만 실제로 우리가 아는 것만큼 TCP/IP는 간단하지만은 않다. 지금처럼 인기있는 표준 프로토콜로 발전할 수 있었던 것은 TCP/IP가 서로 다른 여러 기종의 시스템을 연결할 수도 있고, 또 정확한 전송처리를 위해서 많은 대비책을 내포하고 있어서 네트워크에서 믿을 만한 통신을 제공하였기 때문에 가능한 일이었다. 그러한 일들을 처리하기 위해서는 당연히 많은 내부적인 요소들을 포함하고 있기 때문에 그만큼 복잡하기도 하고, 공부할 꺼리도 많은 프로토콜이기도 하다.


TCP/IP
는 이름 그대로 TCP IP가 합쳐진 프로토콜이다. 하지만 이 TCP/IP프로토콜은 TCP IP뿐만이 아니라 각각 맡은바 임무를 충실히 수행하는 몇 가지 프로토콜이 더 모여서 하나의 TCP/IP라는 커다란 프로토콜 셋트로 구성되어 있다. 이런 연유로 일반적으로 TCP/IP를 가리킬 때 "TCP/IP Protocol Suite"라는 용어를 사용한다. 우리가 보통 부르는 TCP/IP를 정확히 TCP/IP Protocol Suite라고 부른다. Suite라는 표현을 많은 번역서들에서 '묶음, 집합, 한벌' 등의 용어를 빌어서 사용하지만 명확히 그것들을 처리해 줄 만한 표현으로는 부족하다고 생각된다. 그래서 지금부터는 원어 그대로 TCP/IP Protocol Suite라고 부르기로 한다. 이제 우리는 TCP/IP Protocol에 대해서 그 구조부터 차근 차근 접근해 보도록 하자.


TCP/IP Protocol
은 위에서 설명한 OSI 계층모델을 간소화하여 Application, Transport, Network, Physical 이라는 네 개의 계층 모델에 연결 시킬 수 있다.


위의 그림에서 보면, TCP/IP라는 프로토콜이 단순히 TCP IP의 집합만이 아니라 UDP, ICMP, IGMP, NetBT 등 그 밖에도 여러 개의 프로토콜이 모여 있다는 것을 알 수 있다. 이 모든 프로토콜들이 각각의 쓰임새가 다르고 역할이 다르다. 이런 전체적인 프로토콜의 집합이 바로 우리가 사용하고 있는 TCP/IP 라는 프로토콜을 이루어 내고 있다.

OSI 7Layer에서 그랬듯이 TCP/IP Protocol Suite 역시 하나의 흐름이라고 볼 수 있다. 가장 상위에 있는 Socket응용프로그램, NetBIOS응용프로그램 들은 데이터를 생성한다. 그 데이터를 네트워크 어댑터 카드(NIC)에 실어서 다른 컴퓨터에게로 보내기까지의 하나의 흐름을 Suite에서 보여주고 있는 것이다.


어플리케이션에서 데이터를 만들어서 그것을 로컬 하드디스크가 아닌 원격지의 파일서버에 저장을 해야 한다고 가정을 해 보겠다. 어플리케이션에서는 파일서버로 데이터를 전송하기 위해서 Network을 호출할 수 있는 방법이 필요할 것이고, 그러한 역할을 담당해 주는 것이 바로 Windows Socket NetBT라고 하는 Interface가 되는 것이다. NetBIOS WinSock은 네트워크로 전송을 하기 위해서 필요한 프로토콜을 호출할 수 있는 방법을 제시한다.


WinSock
이나 NetBIOS over TCP/IP (NetBT)를 통해서 그 아래에 존재하는 Transport계층에 해당하는 TCP UDP를 이용하게 되고, TCP UDP는 상대방 컴퓨터의 응용프로그램과 잘 통신할 수 있도록 데이터의 머리부분(Header)에 몇가지 정보를 추가한 후 Network계층에 해당하는 IP에게 데이터를 전달할 임무를 맡긴다. IP가 하는 일은 상위로부터 받은 패킷을 전달하는 배달부 역할을 하고 있다. 그러면 IP ICMP, ARP등의 도움을 받아서 어댑터 카드에 데이터를 실을 수 있도록 준비를 한다. 그렇게 흘러내려온 데이터가 마침내 Ethernet 혹은 TokenRing등의 네트워크에서 사용하는 그들만의 Frame이 생성되어 네트워크 상에 전송된다.


단순하게 생각하면 내가 가지고 있는 데이터를 다른 컴퓨터로 옮기는 작업이 뭐 얼마나 대단할까 하고 생각할 수도 있겠지만, 조금만 네트워크를 이해해 보면 만만치 않은 작업이라는 것을 알 수 있게 된다. 내가 원하는 컴퓨터를 찾는 방법은 무엇을 사용할 것이며, 나만이 아닌 여러 사용자들이 같이 사용하고 있는 네트워크에서 남들이 보내는 데이터와 섞이지 않도록 무슨 방법을 강구해야 할 것인지.. , 데이터의 크기가 아주 크다면 이것을 효율적으로 보내기 위해서 작게 나누어야 할 것인데, 어떠한 방법으로 얼마만큼 작은 크기로 나눌 것인지, 데이터가 가다가 손실이 생기면 손상된 부분에 대해서는 어떻게 처리를 할 것인지 등등 수많은 문제들이 내포되어 있기 때문에 이러한 것들에 대한 대비책을 미리 만들어 두어야만 효율적인 네트워크를 운영할 수 있을 것이다.


이런 내용들을 정의해 둔 것이 바로 Protocol이라고 위에서 설명한 바 있다. TCP/IP역시 하나의 Protocol이며 네트워크를 운영하는 데 있어서 필요한 내용들을 담고 있다.


그러면, 이제부터는 TCP/IP Protocol Suite가 가지고 있는 여러 가지 Protocol에 대해서 하나씩 차례대로 정리를 해 보기로 한다.  

:
Posted by 새벽예찬