트랜스포트 계층 2

BinaryHyeok·2023년 10월 26일
2

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

  • point-to-point

    • 단일 송신 동작으로 한 송신자가 여러 수신자에게 데이터를 전송하는 멀티캐스팅은 불가능
  • reliable, in-order byte stream

    • 유실되지 않고, 에러없이 송수신된다.
    • 보낸 순서대로 도착한다.
  • full duplex data

    • 전이중 서비스 제공
    • A 와 B에게 TCP 연결이 있을 때 A -> B, B -> A 가능
  • connection-oriented

    • 데이터 전송을 위하여 두 프로세스는 핸드셰이크를 해야 한다.

TCP 세그먼트 구조

  • 출발지와 목적지 포트 번호(source and destination port number) : multiplexing, demultiplexing에 사용
  • 순서 번호(sequence number) : 송신측의 sequence number
  • 확인응답 번호(acknowledgement number) : 수신측의 sequence number
  • 수신 윈도(receive window) : flow control에 사용, 수신자가 받아들이려는 바이트의 크기를 나타냄
  • 헤더 길이(header length) : 32비트 워드 단위로 TCP 헤더의 길이를 나타냄
  • 인터넷 체크섬(checksum) : 에러 판별

순서 번호와 확인응답 번호

TCP는 데이터를 구조화되어 있지 않고 단지 순서대로 정렬되어 있는 바이트 스트림으로 본다. 세그먼트에 대한 순서 번호는 세그먼트에 있는 첫 번째 바이트의 바이트 스트림 번호이다.
Ex) 100Byte data에서 첫번째 세그먼트가 0~4Byte -> 순서 번호 = 0, 두번째 세그먼트 번호가 5~10Byte -> 순서 번호 = 5

TCP는 호스트 A가 호스트 B로 데이터를 송신하는 동안에 호스트 B로부터 데이터를 수신하게 해주는 전이중 방식이다. 호스트 B로부터 도착한 각 세그먼트는 B로부터 A로 들어온 데이터에 대한 순서 번호를 가진다. 이때 이 세그먼트에 호스트 A가 삽입하는 확인응답 번호는 호스트 A가 호스트 B로부터 다음에 받을 바이트의 순서 번호이다. 즉, A가 보낸 세그먼트의 확인응답 번호가 10이라면 A는 B가 보낸 순서 번호의 9번까지는 정상적으로 수신했다는 뜻이다.

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

TCP에서 타임아웃은 세그먼트가 전송된 시간부터 긍정 확인응답될 때까지의 시간인 연결의 왕복 시간(round-trip time, RTT)보다 좀 더 커야된다. 그렇지 않다면 불필요한 재전송이 발생한다.

TCP가 송신자와 수신자 사이의 왕복 시간을 예측하는 것은 SampleRTT를 통하여 이루어진다. SampleRTT는 세그먼트가 송신된 시간으로부터 그 세그먼트의 긍정응답이 도착한 시간까지의 시간 길이이다.
SampleRTT는 라우터의 혼잡, 종단 시스템의 부하 변화 등의 이유로 세그먼트마다 달라지며, 이러한 변동성 때문에 SampleRTT는 불규칙적이다. 따라서 대체로 RTT를 추정하기 위하여 SampleRTT값의 평균값을 채택한다.

신뢰적인 데이터 전송

TCP 프로토콜은 단일 재전송 타이머를 사용하며 타이머는 send buffer에 가장 앞에 위치하고 있으며, timeout이 발생하면 타이머가 위치한 버퍼의 세그먼트를 재전송한다.
또한 타이머가 sequence number 100을 가리키고 있을 때, ACK가 120이 온다면 수신측에서는 119번까지는 정상적으로 받은 것이므로 버퍼에서 119번까지 제거하고 120번부터 내보내며, 타이머를 다시 설정한다.

빠른 재전송

타임아웃이 유발하는 재전송의 한 가지 문제는 타임아웃의 주기가 길다는 것이다. 세그먼트를 유실했을 때, 긴 타임아웃 주기는 잃어버린 패킷을 다시 보내기 전에 송신자를 오랫동안 기다리게 해서 종단 간 지연을 증가시킨다.
타임 아웃이 발생하기 전에 패킷손실을 발견하는 방법은 중복ACK(duplicate ACK) 이다. 송신자는 많은 양의 세그먼트를 연속적으로 보낼 수 있으므로, 만약 하나의 세그먼트를 잃어버린다면 많은 연속적인 중복 ACK가 존재할 수 있다. 만약 TCP 송신자가 같은 데이터에 대해 3개의 중복 확인응답을 수신한다면, 타임 아웃이 발생하지 않더라도 그 번호에 해당하는 세그먼트를 재전송한다. 이때 처음 받은 ACK는 제외하고 3개의 중복 확인응답이므로, 총 4개의 ACK를 받는 것이다.

Reference

KOCW - 컴퓨터 네트워크
컴퓨터 네트워킹 하향식 접근

0개의 댓글