리루

패킷을 통한 TCP/UDP 비교 본문

# Study/Network

패킷을 통한 TCP/UDP 비교

뚱보리루 2017. 3. 27. 13:35

[참조]

http://www.ktword.co.kr/abbr_view.php?m_temp1=1889

-------------------------------------------------------------------------------------------------

 

1.UDP(User Datagram Packet)

 - 프로세스 대 프로세스 통신을 생성하기 위해서 포트번호를 사용한다.

 - 전송계층에서 제어 메커니즘을 제공

 - 흐름제어는 없고 수신된 패킷에 대한 확인응답도 없다.

 - 초보적인 오류제어 가능은 제공(오류 발견시 폐기)

 - UDP 헤더의 Checksum을 통해서(옵션) 헤더와 데이터 모두 포함한 사용자 데이터그램 전체에 대한 오류를 탐지한다.

1) 송신지에서 계산되고 목적지에서 검사됨

2) 목적지에서 체크섬 에러 발견 시, 즉시 폐기

3) UDP에서 Checksum은 옵션으로 사용됨.

 - 비연결형, 신뢰성 없는 전송 프로토콜이다.

 - 최소한의 오버헤드만 사용하는 매우 간단한 프로토콜이다.

 - 작은 메시지를 보내고자 하고 또한 신뢰성에 대해서 걱정하지 않는 프로세스는 UDP를 사용할 수 있다.

 - 비연결형 서비스인만큼 연결을 맺고, 끊는 작업이 없기 때문에 각 사용자 데이터그램은 다른 경로를 통하여 전달될 수 있다.

 - 흐름제어 없음(윈도우 메커니즘이 없다. 수신측에서는 들어오는 메시지로 인해 오버플로우가 발생할 수 있다. 따라서 UDP를 이용하는 프로세스에서 필요한 경우에는 자체적으로 이러한 서비스를 제공해야 한다.)

 - 오류제어 없음(Checksum을 제외한 오류제어 메커니즘이 없음. 메시지가 손실되거나 중복되었는지 송신자가 알 수 없음.)

 - 혼잡제어 없음(UDP는 비연결형 프로토콜이기 떄문에 혼잡제어를 제공하지 않는다.)

 - 수신측의 응용은 조각의 순서를 맞출 수 없기 때문에 긴 메시지 전달이 안된다.

 - Ex) DNS Server, 실시간 스트리밍(순서 바뀌어 들어오는건 어캐처리하지?), RIP 같은 경로 갱신 프로토콜로 사용.

  


 - 사용자 데이터그램이라는 UDP패킷은 8바이트 고정 크기 헤더를 가진다.

 



2. TCP


 - UDP에서 프로세스는 미리 정해진 크기 이내의 메시지를 만들어 각각에 자신의 헤더를 붙인 후, 전송을 위해서 IP에게로 전달된다. 각 메시지를 사용자 데이터그램이라고 하며, 궁극적으로는 하나의 IP 데이터그램이 된다.(데이터그램들 간의 연관성을 따지지 않는다.)

 - 반면 TCP에서 송신 프로세스는 바이트 스트림의 형태로 데이터를 송수신한다.

 - 송수신 프로세스가 동일한 속도로 데이터를 생성하고 소비할 수 없기 때문에 각 방향마다 송신 버퍼와 수신버퍼의 두 개의 버퍼가 있다.

 - 확인응답을 수신하기 전까지 바이트를 버퍼에 계속 보관한다.

 - TCP는 바이트 스트림의 형태이지만, 이에 대한 서비스 제공자로서의 IP는 바이트 스트림의 형태가 아닌 패킷의 형태로 데이터를 전달한다. 따라서 TCP는 일련의 바이트를 세그먼트라고 하는 패킷으로 그룹화한다. TCP는 제어를 목적으로 각각의 세그먼트에 헤더를 붙이고 전송을 위해서 IP 계층에 이러한 세그먼트들을 배달한다.

 - Checksum 필수


- 연결지향 서비스

  - TCP 세그먼트는 IP 데이터그램으로 캡슐화되어 순서에 어긋나게 전송되거나 손실될 수 있지만( 두 TCP간의 가상 연결 설정, 양방향으로 데이터 교환, 연결종료라는) 연결지향 서비스를 통해서 순서에 맞게 바이트를 전달할 책임이 있다.


 - 바이트 번호

  - TCP가 프로세스로부터 데이터 바이트를 수신하여 송신 버퍼에 보관하면, TCP는 각 바이트마다 번호를 매긴다. 예를들어, 임의의 값이 1,057이고 전송하고자 하는 총 데이터가 6,000바이트라면, 1,057부터 7,056까지의 번호가 전송되는 바이트 각각에 매겨진다. 바이트 순서화는 흐름 및 오류 제어에서 사용된다.


 - 순서번호

  - TCP는 전송하고자 하는 세그먼트에 하나의 순서 번호를 할당한다. 각 세그먼트의 순서 번호는 그 세그먼트에 있는 첫 번째 바이트 번호로 설정된다.

  - 오류제어가 수행되기 위해서 송신 전송 계층은 어떤 패킷이 재전송되어야 하는지 알아야 하며, 또한 수신 전송 계층은 어떤 패킷이 중복되었는지 또는 어떤 패킷이 순서에 어긋나게 도착했는지 알아야한다. 이를 위하여 패킷이 가지고 있는 것이 순서번호(Sequence Number)다.


 - 확인응답 번호

   - 세그먼트 내의 확인응답 번호의 값은 수신하기를 기대하는 다음 바이트의 번호를 나타낸다. 


 - Sqeunce number(32bit)

- 이를 통해서 TCP의 신뢰성과 흐름제어 제공

 

 - Acknowledgement number(32bit), 확인 응답 번호

- 수신하기를 기대하는 다음 바이트 번호 = (마지막 수신 성공 순서번호 + 1)

 

 - TCP Control Flag(6bit)

1) URG

긴급 비트로써, 1로 채워지면 순서에 상관 없이 먼저 전달됨.

2) ACK

- 확인응답 필드에 확인응답번호(Acknowledgement Number) 값이 셋팅됐음을 알림
        . 1로 셋팅되면, 확인번호 유효함을 뜻함
        . 0로 셋팅되면, 확인번호 미포함 (즉, 32 비트 크기의 확인응답번호 필드 무시됨)
 - SYN 세그먼트 전송 이후(TCP 연결 시작후) 모든 세그먼트에는 항상 이 비트가 1로 셋팅됨.

3) PSH ?

- 버퍼링된 데이터를 가능한 빨리 사우이 계층 응용프로그램에 즉시 전달할 것.

. 수신된 버퍼가 찰 때까지 기다리지 않고, 수신 즉시 버퍼링된 데이터를 응용 프로그램에 전달

- 서버측에서 더이상 전송할 데이터가 없음을 나타내기도 함.

4) RST(Reset, 강제 연결 초기화 용도)

- 연결 상의 문제를 발견한 장비가 RST 플래그를 '1'로 설정한 TCP 세그먼트를 송출

. LISTEN, SYN_RCVD 상태일떄 => RST 수신한 경우, => LISTEN 상태로 돌아감

. 그 밖의 상태일때 => RST 수신한 경우 => 연결 끊고 CLOSE 상태로 돌아감.

5) SYN(Synchronize, 연결시작, 회선개설 용도)

- TCP 연결설정 초기화를 위한 순서번호 동기화 용도.

. 연결요청  : SYN=1, ACK=0   (SYN 세그먼트)

      . 연결허락  : SYN=1, ACK=1   (SYN+ACK 세그먼트)
      . 연결설정  : ACK=1              (ACK 세그먼트)
- 송수신 간의 순서번호 동기화를 위함.

6) FIN

- 송신기가 데이타 보내기를 끝마침               

        . 종결요청 : FIN=1           (FIN 세그먼트)
        . 종결응답 : FIN=1, ACK=1    (FIN+ACK 세그먼트)

     * 즉, 연결을 종료하고 싶다는 뜻을 상대에게 보내는 것

 

 

- TCP 3-way Handshaking

  

 

 

 - 흐름제어

   - TCP는 UDP와 다르게 흐름 제어를 제공한다. 송신 TCP는 송신 프로세스로부터 수신되는 데이터의 양을 조절하며, 수신 TCP는 송신 TCP로부터 전송되는 데이터의 양을 조절한다. 이것은 수신측에서 데이터가 과도하게 수신됨으로 인한 데이터의 손실을 방지하기 위한 것이다.

   - 만일 정보가 소비되는 속도보다 더 빨리 생성된다면, 소비되는 측에서 데이터가 과도하게 수신되어 정보의 일부가 손실 될 수 있다. 반면, 정보가 소비되는 속도보다 더 늦게 생성된다면, 소비측에서는 정보의 수신을 기다리게 되어 시스템이 덜 효율적으로 될 것이다. 흐름제어는 전자의 문제와 연관된다.


  - 오류제어

  - 신뢰성 있는 서비스를 제공하기 위하여, TCP는 오류제어 메카니즘을 구현한다. 오류제어에서는 세그먼트가(손실 또는 훼손된 세그먼트 등의) 오류 감지를 위한 데이터의 단위이기는 하지만, 오류제어는 바이트-단위 동작한다.

  - 네트워크 계층은 신뢰성을 제공하지 않기 때문에, 응용 계층에서 신뢰성을 요구하는 경우에는 전송계층에서 신뢰성을 제공할 수 있어야한다.

  1) 회손된 패킷을 감지 및 폐기

  2) 손실되거나 제거된 패킷을 추적해 재전송

  3) 중복 수신 패킷을 확인하고 폐기

  4) 손실된 패킷이 도착할 때까지 순서에 어긋나게 들어온 패킷을 버퍼에 저장.


 - 흐름제어 & 오류제어

   - 전송할 패킷이 있는 송신측은 패킷의 순서 번호로서 버퍼 내의 비어있는 영역의 제일 앞 부분의 번호인 x를 사용한다. 패킷이 전송되면 패킷의 복사본은 메모리 영역 x에 저장되며 상대방으로부터의 확인응답을 기다린다. 전송된 패킷에 대한 확인응답이 도착하면, 패킷은 제거되고 메모리 영역은 비워진다.

   - 수신측에서 순서번호 y를 갖는 패킷이 돡하면, 수신측은 응용 계층에서 수신할 준비가 되기 전까지는 수신된 패킷을 메모리 영역 y에 저장한다. 그리고 y의 도착을 알리기 위하여 확인응답을 전송한다.

   - 버퍼는 슬라이딩 윈도우라는 일련의 조각으로 표현된다. 송신측에서 패킷이 전송되면 관련 조각이 마크된다. 모든 조각이 마크된다는 것은 버퍼가 다 차서 더 이상의 메시지를 응용 계층으로부터 수신할 수 없다는 것을 의미한다. 확인응답이 수신되면 해당 조각의 마크가 해제된다.


 - 혼잡제어

  - TCP는 UDP와 다르게 망의 혼잡을 고려한다. 송신측에서 전송되는 데이터의 양은(흐름제어에 의해서) 수신측에 의해서 조절될 뿐만 아니라 망의 혼잡 정도에 의해서도 결정된다. 

  - 

 

 

'# Study > Network' 카테고리의 다른 글

Parity Bit와 Checksum  (0) 2017.04.05
흐름제어(Flow control)과 혼잡제어(Congestion control)  (0) 2017.02.06
Big Endian and Little Endian  (0) 2017.01.11