TCP/IP 4계층 #4. 전송 계층(transport) TCP와 UDP

윤용운·2022년 11월 6일
0

네트워크

목록 보기
4/8
post-custom-banner

공부용으로 정리한 것이며, 부족한 부분, 잘못된 부분이 있을 수 있습니다. 참고 부탁드립니다.

전송(transport) 계층

TCP, UDP가 대표적이며 애플리케이션 계층에서 받은 메시지를 기반으로 세그먼트/데이터그램으로 쪼개고 데이터가 오류없이 순서대로 전달되도록 도움을 주는 계층.

연결성

세션의 성립 여부를 말하는 것이다.

세션 : 네트워크 상에서 종단 간 일회용 논리적 연결

  • 비연결성(Connectionless) : 세션을 성립하지 않는다. 단순 전송만 담당. 대표적으로 UDP
  • 연결지향성(Connection Oriented) : 세션을 이용한 신뢰성 있는 통신 기능을 추가적으로 제공. 대표적으로 TCP.

신뢰성이란?

데이터의 소실, 중복, 지연, 순서역전 없이 데이터를 전달하는 것을 완전히 보장. 신뢰성 있는 통신을 위한 기능으로 오류제어, 흐름제어, 혼잡제어가 있다.

  • 오류제어 : 세그먼트 유실 시, 다시 전송하는 것
  • 흐름제어 : 수신자의 처리 능력을 고려해 데이터 송신량을 조절하는 것
  • 혼잡제어 : 네트워크가 혼잡할 때 보내는 데이터의 양을 조정하는 것

TCP

양 종단의 호스트 내 프로세스 상호간에 신뢰적인 연결지향성 서비스를 제공하는 프로토콜.

특징

  • 연결지향적
  • 전이중 전송방식 / 양방향성
    • 종단 간 프로세스가 서로 동시에 세그먼트를 전달할 수 있다.
    • 양방향 각각에 대해 송수신 버퍼 및 데이터흐름용 순서번호를 유지한다.
      • 순서번호
        데이터에서의 첫번쨰 바이트 스트림 번호. 시간이 지나면 중복 될 가능성이 있기 때문에 0이 아닌 난수로 지정한다.
      • 확인응답번호
        다음으로 수신할 바이트 스트림 번호 (이전 요청 세그먼트의 순서번호 + 데이터 길이)
  • 멀티캐스트 불가능 : 1대1 전송방식이다(유니캐스트)
  • 신뢰적 데이터 전송
    • 흐름제어 : 전송되는 데이터의 양 조절

      • Stop and Wait : 데이터를 보낸 후 잘 받았다는 응답이 올때까지 기다리는 방식
        처리가능/처리불가능 정도의 의미만 주고받기 때문에 간단하지만, 비효율적이다.
      • Sliding Window
        한번에 처리할 수 있는 데이터를 정해놓고 수신측의 데이터 처리 상황을 송신측에 알려줘서 데이터의 흐름을 제어하는 방법.

        수신 측이 처리할 수 있는 데이터의 양은 TCP 연결 과정인 3-way Handshake 과정에서 결정하게 된다.

    • 오류제어 : 기본적으로 ARQ 방식 사용. 1. 수신측이 NACK을 받거나, 2. 송신측에 ACK가 오지 않거나 중복된 ACK가 계속 오면 오류가 발행했다고 추정하는 방법 등을 쓴다.

      • Stop and Wait ARQ
        Stop&Wait
        위에서 살펴 본 Stop & Wait 방식을 사용, 응답 대기 후 응답이 오지 않는다면(Timeout) 해당 데이터를 재전송하는 방법이다. 슬라이딩 윈도우 사용 시 데이터를 연속적으로 보내야 하기 때문에 좀 더 효율적인 방법을 사용한다.
      • Go Back N ARQ
        GoBackNARQ
        연속으로 데이터를 보내다가 오류가 발생한 지점부터 재전송하는 방식. 성공적으로 전송된 데이터까지 재전송하기 때문에 조금 비효율적이다.
      • Select Repeat ARQ
        SRARQ
        오류가 발생한 데이터만 재전송하는 방식이다. Go Back N 방식과 비교하며 상황에 따라 더 유리한 방법을 선택하면 된다.
    • 혼잡제어

      혼잡 : 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라고 한다.

      혼잡

      • AIMD(Additive Increase / Multiplicative Decrease)
        • 처음에 패킷을 하나씩 보내고, 문제가 발생하지 않으면 윈도우 크기를 1씩 증가하는 방법
        • 패킷 전송에 실패하거나 timeout 발생 시 패킷 전송 속도를 절반으로 줄인다.
        • 네트워크에 늦게 들어온 호스트가 처음에는 불리하지만, 시간이 흐르면서 평형상태로 수렴
        • 단점
          • 처음에 전송속도를 올리는 시간이 오래걸림
          • 네트워크 혼잡을 미리 발견할 수 없음.
      • Slow Start
        • AIMD와 같이 패킷을 하나씩 전송, 각 ACK마다 윈도우 크기를 1씩 늘려준다. 한 주기가 지나면 윈도우 크기는 2배가 된다.
        • 2^n꼴로 증가하여 윈도우 크기가 더 빠르게 증가한다.
        • 혼잡이 감지되면 윈도우 크기를 1로 줄인다.
        • 처음에는 네트워크 수용량을 예상할 수 없지만, 한번 혼잡이 발생한 후에는 예상이 가능하다.
      • Fast Retransmit(빠른 재전송)
        • TCP는 지금가지 받은 데이터 중 연속되는 패킷의 마지막 순번 이후를 ACK 패킷에 실어서 보낸다.
        • 그래서 송신 측이 아래처럼 3, 4번을 보내더라도 ACK 2 를 중복해서 받는다.
        • 그러면 timeout이 발생하기 전이라도 송신 측은 문제가 되는 2번 패킷을 재전송한다.
        • 그리고 혼잡한 상황이라고 판단해서 윈도우 크기를 줄인다.
        • 3 ACK Duplicated : 송신 측이 3번 이상 중복된 ACK 번호를 받은 상황
      • Fast Recovery
        • 혼잡한 상태가 되면 윈도우 크기를 1이 아니라 반으로 줄이고, 선형 증가시킨다.
        • 혼잡 상황을 한번 겪은 이후로는 AIMD 방식으로 동작한다.

UDP

신뢰성이 낮으며, 완전성을 보장하지 않으나 가상회선을 굳이 확립할 필요가 없고, 유연하며 실시간적 응용의 테이터 전송에 적합한 프로토콜.

특징

  • 비연결성이고, 신뢰성이 없으며, 순서화되지 않은 Datagram 서비스 제공
    • 확인응답 X
    • 순서제어 X
      • TCP 헤더와 달리 순서번호 필드 없음
    • 흐름제어 X
    • 오류제어 거의 없음
      • 헤더를 체크하는 검사합(Checksum)을 제외한 특별한 오류검출 및 제어 없음(이 또한 생략 가능)
    • 논리적인 가상회선 연결 필요 없음(No Handshaking)
  • 실시간 응용 및 멀티캐스팅 가능
    • 빠른 요청과 응답이 필요한 실시간 응용에 적합
    • 멀티캐스팅 가능
    • 전송속도 제한 없음
  • 헤더가 단순하므로, 헤더 처리에 많은 시간과 노력 필요 없음

References

post-custom-banner

0개의 댓글