본문 바로가기
OS & 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 데이터데이터 스트림으로부터 일정한 단위로 잘린 데이터입니다. 

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

 

TCP의 데이터 전송 과정


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

TCP를 통한 data 전달은 위와 같이 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 & Network > Network' 카테고리의 다른 글

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