티스토리 뷰

3.1 트랜스포트 계층 서비스 및 개요

트랜스포트 계층 프로토콜

  • 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들 간의 논리적 통신을 제공한다.
  • 네트워크 라우터가 아닌 종단 시스템에서 구현된다.

세그먼트(segment)

  • 송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를 트랜스포트 계층 패킷으로 변환한다.
  • 이를 세그먼트라고 부른다.
    • 이러한 변환은 애플리케이션 메시지를 트랜스포트 계층 세그먼트로 만들기 위해 작은 조각으로 분할하고, 각각의 조각에 트랜스포트 계층 헤더를 추가함으로써 수행된다.

 


3.1.1 트랜스포트 계층과 네트워크 계층 사이의 관계

트랜스포트 계층 프로토콜

  • 서로 다른 호스트에서 동작하는 프로세스들 사이의 논리적 통신을 제공

네트워크 계층 프로토콜

  • 호스트들 사이의 논리적 통신을 제공한다.

트랜스포트 계층은 애플리케이션 간의 물리적 통신보다는 논리적 통신을 제공함.

 

두 집안이 우편을 주고 받을 때, A집과 B집이 있다고 가정하자.

두 집안에는 우편을 수거하고 나눠 주는 한명의 아이가 있다.

A 집안에는 앤이 B 집안에는 빌이 담당한다.

매주 앤은 A 집안의 형제자매에게서 우편물을 수거하고 매일 집에 찾아오는 집배원에게 우편물을 준다.

편지가 A 집안에 도착하면 앤은 그 우편물을 나눠 준다.

B 집안의 빌도 똑같은 역할을 한다.

우편 서비스는 두 집 간에 논리 통신을 제공한다.

애플리케이션 메시지 = 봉투 안의 편지
프로세스 = 사촌 형제
호스트(또한 종단 시스템) = 집
트랜스포트 계층 프로토콜 = "앤"과 "빌"
네트워크 계층 프로토콜 = 우편 서비스(우편집배원 포함)

 


3.1.2 인터넷 트랜스포트 계층의 개요

IP: 인터넷 네트워크 계층 프로토콜

  • IP 서비스 모델: 호스트들 간에 논리적 통신을 제공하는 최선형 전달 서비스(best-effort delivery service)
  • IP가 통신하는 호스트들 간에 세그먼트를 전달하기 위해서 최대한 노력하지만, 어떤 보장도 하지 않는다는 것을 의미한다.

 

UDP와 TCP의 가장 기본적인 기능은 종단 시스템 사이의 IP 전달 서비스를 종단 시스템에서 동작하는 두 프로세스 간의 전달 서비스로 확장하는 것이다.

  • 호스트-대-호스트 전달을 프로세스-대-프로세스 전달로 확장하는 것을 트랜스포트 다중화와 역중화라고 부른다.

 

UDP 

  • IP와 같이 비신뢰적인 서비스

 

TCP

  • 신뢰적인 데이터 전달을 제공
  • 흐름제어
  • 순서번호
  • 확인응답
  • 타이머

 


3.2 다중화와 역다중화

수신 측 호스트의 트랜스포트 계층은 실제로 데이터를 직접 프로세스로 전달하지 않는다. 대신에 중간 매개자인 소켓에게 전달한다.

  • 어떤 주어진 시간에 수신 측 호스트에 하나 이상의 소켓이 있을 수 있으므로, 각각의 소켓은 어떤 하나의 유일한 식별자를 가진다. 이 식별자의 포맷은 소켓이 UDP 소켓인지 또는 TCP 소켓인지에 따라서 달라진다.

 

수신 측의 트랜스포트 계층은 수신 소켓을 식별하기 위해서 세그먼트에 필드 집합을 가지고 있는데 이를 검사한다.

  • 그리고 이 세그먼트를 해당 소켓으로 보낸다. 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업역다중화(demultiplexing)라고 한다.

 

출발지 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위해서 각 데이터에 헤더 정보(나중에 역다중화에 사용된다)로 캡슐화하고, 그 세그먼트를 네트워크 계층으로 전달하는 작업다중화(multiplexing)이라고 한다.

트랜스포트 계층 다중화와 역다중화

 

트랜스포트 계층 세그먼트에서의 출발지와 목적지 포트 번호 필드

 

비연결형 다중화와 역다중화

  • UDP 소켓이 목적지 IP 주소와 목적지 포트 번호로 구성된 두 요소로 된 집합에 의해서 식별된다.
  • 출발지 IP 주소와 출발지 포트 번호가 다르더라도 동일한 목적지 IP 주소와 목적지 포트 번호를 가지면 2개의 세그먼트들은 같은 목적지 소켓을 통해 동일한 프로세스로 향할 것이다.

 

출발지 포트 번호의 사용 목적

  • 복귀 주소의 한 부분으로 사용된다.

출발지와 목적지 포트 번호의 전환

 

연결지향형 다중화와 역다중화

  • TCP 소켓은 4개 요소들의 집합 즉 출발지 IP 주소, 출발지 포트 번호, 목적지 IP 주소, 목적지 포트 번호에 의해서 식별된다는 것이다.
  • 네 가지 값이 일치하면 세그먼트는 이 소켓으로 역다중화될 것이다.

같은 웹 서버애플리케이션과 통신하기 위해 같은 목적지 포트 번호(80)을 이용하는 두 클라이언트

 


3.3 비연결형 트랜스포트 UDP

세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 사이에 핸드셰이크를 사용하지 않는다. 이런 이유로 UDP를 비연결형이라고 한다.

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

LAN: 길이 작아, 근거리 통신망의 경우 오류가 생길일이 거의 X

-> 오류 검증이 오히려 손해 -> UDP가 사용됨.

인기 있는 인터넷 애플리케이션과 그 하위 트랜스포트 프로토콜

 


3.3.1 UDP 세그먼트 구조

UDP 세그먼트 구조

 


3.3.2 UDP 체크섬

  • UDP 체크섬은 오류 검출을 제공한다.
  • 출발지와 목적지 사이의 모든 링크가 오류 검사를 제공한다는 보장이 없기 때문이다.

3.4 신뢰성 있는 데이터 전송의 원리

아래 층이 unreliable 한 것을 reliable하게 하기 위함. -> TCP

신뢰적인 데이터 전송: 서비스 모델과 서비스 구현

 


3.4.1 신뢰적인 데이터 전달 프로토콜의 구축

비트 오류와 손실 있는 채널 상에서의 신뢰적 데이터 전송: rdt3.0

무손실 동작

 

패킷이 손실된 경우
  • timeout 안에 ACK가 오지 않는다.
  • timeout 후에 해당 데이터를 다시 보낸다.

패킷 손실

 

패킷이 손실되지 않았음에도 ACK 손실이 일어난 경우
  • 보내졌는데 송신 측에서 착각하고 다시 보낸다.
  • timeout 후에 데이터가 재전송된다.
  • 이런 경우 수신 측에서 받은 패킷의 번호가 중복되는 것을 확인하고 하나를 버리면 된다.

ACK 손실

 

timeout 시간을 너무 짧게 정한 경우
  • ACK가 오기전에 재전송 할 수 있음.
  • (timeout 시간을 너무 길게하면 기다리는 시간이 길어질 수 있으므로 좋지 않음.)
  • 아무튼 timeout 시간을 적당하게 잘 정해야 한다!!!

조급한 타임아웃

 

위 그림에서 볼 수 있듯 패킷의 순서번호가 0과 1이 번갈아 일어나므로, 프로토콜 rdt3.0은 때때로 얼터네이팅 비트 프로토콜(alternating-bit protocol)이라고 부른다.

 


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

프로토콜 rdt3.0은 기능적으로 정확한 프로토콜이다. 그러나 오늘날의 고속 네트워크에서 누구나 이것의 성능에 만족하는 것은 아니다. rdt3.0의 핵심적인 성능 문제는 rdt3.0이 전송-후-대기(stop-and-wait) 프로토콜이라는 것이다.

 

이러한 특별한 성능 문제에 대한 간단한 해결책: 파이프라이닝

  • 전송-후-대기 방법으로 동작하는 대신에 송신자에게 그림 3.17(b)에서 보이는 것처럼 확인응답을 기다리지 않고 여러 패킷을 전송하도록 허용하는 것이다.

 

파이프라인 오류 회복의 두 가지 기본적인 접근방법

  • N부터 반복(Go-Back-N, GBN)
  • 선택적 반복(Selective Repeat, SR)

 

전송-후-대기와 파이프라인된 전송

 


3.4.3 N부터 반복(Go-Back-N, GBN)

문제

  • 패킷들 중에서 중간에 가던게 loss 될 수 있음.

해결

  • loss 된 것만 다시 보내는 것은 구현이 어렵다.
  • 만약 1, 2, 3, 4, 5, 6 중 4번이 loss 되었다면 받는 쪽에서 4번부터 받지 않고 보내는 쪽에서 4번부터 다시 보내게 된다.

 

윈도우 크기(window size)

  • 아직 확인응답 안된 패킷을 위해 허용할 수 있는 순서번호의 범위는 순서번호의 범위 상 크기가 N인 윈도우로 나타낸다.
  • GBN 프로토콜은 슬라이딩 윈도우 프로토콜(sliding-window protocol)이라고 부른다.

GO-Back-N에서 송신자 관점의 순서번호

 

GO-Back-N에서의 동작

 


3.4.4 선택적 반복(Selective Repeat, SR)

GBN의 경우 패킷 하나의 오류 때문에 많은 패킷을 재전송하므로, 많은 패킷을 불필요하게 재전송하는 경우가 발생한다.

 

문제

  • 패킷들 중에서 중간에 가던게 loss 될 수 있음.

해결

  • 에러가 난 것만 다시 보낼 수 있음.
  • 수신자에서 오류(손실되거나 변조된)가 발생한 패킷을 수신했다고 의심되는 패킷만을 송신자가 다시 전송하므로 불필요한 재전송을 피한다.

순서번호 공간에 대한 SR 송신자와 수신자 관점

 

SR 수신자는 패킷의 순서와는 무관하게 손상없이 수신된 패킷에 대한 확인응답을 할 것이다.

  • 순서가 틀린 패킷은 분실된 패킷(아직 도착하지 않은 더 낮은 순서번호를 가진 패킷)이 수신될 때까지 버퍼에 저장하고, 손실된 패킷이 수신된 시점에서, 일련의 패킷을 순서대로 상위 계층에 전달할 수 있다.

SR 동작

 

패킷의 원래 전송과 재전송을 구별하기 위해 윈도우 크기 조절을 잘 해야 한다.

최소한의 윈도우 크기

  • SR 프로토콜에 대한 순서번호 공간 크기의 절반보다 작거나 같아야 한다.

 

너무 큰 윈도우를 가진 SR 수신자의 고민: 새 패킷인가 아니면 재전송된 것인가?