본문 바로가기

CS 전공지식/네트워크

[네트워크] OSI 7계층(전송 계층, UDP)

이전 시간에는 3계층인 네트워크 계층에 대해 알아봤습니다.

오늘은 전송 계층의 전체적인 내용과 전송 계층의 프로토콜 중 하나인 UDP에 대해 포스팅할 예정입니다.

 


전송 계층

전송계층은 포트 번호를 통해서 해당되는 프로세스들이 데이터를 전송할 수 있도록 하는 계층입니다.

 

- 데이터 전송 과정

전송 계층 - 데이터 전송 과정

송신 측에서는 세션 계층에서 데이터를 받아 분할한 뒤 분할된 데이터에 각각 헤더를 붙입니다. 헤더에는 포트번호 Checksum 등이 포함되어 있습니다. 세션 계층에서 받은 데이터를 분할하기 때문에 여러 개의 세그먼트(TCP의 PDU)가 생기게 되고, 여러 개의 세그먼트를 네트워크 계층으로 보냅니다. 데이터를 분할하는 이유는 사용자가 보내고 싶은 데이터의 크기는 크고 다양한데 데이터를 전송할 때 전송할 수 있는 최대 크기가 정해져 있기 때문입니다.

수신 측에서는 송신 측과는 반대로 네트워크 계층에서 받은 데이터에서 헤더를 제거합니다. 헤더를 제거한 뒤 분할되어 있던 데이터를 재조립하여 세션 계층으로 보냅니다.

 


- 헤더

전송계층의 헤더에는 포트번호와 Checksum 등이 포함되어 있습니다.

포트번호는 어떤 프로세스에 해당 데이터를 보냈는지/보내야 할지를 나타내는 번호입니다. 이전 계층에서 Mac 주소와 IP주소가 사용되었듯이 전송계층에서는 포트번호를 통해 프로세스를 구분합니다. 포트번호는 왜 필요할까요? 포트번호가 없다면 메일을 보냈는데 해당 데이터가 수신 측 카카오톡에 전달되는 상황이 발생할 수 있고, 그렇게 된다면 데이터가 잘 전송되었다 하더라도 의미 없는 전송이 될 것입니다.

Checksum을 통해 오류가 발생했는지 확인할 수 있습니다. 데이터 링크 계층의 FCS처럼 정해진 연산을 수행하여 전송 중 데이터에 오류가 발생했는지를 확인합니다. 오류가 발생한 뒤 재전송을 요청하거나 폐기하는데 이는 프로토콜마다 다르기 때문에 프로토콜 설명할 때 같이 설명하겠습니다.

 


- 전송 계층 프로토콜

전송 계층에는 대표적으로 TCP와 UDP 프로토콜이 있습니다. TCP(Transmission Control Protocol)는 연결형으로 신뢰성/정확성을 추구하고, UDP(User Datagram Protocol)는 비연결형으로 효율성을 추구합니다.

전송 계층 - 연결형 & 비연결형

신뢰성/정확성은 데이터를 목적지에 안전하게 전달하는 것을 의미합니다. 따라서 수신 측과의 연결 상태를 확인한 뒤 데이터를 전송합니다. 효율성은 데이터를 빠르고 효율적으로 보내는 것을 의미합니다. 따라서 수신 측과의 연결 상태를 확인하지 않고 바로 데이터를 전송합니다.

그럼 지금부터 UDP와 TCP에 대해 설명하겠습니다!

 

 


UDP

- UDP

전송 계층의 비연결 프로토콜로, 수신 측과 연결이 되어있는지 확인하지 않고 바로 데이터를 전송합니다. 따라서 빠르게 데이터가 전달되어 효율성은 보장하지만 신뢰성과 정확성이 보장되지는 않습니다.

그럼 언제 UDP를 사용할까요? 일반적으로는 데이터 전송을 신뢰성/정확성이 보장된 상태에서 하지만, 실시간 방송처럼 빠른 전송이 필요한 경우에는 비연결형 통신을 사용합니다. 만약 실시간 방송에서 TCP가 사용된다면, 영상을 보는데 지장 없는 작은 에러조차 데이터를 다시 받아와야 하기 때문에 실시간 방송이 수시로 끊기고 오래 걸리는 문제가 발생할 것입니다.

 


- 데이터그램

데이터그램은 전송계층의 UDP가 사용하는 PDU(데이터의 단위)입니다. 데이터그램은 빠른 데이터 전송이 필요하기 때문에 헤더도 복잡하지 않고 최소한의 필요한 정보만 저장되어 있습니다. 데이터그램의 헤더에는 송신 측 포트, 수신 측 포트, 길이, Checksum을 저장합니다.

전송계층 - UDP 헤더

포트번호는 위에서 설명했듯이 어떤 프로세스로 전송해야하는지를 나타냅니다. 0번부터 65535번까지 사용 가능하고, 대표적으로 HTTP는 80번 포트, SSH는 22번 포트를 사용합니다. 만약 사용하지 않는 포트번호로 데이터가 도착했다면 해당 데이터는 폐기합니다.

길이는 데이터그램의 총 길이입니다. 세션 계층에서 받은 데이터를 분할하기 때문에 딱 나누어 떨어지지 않을 확률이 높고, 이것은 어떤 데이터는 다른 데이터보다 작을 수 있다는 것을 의미합니다. 따라서 수신 측에서 데이터그램의 길이를 알 수 있도록 길이 영역에 길이를 저장합니다.

체크섬은 데이터 오류 검사에 사용됩니다. 만약 체크섬을 통해 오류가 있다고 판단된다면 UDP는 송신 측에 재전송을 요청하는 것이 아니라 데이터를 그냥 폐기해버립니다. 왜냐하면 데이터를 빨리 받는 것이 목적인 프로토콜이기 때문에 시간이 오래걸리는 재전송은 요청하지 않습니다.

 

전송계층은 세션 계층에서 데이터를 받아 일정 크기로 분할하여 전송합니다. 그래서 TCP 프로토콜에서는 헤더에 세그먼트의 순서를 저장하는 공간이 있습니다. 하지만 UDP의 헤더에는 순서를 저장하는 부분이 없으며 따라서 재조립은 하되 순서가 보장되지는 않습니다. 그래서 앞서 언급했던 것처럼 정말 실시간 영상처럼 빠른 전송이 핵심일 때 사용됩니다.

 


지금까지 전송계층과 UDP에 대해 알아봤습니다.

다음 시간에는 전송계층의 또 다른 프로토콜인 TCP에 대해 알아보겠습니다!