2016년 5월 21일 토요일

UDP와 TCP 차이 - 작성완료



1. TCP 연결-지향형 통신이고, UDP 비연결형 통신이다.
TCP 통신 종단점으로 자료를 전송하기 위해 먼저 클라이언트가 연결 요청 메시지를 보내고, 서버는 이를 수락한다. 일단 클라이언트와 서버 간의 연결이 맺어지면 각각 표준 read, write 함수를 이용하여 대칭적 양방향 통신을 사용한다. 종단점에는 클라이언트와 서버가 존재한다. 양단 모두에서 연결을 닫을 있고, 경우 다른 쪽은 읽기와 쓰기 명령 시에 이를 감지한다. 따라서 TCP 통신을 사용하는 애플리케이션은 언제 작업이 완료되었는지를 원격지로 알릴 있다.
반면 다수를 대상으로 자료를 전송하고 받는 애플리케이션은 UDP 사용한다. 메시지들은 대상 주소를 포함하고 있어야 한다. UDP 원격지의 실행 유무를 애플리케이션에 알랄 없다.

2. TCP 바이트 스트림 기반이고, UDP 메시지 기반이다.
애플리케이션이 번의 sendto 함수를 이용하여 UDP 메시지를 전달하면, 반대편 종단점은 recvfrom 호출하여 메시지 전체를 가져오거나 그렇지 못할 것이다.
반대로 번의 TCP write 이용하여 데이터 블록을 전송하는 애플리케이션은 수신 측이 번의 read 통해 전체 데이터를 읽을 있다는 점을 보장하지 않는다. 번의 read 명령은 연속된 바이트를 스트림의 형태로 가져온다.
과정은 데이터 블록의 전체 혹은 부분일 있고, 여러 데이터 블록일 있다.

3. TCP 전송한 순서에 맞게 바이트 스트림을 전송한다. UDP 네트워크 상의 에러가 없다는 가정을 하더라도 전송된 순서와 상관없이 메시지를 받는다. UDP 받은 순서대로 애플리케이션에 메시지를 전달한다. UDP 패킷은 인터넷 상에서 각각 다른 통신로를 따라 전달될 있기 때문에 보내진 순서대로 도착하지 않을 있다. 반대로 수신 호스트의 네트워크 하부 시스템은 TCP 패킷을 버퍼에 저장하고, 애플리케이션에게 전송된 순서에 맞게 메시지를 전달하기 위해 순서 번호를 사용한다.

4. TCP 신뢰할 있고, UDP 신뢰할 없다. 만약 TCP 원격지로 데이터를 전송할 없다면 에러를 리턴하여 실패 여부를 알린다. UDP 그렇지 못하다. 네트워크에서 UDP 패킷이 손실될 있고, 경우 메시지는 절대 원격지로 전달되지 않는다. UDP 수신 측과 송신 측에게 에러가 발생되었다는 사실을 알릴 없다.

5. UDP sendto 함수와 TCP write 함수는 보낼 메시지를 호스트의 네트워크 하부 시스템 버퍼로 복사한 리턴한다. UDP 리턴은 수신 측의 상태와 무관하게 이루어진다. 반면 TCP 리턴은 어느 정도 수신 측과 네트워크의 상태에 의존한다. TCP 네트워크 하부 시스템은 수신 호스트가 확인 패킷을 보내지 않음으로써 수신 측에 충분한 버퍼가 없다고 인지하거나 네트워크 트래픽이 혼잡할 있기 때문에 전송할 데이터를 버퍼에 보관할 있다. 보관된 데이터로 인해 실행되는 write 함수가 블록될 있다. TCP 프로토콜이 제어를 하더라도 TCP write 함수의 리턴을 데이터가 원격 호스트로 전송되었다는 것으로 해석하지 말아야 한다.

--------------------------------------------------------------------------------------------------------------------------]

TCP와 UDP 프로토콜 (서술형)

소켓통신에는 기본적으로 2가지의 통신방법이 있다. 신뢰성 프로토콜인 TCP(Transfer Control Protocol)와 비신뢰성 프로토콜인 UDP(User Datagram Protocol)가 그것입니다.

(1) TCP 통신의 개념
  : TCP(Transmission Control Protocol) 통신은 전화와 같은 방식으로 동작한다.

보통의 경우 상대방의 전화번호를 알고 있어야 전화를 거는 것처럼 TCP 통신을 하기 위해서는 상대방의 IP 주소와 Port를 알고 있어야 연결을 요청할 수 있습니다. 그리고 전화를 걸더라도 받아주지 않으면 계속해서 대기해야 합니다. 이와 마찬가지로 서버가 응답을 받아주지 않으면 계속적으로 요청을 하게 됩니다. 물론 어느 순간에 포기하는 것도 마찬가지입니다.

만약 전화를 받았다고 생각해 보자. 양방향 통신이 가능하다. 한번 연결되면 계속해서 상대방에게 음성을 전달할 수 있는 것처럼 TCP 통신에서도 계속적으로 소켓을 통해서 데이터를 주고 받을 수 있다.

전화가 연결된 후 끊기 전까지는 계속해서 통신을 할 수 있는 것이다. 그리고 양방향 모두 가능하다. 데이터의 확인 절차도 거치게 된다. 만약 전화가 잘 들리지 않는다면 상대방은 '뭐라고요?'라고 할 것이다. TCP 프로토콜도 자료를 받지 못했다면 다시 요청하는 메커니즘을 가지고 있다.

(2) UDP 통신의 개념
  : UDP(User Datagram Protocol) 통신은 편지에 비유할 수 있다.

편지를 쓸 때 편지지에 데이터를 기록하고 편지 봉투에 상대방의 주소와 자신의 주소를 표시한 후 그냥 보내 버립니다. 편지가 도착했는지 않았는지 알 수 없다. 이러한 원리는 UDP에서 그대로 적용된다.

먼저 데이터를 생성한 후 상대방의 주소와 자신의 주소를 기록하고 보내버리면, 그 데이터를 받았는지 확인할 방법은 없다. 단지 보냈다는 사실만 존재할 뿐이다. UDP 통신 자체는 상대방과 연결되어 있는 개념이 아니다 .자신의 로컬 머신에서 소켓을 개설하고 데이터를 랜카드에 실어 버리는 개념이다. 때문에 편지를 우체통에 넣어버리는 개념과 흡사한 것이다.

편지를 받는 사람 입장에서 생각해 보자. 편지가 왔는지 안왔는지 편지함을 열어보기 전에는 알 수 없다. 이것과 마찬가지로 상대방이 UDP를 통해서 데이터를 보냈다 하더라도 UDP 소켓을 통해서 자신의 포트를 열어보기 정네는 데이터가 왔는지 오지 않았는지 알 수 없다. 즉 자신의 로컬 머신에 소켓을 개설하고 데이터를 들어왔는지 오지 않았는지를 확인하는 메커니즘이 필요하다. 이것은 편지가 우편함에 있는지 없는지를 확인하는 것에 비유할 수 있다.

(3) 비교 분석

  :  TCP와 UDP 프로토콜의 통신 메카니즘의 차이는 일반적인 생호라에서 쉽게 찾아볼 수 있습니다. TCP 통신은 데이터를 주고 받을 때 데이터가 도착했는지 하지 않았는지 내부적으로 확인하게 됩니다. 만약 하지 않았다면 재요청을 하는 메카니즘을 가지고 있습니다. 이러한 확인 절차로 인해 속도면에서 느립니다 .하지만 UDP는 이러한 확인 절차를 거치지 않고 계속적으로 데이터를 보내기만 하고 받기만 하기 때문에 휠씬 빠른 속도로 처리될 수 있습니다.

속도면에서 UDP가 빠르지만 UDP는 데이터가 정확하게 도착했는지 하지 않았는지 알 수 없는 비신뢰성 프로토콜입니다. 이에 반해 TCP는 이를 보장하는 신뢰성 프로토콜입니다.

쉽게 이야기 하자면 TCP 는 전화와 비슷한 방식을 제공한다. 서로 연결된 상태에서만 정보를 교환 할 수 있다. UDP는 편지나 방송과 비슷하다. 발송된 편지는 수신자가 받았는지 안받았는지 알 수 없다. 전달하게 되면 그만인 것이다.

방송과 같은 경우도 비슷하다. KBS나 MBC에서 브로드캐스팅된 정보를 각각의 가정에서 받아 TV 화면으로 보지만 우리는 그것을 잘 받았다고 MBC나 KBS에 응답하거나, 잘못된 수식된 화면에 대해 재요청하거나 하지 않습니다.

용어를 좀 정리하면 전화가 유니캐스트,
방송이 브로드 캐스팅,
멀티캐스트는 브로드캐스트와 비슷하지만 전체 중 선택된 그룹만 보내는 것을 말한다.


--------------------------------------------------------------------------------------------------------------------------]
TCP 통신
TCP(Transmission Control Protocol)는 인터넷에서 가장 흔하게 그리고 많이 쓰이는 프로토콜 방식이다. 그 이유는 TCP통신은 error correction이라는게 존재하는데 말 그대로 에러를 다시 잡아주는 것이다. 서버에서 클라이언트에게 어떤 정보를 보냈다고 하자! 그러면 클라이언트는 서버가 보낸 정보를 제대로 받았는지, 확인해주는 메세지를 다시 서버에게 돌려주고, 클라이언트가 제대로 받지 못했을 경우엔 resend를 서버에 요청 할 수 있다. 그러면 loss된 데이터를 다시 클라이언트에게 보낼 수 있는 것이다. 이런 방법들을 flow control이라고 하며, 오리지널 데이터를 로스 하지 않고 받을 수 있게 한다. 즉, guaranteed delivery!

- UDP 통신
UDP(User Datagram Protocol) 은 인터넷에서 또 많이 쓰이는 프로토콜인데 그 사용처는 tcp 통신과는 다르다. tcp통신과의 가장 큰 차이는 단방향 통신이라는것! 서버가 클라이언트에게 혹은 클라이언트가 서버에게! error correction이 없고, 무조건 보내는 쪽에선 던지기만 하고 받는 쪽에선 받기만 한다. 그러다가 데이터 로스가 중간에서 발생하면 어쩌냐? 무시한다. 그냥 던지고 받는거다 ! 이렇게 되면 장점은 TCP통신 보다는 훨씬 빠른 전송을 보여주게 된다.

두 통신방법은 사용되는 곳이 다르다. 웹페이지 전송이다. 어떤 데이터 베이스를 전송할때는 반드시 TCP통신이 사용되어야 한다. 웹페이지가 전송오류로 얼빵한 화면이 떠져 있다면 사용자는 얼마나 황당하겠는가... 데이터 베이스는 물론이고
UDP통신은 비디오 오디오 신호 전송에 사용된다. 빠른 프레임으로 돌아가는 비디오 스트리밍 프로그램에 한두 프레임 로스가 생겼다고 resend를 재요청하고, 데이터 로스를 일일이 확인해서는 버퍼링 때문에 오히려 속터질것이다.  몇 프레임 정도 놓쳐도 오히려 상관없고 놓친 프레임은 과감하게 버리는 방식. 큰 파일을 스트리밍으로 내려 받을 때 적합하다. 인터넷 스트리밍 영상이나 음향들이 퀄리티가 오프라인으로 받아놓고 보는것 보다 좋지 않은 이유도 이것이다.

--------------------------------------------------------------------------------------------------------------------------]

CP/IP

2014년 4월 22일 화요일

TCP와 UDP 개요와 비교

TCP/IP 전송 계층의 두 프로토콜 요구사항

  • 전송 제어 프로토콜(TCP)
    • TCP는 기능이 풍부하고, 연결형이며, 신뢰할 수 있는 TCP/IP 애플리케이션을 위한 전송 계층 프로토콜이다.
    • TCP는 여러 소프트웨어 애플리케이션이 동시에 단일 IP 주소를 사용할 수 있도록 하는 전송 계층 주소지정 방법을 제공하며 한 쌍의 장비가 가상 연결을 수립하고 양방향으로 데이터를 전달할 수 있도록 한다.
    • 전송은 승인받지 않은 패킷을 탐지하여 자동으로 재전송하는 특수한 슬라이딩 윈도우(sliding window) 시스템으로 관리된다.
    • 그리고 TCP는 장비간의 흐름 관리, 기타 특수 상황을 처리하기 위한 추가 기능도 제공한다.
  • 사용자 데이터그램 프로토콜(UDP)
    • UDP는 매우 단순한 전송 프로토콜로 TCP와 유사한 전송 계층 주소지정 방법을 제공하지만, 다른 기능은 거의 제공하지 않는다.
    • UDP는 애플리케이션이 IP에 접근할 수 있도록 하는 래퍼 프로토콜에 가깝다.
    • UDP에서는 연결이 수립되지 않고, 전송도 신뢰할 수 없으며, 데이터가 손실될 수 있다.

TCP와 UDP 애플리케이션

  • TCP 애플리케이션
    • 대부분의 애플리케이션은 TCP가 제공하는 신뢰성과 여러 서비스를 필요로 하며, TCP로 인해 생기는 약간의 부하로 인한 성능 저하에 신경 쓰지 않는다.
    • 하이퍼텍스트 전송 프로토콜(HTTP), 파일 전송 프로토콜(FTP), 단순 메일 전송 프로토콜(SMTP) 등이 있다.
  • UDP 애플리케이션
    • 데이터 일부가 손실되는 것이 그리 중요치 않은 애플리케이션(ex: 비디오나 멀티미디어 스트리밍)에 적합하다.

UDP와 TCP 비교 요약
특성/설명UDPTCP
일반 설명단순하고, 빠르며, 애플리케이션이 네트워크 계층에 접근할 수 있도록 하는 인터페이스만 제공할 뿐 다른 것은 거의 하지 않음애플리케이션이 네트워크 계층 문제를 걱정하지 않고 데이터를 안정적으로 송신할 수 있도록 하는, 풍부한 기능의 프로토콜
프로토콜 연결 수립비연결형. 연결 수립이 없이 데이터를 송신함연결형. 전송 전에 연결을 먼저 맺어야 한다.
애플리케이션의 데이터 입력 인터페이스메시지 기반임. 애플리케이션은 데이터를 별도의 패키지로 송신한다.스티림 기반임. 애플리케이션은 특정한 구조 없이 데이터를 송신한다.
신뢰성과 승인신뢰성이 없음. 승인이 없는 최선 노력 전송 방식메시지 전송을 신뢰할 수 있음. 모든 데이터에 대한 승인이 있음
재전송수행하지 않음. 애플리케이션은 손실 데이터를 탐지하고 필요할 경우 재전송해야 함모든 데이터 전송을 관리하며, 손실된 데이터는 자동으로 재전송함
데이터 흐름 관리 기능없음슬라이딩 윈도우를 이용한 흐름 제어를 함. 윈도우 크기를 적절히 조정하고, 혼잡 회피 알고리즘을 사용함
부하매우 낮음낮지만 UDP 보다는 높음
전송 속도매우 빠름빠르지만 UDP 만큼은 아님
적합한 데이터 양소형에서 중형 데이터(최대 수백 바이트)소형에서 초대형 데이터까지(최대 수 기가 바이트)
프로토콜을 사용하는 애플리케이션의 유형데이터의 완전성보다 전달 속도가 중요하고, 소량의 데이터를 송신하고, 멀티캐스트/브로트캐스트를 사용하는 애플리케이션신뢰할 수 있는 방법으로 데이터를 송신해야 하는 대부분의 프로토콜과 애플리케이션. 대부분의 파일/메시지 전송 프로토콜을 포함함
유명 애플리케이션과 프로토콜멀티미디어 애플리케이션, DNS, BOOTP, DHCP, TFTP, SNMP, RIP, NFS(초기버전)FTP, Telnet, SMTP, DNS, HTTP, POP, NNTP, IMAP, BGP, IRC, NFS(나중버전)

댓글 없음:

댓글 쓰기