CS/Network

[Chapter 9] TCP 프로토콜(전송 계층의 주요 기능)

devrabbit22 2025. 2. 14. 14:00

전송 계층 프로토콜은 오류 제어, 흐름 제어, 데이터 순서화 등의 기능 면에서 데이터 링크 계층과 특징이 유사하다. 그러나 데이터 링크 계층이 물리적인 선로로 직접 연결된 두 물리적 호스트(컴퓨터나 라우터)사이의 데이터 전송을 담당하는 반면, 전송 계층은 네트워크 끝단에 위치하는 통신 주체가 중간의 논리적인 선로(라우터로 연결된 컴퓨터 네트워크)를 통해 데이터를 주고 받는다.

데이터 링크 계층은 단순히 물리적인 선로를 통해 데이터를 직접 전달하기 때문에 네트워크 계층의 중개 기능이 필요 없다. 하지만 전송 계층은 중간에 위치한 논리적 네트워크의 중개 기능을 이용해 전송 기능을 수행한다. 전송 계층에서는 네트워크에서 제공하는 다양한 자원(데이터 링크 계층의 기능, 잠재적 기억 장치에 의한 데이터의 저장과 그에 따른 지연 현상)을 사용한다.

일반적으로 기억 장치는 데이터를 잃어버리지 않게 보관하는 곳 이지만, 이외에도 데이터를 저장했다가 나중에 다시 사용하므로 시간적으로 지연되는 곳이라는 관점도 있다. 네트워크에서는 지연이 매우 중요하다. 네트워크를 통해 데이터가 전송되면 송수신 호스트 사이에 전송 지연이 발생하고 중간 네트워크가 전송 과정에서 데이터를 보관하는 효과가 발생하기도 한다. 이렇게 네트워크가 입력과 출력 사이에 시간 지연을 주게 되므로 논리적으로 기억 장치의 기능을 한다. 따라서 네트워크 자체를 잠재적 기억장치라고 표현한다.

전송 계층의 주요 기능

데이터 링크 계층에서 사용하는 물리적인 선로는 단순한 반면 컴퓨터 네트워크 구조는 상재겆으로 복잡하다. 따라서 전송 계층 프로토콜을 설계하는 과정에서는 다음과 같은 여러 기능을 고려해야 한다.

흐름제어

전송 계층의 서비스를 이용해 연결을 설정하면 양 끝단의 호스트에서 실행되는 네트워크 프로세스가 데이터를 주고 받을 수 있다. 이 과정에서 필요한 주요 기능 중 하나가 흐름 제어이다.

데이터 링크 계층에서도 라우터 사이의 프레임 전송 과정에서 흐름 제어 기능을 수행한다. 그러나 라우터를 연결하는 물리적인 선로의 수는 전송 계층이 관여하는 호스트 사이의 논리적인 연결의 수보다 상대적으로 적다. 따라서 두 계층이 지원하는 흐름 제어 기능은 기본 목적을 비롯해 유사한 특징이 많음에도 불구하고, 서로 다른 버퍼 관리 방법이 필요하다.

수신 프로세스가 송신 프로세스의 전송 속도보다 느리게 데이터를 수신하면 버퍼 용량이 초과하여 데이터를 분실할 수 있다. 이 경우에 송신 프로세스는 타임아웃 기능을 통해 재전송 과정을 수행하므로 전체 네트워크의 전송 효율이 점점 떨어진다. 이론적으로 흐름 제어 기능은 수신 호스트가 슬라이딩 윈도우 프로토콜의 윈도우 하단 값을 조정한다. 즉, 송신 프로세스가 보낼 수 있는 패킷의 한계를 지정하는 방법으로 문제를 해결한다.

오류제어

데이터를 전송하는 과정에서 발생할 수 있는 오류에는 데이터 변형과 데이터 분실이 있다.

전송 오류가 발생하여 수신 데이터의 내용이 깨지거나 분실되면 데이터 재전송에 의한 오류 제어 기능에 의해 복구 절차가 진행된다. 데이터의 재 전송 절차는 수신 프로세스의 요구에 의해 이루어질 수도 있고 송신 프로세스 스스로 판단해 이루어 질 수도 있다.

전송 계층에서 발생하는 오류는 논리적으로 구축된 각 계층의 소프트웨어가 동작하는 과정에서 데이터를 분실하는 경우가 대부분이다. 예를들어 전송 데이터를 특정 목적지까지 라우팅 하는 과정에서 네트워크 계층의 기능적 한계나 잘못된 목적지 호스트의 위치 정보에 의해 올바르게 전달되지 않을 수 있다.

분할과 병합

상위 계층에서 전송을 요구한 데이터의 크기가 전송 계층에서 처리할 수 있는 데이터 크기보다 크면 데이터를 쪼개 전송해야 한다. 데이터를 전송하기 전에 적합한 크기로 나누는 과정을 분할이라 한다. 반대로 수신 프로세스가 상위 계층에 데이터를 보낼 때는 반드시 데이터의 병합 과정을 거쳐야 계층 구조의 틀이 유지된다.

서비스 프리미티브

전송 서비스 프리미티브는 전송 계층의 사용자가 전송 계층 서비스를 사용하기 위한 인터페이스이다. 네트워크 계층에서 제공하는 서비스는 일반적으로 비신뢰성을 바탕으로 한 비연결 서비스 프리미티브가 정의된다. 전송 계층에서는 비연결형 서비스 뿐 아니라, 신뢰성이 향상된 연결형 서비스도 제공한다.

전송계층 설계시 고려 사항

전송 계층 프로토콜을 설계할 때 우선 고려할 사항으로는 주소 표현, 멀티 플렉싱, 연결 설정 관리 등이 있다.

주소 표현

  • 네트워크에서 기본적으로 필요한 일반 사항은 주소이다. 공중 전화망에서 사용하는 전화번호가 주소의 좋은 예이다. TCP/IP환경에서 사용하는 호스트의 IP주소와 포트 번호의 조합은 네트워크 계층과 전송 계층에서 사용하는 주소 표현 방식의 하나이다. 전송 계층의 주소를 보통 TSAP라 한다.
  • 주소는 구조적 또는 비구조적으로 표현할 수 있다.
  • 구조적 표현에서는 전화번호나 우편물에 표기되는 주소처럼 하나의 주소를 여러 개의 계층적인 필드로 구분한다. 이 때 필드는 전체 주소 공간의 상하 계층 관계를 나타낸다.
  • 필드 값 중에서 마지막 숫자 50은 포트 번호이다. 컴퓨터실에는 다수의 통신 포트가 존재하고 프로세스가 포트를 이용해 통신하므로 네트워크 프로세스는 포트 번호로 구분된다. 
  • 비구조적 주소 표현은 구조적 표현과 달라 주소 값만 해석해서는 컴퓨터의 논리적인 위치를 파악하기 어렵다. 그런데 주소는 자체에 중요 정보를 포함하도록 설계되기 때문에 비구조적인 경우가 많지 않다.
  • 호스트 주소와 관련해서 211.223.201.30과 같은 IP 주소는 네트워크와 호스트의 계층적인 특성은 있지만, 위치 정보와 관련해서 비구조적 이라고 볼 수 있다. 그에 비해 www.korea.co.kr 같은 도메인 구조는 구조적인 위치 정보를 제공한다. 

멀티 플렉싱

개별적으로 설정된 전송 계층 연결에서 전송 데이터의 단위인 TPDU의 목적지가 동일한 호스트면 이들 데이터를 하나의 가상 회선에 전송하는 것이 유리할 수 있다.

멀티플렉싱의 종류는 크게 두 가지이다.

상방향 멀티 플렉싱은 다수의 전송 계층 연결에 대해 하부의 네트워크 계층에서 연결이 하나 형성된다. 따라서 여러 전송 계층의 연결에서 발생한 데이터가 동일한 경로로 전송되면 하나의 네트워크 연결에 묶어 전송할 수 있다. 일반적인 연결 구조 보다 네트워크 계층에서 만들어지는 가상 회선 연결의 개수를 줄일 수 있으므로 연결 설정에 걸리는 시간이 단축된다.

하방향 멀티플렉싱은 반대로 동작한다. 즉, 하나의 전송 연결 설정을 의미하는 포트에 다수의 가상 회선을 할당한다. 이 방식으로 데이터를 전송하면 전송 속도 뿐 아니라, 전송 계층에서 발생하는 데이터의 특성에 따라 개별 가상 회선을 할당하여 효과적인 통신이 가능하다.

ex) 전송 연결에서 송신하고자 하는 데이터의 종류가 영화 파일이면 그 내용을 영상, 음성, 모국어 자막, 외국어 자막 등으로 구분해 네트워크 연결을 개별적으로 설정할 수 있다. 구분한 데이터는 오류 허용 범위, 전송률 등의 트래픽 특성이 달라 성격에 맞는 가상 회선을 할당할 수 있기 때문이다.

연결설정

전송 계층의 연결 설정은 연결을 요청하는 프로세스의 연결 설정 요구인 Conn_Req와 상대편 프로세스에서 연결 수락을 의미하는 Conn_Ack의 회신으로 완료된다.

2단계 설정 과정은 통신 양단의 연결 설정을 위한 최소한의 단계이다. Conn_Req요구를 받은 프로세스가 연결 요청을 거부할 수 있다는 의미를 내포하므로 연결 요청은 양자 합의에 의해서만 가능하다.

 

연결 설정 과정은 개념적으로 모양이 아주 간단하지만, 실제 통신 환경에서는 조금 더 복잡하다. 

ex) 프리미티브가 전달되는 과정에서 분실, 변형, 복사 등의 가능성이 있기 때문에 구현 과정에서 이 문제를 고려해야 한다.

  • 오류가 발생하지 않은 정상 상태에서 3단계 설정의 동작 과정을 보면 A 프로세스는 임의의 송신 순서 번호 x를 지정하여 연결 설정을 요청한다. 이를 수신하는 프로세스는 연결 설정 요구에 대한 순서번호 x에 대해 응답을 보낸다. 이때 순서 번호 y는 자신의 초기 송신 번호를 왼쪽 프로세스에 알려주기 위해 사용한다. 
  • 연결 요구에 대한 응답 ConnAck를 받은 A프로세스는 Conn_Ack를 잘 받았다고 B프로세스에 응답해야 한다. 따라서 Conn_Ack와 다른 종류로 응답 정보를 보내야 하지만, 그림에서는 이 과정을 생략하고 바로 데이터를 전송하고 있다.이는 Data_Req가 데이터 전송과 함께 응답 기능을 함께 수행하기 때문이다. 만일 A프로세스가 전송할 데이터가 없으면 Conn_Ack에 대한 응답을 따로 해야한다.
  • A프로세스는 Data_Req(x, y)처럼 자신이 설정한 순서 번호 x를 사용해 데이터를 전송하고 있다. 이때 데이터 전송과 함께 B 프로세스가 설정한 순서번호 y에 대해서도 응답해야 한다.

연결 해제

연결 해제 과정은 설정 과정보다 간단하다.

 

  • 연결 해제 방식은 크게 두가지 이다. 양방향 통신을 지원하는 연결을 하나의 원통으로 표현했고 한쪽 프로세스가 Disc_Req를 전송한다는 의미는 이 원통의 기능을 정지시켜 둘 사이의 연결이 해제되는 것을 의미한다.
  • 이 방식은 A프로세스가 B프로세스에 전송할 데이터가 남거나, 전송중이지만, 아직 완료되지 않은 시간 t에 상대 프로세스와 연결 종료가 이루어진다. 그러면 데이터 전송을 지원하는 원통 기능이 정지되어 데이터 전송을 완료할 수 없다는 문제가 발생한다.

  • 점진적 연결 해제 방식은 하나의 연결에 두 개의 단방향 연결을 지원하는 원통이 존재하는 것과 같다. 따라서 A프로세스의 데이터 전송 과정 중에 B프로세스의 연결 해제 요구가 발생해도 아래쪽 원통 기능만 정지하고, 위쪽 원통은 여전히 정상 기능을 수행한다. 즉 A 프로세스가 전송해야 하는 데이터는 계속 전송할 수 있다. 두 프로세스 사이의 연결을 완전히 종료하려면 양쪽에서 자신에게 할당된 단방향의 원통기능을 명시적으로 정지하게 된다. 
  • 점진적 연결 해제 절차 방식에서 연결을 해제하려면 두 프로세스 모두 Disc_Req를 전송해야 한다.

Reference

쉽게 배우는 데이터 통신과 컴퓨터 네트워크