본문 바로가기
web

TCP/IP란 무엇인가 ?

by vamalboro 2008. 5. 14.

TCP/IP 란

TCP/IP 가 나타난 이유는 컴퓨터간 "통신"을 위해서 이다. 통신을 얘기할때 빠지지 않는것이 통신의 역사인데 - 언어, 북, 연기, 전화.. 이런식으로 발전을 해왔다. 여기에서 발전을 하게된 계기는 새로운 도구의 발견(혹은 발명)이 결정적인 역할을 하고 있음을 알 수 있다.

TCP/IP 는 가장최근에 발명된 컴퓨터와 컴퓨터간의 지역네트워크(LAN) 혹은 광역네트워크(WAN)에서 원할한 통신을 가능하도록 하기 위한 통신규약(Protocol) 으로 정의할 수 있다. 최초 미국방성에서 구축한 ARANET 라는 프로토콜에서 시작되었으며, 후에 미국방위통신청(DAC-Defense Communication Agency)에서 컴퓨터간 통신을 위해서 TCP/IP를 사용하도록 한것이 그 시초가 되었다.

TCP/IP가 인기를 구가하게 된건 인터넷의 등장이 그 결정적인 역활을 했으며, 가장 인기있는 인터넷 서비스인 WWW, EMAIL, TELNET, FTP 등 대부분이 TCP/IP 기반에서 만들어져있다. 인터넷으로 연결된 수많은 컴퓨터와 통신을 위해서 TCP/IP를 선택한 이유는 그 개방성에 있는데, 즉 하드웨어, 운영체제, 접속매체에 관계없이 동작할수 있다는점때문에, 인터넷 통신을 위한 핵심으로 선택되었다. 현재는 수천만대의 컴퓨터가 인터넷을 통하여 거미줄처럼 연결되어 있다.

TCP/IP 란 이름에서 알수 있듯이, TCP/IP 는 TCP + IP 의 2개의 프로토콜로 이루어져 있는데, 통상 IP 프로토콜 위에 TCP 프로토콜이 놓이게 되므로 TCP/IP 라고 부르게 되었다.

  • IP - node(단말기)와 node 간의 데이타 패킷을 전송하기 위해서는 각 node 에 주소를 필요로 하는데(우편번호 같은) IP는 4바이트로 이루어진 주소번호를 사용하여서 각각의 node 를 구분하고, 목적지를 찾아가게 된다. 우리는 이를 IP 번호라고 하며, "192.168.100.100" 와 같은 점박이 3형제 형식으로 사용하게 된다. IP 는 Internet Protocol 의 줄임말이다. 숫자로된 인터넷주소를 위어서 원하는 컴퓨터를 식별하는건, 그리 쉽지 않기 때문에, IP주소를 인간이 식별하기 쉬운 Domain 네임으로 변환시켜주는 Name 서비스가 존재한다. 아무래도 www.yahoo.co.kr 이 211.234,109.2 이런것 보다는 외기가 수월할것이다.
  • TCP - 서버와 클라이언트간에 데이타를 신뢰성있게 전달하기 위해 만들어진 프로토콜이다. 데이타는 네트웍선로를 통해 전달되는 과정에서 손실되거나 순서가 뒤바뀌어서 전달될수 있는데, TCP는 손실을 검색해내서, 이를 교정하고 순서를 재조합할수 있도록 해준다. Transmission Control Protocol 의 줄임말이다. 데이타를 전송하기 전에 데이타전송을 위한 연결을 만듦으로 연결지향 프로토콜 이라고 한다.

LAN 과 WAN 그리고 TCP/IP

흔히 LAN 은 Local Area Network 의 줄임말로 우리나라 말로 풀어쓰자면 지역내트웍(근거리 통신망) 이며 WAN 은 Wide Area Network 의 줄임말로 광역네트웍(원거리 통신망) 으로 해석할수 있을것이다.

즉 LAN 은 지역적으로 가까운 컴퓨터가 서로 연결(Network)된 상태를 말하며 WAN은 지역적으로 멀리떨어진 컴퓨터가 서로 연결 된 상태를 말한다.
다음의 그림은 이러한 LAN과 WAN의 구성을 보여주는 가장 단적인 그림이다.

lan.png

HOST 와 HOST 그리고 HOST 와 Router 는 다양한 종류와 다양한 품질을 가지는 네트웍연결 회선으로 연결될수 있다(광케이블, 구리선, 인공위성등...). 통화품질이 다르다는 것은 데이타를 보내는중 데이타 손상이 일어날수도 있으며, 데이타의 순서가 뒤바뀔수도 있다는걸 의미한다.

데이타의 순서가 뒤바뀔수 있는 이유는, 패킷이 전달되는데 하나의 고정된 전달 경로만을 이용하지 않고 임의의 경로를 사용하기 때문인데, 위에서 말했듯이 각경로를 구성하는 회선의 품질이 다르므로, 먼저 보내어진 패킷이라도 나중에 보내어진 패킷보다 더 느리게 도착할수 있기 때문이다.(구리선으로 전달되는 패킷은 인공위성이나 광케이블로 전달된 패킷보다 아무래도 느리게 움직일 것이다.)

TCP/IP는 이러한 연결된 상태에서 서로 올바른 통신을 하도록 도와준다. 정확히 말하자면 TCP가 올바른 통신을 하도록 도와주는 기능을 가지고 있으며, IP는 이러한 기능없이 오로지 TCP 패킷을 전송하는 일만을 한다.

올바른 통신을 위해 TCP가 가지고 있는 기능은
  1. 패킷이 빠졌을경우, 재전송을 요청하는 기능
  2. 패킷에 일련번호를 줌으로써, 패킷의 순서를 재조하하는 기능
이다.

UDP와 TCP

위에서 데이타를 전송하기 위한 TCP 프로토콜에 대해서 설명했는데, TCP외에 UDP 라는 프로토콜 존재한다. 데이타를 전송한다는 점에서 TCP, UDP 모두 비슷하지만 특성에 있어서 약간의 차이가 있다. UDP 는 User Datagram Protocol 의 줄임말이다.

  • TCP - 연결지향이며, 자체적으로 오류를 처리하며, 네트웍 전송중 순서가 뒤바뀐 메시지를 교정시켜주는 기능을 가지고 있다. 연결지향이란말은 데이타를 전송하는 측과 데이타를 전송받는 측에서 전용의 데이타 전송 선로(Session)을 만든다는 의미이다. 데이타의 신뢰도가 중요하다고 판단될때 주로 사용된다.
  • UDP - 비연결지향이며, 오류를 처리하거나 순서를 재조합시켜주는 기능을 가지고 있지않다. 단순히 데이타를 받거나, 던져주기만 하는 프로토콜이다. UDP는 특히 실시간 멀티미디어 정보를 처리하기 위해서 주로 사용한다.

TCP를 실시간 멀티미디어 정보를 처리하는데, 사용할경우 TCP의 오류정정 특성상 메시지가 도착하지 않거나 할경우 다음 메시지를 받지 않고, 메시지 재전송을 요구하므로, 실시간으로 전송하기에는 그리 적당하지 않기 때문이다. 반면 UDP를 사용하면 중간에 패킷이 소실되더라도 개의치 않고 다음 패킷을 받아들이므로 실시간으로 메시지 처리가 가능하다.

물론 약간의 데이타 손실로 인한, 멀티미디어 데이타의 질이 떨어질수도 있으나, 화질이나 음질에 약간의 손상이 있더라도 계속적으로 서비스가 되는게 훨씬더 유리할것이다. 전화를 하는데, 약간 잡음이 섞인다고 해서, 잡은 정정하기 위해서 서로 통화를 못하는 사태가 발생하면 안되는것과 같은 이치이다.

여기에서는 주로 TCP 에 대해서 다룰것이며, UDP는 필요할경우 약간식 부연설명하도록 하겠다.

어떻게 TCP/IP 를 이용해서 컴퓨터간 데이타 통신이 가능한가 ?

지금까지 TCP/IP 그리고 UDP에 대한 개괄적인 내용을 살펴봤는데, 해결되지 않은 문제가 있다. 그렇다면, 각 컴퓨터간을 연결해주는 이더넷 카드를 통해서 어떻게 TCP/IP 메시지가 전달되는 것일까 ?

이것을 이해하기 위해서는 OSI 7 계층에 대한 이해가 필요하다. OSI 는 각종 시스템간의 연결을 위하여 ISO 에서 제안한 모델로써, OSI(Open System Interconnection Reference Model)에서 유추할수 있듯이, 시스템에 상관없이 서로의 시스템이 연결될수 있도록 만들어주는 모델이다.

OSI 는 아래와 같이 7개의 계층으로 되어 있다.
+---------------------+ 
| Application Layer |
+---------------------+
| Presentation Layer |
+---------------------+
| Session Layer |
+---------------------+
| Transport Layer |
+---------------------+
| Network Layer |
+---------------------+
| Data Link Layer |
+---------------------+
| Physical Layer |
+---------------------+
컴퓨터와 컴퓨터사이의 데이타전송을 위해서는 위의 7개의 계층을 "직-간접적" 으로 거쳐서 전송이 되게 된다.

위와 같이 7개의 계층으로 나눈 이유는, 각 계층에 대한 캡술화와 은닉이 가능하기 때문이다. 캡슐화, 은닉에 대해서는 아마도 C++ 을 공부해 본적이 있다면 많이 들어본 개념일건데, 예를들어 서비스 개발자는 Application Layer 와 Prsentation Layer 만 신경쓰면 되며, 실지 어플리케이션 개발자는 Session Layer 와 Transport Layer 정도만 신경쓰면 될것이다. Network Layer 계층 아래로는 거의 신경쓸 필요가 없을것이다. 마찬가지로 하드웨어를 만드는 사람은 Physical Layer 만 신경쓰면 되며, 그위의 계층에 대해서는 신경쓸필요가 없을것이다.(물론 개발자가 Application Layer 와 Presentation Layer 까지 몽땅 신경써서 개발하는 경우도 있지만 - 사실은 거의 대부분이겠지만)

OSI를 이렇듯 계층별로 나눔으로써, 각 계층에서 필요한 부분만을 개발자들이 신경쓰게 되고 통신서비스 개발시간을 줄일수 있도록 도와준다.

OSI 7 계층과 TCP/IP 4계층

TCP/IP 계층은 OSI 7계층을 더 단순화 시켜서 4개의 계층(Layer)로 만들어서 사용한다.
OSI 7 계층                   TCP/IP 4 계층 
+---------------------+ +---------------------+
| Application Layer | | Application Layer |
+---------------------+ | |
| Presentation Layer | | |
+---------------------+ +---------------------+
| Session Layer | | Transport Layer |
+---------------------+ | |
| Transport Layer | | |
+---------------------+ +---------------------+
| Network Layer | | Internet Layer |
+---------------------+ | |
| Data Link Layer | | |
+---------------------+ +---------------------+
| Physical Layer | | Physical Layer |
+---------------------+ +---------------------+
  1. Application Layer
    이 계층은 네트웍을 사용하는 응용프로그램(FTP, Telnet, SMTP) 등으로 이루어지며, OSI 계층의 Aplication Layer 와 Presentation Layer 를 모두 포함한다.
  2. Transport Layer
    계층의 이름에서 알수 있듯이, 도착을 원하는 시스템까지 데이타를 전송하기 위한 일을 하는 게층이다. OSI 모델의 Session Layer 과 Transport Layer 를 포함하고 있으며, 각각의 시스템을 연결하고, TCP 프로토콜을 이용하여 데이타를 전송한다.
  3. Internet Layer
    데이타를 정의하고 데이타의 경로를 배정하는일(라우팅)을 담당한다. 데이타를 정확히 라우팅 하기 위해서 IP프로토콜을 사용한다. OSI 의 Network Layer 과 Data Link Layer 를 포함한다.
  4. Physical Layer
    물리적 계층 즉 이더넷 카드와 같은 하드웨어를 말한다.

TCP/IP 4계층에 의한 데이타 전송

그럼 실제로 TCP/IP 4계층을 이용해서 어떻게 데이타가 전송되는지 알아보도록 하자. 아래는 이러한 계층 통신의 가장 단적인 모습을 보여주는 그림인데, 현재 가장 많이 사용하는 인터넷 서비스중 하나인 WWW 을 예를 들어 그림을 그려 보았다.
    +----------+        HTTP Protocol           +----------+ 
| Browser | <- - - - - - - - - - - - - -> | Server | Application Layer
+----------+ +----------+
↓↑ ↓↑
+----------+ TCP protocol +----------+
| TCP | <- - - - - - - - - - - - - -> | TCP | Transport Layer
+----------+ +----------+
↓↑ ↓↑
+----------+ IP protocol +----------+
| IP | <- - - - - - - - - - - - - -> | IP | Internet Layer
+----------+ +----------+
↓↑ ↓↑
+----------+ Ethernet Protocol +----------+
| Etnernet | <- - - - - - - - - - - - - -> | Etnernet | Physical Layer
+----------+ +----------+
↓↑ ↓↑
=========================================================
TCP/IP 패킷
INTERNET
WWW (World Wide Web)은 더이상 설멍이 필요없는 유명한 서비스로써, HTTP (HyperText Transfor Protocol)이라는 프로토콜을 이용한다.

위의 그림을 설명해 보자면, 일단 사용자는 Mozilla 나 IE 같은 브라우저를 사용하여서 www.joinc.co.kr 같은 URL 입력을 통해서 웹페이지를 요청하게 될것이다.(www.joinc.co.kr 은 인간이 인식할수 있는 도메인명이고 Name 서비스를 이용하여 이것을 다시 IP 주소체계로 바꾸는 작업을 브라우저 내부적으로 하게 될것이다.)

그럼 사용자의 요청(문자 메시지가 될것이다)은 인터넷상에서 전달되기 용이한 패킷으로 만들기 위해서 TCP 패킷으로 만들어지게 된다.

이것은 다시 인터넷 상에서 원하는 주소로 이동할수 있도록 하기 위해서 IP 패킷으로 다시 만들어 지고(IP 패킷에는 자신의 주소와, 도착해야될 상대방의 주소정보가 들어있을것이다) 이것은 이더넷 카드로 보내어져서 Internet 으로 나가게 된다.

Internet 상에서는 원하는 주소로 TCP/IP 패킷을 보내기 위한 여러가지 장치들이 존재하는데(라우터, 토큰링 같은), 이들 장치를 통해서, www.joinc.co.kr 의 이더넷카드로 TCP/IP 패킷이 전달되게 된다. 그럼 이더넷 카드는 TCP/IP 패킷을 바로 윗 계층(Internet Layer)으로 보내는데, 여기에서는 IP 패킷을 분석해서, 이 패킷이 어디에서 왔으며, 그 도착지가 어디인지를 판단하게 된다.(물론 이는 IP주소 기반으로 판단한다)

그리하여 목적지가 자신이면 이것을 다시 Transport Layer 로 보내고, TCP 프로토콜을 사용하여, 메시지가 누락된게 있으면 다시 요청하고, 순서를 재조합하는등 통신 메시지를 검사해서 이것을 다시 Application Layer 에게 보낸다

Application Layer 에서는 웹서버(IIS, Apache 같은)가 통신메시지를 HTTP 프로토콜에 준하여, 검사를 하여서 사용자가 요청한 웹페이지를 읽어들여서, Transport 계층으로 보내게 된다. 웹페이지를 브라우저까지 전송하는 과정은 위의 정반대의 과정을 순차적으로 거치게 된다.

최종적으로 웹브라우저는 웹페이지를 받아서(text) 역시 HTTP 프로토콜에 준하여, 렌더링 작업을 거친후 화면에 뿌려주게 된다.

위의 그림에서 보면 알겠지만 각각의 계층은 각각의 계층만을 상관하고 있음을 알수 있다. 즉 Application Layer 에 위치하는 브라우저와 webserver 는 HTTP 프로토콜에 의해서 자신의 계층끼리만 통신을 하고, Transport Layer 은 역시 TCP 프로토콜에 의해서 Transport Layer 끼리 통시을 함을 알수 있을것이다. 말그대로 계층적 구조를 가지며, 각 계층은 대응되는 상대편의 계층에 대해서만 상관한다.

연결지향 이란 무엇인가 ?

TCP는 UDP와 달리 연결지향이라고 배웠었다. 그렇다면 연결지향이란 무엇을 의미하는것일까 ? 우리는 바로 위에서 TCP/IP 에 의해서 데이타가 어떻게 전송되어지는지를 알아봤는데, 데이타가 전송되기전에, Browser 와 Server 간의 연결을 성립하는 과정이 데이타를 전송하는 과정전에 이루어지게 된다. 연결을 만드는 과정은 이를테면 우리가 전화할때 어떤내용을 말하기에 앞서서, "안녕하세요 ?" "누구누구씨 맞아요" "아내 저 누구누구 맞습니다"라고 상대편을 먼저 확인하는 과정과 동일한 과정이다.

tcp-connection-establishment.jpg

즉 데이타가 전송되기 전에, 먼저 Browser 는 Server 에 "서버 잘있읍니까?" 라고 메시지를 보내고, Server 는 다시 Browser 에게 "서버 준비되어 있으니, 데이타 보내시요" 라는 메시지를 보내고 Browser 는 다시 서버에게 "네, 그럼 지금부터 데이타를 보내겠습니다" 라고 서로 의 존재를 확인하는 절차를 수행한후, 정식 데이타를 교환하기 위한 통신선로를 개설하게 된다. 통신선로를 하나 만들기 위해서는 3번의 데이타 전송이 일어나게 되므로, 이것을 three way handshake이라고 한다. 위 그림은 three way handshake 의 과정을 보여주고 있다.

이렇게 연결이 이루어지면 모든 정식데이타는 연결된 통신선로를 통해서 교환되게 되며, 이러한 이유로 TCP를 "연결 지향" 프로토콜이라고 부르는 것이다. UDP 는 이러한 과정이 없이 단순히 데이타만을 전송함으로 "데이타 그램" 프로토콜이라고 부른다.

출처 : http://www.joinc.co.kr/ (조인시)