취미가 좋다

네트워크 6 : 전송 계층 - Transport Layer 본문

Computer Science/네트워크

네트워크 6 : 전송 계층 - Transport Layer

benlee73 2021. 9. 17. 12:38

이번 글에서는 전송 계층에 대해 배워보자.

 

이전 네트워크 계층까지의 기능만으로 데이터를 전송할 때 생기는 문제가 있다.

1~3 계층까지는 데이터 전송 중에 손상되거나 유실되어도 아무 역할도 하지 않는다.

 

전송 계층

전송 계층목적지까지 신뢰할 수 있는 데이터를 전달하기 위해 존재한다.

 

전송 계층에는 크게 2가지 기능이 있다.

 

첫 번째는, 오류를 점검하는 기능으로 오류 발생시 재전송을 요청하여 데이터를 정확히 전달한다.

 

두 번째는, 전송된 데이터의 목적지가 어떤 어플리케이션인지 식별하는 기능이다.

예를 들어, 웹 브라우저와 메일 프로그램 중 목적 애플리케이선에서 필요한 데이터인지 판단한다.

 

 

 

전송 계층에는 크게 2가지 통신 방법이 있다.

 

연결형 통신

신뢰할 수 있고 정확한 데이터를 목적지에 문제 없이 전달하는 통신

신뢰성/정확성을 위해 여러 번 확인하고 데이터를 보낸다.

이러한 통신을 위해 사용되는 프로토콜이 TCP이다.

 

전송이 양방향으로 동시에 일어나는 전이중 방식이다.

각 연결이 정확히 2개의 종단점을 가지는 점대점 방식이다.

 

비연결형 통신

데이터를 빠르고 효율적으로 전달하는 통신

효율성을 위해 확인 절차 없이 일방적으로 데이터를 보낸다.

    ex) 동영상을 시청할 때, 데이터가 유실되어 화질이 조금 떨어지더라도 버벅거리지 않게 하기 위해 사용한다.

이러한 통신을 위해 사용되는 프로토콜이 UDP이다.

데이터를 데이터그램 단위로 처리한다.

 

연결형 통신 프로토콜 TCP

TCP로 데이터를 전송할 때, 상위 계층에서 받아온 데이터에 붙이는 헤더를 TCP 헤더라고 한다.

TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.

데이터를 전송하려면 연결이라는 가상의 독점 통신로를 확보해야 한다.

 

6비트의 코드 비트에는 이 연결의 제어 정보가 기록된다.

URG ACK PSH RST SYN FIN

각 정보는 1비트로 표현되고 초깃값은 0, 활성화되면 1이 된다.

연결을 위해서 연결 요청 SYN, 확인 응답 ACK가 사용된다.

 

3-way handshake

연결은 SYN, ACK를 사용하여 아래의 3단계로 이루어진다.

 

연결을 끊을 때는 FIN, ACK를 사용한다. (FIN은 연결 종료)

 

이 방법을 통해 신뢰할 수 있는 연결이 이루어진다.

일련번호확인 응답 번호

3-way handshake가 끝나고 데이터를 주고받을 때 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용한다.

 

일련번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할을 한다.

이 번호를 통해 수신 측은 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다.

 

확인 응답 번호수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다.

그래서 받은 데이터의 다음 번호의 데이터를 요청하는 데 사용한다.

 

예를 들어, 일련번호가 3001번인 200바이트 데이터를 받으면, 수신 측은 그 다음 데이터인 3201 데이터를 확인 응답 번호로 보낸다.

첫 일련번호와 확인 응답 번호는 3-way handshake에서 결정된다.

 

위의 두 정보를 사용해서 데이터가 손상되거나 유실된 경우 재전송하는 기능재전송 제어라고 한다.

 


위에서는 세그먼트(데이터)를 하나 보낼 때마다 매번 확인 응답을 보내기 때문에 비효율적이다.

 

그래서 확인 응답을 받기 전에 세그먼트를 연속해서 보내는 방법을 사용한다.

 

연속으로 보내진 세그먼트는 수신 측의 버퍼(buffer)에 쌓이고, 버퍼가 넘치는 현상오버플로(overflow)라고 한다.

 

오버플로가 발생하지 않게 버퍼의 한계 크기윈도우 크기(window size)에 넣어서 서로에게 알려준다.

 

3-way handshake를 할 때 서로 버퍼의 용량을 교환하여 오버플로우를 방지한다.

 

아래처럼 확인 응답을 수신하기 전에 세그먼트를 연속으로 보내면서 효율적으로 데이터를 전송할 수 있다.


지금까지는 TCP의 첫 번째 기능, 데이터를 안전하고 정확히 전달하는 기능에 대해 살펴보았다.

 

두 번째인 데이터의 목적 어플리케이션 구별 기능을 위해서 포트 번호가 사용된다.

 

포트 번호

각 어플리케이션이 가지고 있는 번호로 어플리케이션을 구분하는 데 사용된다.

 

0~65535번을 사용할 수 있고, 0~1023은 주요 프로토콜이 사용하여 well-known port라고 한다.

 

1024번은 사용되지 않고 1025번 이상은 랜덤 포트라고 해서 클라이언트 측의 송신 포트로 사용된다.

어플리케이션 포트 번호
SSH 22
SMTP 25
DNS 53
HTTP 80
POP3 110
HTTPS 443

TCP 헤더출발지 포트 번호목적지 포트 번호를 넣어서 보내어 목표 어플리케이션에 정확히 도달하도록 한다.

 

예를 들어, 웹 브라우저와 메일 프로그램을 사용하고 있을 때 TCP 헤더의 목적지 포트 번호를 통해 올바른 어플리케이션에 데이터를 전달한다.

 

서버 측 포트 번호는 직접 정해야 하지만, 클라이언트 측은 정하지 않아도 된다.

그래서 웹 브라우저는 접속할 때 임의의 포트가 자동으로 할당된다.


UDP

UDP는 비연결형 통신으로 데이터를 전송할 때 TCP와 달리 복잡한 과정이 없다.

그래서 데이터를 효율적으로 빠르게 보낼 수 있다는 장점이 있다.

 

UDP는 신뢰성과 정확성이 필요하지 않아서 작은 크기의 UDP 헤더를 가진다.

UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 한다.

UDP 헤더

 

UDP같은 랜에 있는 네트워크 장비에 데이터를 일괄적으로 보내는 브로드캐스트가 가능하다.

TCP는 데이터를 전송할 때 확인 응답을 받아야 하기 때문에 불특정 다수와의 통신은 적합하지 않다.

 

DNS에서 UDP를 사용한다. 그 이유는 아래와 같다.

  • 데이터(DNS request) 크기가 작다.
  • connection을 유지하지 않아도 되기 때문에 3 way handshaking이 필요 없다.
  • 단, 데이터의 크기가 클 때만 TCP를 사용한다.

본 글은 책 [모두의 네트워크 - 미즈구치 카츠야] 을 참고하여 작성되었습니다.

 
Comments