K 개발자

전송 계층의 기능 본문

OS/네트워크

전송 계층의 기능

ddingz 2021. 8. 2. 19:12

전송 계층의 주요 기능

전송 계층과 데이터 링크 계층의 차이

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

흐름 제어

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

오류 제어

데이터를 전송하는 과정에서 발생할 수 있는 오류에는 데이터 변형과 데이터 분실이 있다.
전송 오류가 발생하여 수신 데이터의 내용이 깨지거나 분실되면 데이터 재전송에 의한 오류 제어Error Control 기능에 의해 복구 절차가 진행된다.
데이터의 재전송 절차는 수신 프로세스의 요구에 의해 이루어질 수도 있고, 송신 프로세스 스스로 판단해 이루어질 수도 있다.
전송 계층에서 발생하는 오류는 논리적으로 구축된 각 계층의 소프트웨어가 동작하는 과정에서 데이터를 분실하는 경우가 대부분이다.
예를 들어, 전송 데이터를 특정 목적지까지 라우팅하는 과정에서 네트워크 계층의 기능적 한계나 잘못된 목적지 호스트의 위치 정보에 의해 올바르게 전달되지 않을 수 있다.

분할과 병합

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

서비스 프리미티브

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


전송 계층 설계 시 고려 사항

주소 표현

네트워크에서 기본적으로 필요한 일반 사항은 주소Address이다.
TCP/IP 환경에서 사용하는 호스트의 IP 주소와 포트 번호의 조합은 네트워크 계층과 전송 계층에서 사용하는 주소 표현 방식의 하나이다.
전송 계층의 주소를 보통 TSAPTransport Service Access Point라 한다.

멀티플렉싱

멀티플렉싱

상방향 멀티플렉싱Multiplexing은 다수의 전송 계층 연결에 대해 하부의 네트워크 계층에서 연결이 하나 형성된다.
따라서 여러 전송 계층의 연결에서 발생한 데이터가 동일한 경로로 전송되면 하나의 네트워크 연결에 묶어 전송할 수 있다.
일반적인 연결 구조보다 네트워크 계층에서 만들어지는 가상 회선 연결의 개수를 줄일 수 있으므로 연결 설정에 걸리는 시간이 단축된다.
하방향 멀티플렉싱은 반대로 동작한다.
즉, 하나의 전송 연결 설정을 의미하는 포트에 다수의 가상 회선을 할당한다.
이 방식으로 데이터를 전송하면 전송 속도뿐 아니라, 전송 계층에서 발생하는 데이터의 특성에 따라 개별 가상 회선을 할당하여 효과적인 통신이 가능하다.

연결 설정

개념적 연결 설정 절차

전송 계층의 연결 설정은 연결을 요청하는 프로세스의 연결 설정 요구인 Conn_Req와 상대편 프로세스에서 연결 수락을 의미하는 Conn_Ack의 회신으로 완료된다.
Conn_Req 요구를 받은 프로세스가 연결 요청을 거부할 수 있다는 의미를 내포하므로 연결 요청은 양자의 합의에 의해서만 가능하다.

3단계 설정 절차

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

연결 해제

일방적 연결 해제 절차

일방적 연결 해제 절차 방식에서는 통신하는 한쪽 프로세스가 일방적으로 Disc_Req를 전송해 연결 종료를 선언할 수 있다.
Disc_Req에 대한 상대 프로세스의 동의가 없어도 연결이 끊기는 방식이다.
이 방식은 A 프로세스가 B 프로세스에 전송할 데이터가 남거나, 전송 중이지만 아직 완료되지 않은 시간 t에 상대 프로세스와 연결 종료가 이루어진다.

점진적 연결 해제 절차

점진적 연결 해제 절차 방식에서 연결을 해제하려면 두 프로세스 모두 Disc_Req를 전송해야 한다.

'OS > 네트워크' 카테고리의 다른 글

TCP 프로토콜을 이용한 데이터 전송  (0) 2021.08.04
TCP 프로토콜  (0) 2021.08.03
기타 네트워크 계층 프로토콜  (0) 2021.08.02
이동 IP 프로토콜  (0) 2021.08.01
IPv6 프로토콜  (0) 2021.08.01
Comments