Network

Network - TCP 프로토콜의 구조와 특징(에러제어, 흐름제어, 혼잡제어)

j9m 2022. 10. 3. 13:26
반응형

전송 계층

  • 전송 계층은 송신자와 수신자 간에 논리적 연결을 수행하는 것으로 TCP 프로토콜과 UDP 프로토콜이 존재한다. TCP 프로토콜을 사용하는 경우 연결 지향 방식을 사용하고 UDP는 비연결성 방식을 사용한다
  • 수신 측에 전달되는 데이터에 오류가 없고 데이터의 순서가 그대로 보존되도록 보장하는 연결 지향 서비스의 역할을 하는 종단 간(End-to-End) 서비스 계층이다.
  • 전송 계층의 프로토콜은 신뢰성 있는 전송을 하는 TCP와 비신뢰성 전송을 하는 UDP 프로토콜이 존재한다.

 

TCP

  • 네트워크 계층의 상위에서 수행되는 전송 계층의 프로토콜로, 클라이언트와 서버 간의 연결 지향, 신뢰성 있는 데이터 전송, 에러 제어, 흐름 제어 등의 기능을 수행하는 프로토콜이다.
  • TCP 프로토콜은 연결 지향으로 메시지를 송수신하기 전에 먼저 연결을 확인하고 연결이 확립되면 메시지를 송수신하는 방식으로 기동된다.

 

TCP의 구조

▶ Segment

  • 애플리케이션 계층의 메시지에 TCP 혹은 UDP의 Header를 붙인 것을 Segment라고 한다.

 

항목 내용
근원지 포트 송신측 포트이다.(end point of sender)
목적지 포트 수신측 포트이다.(end point of receiver)
일련번호 송신자가 전송하는 데이터의 일련번호
전송확인 수신자가 응답하는 받은 데이터의 수
TCP 헤더 길이
  • TCP헤더에 몇 개의 32 bit 워드가 포함되어 있는가를 나타내는 필드
  • 옵션 필드가 가변 길이를 갖기 때문에 필요, 이 값을 이용하여 실제 데이터의 시작점을 계산
URG 긴급 지점이 사용될 때 1로 설정
ACK 전송확인을 필요로 할 때 설정
EOM 마지막 메시지임을 가리킴
재설정 연결의 재설정
동기화 연결 설정 요구
FIN 연결 해제에 사용되며, 송신측에서 더 이상 전송할 데이터가 없음을 의미
윈도우 크기 수신측에서 수신할 수 있는 최대 byte 수
체크썸 전송 데이터에 대한 완벽한 신뢰성을 위한 것으로, 모든 데이터의 합에 대한 '1'의 보수로 계산
급송 지점 다음에 이어지는 데이터가 급송되어야 함을 의미하며, 인터럽트 메시지 대신 사용
옵션 전송 셋업 과정의 버퍼 크기에 대한 통신 등 기타 목적에 활용

 

TCP 상태전이

  • TCP 상태 전이는 TCP 프로토콜에서 가장 중요한 요소로 TCP의 최초 연결 신청부터 연결/종료까지의 상태변화를 의미한다. TCP의 상태정보를 확인할 수 있는 가장 손쉬운 방법은 리눅스 혹은 윈도우에서 netstat 명령을 실행하는 것이다.
  • 클라이언트는 먼저 서버에 연결 요청 메시지인 SYN 신호를 보내고 SYN_SENT 상태가 된다.
  • 서버는 처음 기동되면 클라이언트의 연결을 받기 위해서 LISTEN 상태로 클라이언트의 연결을 대기한다.
  • 그리고 클라이언트로부터 SYN 메시지가 수신되면 서버는 클라이언트에게 SYN, ACK를 전송하고 SYN_RECEIVED 상태로 바뀐다.
  • 그리고 클라이언트 ACK를 서버에 전송하고 클라이언트와 서버는 ESTABLISHED 상태인 연결 확립 상태가 된다.

 

TPC의 특징

 신뢰성 있는 전송

  • 수신자는 데이터를 송신받고 ACK Number를 송신자에게 전송한다. 송신자는 ACK Number가 수신되지 않으면 재전송을 실행하여 신뢰성 있는 데이터 송수신을 수행한다.
  • 3-handshaking 기법과 재전송 방식으로 신뢰성을 보장한다.

 

 순서 제어

  • 송신자는 메시지 순서를 맞추기 위해서 메시지 전송 시 Sequence Number를 같이 보낸다. 그러면 수신자는 메시지의 순서가 맞지 않게 도착해도 Sequence Number를 통해서 정렬을 수행할 수 있다.

 

전이중(Full Duplex)

  • 전화기처럼 송신자는 송신, 수신자는 수신을 동시에 할 수 있다.

 

3-Way Handshaking 기법

  • TCP는 클라이언트와 서버 간에 연결을 수행할 때 Client가 SYN 신호를 보내고 서버는 SYN에 대한 SYN/ACK로 응답한다. 클라이언트는 SYN/ACK를 수신받은 후 ACK를 서버에 전송하여 연결을 확립한다.
  • 먼저 클라이언트는 LISTEN상태에서 연결 요청 메시지인  SYNSENT를 서버에 보내고 서버는 LISTEN상태에서 요청을 받으면 SYN_RECEIVED상태가 되고 연결이 완료되면 ESTABLISHED상태가 된다.
  • 연결이 완료되면 이제 클라이언트는 서버에게 데이터를 요청할 수 있다. 데이터 요청도 마찬가지로 서버에게 ACK를 보내 데이터를 요청하면 서버는 SYN/ACK를 보내 응답한다. 이에 클라이언트는 SYN/ACK를 받은 후 ACK를 서버에 전송하여 데이터를 전송이 완료된 걸 확인시켜 준다.  

에러 제어(Error Control)

  • 네트워크를 사용해서 데이터를 송신하다 보면 정말 다양한 에러가 발생한다.
  • 에러는 크게 ACK 손실, Timeout이 있다.
  • TCP는 FEC, BEC, duplicate ACK 등의 기법으로 에러를 제어한다.
  • FEC 기법 중에서 가장 간단한 방법은 1의 개수가 짝수 개인지 홀수 개인지를 확인해서 에러 여부를 확인하는 패리티 검사이다. 또한 특정 블록 합계 검사도 있고, 에러 발생 시 수정까지 할 수 있는 해밍코드 방법도 있다. 하지만 실제 많이 사용되는 방법은 CRC 기법이다. CRC는 Checksum 비트를 전송하여 Checksum비트로 수신자가 연산하여 에러 여부를 확인한다.

▶ 에러 제어 기법

기법 내용
FEC
(Forward Error Correction)
  • 송신측이 특정한 정보비트를 함께 전송하여 수신측에서 이 정보 비트로 에러 발생 시 수정하는 방식(수신측이 에러 처리)
  • 데이터 전송 과정에서 발생한 오류를 검출하여 오류를 재전송 요구 없이 수정한다.
  • 재전송 요구가 없어 역 채널이 필요 없고, 연속적인 데이터 전송 가능
  • 오류 검출 및 수정을 위한 잉여 비트들이 추가 전송되므로 전송 효율 감소
  • 해밍 코드와 상승 코드 방식이 있음
BEC
(Backward Error Correction)
  • 수신측이 에러 검출 후 송신측에게 에러가 발생한 데이터 블록을 다시 전송 요청하는 방식(송신측이 에러 처리, ARQ)
  • 패리티 검사, CRC 등 Checksum을 이용하여 오류 검출 후, 오류 제어는 ARQ가 처리
  • Stop-and-wait, Go-back-N, Selective Repeat ARQ, Adaptive ARQ가 있음

 

▶ BEC 기법의 특징

기법 Stop-and-Wait Go-Back-N Selective Repeat
재전송 요청 방법 에러발생 즉시 재전송 오류 발생 또는 잃어버린 프레임 이후의 모든 프레임을 재요청하거나 타임아웃으로 자동 재송신됨 오류 발생 또는 잃어버린 프레임에 대해서만 재요청 또는 타임아웃으로 인한 자동 재송신
수신 방법 순차적으로 수신 프레임의 송신 순서와 수신 순서가 동일해야 수신 순서와 상관없이 윈도우 크기만큼의 범위 내에서 자유롭게 수신
장단점
  • 가장 단순한 구현
  • 신뢰성 있는 전송
  • 대기시간 존재로전송 효율 저하
  • 간단한 구현
  • 적은 수신측 버퍼 사용량
  • 구현이 복잡
  • 버퍼 사용량이 많음
  • 보다 적은 재전송
  • 대역폭

 

흐름 제어(Flow Control)

  • 송수신 측 사이의 전송 패킷의 양, 속도를 조절하여 네트워크를 효율적으로 사용한다.
  • 송수신 측 사이의 처리 속도, 버퍼 크기 차이에 의해 생길 수 있는 수신 측 오버플로를 방지한다.

 

슬라이딩 윈도우(Sliding Windows)

  • TCP 호스트 간의 효율적인 데이터 전송을 위해서 호스트 간에 송수신 혹은 수신할 수 있는 Size 정보를 제공한다. (송신 측의 윈도우와 수신 측의 윈도우 제공)
  • Stop-and-Wait의 단점을 보완한 방식으로 수신측의 확인 신호를 받지 않더라도 미리 정해진 프레임의 수만큼 연속적으로 전송한다.

슬라이딩 윈도우 사용의 장점

  • 송신자와 수신자 간의 네트워크 전송효율을 극대화하기 위해서 수신자의 버퍼 크기를 확인하고 최대한 전송 효율을 극대화한다.
  • 수신자의 ACK의 경우 매번 ACK를 받을 수 있지만, ACK 신호도 묶어서 처리하면, 불필요한 네트워크 부하를 최소화할 수 있다.

 

혼잡 제어

  • 혼잡 제어는 송신 단말의 전송률을 직접 제어하여 혼잡으로 인해 손실된 데이터를 재전송하기 위함이다.
  • TCP Slow Start는 혼잡 제어를 하는 방법 중 하나로 tcp가 시작될 때 전송속도를 초기 값부터 지속적으로 올리는 방법이다.

Slow Start

  • 처음 TCP 연결이 시작할 때, Congestion window의 값은 1 MSS(Maximum Segment Size)로 초기화된다.
  • cwnd는 한 번에 전송할 수 있는 데이터의 양이라도 생각하면 된다.
  • slow start는 cwnd를 전송마다 지수적으로(일반적으로 2배씩) 증가시켜 전송률을 높여준다.
  • 그러나 계속해서 증가하는 것이 아니다. 크게 두 가지 이유로 전송률을 감소시킨다.
  • 첫 번째, timeout이 발생하면 cwnd를 1로 초기화하고 임곗값(ssthresh)는 cwnd/2로 설정하고 다시 slow start과정을 반복한다.
  • 두 번째, cwnd가 임곗값(ssthresh)에 도달하면 congestion avoidance mode로 전환한다.

 

Congestion Avoidance

  • congestion avoidance mode에서는 전송률을 선형(1씩)으로 증가시킨다.
  • TCP Tahoe의 그래프를 보면 cwnd는 1에서 시작해서 지수적으로 증가하다가 ssthresh부터는 1씩만 증가하는 것을 알 수 있다.
  • 1씩 증가하다가 timeout이 발생해서 cwnd는 1, ssthresh 이전 최대 cwnd(12)의 절반이 6으로 설정되었다.
  • 그리고 다시 slow start mode를 진행하였다.

 

Fast retransmit

  • Retransmit threshold는 연속된 Duplicate ACK를 수신하는 경우 TCP는 해당 Segment를 다시 전송한다.

 

Fast recovery

  • Fast retransmit 한 이후 새로 slow star를 통해서 설정된 연결의 안정상태에 도달할 필요 없이 congestion avoidance 상태에서 전송할 수 있도록 하는 것이다.
반응형

'Network' 카테고리의 다른 글

Network - HTTP 상태코드 정리(Status Code)  (0) 2022.10.05
Network - VPN(Virtual Private Network)의 개념  (0) 2022.10.04