전송계층이란 ?
OSI 7 계층모델의 4 계층에 해당하는 프로토콜로 네트워크 계층의 한계를 보완하고 응용 계층과의 연결점을 제공하는 계층이죠. 주로 패킷이 전송 과정에서 아무 문제 없이 제대로 수신지 컴퓨터에 도착할 수 있도록 패킷 전송을 제어하는 역할을 합니다.
전송 계층이 네트워크 계층의 한계를 보완하기 위한 계층이라고 했는데, 그 이유가 무엇이냐면 바로 네트워크 계층에는 핵심 프로토콜인 IP가 존재하는데, 이 IP를 통해 수많은 네트워크가 복잡하게 얽힌 인터넷에서 수신지 컴퓨터까지 경로를 찾아 패킷을 전송하는 중요한 역할을 하지만 수신지 컴퓨터가 존재하는지, 수신지 컴퓨터가 존재하더라도 패킷을 수신할 준비가 되어있는지, 패킷을 수신할 준비가 되어 있더라도 전송 과정에서 패킷이 손상되거나 유실되지는 않았는지 이런 문제들을 신경을 쓰지않아요..
이러한 신뢰할 수 없는 IP 프로토콜의 한계를 보완하기 위해 패킷이 전송 과정에서 아무 문제 없이 데이터를 제대로 수신지 컴퓨터에 도착할 수 있도록 패킷 전송을 제어하기 위해 등장한 것이 전송 계층이라고 할 수 있는거죠.
첫째, 전송 계층은 연결형 통신을 가능하게 합니다.
둘째, 전송 계층은 신뢰성있는 통신을 가능하게 합니다.
또한 TCP는 패킷이 수신지까지 올바른 순서대로 확실히 전달되는 신뢰성을 보장하기 위해 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능들을 제공합니다.
하지만 때로는 비교적 높은 성능을 위해 신뢰할 수 없는 통신, 빠르게 상대방의 확인을 거치지 않는 비연결형 통신을 지원하는 프로토콜이 필요할 때가 있는데, 바로 전송 계층에 존재하는 비연결형 통신방법인 UDP 프로토콜입니다.
흐름제어는 송신측(sender)과 수신측(receiver)의 데이터 처리 속도 차이 를 해결하기 위한 기법으로, 수신측이 패킷(packet)을 너무 지나치게 많이 받지 않도록 조절하는 것입니다. 기본 개념은 수신측이 송신측에게 현재 자신의 상태를 피드백(feedback)하는 것입니다.
만약 송신측 전송량 > 수신측 처리량 이라면, 전송된 패킷은 수신측의 큐를 넘어서 손실될 문제가 발생할 수 있기 때문에 송신측의 패킷 전송량을 제어하게 됩니다. 즉, 수신측에서 제한된 저장 용량을 초과한 이후에 도착하는 데이터는 손실 될 수 있으며, 만약 손실 된다면 불필요하게 응답과 데이터 전송이 송/수신측 간에 빈번이 발생합니다.
흐름제어 대표적인 방법에는 Stop and Wait 와 Sliding Window 가 있으며, Stop and Wait부터 알아보겠습니다.
Stop and Wait는 송신측에서 매번 전송한 패킷에 대해 수신측의 확인 응답(ACK)을 받아야만, 그 다음 패킷을 전송하는 방법입니다.
구조가 간단한 대신, 하나를 주고 하나를 받기 때문에 비효율적인 방식임..
받는쪽 즉 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답없이 바로바로 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법입니다. 즉, Sliding Window를 통하여 보내는 송신측 버퍼의 범위는 수신측의 여유 버퍼 공간을 반영하여 동적으로 바뀜으로써 흐름제어를 수행합니다.
오류제어는 ARQ(Automatic Repeat Request) 기법 을 사용하여 프레임이 손상되었거나 손실되었을 경우, 재전송을 통해 오류를 복구하는 방법으로 ARQ가 뭐냐하면 신뢰성 있는 데이터 전달을 위해 재전송을 기반으로 한 에러 제어 방식을 의미합니다. ARQ 기법은 흐름 제어 기법과 관련되어 있는데 흐름제어의 Stop and Wait 은 Stop and Wait ARQ 로, Sliding Window 는 GBn(Go-Back-n) ARQ형태로 구현합니다.
ACK : 다음 프레임을 전송
NAK : 손상된 프레임 자체 번호를 반환
전송 측에서 1개의 프레임을 전송하고, 수신측에서 수신된 프레임의 에러 유무에 따라 ACK 혹은 NAK(Negative Acknowledgement)를 보내는 방식으로, 식별을 위해 데이터 프레임과 ACK 프레임은 각각 0,1 번호를 부여합니다. 수신측이 데이터를 받지 못했을 경우, NAK를 송신측에게 보내고 NAK를 받은 송신측은 데이터를 재전송합니다.
만약 데이터나 ACK가 분실되었을 경우 일정 간격의 시간을 두고 타임아웃이 되면 송신측은 데이터를 재전송
전송된 프레임이 손상되거나 분실될 경우, 확인된 마지막 프레임 이후로 모두 재전송하는 기법입니다.
혼잡제어란 송신측의 데이터 전달과 네트워크 데이터 처리 속도를 해결하기 위한 기법으로 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 제어하는 것이 혼잡 제어의 개념
합 증가/곱 감소 알고리즘이라고 한다.
처음에 패킷 하나를 보내는 것으로 시작하여 전송한 패킷이 문제 없이 도착한다면 Window Size를 1씩 증가시키며 전송하는 방법이다. 만약, 패킷 전송을 실패하거나 TIME_OUT이 발생하면 Window Size를 절반으로 감소시킨다.
이 방식을 사용하는 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만 시간이 흐르면 평형 상태로 수렴하게되어 공평한 방식으로 알려져 있다.
AIMD가 네트워크 수용량 주변에서는 효율적으로 동작하지만, 처음에 전송 속도를 올리는데 시간이 너무 길다는 단점이 있다.
Slow Start는 AIMD와 마찬가지로 패킷을 하나씩 보내는 것부터 시작한다. 이 방식은 패킷이 문제 없이 동작하여 ACK 패킷마다 Window Size를 1씩 늘린다. 즉, 한 주기를 지나면 Window Size는 2배가 된다.