Gidhub BE Developer

TCP와 UDP 그리고 TCP/IP

2018-09-18
goodGid

TCP

인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜

  • TCP : Transmission Control Protocol

  • 일반적으로 TCP와 IP를 함께 사용하는데, IP데이터의 배달처리한다면 TCP는 패킷추적 및 관리하게 된다.

  • TCP는 신뢰성있는 데이터 전송을 지원하는 연결지향형 프로토콜이다.

  • 연결지향형인 TCP는 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작한다.

  • TCP에서 사용하는 포트번호의 수는 0 ~ 65535(=2^16)이다.

  • 즉 총 65536개가 사용가능하다.

  • 또한 포트 번호 범위는 의미를 갖는다.

## 잘 알려진 포트 / 등록 된 포트 / 동적 포트

0번 ~ 1023번: 잘 알려진 포트 (well-known port)
1024번 ~ 49151번: 등록된 포트 (registered port)
49152번 ~ 65535번: 동적 포트 (dynamic port)
  • TCP 포트 0은 공식적으로 TCP/IP 네트워킹에서 예약 된 포트이다.

  • 즉 TCP 또는 UDP 네트워크 통신에 사용해서는 안된다.

  • 그러나 포트 0은 때때로 네트워크 프로그래밍, 특히 유닉스 소켓 프로그래밍에서 특별한 의미를 갖는다.

  • 이 환경에서 포트 0은 시스템 할당 (동적) 포트를 지정하는 프로그래밍 기술이다.

TCP는 연결지향 프로토콜이라고 알려져 있는데, 
이것은 메시지들이 각단의 응용 프로그램들에 의해 교환되는 시간동안 연결이 확립되고 유지되는 것을 의미한다. 

TCP는 IP가 처리할 수 있도록 메시지를 여러 개의 패킷들로 확실히 나누고, 
반대편에서는 완전한 메시지로 패킷들을 재조립할 책임이 있다.
OSI 통신모델에서, TCP는 4계층인 트랜스포트 계층에 속한다.
  • 인터넷 환경에서 기본으로 사용한다.

  • 흐름 제어혼잡 제어를 지원하며 데이터의 순서보장한다.

  • 흐름 제어란, 보내는 측과 받는 측의 데이터 처리속도 차이를 조절해주는 것을 말한다.

  • 혼잡 제어란, 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것을 말한다.

  • TCP는 UDP에 비해 속도가 느리다는 단점이 있다.

  • TCP는 대부분의 웹 HTTP 통신, 이메일, 파일전송에 사용된다.

  • TCP가 가상 회선 방식제공한다는 것은
    발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 뜻이다.

Q. 패킷(Packet)이란?

  • 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서
    데이터여러 개의 조각들로 나누어 전송을 하는데 이때, 이 조각을 패킷이라고 한다.

Q. TCP는 패킷을 어떻게 추적 및 관리하는가?

  • 데이터는 패킷 단위로 나누어 같은 목적지(IP계층)으로 전송된다.
예를 들어 한줄로 서야하는 A,B,C라는 사람(패킷)들이 서울(발신지)에서 출발하여 부산(수신지)으로 간다고 할 때
A,B,C가 순차적으로 가는 상황에서 B가 길을 잘못 들어서 분실되었다.
하지만 목적지에서는 A,B,C가 모두 필요한지 모르고 A,C만 보고 다 왔다고 착각할 수 있다. 
그렇기 때문에 A,,B,C라는 패킷에 1,2,3이라는 번호를 부여하여 
패킷의 분실 확인과 같은 처리를 하여 목적지에서 재조립을 한다. 
이런 방식으로 TCP는 패킷을 추적하며, 나누어 보내진 데이터를 받고 조립을 할 수 있게 된다.
예를 들면, HTML 파일이 웹 서버로부터 사용자에게 보내질 때, 
서버 내에 있는 TCP 프로그램 계층은 파일을 여러 개의 패킷들로 나누고, 패킷 번호를 붙인 다음, IP 프로그램 계층으로 보낸다. 

각 패킷이 동일한 수신지 주소(IP주소)를 가지고 있더라도, 
패킷들은 네트워크의 서로 다른 경로를 통해 전송될 수 있다. 
다른 한쪽 편(사용자 컴퓨터 내의 클라이언트 프로그램)에 있는 TCP는, 
각 패킷들을 재조립하고, 사용자에게 하나의 완전한 파일로 보낼 수 있을 때까지 기다린다.

TCP / IP

  • TCP/IP는 인터넷의 기본적인 통신 프로토콜로서 인트라넷이나 엑스트라넷과 같은 사설 망에서도 사용된다.

  • 사용자가 인터넷에 접속하기 위해 자신의 컴퓨터를 설정할때 TCP/IP 프로그램이 설치되며
    이를 통하여 역시 같은 TCP/IP 프로토콜을 쓰고 있는 다른 컴퓨터 사용자와 메시지를 주고받거나 정보를 얻을 수 있게 된다.

  • TCP/IP는 2개의 계층으로 이루어진 프로그램이다.

  • 상위 계층인 TCP는 메시지나 파일들을 좀 더 작은 패킷으로 나누어 인터넷을 통해 전송하는 일과
    수신된 패킷들을 원래의 메시지로 재조립하는 일을 담당한다.

  • 하위 계층인 IP각 패킷의 주소 부분을 처리함으로써
    패킷들이 목적지에 정확하게 도달 할 수 있게 한다.

  • 네트워크 상의 각 게이트웨이는 메시지를 어느 곳으로 전달해야 할 지를 알기 위해 메시지의 주소를 확인한다.

  • 한 메시지가 여러 개의 패킷으로 나뉘어진 경우
    각 패킷들은 서로 다른 경로를 통해 전달될 수 있으며
    그것들은 최종 목적지에서 재조립된다.

  • TCP/IP는 통신하는데 있어 클라이언트/서버 모델을 사용하는데
    컴퓨터 사용자(클라이언트)의 요구에 대응하여 네트워크 상의 다른 컴퓨터(서버)가 웹 페이지를 보내는 식의 서비스를 제공한다.

  • TCP/IP는 본래 점대점(点對点) 통신을 하는데
    이는 각 통신이 네트워크 상의 한 점(또는 호스트 컴퓨터)으로부터 시작되어 다른 점 또는 호스트 컴퓨터로 전달된다는 것을 의미한다.


UDP

데이터를 데이터그램 단위로 처리하는 프로토콜

  • UDP : User Datagram Protocol

  • 여기서 데이터그램이란 독립적인 관계를 지니는 패킷이라는 뜻으로
    UDP의 동작방식을 설명하자면 다음과 같다.

  • 위에서 대충 눈치채셨듯이 TCP와 달리 UDP는 비연결형 프로토콜아다.

  • 즉, 연결을 위해 할당되는 논리적인 경로가 없다.

  • 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고
    각각의 패킷은 독립적인 관계를 지니게 된다.

  • UDP는 TCP와는 달리
    메시지를 패킷(데이터그램)으로 나누고
    반대편에서 재조립하는 등의 서비스는 제공하지 않는다.

  • 혼잡 제어를 하지 않기 때문에 TCP보다 빠르다는 장점이 있다.

  • UDP는 RTP(Real-Time Protocol), Multicast, 멀티미디어, VoIP, DNS의 이름 해결에서 사용된다.

DNS 같은 경우 누군가 DNS 서비스를 요청할 때마다 
TCP처럼 Session을 맺고 통신을 한다면 속도도 느리고, 서버 리소스도 엄청나게 소모될 것이다. 
그런가 하면 NMS(Network Management Server)가 5분에 한번씩 장비 상태를 점검하기 위해 정보를 읽어오는데 
수백, 수천대의 장비와 Session을 맺어야 한다면 이것도 마찬가지로 문제가 생긴다.
그렇기 때문에 UDP를 사용한다.
재전송을 하면 안되는 서비스들이 있다. 
대표적인 예가 바로 Real-Time Protocol이다. 
전화를 하고 있다고 가정을 해보자.
'여''보''세''요'라는 4개의 데이터를 전송했는데, 
'세'를 못 받았다고 다시 보내달라고 하면 
'여보요세'가 될 것이다. 
이럴 땐 그냥 '여보X요'로 전달하는게 더 나은 상황이다.

또한 Multicast 서비스가 UDP를 사용한다. 
1:N으로 통신하는 방식에서 
한놈이 데이터를 받지 못했다고 재전송 요청을 한다고 가정해보자. 
제대로 받은 놈들도 해당 데이터를 다시 받아서 처리해야 한다는 문제가 발생할 수 있다.
그렇기 때문에 UDP를 사용한다.

TCP와 UDP 비교


Reference


Recommend

Index