병훈's Blog

네트워크 뿌수기 - TCP는 신뢰성이 있는 통신 본문

Computer/Network

네트워크 뿌수기 - TCP는 신뢰성이 있는 통신

thdqudgns 2022. 12. 25. 02:49
TCP란?

 

TCP(Transmission Control Protocol)란 신뢰성이 있는 애플리케이션 간의

데이터 전송을 하기 위한 프로토콜입니다.

 

TCP를 이용하면

애플리케이션 프로토콜에는

신뢰성을 확보하기 위한

구조를 넣어둘 필요가 없습니다.

 


 

TCP에 의한 데이터 전송 절차

 

TCP에 의한 애플리케이션 간 데이터 전송은 다음과 같이 이루어집니다.

 

  • TCP 커넥션 맺기
  • 애플리케이션 간 데이터 송수신
  • TCP 커넥션 끊기

우선, 데이터를 송수신하는 애플리케이션 간의 통신이

정상적으로 이루어질 수 있는지 확인합니다.

이 확인 프로세스는 3-웨이 핸드쉐이크(커넥션 맺기)라고 불립니다.

 

    (3웨이 핸드쉐이크가 ping 이랑은 뭐가 다른 거지?)

    ** ping : 다른 호스트에 IP 데이터그램이 도착할 수 있는지 검사하는 것을 의미한다.

    핑(Ping)을 수행하는 프로그램은 ICMP echo request라는 메시지를 원격 호스트로 보낸 후 응답을 기다린다.

    ** 3-웨이 핸드셰이크 :  로컬 호스트/클라이언트와 서버 간의 연결생성하기 위해 TCP/IP 네트워크에서 사용되는 방법

 

다음으로 애플리케이션이 다루는 데이터를 TCP로 송신하기 위해서는

애플리케이션의 데이터애플리케이션 프로토콜 헤더(HTTP 헤더)TCP 헤더를 추가할 필요가 있습니다.

이를 TCP 세그먼트라고 표현하기도 합니다.

 

TCP 세그먼트의 구조

 

이때 애플리케이션의 데이터 크기가 크면 분할하여

복수의 TCP 세그먼트로서 전송합니다.

 

어떻게 분할했는지는 TCP 헤더에 기술되고,

목적지에서 차례대로 원본 데이터로 조립합니다.

 

또한, 데이터가 도착하면 받았다고 확인해 줍니다.

데이터 수신 확인ACK(acknowledge)라고 부릅니다.

만약, 일부 데이터가 제대로 도착하지 않았다면 데이터를 재전송합니다.

 

네트워크가 혼잡하면, 데이터 전송 속도를 제한합니다.

이런 데이터 전송 구조를 플로우 제어라고 합니다.

 

마지막으로 애플리케이션의 데이터 전송이 모두 끝나면

TCP 커넥션을 끊습니다.

 


 

TCP 헤더 형식

 

TCP로 전송하고 싶은 애플리케이션의 데이터에

TCP 헤더 추가해, TCP 세그먼트라고 합니다.

TCP 헤더의 형식은 정해져 있습니다.

 

(상) TCP 세그먼트 / (하) TCP 헤더

 

TCP 헤더에서 중요한 부분만 간단히 설명하겠습니다.

 

가장 중요한 것은 포트 주소(포트 번호)입니다.

포트 주소(포트 번호)로 적절한 애플리케이션 프로토콜에

데이터를 배분할 수 있기 때문입니다.

 

그리고, 신뢰성 있는 데이터 전송을 위해서 시퀀스 번호ACK 번호라는 것이 있습니다.

 

시퀀스 번호는 '시퀀스(순서)'라는 이름처럼 TCP로 전송하는 데이터 순서를 나타냅니다.

데이터가 분할되어 있을 때에는 시퀀스 번호로 어떻게 데이터를 분할했는지 알 수 있습니다.

 

ACK 번호데이터를 바르게 수신했음을 확인하기 위해 이용합니다.

 


 

데이터 분할 구조

 

TCP에는 데이터를 분할하는 기능도 있습니다.

TCP에서 애플리케이션의 데이터를 분할하는 단위

MSS(Maximum Segment Size)라고 부릅니다.

 

MSS를 넘는 크기의 데이터는 MSS 단위로 나누어 송신합니다.

MSS의 표준 크기는 1460byte 입니다.

 


 

웹에 접속할 때 웹서버 애플리케이션에서 웹사이트의 데이터를 송신하는 경우에

TCP로 분할하는 모습을 생각해 봅시다.

 

애플리케이션 프로토콜로 HTTP를 이용하므로

웹사이트의 데이터에는 HTTP 헤더가 추가됩니다.

이것이 TCP가 처리할 데이터입니다.

 

MSS로 나누고 각각에 TCP 헤더를 추가해 복수의 TCP 세그먼트로 만듭니다.

원래 데이터를 어떻게 분할했는지는 TCP 헤더 내 시퀀스 번호를 통해 알 수 있습니다.

 


 

Point

 

  • TCP로 애플리케이션 사이에서 신뢰성 있는 데이터 전송을 할 수 있다.
  • TCP에 의한 데이터 전송의 흐름은 다음과 같다.

    • TCP 커넥션 맺기
    • 애플리케이션 간 데이터 송수신
    • TCP 커넥션 끊기
  • 전송하고 싶은 애플리케이션의 데이터에 TCP 헤더를 추가해 TCP 세그먼트로서 전송한다.
  • 필요하면 TCP로 데이터를 분할한다.
  • TCP로 데이터를 분할하는 크기를 MSS라고 부른다.

 

 

 

 

728x90
728x90