[네트워크] 트랜스포트 계층(2)

Chris Kim·2024년 11월 13일

네트워크

목록 보기
3/5

5. 연결지향형 트랜스포트: TCP

5.1 TCP 연결

TCP는 애플리케이션 프로세스가 데이터를 다른 프로세스에게 보내기 전에, 두 프로세스가 서로 핸드셰이크를 먼저 햐여 하므로 연결지향형(oconnection-oriented) 이다.
TCP 연결은 회선 교환 네트워크에서와 같은 종단 간의 TDM(Time Division Multiplexing) 이나, FDM(Frequency Division Multiplexing)이 아니다.
TCP는 전이중 서비스(full-duplex service) 를 제공한다. 또한 TCP연결은 항상 단일 송신자와 단일 수신자 사이의 점대점(point-to-point) 이다. TCP에서 두 호스트 간 3개의 세그먼트가 보내지기 때문에 세 방향 핸드셰이크라고 부르기도 한다.

MSS: 최대 세그먼트 크기(maximum segment size)
TCP 세그먼트: TCP 헤드와 클라이언트 데이터를 하나로 짝지어 구성함

5.2 TCP 세그먼트 구조

TCP 헤더는 일반적으로 20바이트다.(UDP보다 12바이트 크다). 헤더는 다음과 같은 항목으로 구성된다.

  • 출발지와 목적지 포트번호
  • 체크섬 필드
  • 32비트 순서 번호 필드/ 32비트 확인응답 번호 필드
  • 16비트 수신 윈도(receive window) 필드: 흐름제어에 사용된다.
  • 4비트 헤더 길이 필드
  • 선택적이고 가변적인 길이의 옵션필드
  • 6비트의 플래그 필드(ACK, RST, SYN, FIN, PSH, URG 등)

순서 번호와 확인응답 번호

호스트 B가 호스트 A에게 데이터를 전송할 때, 호스트 A가 자신의 세그먼트에 삽입하는 확인응답 번호는 호스트 A가 호스트 B로부터 기대하는 다음 바이트의 순서다.

5.3 왕복 시간(RTT) 예측과 타임아웃

불필요한 재전송을 막기 위해 타임아웃 설정을 위한 RTT 예측은 매우 중요하다. 이를 위한 대표적인 예측치 계산 방법은, 직전 RTT 예측값과 직전 RTT 실제값을 가중 평균하여 구한다. 이때 가중치는 임의로 설정한다. 이를 지수적 가중 이동 평균(exponential weighted moving average, EWMA) 라고 부른다. 이를 활용하여 DevRTT도 계산하고(직전 DevRTT와 RTT 예측 오차의 EWMA), TimeoutInterval = EstimatedRTT+4*DevRTT로 계산한다.

5.5 흐름 제어

TCP는 송신자가 수신자의 버펄을 오버플로시키는 것을 방지하기 위해 애플리케이션에게 흐름 제어 서비스(flow-control service) 를 제공한다. 이는 혼잡 제어(congestion control) 로 알려져 있다. TCP는 송신자가 수신 윈도라는 변수를 유지하여 흐름 제어를 제공한다. 수신 윈도는 수신 측에서 가용한 버퍼 공간이 얼마나 되는지를 송신자에게 알려주는데 사용된다.

5.6 TCP 연결 관리

1단계: 먼저 클라이언트 측 TCP 는 서버 TCP에게 특별한 TCP 세그먼트를 송신한다.
2단계: TCP SYN 세그먼트르 포함하는 IP 데이터그램이 서버 호스트에 도착하면, 서버는 TCP SYN 세그먼트를 추출한다. 그리고 클라이언트 TCP로 연결 승인 세그먼트를 송신한다.
3단계: 연결 승인 세그먼트를 수신하면, 클라이언트는 연결에 버퍼와 변수를 할당한다. 그 다음에 클라이언트 호스트는 서버로 또 다른 세그먼트를 송신한다.

nmap으로 포트 6789를 목적지 포트로 하는 TCP SYN 세그먼트를 보내면 가능한 세 가지 결과가 있다.

  • TCP SYNACK 세그먼트를 수신한다. 이것은 애플리케이션이 목표 호스트상에서 TCP 포트 6789를 가지고 실행됨을 의미한다.
  • TCP RST 세그먼트를 받는경우, 목표 호스트의 TCP 포트 6789를 가진 애플리케이션을 실행하지 않는 것을 의미한다. 다만 어떤 방화벽에도 차단되지 않음을 알 수 있다.
  • 출발지가 아무것도 받지 않는 경우, 방화벽에 의해 차단되어 목표 호스트에 전혀 도달하지 않음을 의미하기 쉽다.

6. 혼잡 제어의 원리

6.1 혼잡의 원인과 비용

혼잡의 원인과 비용에 관한 몇 가지 사실은 다음과 같다.

  • 패킷 도착률이 링크 용량에 근접함에 따라 큐잉 지연이 커진다.
  • 송신자는 버퍼 오버플로 때문에 버려진 패킷을 보상하기 위해 재전송을 수행해야한다.
  • 커다란 지연으로 인한 송신자의 불필요한 재전송은 라우터가 패킷의 불필요한 복사본들을 전송하는 데 링크 대역폭을 사용하는 원인이 된다.
  • 패킷이 경로상에서 버려질 때, 버려지는 지점까지 패킷을 전송하는 데 사용된 상위 라우터에서 사용된 전송 용량은 낭비된 것이다.

6.2 혼잡 제어에 대한 접근법

혼잡 제어에 대한 접근 법은 크게 다음과 같이 구분할 수 있다.

  • 종단 간의 혼잡 제어: 혼잡 제어에 대한 종단 간의 접근방식에서 네트워크 계층은 혼잡 제어 목적을 위해 트랜스포트 계층에게 어떤 직접적인 지원도 제공하지 않는다.
  • 네트워크 지원 혼잡 제어: 여기에서, 라우터들은 네트워크 안에서 혼잡 상태와 관련하여 송신자나 수신자 또는 모두에게 직접적인 피드백을 제공한다.

7. TCP 혼잡 제어

7.1 전통적인 TCP 혼잡 제어

  • 혼잡 윈도(cwnd): TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 속도에 제약을 가한다.
  • 송신자의 속도는 대략 cwnd/RTT바이트/초다. cwnd의 값을 조절하여, 송신자는 링크에 데이터를 전송하는 속도를 조절할 수 있다.

혼잡 제어를 위한 TCP는 다음과 같은 처리 원칙을 갖는다.

  • 손실된 세그먼트는 혼잡을 의미하며, 이에 따라 TCP 전송률은 한 세그먼트를 손실했을 때 줄여야 한다.
  • 확인응답된 세그먼트는 네트워크가 송신자의 세그먼트를 수신자에게 전송된다는 것이고, 이에 따라 이전에 확인응답되지 않은 세그먼트에 대해 ACK가 도착하면 송신자의 전송률은 증가할 수 있다.
  • 대역폭 탐색

이에 따른 TCP 혼잡 제어 알고리즘은 아래에 제시되어 있다.

  • 슬로 스타트
  • 혼잡 회피
  • 빠른 회복 <= TCP 리노 채택

7.2 네트워크 지원 명시적 혼잡 알림과 지연 기반 혼잡 제어

명시적 혼잡 알림(Explicit Congestion Notification)

ECN 비트의 한 설정은 라우터가 정체를 겪고 있음을 나타내기 위해 라우터에서 사용된다. 그런 다음 이 혼잡 표시는 표시된 IP 데이터그램에서 목적지 호스트로 전달된 후, 송신 호스트에게 알려진다.

지연 기반 혼잡 제어

TCP 베가스에서는 모든 확인응답된 패킷에 대한 출발지에서 목적지까지의 경로의 RTT를 측정하고 이를 이용해 패킷 손실 이전에 더 일찍 전송 속도를 줄인다. 즉 혼잡 시작을 사전에 감지한다.
TCP 베가스는 TCP 송신자가 파이프를 가득 채우되 그 이상으로 채우지 않도록 해야한다는 직관적인 원칙하에 동작한다.

7.3 공평성

8. 트랜스포트 계층 기능의 발전

QUIC

애플리케이션 설계자가 애플리케이션 계층에 항상 '자신의 프로토콜을 확장'할 수 있으며, 이는 QUIC에서 취한 접근방식이다. QUIC의 주요 기능은 다음과 같다.

  • 연결지향적이고 안전함
  • 애플리케이션 레벨의 스트림들을 다중화 할 수 있음.
  • 신뢰적이고 TCP 친화적인 혼잡 제어 데이터 전송

다시한번 말하지만 QUIC는 두 종단 사이에 신뢰적이고 혼잡 제어된 데이터 전송을 제공하는 애플리케이션 계층 프로토콜이라는 점을 다시 강조한다.

profile
회계+IT=???

0개의 댓글