Transport Layer
Updated:
전송 계층(Transport Layer)
OSI 7 Layer에서 4 계층에 해당됩니다.
계층 구조의 네트워크 구성요소와 프로토콜 내에서 송신자와 수신자를 연결하는 통신 서비스를 제공한다. 전송 계층은 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어, 그리고 다중화와 같은 편리한 서비스를 제공한다.
전송 프로토콜 중 가장 잘 알려진 것은 연결 지향 전송 방식을 사용하는 전송 제어 프로토콜 (TCP)이며, 보다 단순한 전송에 사용되는 사용자 데이터그램 프로토콜 (UDP)도 있다.
주요 기능 및 특징
- 네트워크가 아닌 호스트 내에 구동된 프로세스 사이의 연결 확립 (End-to-End)
- 트랜스포트 계층은 정보전달을 두 호스트(host-to-host)간 보다는, 주로 프로세스 간 (process-to-process)의 통신으로 바꾸어 줌
- 바로 상위 또는 하위 계층에서 사용하는 제어방법 및 그 내용에 관계없이 정보가 세션계층 - 전송계층 - 망계층 간에 내용이 바뀜없이 투명(Transparent)하게 전송
- 세션(Session)을 갖고 있는 두 이용자 사이의 전송을 위한 종단 간 제어
- 동일 또는 이기종 시스템간에 어떤 망(공중망: PSTN, 패킷공중데이타망: PSDN등) 이 어떻게 연결되었든 간에 관계없이 정보를 틀림없이 상대 단말기에 전달
TCP vs UDP
TCP (전송 제어 프로토콜, Transmission Control Protocol)
TCP는 IP의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다. TCP는 전송 계층에 위치한다. 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나로서 국제 인터넷 표준화 기구(IETF)의 RFC 793에 기술되어 있다.
TCP 는 데이터의 정확성 확인, 패킷을 목적지까지의 전송은 IP가 담당을 하게 됩니다. 그래서 송-수신자 모두 tcp reassembly
을 진행합니다. 즉, TCP 프로토콜에서도 패킷은 순서가 바껴서 도착할 수 있습니다. 하지만 tcp reassembly를 통해 신뢰성을 확보합니다.
tcp reassembly
비신뢰적인 프로토콜을 신뢰성있게 재조립(순서, 중복 손실등 제어)
TCP 특징
- 높은 신뢰성을 보장한다.
- 서버소켓은 연결만을 담당한다
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
- 전이중(Full-Duplex), 점대점(Point to Point) 방식.
- 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다형 서비스로 가상 회선 방식을 제공한다.
- 서버와 클라이언트는 1대1로 연결된다.
- 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
- 스트림 전송으로 전송 데이터의 크기가 무제한이다.
- Streaming 서비스에 불리하다.(손실된 경우 재전송 요청을 하므로)
- TCP는 통신을 할때 네트워크 트래픽에 대한 흐름제어와 혼잡제어를 한다.
TCP Flag Bit
URG (Urgent) 긴급함을 알리는 용도
ACK (Acknowledge) 확인을 나타내는 용도
PSH (Push) 서버측에 전송할 데이터가 없음과, 버퍼를 모두 채우지 않고 바로 발송 하라는 용도
RST (Reset) 강제 연결 초기화 용도
SYN (Synchronize) 연결시작, 회선개설 용도
FIN (Finish) 연결 해제, 회선 종결 용도
TCP Three-Way Handshake
Connection EstablishMent
- 클라이언트가 서버에 SYN(j) 패킷을 보낸다.
- 서버는 클라이언트의 요청인 SYN(j) 패킷을 받고 클라이언트에게 요청을 수락하는 ACK(j+1)과 SYN(k)를 발송한다.
- 클라이언트가 서버의 수락 응답인 ACK(j+1)과 SYN(k) 패킷을 받고 ACK(k+1)를 서버로 보내면 연결이 성립된것이다.
TCP Four-Way Handshake
Connection Termination
- 클라이언트가 연결을 종료하겠다는 FIN 패킷을 보낸다.
- 서버는 클라이언트의 요청을 받고 확인 메세지로 ACK를 보낸다. 그 후 데이터를 모두 보낼때 까지 잠깐 TIME OUT이 된다.
- 데이터를 모두 보내고 통신이 끝나면 서버가 클라이언트에게 FIN 패킷을 보낸다.
- 클라이언트는 FIN 패킷을 확인했다는 ACK를 서버에게 보낸다.
- 클라이언트의 ACK 패킷을 받은 서버는 소켓 연결을 close한다.
- 클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 일정 시간 동안 세션을 남겨놓고 잉여 패킷을 기다리는 TIME_WAIT 과정을 거친다.
UDP (사용자 데이터그램 프로토콜, User Datagram Protocol)
UDP 전송 방식은 너무 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보 없이 누락시키기도 한다. 하지만 TCP보다 속도가 빠르다. UDP는 일반적으로 오류의 검사와 수정이 필요 없는 애플리케이션에서 수행할 것으로 가정한다.
UDP를 사용하는 네트워크 애플리케이션에는 도메인 이름 서비스 (DNS), IPTV, 음성 인터넷 프로토콜 (VoIP), TFTP, IP 터널, 그리고 많은 온라인 게임 등이 있다.
UDP 특징
- 비연결형 서비스로 데이터그램 방식을 제공한다
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 신뢰성이 낮다
- TCP보다 속도가 빠르다
- UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없다.
- 소켓 대신 IP를 기반으로 데이터를 전송한다.
- 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
- 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
- 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.
ARQ (Automatic Repeat Request, 자동 재전송 요구, 검출후 재전송 방식)
통신회선에서 착오가 발생하면 수신측은 착오의 발생을 송신측에 알리고, 송신측은 착오가 발생한 block을 재전송하는 방식으로 검출 후 재전송이라 한다.
대표적으로 Go-Back-n 과 Selective - Reject 방식이 있습니다.
Go-Back-n / Selective - Reject
흐름제어 & 혼잡제어
흐름제어 (Flow Control)
수신측이 송신측보다 속도가 빠른 것은 아무런 문제가 되지 않지만, 송신측이 수신측보다 빠르다면 문제가 발생할 수 있습니다. 그렇기 때문에, 수신측이 더 느릴경우 발생하는 문제점을 대처하기 위하여, 강제로 송신측의 데이터 전송을 조절하는 방법입니다.
Stop and Wait
매번 전송한 패킷에 대하여 확인응답을 받아야만 다음 패킷을 전송하는 방법입니다.
Sliding Window
수신 측에서 윈도우 사이즈를 설정하여 이 크기만큼 세그먼트를 전송하는 기법입니다.
이 윈도우 사이즈는 수신측의 여유 버퍼 공간을 반영하여 동적으로 결정합니다.
혼잡제어(Congestion Control)
송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달됩니다. 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리 할 수 없게 됩니다. 이런 경우 호스트들은 또 다시 재전송을 하게되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시키게 됩니다. 따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게 되는데, 이러한 작업을 혼잡제어라 합니다.
또한 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡(Congesetion)이라 하며 혼잡현상을 방지하거나 제거하는 기능을 혼잡제어라 합니다. 흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서의 전송 문제를 다루게됩니다.
AIMD (Additive Increase/Multiplicative Decrease)
처음에 패킷을 하나씩 보내고 이것이 문제없이 도착하면 window크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법입니다. 만일 패킷전송을 실패하거나 일정 시간을 넘으면 패킷을 보내는 속도를 절반으로 줄이게 됩니다.
Slow Start
AIMD처럼 1 패킷을 보내는 것부터 시작합니다. 그리고 패킷이 성공적으로 전송되면 윈도우 사이즈를 2배씩 증가시킵니다.
이후, 혼잡현상이 발생하면 사이즈를 1로 떨어트리고, 이전 혼잡현상이 발생하였던 창 크기의 절반까지는 지수 함수 꼴로 창 크기를 증가시킵니다. 그리고 이후부터는 1씩 증가합니다.
Fast Recovery
빠른 회복 정책은 혼잡한 상태가 되면 Window size를 1로 줄이지 않고 반으로 줄이고 선형 증가시키는 방법입니다. 빠른 회복 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 합 증가/곱 감소 방식으로 동작하게 됩니다.
Triple Duplicated ACK
Timeout
Fast Retransmit
수신측에서 중간에 유실된 패킷의 다음 패킷 순번을 ACK에 실어서 보냅니다. 그러면 송신 측은 한 순번에 중복된 ACK를 받게 되고 데이터의 유실을 알 수 있습니다. 그리고 유실된 패킷을 재전송 할 수 있게 됩니다. 송신측은 3개의 중복된 순번을 받으면 재전송을 하고, 유실이 일어났다는 것은 혼잡한 상황이라는 의미이므로 윈도우 사이즈를 감소시킵니다.
Leave a comment