관리 메뉴

드럼치는 프로그래머

[TCP/IP] TCP & UDP 본문

★─Programing/☆─TCP IP

[TCP/IP] TCP & UDP

드럼치는한동이 2008. 3. 18. 17:46

★ TCP & UDP

IP(Internet Protocol)를 이용하면, LAN환경이든 인터넷 환경이든 두대의 컴퓨터 간에 IP 주소를 기본으로 데이터가 전달되고, 비정상적인 경우에 대한 해결책으로 ICMP까지 지원되는 상황까지가 해결되었다.

  그러나 실제 통신을 수행하는 상황에서 아직 해결되지 못한 2가지 문제점이 있다.

  첫번째 문제점은 IP의 역할이 Host to Host 즉, 특정한 장치에서 장치로의 이동만을 지원한다. 여기서, Host란 장비 1대 자체를 말하게 된다. 즉, 장비에서 장비로의 이동은 IP로 해결되지만, 문제는 하나의 장비안에 수많은 프로그램들이 통신을 하는 경우에 이 프로그램들간에 구분이 불가능 하다는 점이다.

즉, 지금 받은 메시지가 웹서핑용 프로그램이 처리해야 하는지, 아니면 메일가 처리해야 하는지를 IP만 가지고는 구분할 수 없게 된다.

  또다른 문제는 IP에서 오류가 발생했는지는 ICMP를 통해서 알게 되지만, 이 오류에 대해서 어떻게 대처할지 즉, 메시지를 재전송을 하거나, 실패로 처리하여 에러임을 결정하는 등의 처리는 IP에서 처리하지 못하는 관계로 IP(Internet Protocol)보다 상위에서 이러한 기능을 처리해 주어야 한다.

  첫번째 문제점은 포트번호(Port Number)라는 개념을 통해서 하나의 장비안에 프로그램들을 구분하여 해결할 수 있으며, 두번째 문제점은 IP의 상위 프로토콜인 TCP(Transmission Control Protocol)UDP(User Datagram Protocol)를 사용함으로써 해결할 수 있다.

  먼저, TCP와 UDP에 대해서 간략히 살펴보도록 하자.

  • UDP : 간단하며, 신뢰할수 없는 비연결형 프로토콜RFC768 User Datagram Protocol 에 기술되어 있다.

      IP가 제공하는 정도의 수준 만을 제공하는 간단한 IP상위의 프로토콜로이다. 즉, 목적지에 도달하도록 최선을 다하지만, 에러가 날수도 있고, 재전송이나 순서의 뒤바뀜등에 대한 대처는 어플리케이션에서 처리해 주어야 한다.

      좋은 점은 메시지간의 경계가 있으며, 별도의 연결(Connect)이나 수신 통보등이 없어서 신뢰성이 높지는 않지만, TCP보다 많은 데이터를 보다 빠르게 처리할 수 있다. 사실 서버의 상태에 따라 약간씩 다르지만, 바쁜서버의 경우 100개정도의 메시지를 보내면 1개 정도 전달이 안되기도 하지만, 대부분 잘 전달된다.

      실시간 방송등에서 사용되는데, 데이터 처리가 신속하며, 한두장의 이미지가 빠져도 앞뒤장으로 보정처리하여 이러한 문제를 커버(Cover)하게 된다.

  • TCP : 복잡하지만, 신뢰성이 높은 연결(Connection)형 프로토콜RFC793 Transmission Control Protocol 에 기술되어 있다.

      TCP를 이용하게 되면, 데이터의 분실(Loss)나 중복(Duplication), 순서의 뒤바뀜(Disorder)등을 자동으로 보정해준다. 따라서, 송수신 데이터의 정확한 전달을 믿을수 있게 된다.

      메시지간의 구분이 없는 Byte Stream형식이기 때문에 주고받는 데이터에 대해서 이를 읽어들이는 규칙을 결정해서 운영해야 한다.

      대부분의 상위 프로토콜들이 이를 이용한다. HTTP, FTP, SMTP, POP3, ......

  사실 위에 나열된 단어들이 의미하는 것을 알려면 깊숙히 다뤄야 하며, 그럴려면 다음에 다룰 TCP/IP 프로그래밍까지 배워야 제대로 이해할 수 있을 것이다.

  다음장에서 TCP, UDP 각각에 대해서 보다 자세히 다뤄보고, 여기서는 다만, IP의 기능을 보정하는 상위 프로토콜로 UDP와 TCP가 있고, 대부분의 프로그램들이 TCP를 사용한다는 점을 기억해두자.

  하나의 장비에서 여러 프로그램들이 TCP나 UDP를 동시에 사용할 수 있다. 이 때, 각각의 프로그램들을 IP주소와 포트번호로써 구분하게 된다.

  • 포트번호(Port Number) : 16비트(bit)의 정수형 숫자를 이용하여, 하나의 장치나 컴퓨터상에서 실행되는 프로그램들을 구별하게 된다.

    각 프로그램들은 지정된 번호(Assigned Number)를 포트번호로 이용하여 통신하게 되는데, 지정된 번호는 RFC1700 Assigned Numbers 에서 찾아볼 수 있다.

  앞에서 제기했던 2가지 문제는 TCP/UDP를 통해서 모두 해소된다.

  포트번호에 대해서 이해하기 어렵다면 일단, 포트번호로 프로그램을 구분한다고 생각하자. 나중에 실제 프로그래밍을 다룰때 역다중화(Demultiplexing)에서 포트번호의 역할에 대해서 좀더 자세히 다루도록 하겠다.






<자료출저 : http://deadfire.hihome.com/>

[출처] TCP & UDP|작성자 선정

'★─Programing > ☆─TCP IP' 카테고리의 다른 글

[TCP/IP] IPv4의 주소체계  (0) 2008.04.17
[TCP/IP] 리눅스 C - sleep 함수  (0) 2008.03.25
[TCP/IP] TCP/IP 프로트콜 구조  (0) 2008.03.19
[TCP/IP] sockaddr_in 구조체  (0) 2008.03.18
[TCP/IP] WSAGetLastError()  (0) 2008.03.17
Comments