본문 바로가기
OS & Hardware & Network/Network

TCP 깊게 이해하기

by 코딩공장공장장 2023. 8. 15.

TCP (Transmission Control Protocol, 전송제어 프로토콜)

TCP란 컴퓨터와 다른 컴퓨터가 데이터를 전송하기 위한 규약입니다.

 

인터넷 통신에서 가장 많이 사용되는 프로토콜로 TCP/IP가 있습니다.

 

데이터 전송에는 TCP를 사용하고 목적지까지 도달하는 라우팅 과정은 IP를 사용한 통신 방식이 TCP/IP입니다.

 

 

TCP 전송 방식

TCP는 송신자와 수신자 간 데이터 전달을 위해 연결설정과 연결종료를 해야합니다.

 

 

연결설정(3-Way-Handshake)

 

TCP의 연결설정 방식을 3-way-handshake라고 합니다.

 

총 패킷을 3번 전달하며 syn, ack이라는 플래그 목적의 컨트롤 비트를 사용하여 연결을 설정합니다.

 

송신지에서 syn 비트를 1로 체크하여 수신지에 보내고 수신지에서는 수신 받았음을 알리기 위해 syn과 ack 비트를 1로 체크하여

송신지로 보냅니다. 

 

수신지에서 syn과 ack에 1로 체크된 패킷을 받았다면 수신지는 최종적으로 다시 ack 비트를 1로 체크하여 송신지에 보내고

 

연결이 설정됩니다. 

 

 

연결종료(4-Way-Handshake)

 

연결종료 방식은 4-Way-Handshake라고 불리며 이름에 알 수 있듯 패킷을 4번 전달하며 이때 사용되는 컨트롤 비트는 fin과 ack입니다.

 

송신지에서 fin을 1로 체크하고 송신지로,

 

수신지에서 fin이 1로 체크된 패킷을 받았다면 ack을 1로 체크하고 송신지로,  다시 fin을 1로 체크하고 송신지로,

 

송신지에서는 위의 두 패킷을 받았다면 ack을 1로 체크한 패킷을 수신지에 보냄으로써 연결을 종료합니다.

 

 

TCP 패킷의 생성과정과 구조

데이터 스트림으로 데이터를 받으면 이를 일정한 단위로 끊으며 TCP 패킷(정확한 표현은 세그먼트)을 만듭니다.

 

TCP 패킷은 TCP 헤더와 TCP 데이터로 구성되어있으며 TCP 헤더는 데이터 전송을 위해 필요한 정보를 가지고 있으며,

 

TCP 데이터는 데이터 스트림으로부터 일정한 단위로 잘린 데이터입니다. 

 

 Source port  송신지 포트
 Destination port  수신지 포트
 Sequence Number  분할된 데이터의 순서번호(데이터가 순차적으로 전송 됬는지 또는 수신지에서 재조립시 사용)
 Acknowledgment number  송신지로 부터 받아야하는 다음 Sequence Number
 Data Offset  TCP 헤더의 크기로 최소 20바이트이며 헤더 선택 값이 채워질 시 최대 60바이트
 컨트롤 비트(플래그)  플래그 목적으로 사용되는 컨트롤 비트
 window size  전송할 수 있는 최대 데이터 크기, 수신 측에서 결정함(수신 측 상황에 따라 받을 수 있는
 데이터의 크기가 달라질 수 있으므로)
 Checksum  - 에러 검출 값으로 송신지에서 체크섬 계산식을 통해 송신할 데이터의 체크섬 값을 기입하고
   수신지에서 전송 받은 데이터로 체크섬을 계산하여 비교하여 에러 검출
 - 에러 발생시 패킷 재전송 요구(ARQ : Automatic repeat request)
 Checksum  에러 확인 목적
 data  TCP 데이터로 실제 전송하려는 데이터

 

 

 

TCP의 데이터 전송 과정

위 그림은 연결설정과 연결종료 과정을 생략하고 데이터가 전송되는 과정만 나타낸 그림입니다. 

 

맨 위의 TCP 통신 방식 그림에서는 data가 통째로 하나가 전송되고 응답으로 ack 패킷을 보내는 것처럼 나타냈지만 

 

실제로는 위와 같이 data가 여러 패킷으로 잘려 나뉘어 전송됩니다.

 

처음 1개의 패킷을 전송하고 그 다음은 2개, 4개와 같이 제곱해서 패킷을 늘려나가며 최대로 전송할 수 있는 패킷의 개수를 찾아나갑니다.

 

네트워크의 대역폭(BandWidth)이 있기 때문에 패킷이 유실되면 최대값을 넘었다고 판단하는 것입니다.

 

적은 갯수로 시작하여 늘려나가기 때문에 속도가 느린 단점이 있으며 이를 'TCP의 느린 시작' 이라고도 부릅니다.

 

 

 

TCP 에러제어

 

TCP 전송과정에서 에러가 날 수 있습니다. 

 

위의 설명에서 처럼 최대 전송 가능한 패킷의 갯수를 찾는 과정에서 패킷이 유실될 수 있죠.

 

에러를 찾기 위해 체크섬을 활용할 수 있고, 타임아웃, 시퀀스넘버(누락된 패킷 또는 중복된 패킷) 등을 활용할 수 있습니다.

 

에러를 찾았다면 수정하기 위해 송신지에 패킷 재전송을 요구하는데 이를 ARQ(Automatic repeat request)라고 부릅니다.

 

ARQ에는 아래와 같은 방식이 있습니다.

  • Stop-and-Wait
  • Go-Back-N
  • Selective Repeat

각각의 방식은 아래와 같이 이루어집니다.

 - 패킷 전송 후 ack을 받고 다음 패킷을
   전송 하는 방식

 - 하나의 패킷이 정상적으로 보내졌는지
    확인하고 에러 시 재전송

 - 비효율적이며 TCP에서 사용하지 않음

 - ack 응답에 상관없이 지속적으로
   패킷을 보내며 에러 발생시
   해당 패킷부터 다시 재전송

 - TCP에서 사용



 - 에러 발생 패킷에 대해서만 재전송을   
   요구해 재조립하는 방식

 - 타임아웃 이전에 도착한 패킷은 버퍼에
   저장하고 타임아웃 후 재전송 요구하여
   받은 패킷을 버퍼의 상위로 올려 조립

 - TCP에서 사용

 

 

 

TCP 특징

  • 높은 신뢰성, 느린 속도
    TCP는 데이터 전송시 수신측의 응답을 늘 확인하고 순서를 보장하므로 데이터 전송에 신뢰성이 높지만,
    수신측을 확인해야하므로 느린 속도를 갖습니다.
  • 연결형 서비스
     '3-way-handshake를 통한 연결설정 -> 데이터 전송 -> 4-way-handshake를 통한 연결종료'의 과정으로 
     송신측과 수신측이 연결되어있는 상태로 데이터를 전송합니다.
  • 전송순서 보장

 ++참고++

TCP 패킷을 보면 송수신측 포트번호는 있으나 어디로 도달할지 목적지 주소가 없습니다. 

TCP는 전송계층 프로토콜로 전송계층은 데이터 전송에 책임이 있습니다.

목적지와 경로를 선택하고 경로에 따라 목적지에 데이터를 전달하는 역할은 네트워크 계층에서 이루어지면

TCP는 주로 IP와 함께 사용되어 IP주소로 사용하여 목적지에 도달합니다.

 

출처 : 

https://www.youtube.com/watch?v=FxDRd71xfpw 

 

반응형

'OS & Hardware & Network > Network' 카테고리의 다른 글

HTTP통신 깊게 알아보기  (0) 2023.08.16