1. 트랜스포트 계층 서비스 및 개요

트랜스포트 계층 프로토콜은 각기 다른 호스트에서 동작하는 애플리케이션 프로세스 간의 논리적 통신(logical communication) 을 제공한다. 논리적 통신은 애플리케이션의 관점에서 보면 프로세스들이 동작하는 호스트들이 직접 여녁ㄹ된 것쳐럼 보인다는 것을 의미한다.

트랜스포트 계층은 프로세스들 간의 논리적 통신을, 네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 제공한다.

2. 다중화와 역다중화

역다중화(demultiplexing) 이란 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업이다.
다중화(multiplexing) 이란 트랜스포포트 계층 세그먼트들을 네트워크 계층으로 전달하는 작업이다. 즉 역다중화와 다중화는 트랜스포트 계층에서 세그먼트가 서로 이동하는 방향이 반대다.

비연결형 다중화/역다중화에서는 출발지 IP와 포트가 다르더라도 목적지 IP와 포트가 같기만 하다면 같은 소켓을 통해 같은 프로세스로 향한다.
반면 연결형 다중화/역다중화에서는 출발지 IP와 포트 그리고 목적지 IP와 포트가 같을 때, 같은 소켓을 통해 같은 프로세스로 향한다.

3. UDP

UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 사이에 핸드셰이크를 사용하지 않기 때문에 비연결형이라고 한다. 많은 애플리케이션이 TCP보다 UDP를 선호하는 것은 다음과 같은 이유가 있다.

  • 무슨 데이터를 보낼지에 대해 애플리케이션 레벨에서 더 정교한 제어
  • 연결 설정이 없음
  • 연결 상태가 없음
  • 작은 패킷 헤더 오버헤드

3.1 세그먼트 구조

UDP 세그먼트 구조는 RFC 768에 정의되어 있다. 애플리케이션 데이;터는 UDP 데이터그램의 데이터 필드에 위치한다. UDP 헤더는 2바이트씩 구성된 단 4개의 필드만을 갖는다. 포트번호는 목적지 호스트가 목적지 종단 시스템에서 동작하는 정확한 프로세스에게 애플리케이션 데이터를 넘기게 해준다. 체크섬은 UDP 이외에 IP 헤더의 일부 필드도 계산하기도 한다.

3.2 UDP 체크섬

UDP 체크섬은 오류 검출을 위한 것이다.송신자 측에서 UDP는 세그먼트 안에 있는 모든 16비트 워드의 합산에 대해 다시 1의 보수를 수행하며, 합산 과정에서 발생하는 오버플로는 윤회식 자리올림을 한다. 이 결과값이 UDP 세그먼트의 체크섬 필드에 삽입된다. 아무런 오류가 없다면 수신자에서의 체크섬과 16비트 워드들의 합은 1111111111111111 일 것이다.

4. 신뢰적인 데이터 전송의 원리

이 절에서는 일반적인 상황에서의 신뢰적인 데이터 전송 문제를 다룬다.

4.1 신뢰적인 데이터 전송 프로토콜의 구축

rdt1.0

유한상태 머신(finite-state machine) = FSM
여기에서는 송신자 FSM과 수신자 FSM은 각 1가지 상태만을 가진다. 상위/하위에서의 호출에 따라 패킷을 생성해서 전송하거나, 패킷을 추출하여 데이터를 상위 계층으로 전송한다.

rdt 2.0

rdt2.0 에서는 비트 오류가 있는 채널상에서의 신뢰적 데이터 전송을 구축한다. 이를 위해 긍정 확인응답(positive acknowledgement)부정 확인응답(negative acknowledgement) 두 개를 사용한다. 컴퓨터 네트워크 설정에서 재전송을 기반으로 하는 신뢰적인 데이터 전송 프로토콜은 자동 재전송 요구(Automatic Repeat reQuest, ARQ) 프로토콜 이라고 알려져 있다.
비트 오류를 처리하기 위해 기본적으로 다음과 같은 세 가지 부가 프로토콜 기능이 ARQ 프로토콜에 요구된다.

  • 오류 검출
  • 수신자 피드백
  • 재전송

송신자는 긍정 확인응답을 받기 전까지 새로운 데이터를 전달하지 않을 것이다. 이러한 행동 떄문에 rdt2.0과 같은 프로토콜은 전송 후 대기(stop-and-wait) 프로토콜로 알려져 있다. 하지만 ACK 또는 NAK가 손상되었을 가능성이 있다는 문제가 있다.

하지만 이 문제는 데이터 패킷에 새로운 필드를 추가하고 이 필드 안에 순서 번호(sequence number) 를 삽입하는 방식으로 데이터 패킷에 송신자가 번호를 붙이는 것이다.

rdt2.1

rdt2.1은 rdt2.0의 수정된 버전이다. 송신자와 수신자의 FSM은 이전 보다 두 배 많은 상태를 가지는데, 프로토콜 상태가 패킷이 순서번호를 0 또는 1을 가지는지 반영해야하기 때문이다.(아직 패킷 손실은 가정하지 않았다.)
순서가 바뀐 패킷을 수신하는 경우 가장 최근에 성공적으로 수신한 패킷에 대해 ACK를 송신함으로써 NAK를 대신할 수 있다.
rdt 2.2에서는 수신자가 반드시 ACK 메시지에 의해 확인 응답되는 패킷의 순서 번호를 포함해야하며, 송신자는 ACK 메시지에 의해 확인응답된 패킷의 순서 번호를 반드시 검사해야만 한다.

rdt3.0

rdt3.0에서는 비트 오류와 손실 있는 채널상에서의 신뢰적인 데이터 전송을 다룬다. 송신자는 패킷 손실을 가능한 한 빨리 복구해야한다. 따라서 카운트다운 타이머(countdown timer) 를 채용한다. 송신자는 다음과 같이 동작한다.
(1) 매 패킷이 송신되는 시간에 타이머를 시작함
(2) 타이머 인터럽트에 반응함(재전송)
(3) 타이머를 멈춤
rdt3.0에서는 패킷의 순서번호가 0과 1이 번갈아 일어나므로, 얼터네이팅 비트 프로토콜(alternating-bit protocol) 이라고 부르기도 한다.

4.2 파이프라이닝된 신뢰적인 데이터 전송 프로토콜

프로토콜 rdt3.0의 핵심적인 성능문제는 rdt3.0이 전송 후 대기 프로토콜이라는 점에서 기인한다. 즉 데이터를 전송하고 확인응답을 수신할 때 까지 딱히 다른 패킷을 전송하지 않으므로 결국 형편없는 송신자 이용률을 가지게 된다. 이를 해결하는 방법은 확인응답을 기다리지 않고 여러 패킷을 전송하도록 허용하는 것이다. 이 기술을 파이프라이닝(pipelining) 이라고 부른다.
여기에서는 다음과 같은 중요성을 지니고 있다.

  • 순서 번호의 범위가 커져야 한다.
  • 프로토콜의 송신 측과 수신 측은 패킷 하나 이상을 버퍼링해야한다.
  • 필요한 순서 번호의 범위와 버퍼링 조건은 데이터 전송 프로토콜이 손실 패킷과 손상 패킷 그리고 상당히 지연된 패킷들에 대해 응답하는 방식에 달려 있다.

4.3 GBN

GBN(Go-Back-N, N부터 반복) 프로토콜에서 송신자는 확인응답을 기다리지 않고 여러 패킷을 전송 할 수 있다. GBN은 base, nextsequnum 을 통해 윈도를 구성하여 구현된다. 따라서 GBN 프로토콜은 슬라이딩 윈도 프로토콜이라고 불린다.
자세한 설명보다는 아래 링크의 애니메이션을 참고하는 것이 훨씬 이해에 도움이 된다.
https://www2.tkn.tu-berlin.de/teaching/rn/animations/gbn_sr/

4.4 SR

GBN은 윈도 크기와 대역폭 지연 곱의 결과가 모두 클 때, 많은 패킷이 파이프라인에 있을 수 있다. 그러나 GBN은 패킷 하나의 오류 떄문에 많은 패킷을 재전송하므로, 많은 패킷을 불필요하게 재전송하는 경우가 발생한다.
SR(Selective Repeat) 프로토콜은 수신자에서 오류가 발생한 패킷을 수신했다고 의심되는 패킷만을 송신자가 다시 전송하므로 불필요한 재전송을 피한다.
하지만 SR에서도 마찬가지로 수신자는 송신자가 무엇을 하고 있는지 관찰할 수 없다. 즉 송신자와 수신자의 관점이 다르다.(윈도가 다를 수 있다) 수신자 관점에서 확인응답을 보내고 같은 순서번호의 패킷은 두 가지 경우의 수를 가진다. 첫 번째는 수신자가 보낸 확인응답이 손실되고 타이머가 작동하여 송신자가 다시 같은 패킷을 보냈을 경우다. 두 번째는 수신자가 보낸 확인응답이 손실되지 않았고 이에 송신자가 순서번호는 같지만 새로운 패킷을 보낸 경우다. 이러한 문제를 해결하기 위해서 윈도는 반드시 SR프로토콜에 대한 순서 번호 공간 크기의 절반보다 작거나 같아야한다.

4.5 신뢰적인 데이터 전송 메커니즘과 그 사용 요약

메커니즘
체크섬
타이머
확인응답
부정 확인응답
윈도, 파이프 라이닝
profile
회계+IT=???

0개의 댓글