본문 바로가기
Computer Science/Computer Networking

[Computer Networking] Transport Layer : TCP (1) (Transmission Control Protocol)

by __K.Jun__ 2024. 8. 4.

TCP (Transmission Control Protocol)

- TCP는 애플리케이션 프로세스가 데이터를 다른 프로세스에게 보내기 전에, 두 프로세스가 서로 '핸드셰이크'를 먼저 해야 하므로 연결지향형이다.

- TCP 연결은 전이중 서비스를 제공한다. 만약 호스트 A의 프로세스와 호스트 B의 프로세스 사이에 TCP 연결이 있다면, 애플리케이션 계층 데이터는 B에서 A로 흐르는 동시에 A에서 B로 흐를 수 있다.

- TCP 연결은 항상 단일 송신자와 단일 수신자 사이의 점대점이다. 단일 송신 동작으로 한 송신자가 여러 수신자에게 데이터를 전송하는 멀티캐스팅은 TCP에서 불가능하다.

 

TCP Segment Structure

- UDP 처럼 헤더는 상위 계층 애플리케이션으로부터 다중화와 역다중화를 하는 데 사용하는 출발지와 목적지 포트 번호를 포함한다.

- 또한 UDP처럼 헤더는 체크섬 필드를 포함한다.

- 32비트 순서 번호 필드와 32비트 확인응답 번호 필드는 신뢰적인 데이터 전송 서비스 구현에서 TCP 송신자와 수신자에 의해 사용된다.

- 16비트 수신 윈도우 필드는 흐름 제어에 사용된다. 이는 수신자가 받아들이려는 바이트의 크기를 나타내는 데 사용된다.

- 4비트 헤더 길이 필드는 32비트 워드 단위로 TCP 헤더의 길이를 나타낸다.

- 선택적이고 가변적인 길이의 옵션 필드는 송신자와 수신자가 최대 세그먼트 크기를 협상하거나 고속 네트워크에서 사용하기 위한 윈도우 확장 요소로 이용된다.

- 플래그 필드는 6비트를 포함한다. ACK 비트는 확인응답 필드에 있는 값이 유용함을 가리키는 데 사용된다. 즉 이 세그먼트는 성공적으로 수신된 세그먼트에 대한 확인 응답을 포함한다.

 

Reliable Data Transfer

비트 오류와 손실 있는 채널상에서의 신뢰적인 데이터 전송 : rdt3.0

  하위 채널이 패킷을 손실하는 경우를 생각해보자. 어떻게 패킷 손실을 검출할 것인가, 그리고 패킷 손실이 발생했을 때 어떻게 행동을 할 것인가를 다루어야 한다. 이를 다루기 위해 필요한 기술은 체크섬, 순서 번호, ACK 패킷, 재전송, 카운트다운 타이머가 있다. 송신자는 다음처럼 동작한다.

(1) 매 패킷이 송신된 시간에 타이머를 시작함

(2) 타이머 인터럽트에 반응함 (ACK이 타이머 시간동안 수신되지 않는다면 패킷을 재전송 한다.)

(3) 타이머를 멈춤 (ACK을 타이머 시간동안 수신 받았다면 타이머를 멈춤.)

 

파이프라이닝된 rdt

  rdt3.0의 핵심적인 성능 문제는 stop-and-wait 프로토콜 이라는 점이다.

  패킷을 하나씩 보내면 패킷 한개당 RTT가 발생하여 너무 비효율적이다.

  한번에 여러 개의 패킷을 파이프라인에 채워서 보내는 기술을 파이프라이닝이라고 한다. 이 방식으로 위 그림의 예시로는 이용률을 약 3배로 끌어올릴 수 있다.

 

파이프라이닝 기술에도 패킷 오류 회복을 위한 방법이 필요한데, 대표적으로 GBN(Go-Back-N)과 Selective Repeat(SR)이 있다.

 

GBN(Go-Back-N)

  GBN 프로토콜에서 송신자는 확인응답을 기다리지 않고 여러 패킷을 전송 할 수 있다. 그러나 파이프라인에서 확인응답이 안 된 패킷의 최대 허용 수 N보다 크지 않아야 한다.

GBN Sender

  전송 되었지만 아직 확인응답이 안 된 패킷을 위해 허용할 수 있는 순서 번호의 범위는 순서 번호의 범위상에서 크기가 N인 윈도우로 나타낸다. 프로토콜이 동작할 때, 이 윈도우는 순서 번호 공간에서 오른쪽으로 슬라이딩한다. 이러한 이유로 N을 윈도우 크기라 부르며, GBN 프로토콜은 슬라이딩 윈도우 프로토콜이라고 부른다. 

GBN Receiver

GBN in action

  수신 측은 패킷의 순서번호가 맞지 않으면 오는 패킷을 받지도 않으며 확인 응답도 보내지 않고, 올바른 순서번호의 패킷을 받을 수 있을 때 까지 직전에 받은 확인 응답을 계속해서 보낸다. 하지만 송신측은 중복 확인 응답을 무시하고 보낸 패킷에 대해 확인 응답을 못받은 타임아웃이 일어나면 패킷을 재전송한다.

 

Selective Repeat(SR)

  GBN 프로토콜은 송신자가 패킷으로 파이프라인을 채우는 것을 가능하게 하여, 전송 후 대기 프로토콜에서의 채널 이용률 문제를 피하도록 하고 있다. 그러나 윈도우 크기와 대역폭 지연 곱의 결과가 모두 클 때, 많은 패킷이 파이프라인에 있을 수 있다. 그러나 GBN은 패킷 하나의 오류 때문에 많은 패킷을 재전송하므로, 많은 패킷을 불필요하게 재전송하는 경우가 발생한다. 채널 오류의 확률이 증가할수록 파이프라인은 불필요한 재전송 데이터로 채워진다.

  이름에서 알 수 있듯 SR 프로토콜은 수신자에서 오류가 발생한 패킷을 수신했다고 의심되는 패킷만을 송신자가 다시 전송하므로 불필요한 재전송을 피한다. 필요에 따라 각각의 개별적인 재전송은 수신자가 올바르게 수신된 패킷에 대한 개별적인 확인응답을 요구할 것이다.

SR Sender and Receiver

  SR 수신자는 패킷의 순서와는 무관하게 손상 없이 수신된 패킷에 대한 확인응답을 할 것이다. 순서가 바뀐 패킷은 빠진 패킷이 수신될 때까지 버퍼에 저장하고, 빠진 패킷이 수신된 시점에서 일련의 패킷을 순서대로 상위 계층에 전달할 수 있다.

SR in action

패킷 3, 4, 5를 받아 버퍼에 저장해 두었다가, 타임아웃으로 2를 받은 후에 2, 3, 4, 5를 상위 계층으로 전달한다.

 

SR : a dilemma

  윈도우의 크기가 순서 번호 공간 크기의 절반보다 크다면, (b)의 상황과 같이 두 번째 0을 받아야 하는데 첫번째 0으로 재전송받게 될 수도 있다. 이런 오류가 없게 하기 위해서는 윈도우의 크기는 순서 번호 공간 크기의 절반보다 작아야한다.

 

순서 번호와 응답 확인 예시

  Seq는 호스트가 상대 호스트에게 보내고자 하는 순서 번호를 가진 패킷이고, Ack은 호스트가 상대 호스트로부터 받기를 희망하는 순서 번호의 패킷이다.

 

재전송 예시

 

누적된 확인 응답은 유실된 확인 응답을 커버할 수 있다.

Fast Retransmit (빠른 재전송)

타임아웃이 나기 전에 중복된 확인응답이 세번 전송 되면 유실된 패킷을 빠르게 재전송해준다.

728x90