네트워크

[TCP/IP가 보이는 그림책] 4. 트랜스포트 계층

Stitchhhh 2025. 4. 14. 21:55

트랜스포트 계층의 역할

트랜스포트 계층의 역할과 주요 프로토콜을 소개합니다.

트랜스포트 계층의 위치

트랜스포트 계층은 애플리케이션 계층과 네트워크 계층의 중개 역할을 합니다.

상대에게 전달한다

데이터가 항상 확실히 전달된다고는 할 수 없으므로 문제가 발생한 경우에는 뭔가 대처 방안이 필요합니다. 이 때 통신 서비스에 맞는 방법으로 그것을 처리하는 것이 트랜스포트 계층의 역할입니다.

신뢰성이냐 속도냐?

트랜스포트 계층에는 TCP와 UDP라는 두 개의 프로토콜이 있습니다. TCP는 신뢰성을, UDP는 속도를 중시한 프로토콜입니다.

 

애플리케이션의 현관

목적하는 애플리케이션 프로토콜에 데이터를 확실히 넘겨줄 수 있도록 각각 개별 현관문을 준비하고 있습니다.

애플리케이션 계층의 출입구

애플리케이션 계층에는 애플리케이션 프로토콜마다 데이터의 출입구가 마련되어있습니다. 이 출입구를 포트라고 하며, 각 포트에는 포트 번호가 붙어 있습니다. 통신을 수행할 때는 포트 번호를 사용하여 보낼 곳을 지정합니다.

포트 번호

포트 번호는 0~655355번까지 있습니다. 그 중에서 0~1023번까지는 통신 서비스마다 미리 예약되어 있으며, 웰노운 포트 번호라고 합니다. 이 책에서 소개하고 있는 주요 서비스의 잘 알려진 포트 번호는 다음과 같습니다.

서비스 애플리케이션 계층 프로토콜 포트 번호 트랜스포트 계층 프로토콜
WWW HTTP 80 TCP/UPD
WWW(보안 추가) HTTP3 443 TCP/UPD
전자메일(송신) SMTP 25 TCP/UPD
전자메일(수신) POP3 110 TCP/UPD
전자메일(인증된 송신) SMTP 587 UPD
파일 전송 FTP 20, 21 TCP/UPD
원격 로그인 TELNET 23 TCP/UPD
원격 로그인(보안) SSH 22 TCP/UPD
넷뉴스 NNTP 119 TCP/UPD
네트워크 관리 DNS DNS 53 TCP/UPD
네트워크 관리 DHCP DHCP 546, 547 UPD
네트워크 관리 SNMP SNMP 161, 162 UPD

 

TCP 프로토콜

TCP는 데이터 전달의 신뢰성을 중시한 프로토콜입니다.

일대일 통신

TCP는 데이터를 확실히 전달하기 위해 수신측과 일대일로 통신합니다. 이런 통신을 커넥션형 통신이라고 하며, 대강 당므과 같은 3단계로 이루어져있습니다.

  1. 수신측이 데이터를 받을 수 있는 상태인지를 확인한 후 통신을 개시합니다. 이것을 '통신을 연결한다'라고 합니다.
  2. 데이터를 정해진 크기(세그먼트)로 분할하고, TCP 헤더를 붙여서 순서대로 송신합니다
  3. 데이터를 다 보냈으면 통신을 종료합니다.

애플리케이션 계층에 전달

수신측은 전해 받은 데이터를 원래의 형태로 다시 맞춘 후 애플리케이션 계층에 전달합니다.

  1. TCP 헤더의 정보를 보고 데이터를 순서대로 맞춥니다.
  2. TCP 헤더를 가지고 데이터를 다시 맞춥니다.
  3. 애플리케이션 계층의 프로토콜에 전달합니다.

 

확실히 전달하기 위해(1)

TCP에서는 확실한 주고받기를 위해 통신 상태에 대해 연락을 취합니다.

연락 방법

통신 상대에게 통신 상태를 전하는 수단으로 사용되는 TCP 헤더에 있는 6비트의 컨트롤 플래그입니다. 상대에게 전하고 싶은 항목은 '1'로 만듭니다.(그 외에는 0으로 만듭니다.)

  • URG : 1이면 세그먼트가 긴급한 데이터를 갖고 있다.
  • ACK : 1이면 통신 확인에 대해 알았다고 응답한 것이다.(확인 응답)
  • PSH : 1이면 세그먼트를 바로 애플리케이션 계층에 전달한다.
  • RST : 1이면 통신을 강제적으로 해제한다.
  • SYN : 1이면 통신 개시를 요청한다.
  • FIN : 1이면 통신 종료를 요청한다.

통신 세계에서는 일반적으로 상대와 서로 확인해가면서 주고받는 것을 핸드셰이크라고 합니다. TCP에서는 통신을 개시할 때 다음과 같이 주고받는 데, 이 것을 3-way 핸드셰이크라고 합니다.

 

데이터 양의 확인

실제로 통신을 시작하기 전에 양쪽 모두 다룰 수 있는 데이터 양을 확인합니다. 수치가 작은 쪽으로 맞춰집니다.

세그먼트 사이즈 : 하나의 데이터 양

윈도우 사이즈 : 한 번에 받을 수 있는 양

 

확실히 전달하기 위해(2)

데이터가 무사히 전달되었는지 서로 하나씩 확인하는 것도 TCP의 특징입니다.

주고받기의 흐름

TCP 헤더에는 데이터의 순서를 나타내는 번호(시퀀스 번호)가 적혀 있습니다. 헤더를 확실히 받기 위해서 이 번호를 사용하여 다음과 같은 주고받기를 수행합니다.

  1. 송신측 - TCP 헤더에 시퀀스 번호를 쓰고, 세그먼트를 보냅니다.
  2. 수신측 - 시퀀스 번호를 보고 순서대로 전달되고 있는지를 확인하고 전달된 세그먼트의 다음 번호를 송신측에게 알려줍니다.
  3. 송신측 - 무사히 전달되었다는 것을 확인하고, 다음 세그먼트를 보냅니다.
  4. 수신측 - 다음 세그먼트를 받고, 시퀀스 번호를 보고 순서대로 나열합니다.

모아서 보내기

세그먼트는 하나씩 보내는 것보다 몇 개씩 모아서 보내는 것이 효율적입니다. 통신을 시작할 때 정한 윈도우 사이즈까지라면 확인 응답을 기다리지 않고 모아서 보낼 수 있습니다.

윈도우 사이즈는 통신 도중에 변경할 수 있습니다. 그래서 네트워크가 비어있을 때는 크게 하고, 혼잡할 때는 작게 하는 등 상황에 맞게 조절할 수 있습니다.

문제 발생 시의 처리

TCP에는 '송수신 중에 문제가 발생하면 세그먼트를 재전송한다'라는 약속이 있습니다.

확인 응답이 없을 때 재전송한다

일정 시간을 기다려도 확인 응답이 없을 때는 이유를 불문하고 송신측은 세그먼트를 재전송합니다.

  • 세그먼트의 지연 및 분실 : 송신 도중에 세그먼트가 행방불명이 되는 경우가 있습니다. 세그먼트가 전달되지 않으면 수신측은 확인 응답을 보낼 수 없습니다.
  • 확인 응답의 지연 및 분실 : 확인 응답 자체가 네트워크 상에서 행방불명되는 경우도 생각할 수 있습니다.
  • 데이터의 파손 : 송신 도중에 데이터가 깨지는 경우, 수신측에서는 그 데이터를 파기하고 확인 응답은 보내지 않습니다. 깨졌는지 아닌지는 헤더에 있는 체크섬이라는 값을 사용하여 판단합니다.

재전송 횟수는 무제한?

일정 횟수 이상을 재전송해도 확인 응답이 돌아오지 않는 경우에는 송신측이 강제적으로 통신을 해제합니다. 통신을 해제할 때는 TCP 헤더의 컨트롤 플래그 'RST'를 1로 만듭니다.

수신측의 처리

수신측에서의 처리와 TCP 헤더의 내용을 소개합니다.

애플리케이션 계층에 전달

수신측에서는 TCP 헤더에 적힌 포트 번호를 보고 지정된 애플리케이션 프로토콜에 데이터를 전달합니다. 데이터가 하나의 세그먼트로 묶여있을 때는 헤더를 제거하고 전달하기만 하면 되지만, 두 개 이상으로 분할되어 있는 경우는 세그먼트를 조립한 후 전달합니다.

UDP 프로토콜

안전 제일인 TCP에 비해 통신 속도를 중시한 프로토콜이 UDP입니다.

의논하지 않는다

UDP에서는 사전 의논을 하지 않고 일방적으로 데이터를 보냅니다. 이런 통신을 비커넥션형 통신이라고 합니다.

동시에 보내기

UDP에서는 여러 상대에게 동시에 데이터를 보낼 수 있습니다. 복수의 특정인에게 보내는 것을 멀티캐스트, 불특정 다수에게 보내는 것을 브로드캐스트라고 합니다.

UDP가 하는 일

UDP가 하는 일을 다음 두 가지 뿐입니다. 그밖의 장치가 필요한 경우는 애플리케이션 계층의 프로토콜에서 처리합니다.

  • 데이터가 깨지지 않았는지 확인하고, 깨졌다면 파기한다.
  • UDP 헤더를 제거하고 지정된 애플리케이션 프로토콜에게 전달한다.

UDP는 데이터의 확실성보다도 실시간성이 중요시되는 통신이나 데이터가 작은 네트워크 관리의 통신 등에서 사용됩니다.