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에 대해서 하나씩 차례대로 정리를 해 보기로 한다.