ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 11. TCP와 UDP
    전공공부/컴퓨터 네트워크 2020. 2. 28. 19:57
    728x90
    반응형

    목차

    1. TCP의 특성과 스트림 전송

    2. TCP 세그먼트 형식과 기능

    3. 흐름제어 기법

    4. 오류제어 기법

    5. 혼잡제어 기법

    6. 사용자 데이터그램 프로토콜 (UDP)

     

    11.1 TCP의 특성과 스트림 전송

    11.1.1 TCP와 스트림 전송

    TCP/IP 네트워크 모델의 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 OSI 참조모델의 수송계층에 해당하는 프로토콜이다. TCP는 네트워크 계층과 응용 계층 사이에 위치한 수송계층 관련 프로토콜이다.

    TCP나 UDP는 프로세스 대 프로세스 프로토콜이다. (여기서 프로세스는 하나의 응용 프로그램 정도로 생각하면됨)

     

    종단간(end to end)의 흐름제어 및 오류제어 등의 기능을 통해 데이터 전송의 신뢰성을 제공한다. 

     

    TCP 프로토콜이란?

    정확하게 데이터가 도착했는지 여부를 확인하기 위해 사용되는 절차이다. 두 호스트 간의 TCP프로토콜 사이에서의 전송단위로 세그먼트를 쓴다.  특히 TCP는 신뢰성 전송을 위해 사용자 데이터 세그먼트와 함께 이에 대한 확인 응답인 ACK세그먼트를 사용한다. 

     

    11.1.2 신뢰성 있는 스트림 전송 서비스!

    TCP는 신뢰성 있는 스트림 전송서비스의 제공이 목적이다. 이는 데이터의 중복이나 손실 없이 종단간 데이터의 전송을 보장한다는 의미이다.

     

    TCP는 종단간 데이터 전송의 신뢰성을 보장한다 따라서 그 구조가 복잡하고 다양하다. 또한 하위 계층 네트워크 시스템이 신뢰성을 갖고 있지 못할 경우, 신뢰성을 확보하기 위해 p-ACK 재전송 기법 (positive ACK with retransmission)을 사용한다. 

    p-ACK 재전송 기법: 수신 측에서 데이터를 수신하면 ACK 메시지를 재전송하는 기법으로, 전송 측에서는 전송한 각각의 세그먼트에 대한 정보를 갖고, 다음 패킷을 전송하기 전에 앞서 전송한 메시지(세그먼트)에 대한 ACK메시지가 도착하기를 기다린다.

     

    ACK 메시지를 사용하는 프로토콜에서 데이터를 전송하는 과정 -> [그림 11-2]

     

    11.1.3 전송오류 시 복구과정

    전송 도중 패킷 손실 등 문제가 발생한 경우 정상적인 복구과정

    -> [그림 11-3]

    전송 측: 세그먼트 1을 전송, 타이머를 동작시키고 ACK메시지가 도착하기를 기다린다. 만약 전송 중에 세그먼트가 손실된다면 ACK가 도착할 수 없고, ACK응답이 동작시켰던 타이머 시간 내에 들어오지 않게 된다. 그래서 전송 측에서는 세그먼트 1을 재전송하게 된다.

    -> 이것을 정상적으로 수신한 수신 측은 정상적인 수신을 알리기 위해 ACK 1을 보낸다.

     

    이러한 과정은 데이터 전송이 완료될 때까지 반복된다. 각각의 패킷에 일련번호를 할당하고, 수신된 일련번호를 이용해서 패킷의 중복성 여부를 감지한다. 지연이나 중복된 ACK에 의해 발생되는 혼잡을 피하기 위해서 p-ACK 프로토콜은 일련번호를 ACK로 되돌려 보낸다.

     

     

     

     

     

    11.1.4 TCP의 전송특성

    스트림 지향성 

    TCP는 데이터 전송에 있어서 옥텟 또는 바이트를 기본단위로 하여 사용자 데이터를 스트림 형테로 처리한다.

    스트림 전송 서비스는 전송 측에서의 데이터 순서가 최종 목적지에도 일치되도록 한다.

     

    가상회선 연결

    TCP는 연결 지향 수송계층 프로토콜이다. ( 수송을 원할하게 하기 위해 흐름,오류,혼잡 제어를 하는 것이 주 기능이기 때문) 전송 측과 수신 측의 응용프로그램은 각각 자신의 운영체제 하에서 상호 동작한다. 세부사항들에 대한 준비가 완료되면 TCP 프로토콜 모듈은 먼저 연결 설정 과정을 거치고 정상적으로 설정이 되면 데이터 전송이 가능해 진다. 데이터를 전송하는 동안 전송 측과 수신 측에서는 데이터의 정확한 전송을 위해 계속해서 상호간의 전송 상태를 확인한다. 만일 오류가 발생하면 양측은 이를 인지하고 응용프로그램에 알린다.

     

    버퍼를 이용한 전송

    트래픽의 혼잡을 최소화하고 효율적으로 전송이 이루어지도록 하기 위해 버퍼를 이용하여 데이터 블록을 채운 후에 전송한다. 만약 응용프로그램이 대용량의 데이터에 대한 블록을 전송해야 한다면, TCP는 각각의 블록들을 작은 조각으로 나누어 전송한다. 경우에 따라 비록 버퍼가 채워지지 않은 상태라도 강제적으로 전송할 수 있도록 하는 push기법을 사용한다.

     

    전이중 전송 연결 (full duplex connection)

    양방향 전송 연결은 반대되는 방향성을 갖는 두 개의 독립적인 스트림의 흐름을 생성한다. 데이터 스트림에 대하여 반대 방향으로 제어정보를 보낼 수 있어서, 전송되는 데이터 트래픽이 감소하는 효과를 가진다. -> 즉 효율적인 전송이 가능해 진다.

     

    11.2 TCP 세그먼트 형식과 기능

    11.2.1 TCP 세그먼트 형식

    세그먼트(segment): 두 호스트 간의 TCP 프로토콜에서 사용하는 전송단위

    연결설정, 데이터 전송, ACK 전송, 윈도우 크기 설정, 연결 해제 등을 위해 세그먼트가 교환된다.

    TCP 세그먼트 형식은 다음과 같고 헤더영역과 사용자 데이터 영역으로 구분된다.

     

    11.2.2 전송제어 프로토콜 (TCP)의 동작

    TCP는 연결지향 프로토콜로서 연결설정 단계, 데이터 전송 단계 , 연결 해제 단계 동작을 가진다.

     

    TCP 연결설정 과정

    3방향 교신기법을 사용하여 연결을 설정, 전송 측과 수신 측 양측 모두 일련번호를 초기화시키고 데이터 전송 대기상태가 된다.

     

    교신과정의 첫 번째 세그먼트

    코드영역 중에서 SYN(synchronization) 비트를 설정한 상태로 전송된다.

     

    두 번째 세그먼트

    수신한 SYN 세그먼트에 대한 응답임을 나타내기 위해 응답(ACK) 비트를 1로 설정한다.

    교신 과정이 계속 진행되고 있다는 의미를 포함하도록 SYN 비트 또한 1로 설정한다.

    [SYN + ACK] 세그먼트 형태로 전송한다.

     

    세 번째 세그먼트

    목적지에 양측의 연결이 설정 완료되었음을 알리는 역할을 담당한다. 교신 과정을 초기화한 전송 측 장치는 '3방향 교신' 절차에 따라 SYN 세그먼트의 일련번호 영역의 값을 x로 설정한 다음, SYN 세그먼트를 전송한다.

    SYN 세그먼트를 수신한 수신 측 장치는 그 일련번호를 인식하여 처리하고, 이에 대한 응답으로 (x+1)의 일련번호를 갖는 [SYN + ACK] 세그먼트를 전송한다. ACK 영역값인 y를 통해 수신 측에서 데이터의 전송이 정상적으로 가능해졌음을 알린다.

     

    연결이 설정되면 데이터를 양방향으로 동시에 전송할 수 있게 된다.

     

    3방향 교신기법

     

    11.2.3 TCP 연결설정과정 - 예제

     

    11.2.4 TCP 연결해제 과정 

    두 응용프로그램은 종료 동작을 사용하여 연결을 해제한다. TCP는 연결을 해제하기 위해 '수정된 3방향 교신' 과정을 사용한다. [그림 11-7] TCP는 전이중 방식을 사용하여 두 개의 독립적인 스트림의 전송이 이루어지도록 한다. 만약 하나의 응용프로그램이 TCP에게 데이터 전송이 종료되었음을 알리면 TCP는 한 쪽 방향의 연결을 해제한다. 나머지 다른 한 쪽의 연결도 해제하기 위해 남아있는 데이터의 전송을 종료할 것을 TCP에게 알리며 FIN 비트를 설정한 다음, 하나의 FIN 세그먼트를 전송한다. 수신측 TCP는 FIN세그먼트에 응답한다.

     

    일단 연결이 해제되면 TCP는 그 방향으로는 더 이상의 데이터를 받아들이지 않지만, 전송 측에서 연결이 해제될 때까지 계속해서 반대 방향으로 데이터는 흐르고 있다. ACK 세그먼트는 연결이 해제된 후에도 전송된다. 양측의 연결이 모두 해제되면, 각 종점에서 그 연결에 대한 정보를 삭제한다.

     

    11.3 흐름제어 기법

    11.3.1 슬라이딩 윈도우 메커니즘

    흐름제어 (flow control)

    수신 측으로부터 ACK를 받기 전에 전송 측에서 전송하는 데이터의 양을 조절하는 기능을 수행한다. TCP에서는 흐름제어를 위해 슬라이딩 윈도우 기법이라는 방법을 사용한다.

     

    윈도우 (window)

    하나의 호스트가 데이터 전송을 위해 전송 측 혹은 수신 측 양쪽에서 사용하는 버퍼이다. 버퍼에 들어있는 데이터는 ACK를 받지 않아도 즉시 전송이 가능한 데이터다. 즉 윈도우 크기만큼은 ACK를 수신하지 않아도 즉시 데이터 전송 가능!

     

    슬라이딩 윈도우 메커니즘

    왼쪽 경계와 오른쪽 경계를 고려하여 동작. TCP의 슬라이딩 윈도우 기법은 바이트를 기본단위로 한다. 윈도우의 동작에는 열림, 닫힘, 축소 동작이 있으며 이 동작들은 수신 측의 제어에 따라 움직이다.

     

    11.3.2 슬라이딩 윈도우의 동작

    n : 사용자 데이터를 바이트 단위로 나타낸 일련번호

     

    윈도우의 열림 동작 : 수신 측으로부터 ACK가 도착했을 때 윈도우의 오른쪽 경계가 오른쪽으로

        이동하는 동작 -> 그 결과 더 많은 데이터의 전송이 가능해짐

     

    원도우의 닫힘 동작 : 데이터(바이트)가 전송된 후 윈도우의 왼쪽 경계가 오른쪽으로 이동하는 동작 -> 데이터가 ACK를 받았음을 나타내며, 곧 이러한 데이터에 대한 전송이 정상적으로 완료되었음을 뜻함

     

    원도우의 축소 동작 : 윈도우의 오른쪽 경계가 왼쪽으로 이동(오른쪽 위 화살표 방향)하는 동작

        -> 이는 전송할 데이터의 적합성에 문제가 있음을 나타내기 때문에 만일 데이터가 이미 전송된 상태라면  심각한 문제가 초래

     

    (주의사항) 윈도우 메커니즘의 구현 시, 축소 동작은 발생하지 않도록 함

     

    11.4 오류제어 기법

    11.4.1 TCP 오류제어

    TCP는 신뢰성있는 데이터 전송을 위해 오류제어 기법을 사용한다. 오류제어 기법: 전송된 세그먼트가 손실되었거나 훼손된 경우는 물론, 순서가 어긋나는 경우나 중복되는 경우에 이에 대한 해결 방안을 제시한다. TCP 오류제어 기법:  기본적으로 세그먼트의 재전송 기법에 기초한다.

     

    오류제어 기법의 예 [그림 11- 10]

    - 세그먼트의 데이터 크기는 100바이트, 초기 일련번호 501

    - 전송 측에서 첫 번째 세그먼트(일련번호 : 501 ~ 600)두 번째 세그먼트(일련번호 : 601 ~ 700)를 전송  à  ACK(=701)에 의해 응답확인

     

    - 세 번째 세그먼트(일련번호 : 701 ~ 800)는 전송되었으나, 전송 도중 손실

     

    - 수신 측에는 네 번째 세그먼트(일련번호 : 801 ~ 900)가 도착했으나, 세 번째 세그먼트가 손실되어 도착하지 못했기 때문에 곧바로 ACK(=701) 세그먼트를 사용하여 전송 측에 알림

     

    - 이때 전송 측은 네 번째 세그먼트를 보내고 ACK(=901)를 기다리고 있는 상태였으나, RTO가 타임아웃 처리되었고 수신 측에서 보낸 ACK(=701)세그먼트가 도착하였으므로 세 번째 세그먼트(일련번호 : 701 ~ 800)를 재전송

     

    - 수신 측은 이미 도착한 네 번째 세그먼트(일련번호 : 801 ~ 900)를 고려하여 일련번호에 따라 순서대로 처리하고, 그 결과로 ACK(=901) 세그먼트가 전송 측으로 전송됨

     

    각 세그먼트가 전송될 때 RTO (Retransmission Time - Out) 라는 타이머를 사용한다.

    RTO 타이머의 값은 즉 재전송과 관련되어 중요한 역할을 한다.

     

    11.5 혼잡제어 기법

    11.5.1 혼잡제어 (congestion control)

    혼잡제어

    네트워크로 유입되는 데이터 트래픽의 양이 네트워크 용량을 초과하지 않도록 제어한다. 데이터 총량이 네트워크가 처리할 수 있는 허용량을 초과한다면 네트워크는 혼잡상태로 들어가기 때문이다.

     

    혼잡 영역

    사용자 트래픽이 네트워크 용량보다 충분히 적을 때는 시간지연이 그다지 크지 않지만, 네트워크 용량에 접근해가면 시간지연이 급증한다. 혼잡상태는 네트워크의 성능을 현저히 떨어뜨리고, 결국 네트워크 기능을 마비시킨다. 따라서 네트워크의 혼잡상태를 방지하기 위해 혼잡제어 기능이 요구된다.

     

    11.5.2 TCP 혼잡제어 (congestion control)

    TCP에서 사용하는 혼잡제어의 동작

    TCP는 느린 출발 알고리즘과 혼잡회피 알고리즘을 기반으로 하여 혼잡제어를 수행한다.

    느린 출발 단계로부터 시작하여 혼잡회피 단계, 혼잡감지 단계로 구분하면서 각 단계 별로 혼잡제어가 수행된다.

     

    느린 출발 알고리즘 [그림 11- 13]

    혼잡제어를 위한 윈도우의 크기를 한계치에 도달할 때까지 지수적으로 증가시키는 방법

    처음에 혼잡 윈도우(cwnd)값이 1로 시작해 2,4,8로 증가됨 -> 느리게 출발하여 점점 증가속도가 빨라진다.

    즉 트래픽 값을 계속 해서 늘려가면서 어느정도에서 혼잡상태가 발생하는지 확인하기 위한 방법이다.

     

    11.5.3 혼잡회피 알고리즘 (congestion avoidance algorithm)

    혼잡 윈도우의 크기를 혼잡상태가 감지될 때까지 1씩 증가시키는 방법

    느린 출발 알고리즘과는 달리 비교적 큰 값에서 시작하지만 증가속도는 일정하게 1만큼씩 증가한다.

     

    11.5.4 혼잡제어 - 혼잡감지 단계에서의 동작

    TCP에서 혼잡제어는 느린 출발 알고리즘과 혼잡회피 알고리즘이 서로 연동되어 수행된다.

    타임아웃이 발생하거나 3번의 ACK 세그먼트가 수신되는 경우 혼잡이 감지된 것으로 판단한다.

    만일 타임아웃이 발생하여 혼잡상태라고 판단되면 느린 출발단계로 다시 돌아가서 느린 출발 알고리즘이 수행된다.

    3번의 ACK가 수신되어 혼잡상태로 판단되면 혼잡회피 단계로 되돌아가도록 하여 혼잡회피 알고리즘이 수행된다.

     

    11.6 사용자 데이터그램 프로토콜 (UDP)

    UDP는 TCP와 마찬가지로 수송 계층에서 동작하는 프로토콜이다.

     

    11.6.1 UDP의 특성

    UDPTCP와 마찬가지로 프로세스 대 프로세스 프로토콜이다.

      -> 디바이스 대 디바이스가 아닌, 응용프로그램이 수행되는 프로세스까지가 최종 목적지가 됨

    (IP와의 비교) IP 프로토콜의 종단이 디바이스까지를 나타내는 반면, UDP의 종단은 종단 디바이스의 프로세스까지임

    (TCP와의 비교) TCP와는 달리 UDP데이터 전송의 신뢰성을 보장하지는 않음

     

     

     

    11.6.2 UDP의 사용 및 TCP와의 비교

    단순한 요청-응답을 필요로 하는 프로세스

    흐름제어와 오류제어가 크게 필요하지 않은 프로세스

    내부적인 흐름제어와 오류제어 메커니즘을 갖고 있는 프로세스

    멀티캐스팅과 브로드캐스팅을 위한 전송 프로토콜

    SNMP(Simple Network Management Protocol)와 같은 관리 프로세스

    온라인게임이나, 대량의 데이터를 신속하게 전달해야 하는 스트리밍 서비스 등

    728x90
    반응형

    댓글

Designed by Tistory.