트랜스포트 계층 1

BinaryHyeok·2023년 10월 25일
0

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

트랜스포트 계층 프로토콜은 각기 다른 호스트에서 동작하는 애플리케이션 프로세스 간의 논리적 통신을 제공한다.

  • 종단 시스템에서 구현
  • 트랜스포트 계층 패킷을 세그먼트라고 함
  • 애플리케이션 메시지를 트랜스포트 계층 세그먼트로 변경
  • 세그먼트를 네트워크 계층으로 전달

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

인터넷은 애플리케이션 계층에게 두 가지 구별되는 계층 프로토콜을 제공한다.

  • UDP(User Datagram Protocol)

    • unreliable
      전송된 데이터가 손상되지 않고 목적지에 도착하는 것을 보장하지 않음
    • unordered delivery
      데이터를 보낸 순서가 도착 순서와 일치하지 않음
  • TCP(Transmission Control Protocol)

    • realiable
      데이터가 정확하게 전달
    • in-order delivery
      데이터가 순서대로 전달
    • congestion control
      송신측의 TCP가 네트워크에 보낼 수 있는 트래픽을 조절하여 혼잡한 네트워크 링크에서 각 TCP 연결이 링크의 대역폭을 공평하게 공유하여 통과할 수 있도록 함

multiplexing, demultiplexing

  • multiplexing(다중화)
    • 출발 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위하여 각 데이터에 헤더 정보로 캡슐화하고, 그 세그먼트를 네트워크 계층으로 전달하는 작업
  • demultiplexing(역다중화)
    • 수신 측 트랜스포트 계층은 수신 소켓을 식별하기 위하여 세그먼트의 필드를 검사한 후 세그먼트를 해당 소켓으로 전달하는 작업

트랜스 포트 계층 다중화에는 두 가지 요구사항이 있다.

  1. 소켓은 유일한 식별자를 갖는다.
  2. 각 세그먼트는 세그먼트가 전달될 적절한 소켓을 가리키는 필드를 갖는다.
    • 출발지 포트 번호 필드(source port number field)
    • 목적지 포트 번호 필드(destination port number field)
    • 그 외 헤더 필드들

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

UDP 소켓 11111을 가진 호스트 A의 프로세스가 호스트 B의 UDP소켓 22222을 가진 프로세스에게 애플리케이션 데이터 전송을 원한다고 하자

  1. 호스트 A의 트랜스포트 계층은 애플리케이션 데이터, 출발지 포트 번호(11111), 목적지 포트 번호(22222)를 포함하는 트랜스포트 계층 세그먼트를 생성한다.
  2. 트랜스포트 계층은 만들어진 세그먼트를 네트워크 계층으로 전달한다.
  3. 네트워크 계층은 세그먼트를 IP 데이터그램으로 캡슐화하고 수신호스트로 전달한다.
  4. 수신 호스트는 세그먼트 안의 목적지 포트번호(22222)를 검사하고 그 세그먼트를 포트 22222로 식별되는 소켓에 전달한다.

UDP 소켓은 목적지의 IP 주소와 목적지의 포트 번호를 통하여 식별된다. 따라서 출발지의 IP나 포트 번호가 다르더라도 목적지의 IP와 포트 번호가 같다면 세그먼트들은 같은 목적지 소켓을 통해 같은 프로세스로 향한다.

출발지의 IP와 포트 번호는 B가 A에게 세그먼트를 보낼 때 활용된다.

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

TCP 소켓은 UDP와 달리 4개의 요소의 집합에 의해 식별된다.

  • 출발지의 IP 주소
  • 출발지의 포트 번호
  • 목적지의 IP 주소
  • 목적지의 포트 번호

호스트에 TCP 세그먼트가 도착하면, 역다중화하기 위하여 위의 4가지 값을 모두 사용한다. UDP에서 목적지의 IP 주소와 포트 번호가 일치하면 같은 소켓으로 세그먼트가 전달되는 것과 달리 TCP에서는 목적지의 IP 주소와 포트 번호가 같더라도, 출발지의 IP 주소와 포트 번호가 다르다면 다른 소켓으로 세그먼트가 전달된다.


비연결형 트랜스포트:UDP

UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다. UDP는 다중화/역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않는다.

  1. 애플리케이션 프로세스로부터 메시지를 가져와 다중화/역다중화 서비스에 대한 출발지 포트 번호 필드와 목적지 포트 번호 필드를 첨부, 다른 두 필드를 추가한 후에 최종 세그먼트를 네트워크 계층으로 전달
  2. 네트워크 계층은 트랜스포트 계층 세그먼트를 IP 데이터그램으로 캡슐화하여 수신 호스트에게 전달
  3. UDP는 세그먼트의 데이터를 해당하는 애플리케이션 프로세스로 전달하기 위해 목적지 포트 번호를 사용

UDP는 세그먼트를 송신하기 전에 송신 트랜스포트 계층 개체들과 수신 트랜스포트 계층 개체들 사이에서 핸드셰이크를 사용하지 않음
-> 비연결형

UDP 세그먼트 구조

UDP 헤더는 2바이트씩 구성된 단 4개의 필드만을 갖는다.

  • 포트 번호
    • 다중화와 역다중화에 사용
  • 체크섬
    • 세그먼트에 오류가 발생했는지를 검사하기 위해 수신 호스트가 사용
    • UDP가 오류 검사를 제공하지만, 오류를 회복하기 위한 일은 하지 않음

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

신뢰적인 채널에서는 전송된 데이터가 손상되거나 손실되지 않는다. 그리고 모든 데이터는 전송된 순서 그대로 전달된다. 이러한 서비스 추상화를 구현하는 것이 신뢰적인 데이터 전송 프로토콜(reliable data transfer protocol)의 의무다. 이는 신뢰적인 전송 프로토콜 아래에 있는 계층이 신뢰적이지 않을 수 있어서 어려워진다. TCP는 비신뢰적인 종단 간의 네트워크 계층(IP)의 바로 상위에 구현된 신뢰적인 데이터 전송 프로토콜이다.

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

FSM(finite-state machine)을 사용하여 완전히 신뢰적인 데이터 전송 프로토콜에 도달하기 위해 조금씩 더 복잡해지는 일련의 프로토콜을 알아본다.

완벽하게 신뢰적인 채널상에서의 신뢰적인 데이터 전송 : rdt1.0

하위 채널이 완전히 신뢰적인 가장 간단한 경우를 고려한다. 이를 rdt1.0이라 부른다.

rdt1.0에서는 특별히 할 것이 없다. 송신측은 데이터를 받아 패킷으로 만들어서 보낸다. 수신측은 패킷을 받아서 데이터를 사용자에게 건네준다.

비트 오류가 있는 채널상에서의 신뢰적 데이터 전송:rdt2.0

패킷이 유실되진 않지만, 패킷 안의 비트들이 하위 채널에서 손상되는 모델이다.
비트 오류를 처리하기 위하여 세 가지 부가 프로토콜 기능이 필요하다.

  • 오류 검출 : 비트 오류가 발생했을 때 수신자가 검출할 수 있는 기능이 필요하다. 이것은 데이터 패킷의 패킷 체크섬 필드를 통하여 확인할 수 있다.
  • 수신자 피드백: 송신자는 수신자에게 패킷이 정확하게 수신되었는지 아는 유일한 방법은 수신자가 송신자에게 피드백을 제공하는 것이다. 메시지 명령 시나리오에서 긍정 확인응답(ACK)와 부정 확인응답(NAK)을 통하여 피드백이 그 예이다. rdt2.0 프로토콜은 수신자로부터 송신자 쪽으로 ACK와 NAK 패킷들을 전송할 것이다.
  • 재전송: 수신자에서 오류를 가지고 수신된 패킷은 송신자에 의해 재전송된다.

  1. 송신측은 패킷 체크섬과 함께 전송될 데이터를 포함하는 패킷을 생성하고 전송한다.
  2. 수신측을 패킷을 받아 에러 확인을 한다.
    2-1. 에러가 발생하지 않았을 경우, 데이터를 사용자에게 전송하면서 송신측에게 ACK을 전달
    2-2. 에러가 발생했을 경우, 송신측에게 NAK을 전달
  3. 송신측이 NAK을 받는다면 재전송한다.

수신측이 보낸 피드백이 ACK인지 NAK인지 모르는 경우:rdt2.1

수신측에서 보낸 피드백이 에러가 발생하여 송신측이 ACK인지 NAK인지 판별할 수 없을 수 있다. 이 경우에 다시 재전송을 한다고 해도 수신측이 제대로 받았을 경우 새로 전송된 데이터인지, 전에 왔던 데이터인지 판별할 수 없다.

이러한 문제의 해결책은 패킷마다 sequence number 붙여 수신측에서 새로운 패킷인지, 재전송된 패킷인지 알 수 있게 한다.

  1. 송신측은 패킷 체크섬과 시퀀스 넘버와 함께 전송될 데이터를 포함하는 패킷을 생성하고 전송한다.
  2. 수신측을 패킷을 받아 에러 확인과 시퀀스 넘버를 확인한다.
    2-1. 에러가 발생하지 않았을 경우, 데이터를 사용자에게 전송하면서 송신측에게 ACK을 전달
    2-2. 에러가 발생했을 경우, 송신측에게 NAK을 전달
  3. 만약 피드백에 에러가 발생하여 송신측이 ACK인지 NAK인지 모르는 경우 데이터를 재전송한다.
  4. 수신측에서 시퀀스 넘버를 확인하여, 이전의 시퀀스 넘버와 같다면 무시하고, 다르면 사용자에게 전송한다.

NAK을 사용하지 않는 프로토콜:rdt2.2

NAK을 사용하지 않고 ACK만 사용하여 데이터 전송이 가능하다. ACK에 시퀀스 넘버를 포함하여 패킷을 전송한다. 이때 가장 마지막으로 성공적으로 받은 패킷의 시퀀스 넘버를 보내면 된다. 송신측은 ACK에 담긴 시퀀스 넘버를 확인하여 재전송 여부를 판별한다.

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

패킷이 손실되었을 경우, 송신측은 타이머를 통하여 수신측에서 일정 시간동안 피드백이 오지 않는다면 재전송한다.

Reference

KOCW - 컴퓨터 네트워크
컴퓨터 네트워킹 하향식 접근

0개의 댓글