전송 계층의 역할
네트워크 계층이 하는 역할이 있는 것처럼 전송 계층도 하는 역할이 있다. 전송 계층의 역할에 대해 알아보자.
전송 계층의 두 가지 역할
라우터의 라우팅 기능을 통해 데이터를 전송하더라도 목적지에 도착하지 못할 수도 있다. OSI 7계층 모델에서 전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다.
전송 계층에는 오류를 점검하는 기능이 있다. 오류가 발생하면 데이터를 재전송하도록 요청한다. 또한 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능도 있다.
연결형 통신과 비연결형 통신
전송 계층의 특징은 신뢰성/정확성과 효율성이다.
- 신뢰성/정확성 : 데이터를 목적지에 문제없이 전달하는 것 (연결형 통신)
- 효율성 : 데이터를 빠르고 효율적으로 전달하는 것 (비연결형 통신)
연결형 통신은 상대편과 확인해 가면서 통신하는 방식이다. 신뢰성/정확성이 우선인 통신이라 여러 번 확인하고 보낸다. 전송 계층의 연결형 통신 프로토콜에는 TCP가 사용된다.
비연결형 통신은 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식이다. 신뢰성과 정확성보다는 효율성이 우선인 통신이므로 확인 절차 없이 일방적으로 보낸다. 동영상의 경우 신뢰할 수 있고 정확한 데이터 전송보다 빠른 전송이 필요하기 때문에 비연결형 통신을 사용한다. 비연결형 통신 프로토콜에는 UDP가 사용된다.
정리하자면 신뢰할 수 있고 정확한 데이터 전송이 필요한 애플리케이션에는 연결형 통신을 사용하고, 효율적인 데이터 전송이 필요한 애플리케이션에는 비연결형 통신을 사용한다.
- 전송 계층은 데이터를 제대로 전달하는 역할을 하며, 오류를 점검하는 기능도 한다.
- 전송 계층은 전송된 데이터의 목적지가 어떤 애플리케이션인지 확인한다.
- 연결형 통신은 신뢰할 수 있고 정확하게 데이터를 전송하는 통신 방식이다.
- 비연결형 통신은 신뢰성을 보장하지 않지만 효율적으로 데이터를 전송하는 통신 방식이다.
TCP의 구조
전송 계층에서 신뢰할 수 있는 정확한 통신을 제공하는 TCP 프로토콜의 구조에 대해 알아보자.
TCP란?
연결형 통신 프로토콜에 해당한다. 캡슐화 과정에서 TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 하고, 이 TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.
연결형 통신의 경우 데이터를 전송하려면 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야 한다. 이 연결을 확립한 후에 데이터를 전송할 수 있다. 연결을 위해서는 7.코드 비트 중에서 SYN과 ACK가 필요하다. SYN은 연결 요청, ACK는 확인 응답을 뜻한다.
3-way 핸드셰이크란?
연결(connection)은 아래 그림과 같이 SYN과 ACK를 사용하여 확립할 수 있다. 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷을 교환하는 데, 다음 그림처럼 세 번 확인한다.
- 통신 대상에게 허가를 받아야 하므로, 먼저 client에서 server로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
- server는 client가 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 server도 client에게 데이터 전송 허가를 받기 위해 연결 확립 요청(ACK)을 보낸다.
- server의 요청을 받은 client는 server로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.
이처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way handshake라고 한다. 데이터를 전송한 후에는 연결을 끊기 위한 요청을 교환해야 한다. 연결을 끊을 때는 FIN과 ACK를 사용하는데, FIN은 연결 종료를 뜻한다.
- client에서 server로 연결 종료 요청(FIN)을 보낸다.
- server에서 client로 연결 종료 응답(ACK)을 반환한다.
- 또한 server에서도 client로 연결 종료 요청(FIN)을 보낸다.
- client에서 server로 연결 종료 응답(ACK)을 반환한다.
- 전송 계층에서는 TCP 헤더가 붙는다.
- TCP 헤더가 붙은 데이터를 세그먼트라고 한다.
- 연결(connection)을 확립하기 위해 TCP 헤더에 있는 코드 비트를 사용한다.
- 코드 비트 중 'SYN'은 연결 요청, 'ACK'는 연결 응답, 'FIN'은 연결 종료를 뜻한다.
- 연결 확립을 위해 패킷 교환을 세 번 하는데 이를 3-way handshake라고 한다.
- 연결을 확립할 때는 'SYN'과 'ACK'를 사용하고, 연결을 종료할 때는 'FIN'과 'ACK'를 사용한다.
일련번호와 확인 응답 번호의 구조
3-way handshake 이후 데이터 전송에 사용되는 TCP 헤더의 일련번호와 확인 응답 번호에 대해서 알아보자.
일련번호와 확인 응답 번호란?
3-way handshake가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 아래 그림과 같이 TCP 헤더의 3.일련번호(sequence number)와 4.확인 응답 번호(acknowledgement number)를 사용한다.
TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려 주는 역할을 한다. 전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다.
확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려 주는 역할을 한다. 이 번호는 다음 번호의 데이터를 요청하는 데도 사용된다.
아래 그림의 예제를 살펴보자. 일련번호 '3001'번은 지금 보내는 200바이트 데이터의 첫 번째 바이트의 번호고, 확인 응답 번호는 다음에 보냈으면 하는 데이터의 첫 번째 바이트 번호가 된다.
위의 그림과 같이 데이터를 전송하기 전 단계에서 3-way handshake 연결 수립이 이루어질 때, 이번 통신에 사용하는 일련번호인 '3001'번과 확인 응답 번호인 '4001'번이 결정된다.
- 컴퓨터 1은 컴퓨터 2로 200바이트의 데이터를 전송한다.
- 컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호에 넣는다. 다음 수신 데이터는 3001 + 200 = 3201이므로 3201번부터 보내 달라고 요청한다.
- 컴퓨터 1은 컴퓨터 2로 3201번부터 200바이트의 데이터를 전송한다.
- 컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터의 번호를 확인 응답 번호에 넣는다. 3201 + 200 = 3401이므로 3401번부터 보내 달라고 요청한다.
위의 과정을 데이터 전송이 완료될 때까지 반복하는 것이다.
데이터가 항상 올바르게 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하게 되어 있다. 이것을 재전송 제어라고 한다. 데이터를 전송하는 도중에 오류가 발생하면 일정 시간 동안 대기한 후에 재전송하는 것이다.
윈도우 크기란?
위에서 설명한 것은 세그먼트(데이터) 하나를 보낼 때마다 확인 응답을 한 번 반환하는 통신이다. 이는 효율이 낮은 방식이다. 하지만 매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율을 높일 수 있다. 세그먼트를 연속해서 보내더라도 수신 측은 세그먼트를 일시적으로 보관하는 버퍼(buffer)를 이용하여 대응할 수 있다.
하지만 대량의 세그먼트를 받아서 보관하지 못하고 넘쳐 버리는 경우가 있는데 이를 오버플로(overflow)라고 한다. 오버플로를 방지하기 위해 버퍼의 한계 크기를 알고 있어야 한다. 이것이 TCP 헤더의 8.윈도우 크기(window size) 값에 해당한다.
윈도우 크기는 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타낸다. 즉, 확인 응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터 크기를 말한다. 윈도우 크기의 초깃값은 3-way handshake를 할 때 판단한다.
이렇게 상대방 버퍼의 한계 값을 확인하고 세그먼트(데이터)를 오버플로되지 않도록 보낸다. 확인 응답을 기다리지 않고 세그먼트(데이터)를 연속해서 보내면 아래 그림과 같이 통신하게 된다.
이렇게 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트(데이터)를 연속적으로 전송할 수 있다.
- 3-way handshake 이후 데이터를 전송할 때는 TCP 헤더의 일련번호와 확인 응답 번호가 사용된다.
- 데이터를 재전송하는 것을 재전송 제어라고 한다.
- 수신한 세그먼트(데이터)를 일시적으로 저장하는 장소를 버퍼라고 한다.
- 데이터 크기가 버퍼 크기를 넘어서는 것을 오버플로가 한다.
- 버퍼 용량의 크기를 윈도우 크기라고 한다.
포트 번호의 구조
데이터의 목적지가 어떤 프로그램인지 구분하는 역할을 하는 포트 번호에 대해 알아보자.
포트 번호란?
전송 계층에는 전송된 데이터의 목적지가 어떤 애플리케이션인지 구분하는 역할이 있다. 이를 위해 TCP 헤더의 1. 출발지 포트 번호(source port number)와 2.목적지 포트 번호(destination port number)가 필요하다.
TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있게 되는 것이다. 포트 번호를 사용해서 웹 브라우저인지 메일 프로그램인지 구분하는 것이다. 포트 번호는 0~65535번을 사용할 수 있다. 0~1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있다. 이러한 포트를 잘 알려진 포트(well-known ports)라고 한다. 1024번은 예약 되어 있지만 사용되지는 않는 포트고, 1025번 이상은 랜덤 포트라고 해서 클라이언트 측의 송신 포트로 사용된다.
동작하는 애플리케이션은 각각 포트 번호가 있어서 다른 애플리케이션과 서로 구분된다. 데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요하다. 그렇기 때문에 포트 번호를 붙이지 않고 통신하면 컴퓨터에 데이터가 도착하더라도 애플리케이션까지는 도착할 수 없다.
- 포트 번호는 어떤 애플리케이션인지 구분하는 역할을 한다.
- 포트 번호는 0~65535번을 사용한다. 0~1023번은 잘 알려진 포트라고 하고 1025번 이후는 랜덤 포트라고 한다.
UDP의 구조
전송 계층에서 효율적으로 통신할 수 있도록 돕는 UDP 프로토콜의 구조에 대해 알아보자.
UDP란?
UDP는 비연결형 통신이라서 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다. UDP는 TCP와 달리 효율성을 중요하게 여기는 프로토콜이기 때문에 TCP와 같은 신뢰성과 정확성을 요구하게 되면 효율이 떨어지게 된다.
UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것이라서 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳에 사용된다.
UDP 헤더란?
UDP에서는 아래 그림과 같이 UDP 헤더가 붙은 데이터를 UDP 데이터 그램이라고 한다.
UDP는 효율성과 빠른 속도가 중요하기 때문에 상대방을 확인하지 않고 연속해서 데이터를 보낸다. 또한 UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다. 이것을 브로드캐스트(broadcast)라고 한다. TCP는 데이터를 전송할 때도 확인 응답을 하나씩 보내야하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신에는 적합하지 않다.
- UDP는 데이터를 효율적으로 빠르게 보낼 때 사용되는 프로토콜이다.
- UDP는 UDP 헤더가 있지만 TCP 헤더에 비해 간단하다.
- UDP 헤더가 있는 데이터를 UDP 데이터그램이라고 한다.
- UDP는 랜에서 불특정 다수에게 브로드캐스트로 데이터를 일괄 전송한다.
참고
- 「모두의 네트워크」 - 미즈구치 카츠야
'CS > Network' 카테고리의 다른 글
[Network] 08. 네트워크의 전체 흐름 살펴보기 (0) | 2021.12.08 |
---|---|
[Network] 07. 응용 계층 : 애플리케이션에 데이터 전송하기 (0) | 2021.12.06 |
[Network] 05. 네트워크 계층 : 목적지에 데이터 전달하기 (0) | 2021.12.01 |
[Network] 04. 데이터 링크 계층 : 랜에서 데이터 전송하기 (0) | 2021.11.30 |
[Network] 03. 물리 계층 : 데이터를 전기 신호로 변환하기 (0) | 2021.11.30 |
댓글