컴퓨터 네트워크
TCP: Transmission Control Protocol
kiki1875
2023. 4. 6. 12:13
TCP란 전송된 데이터를 신뢰성 있게 receiver 측에 전송을 보장하는 프로토콜이다.
TCP 특징
- Point to Point
- one sender one receiver
- Connection-Oriented
- 신뢰성이 높다
- Handshaking 과정 필요
- Pipelined
- Flow/Congestion Control을 위해
- Maximum Segment Size
- Full Duplex Daa
- 양방향 통신이 가능

TCP는 다음으로 이루어져 있다.
- Pipelined Segments
- Cumulative ACK
- Single Retransmission Timer
- Triggered by
- Timeout
- Duplicate ACK
- Triggered by
TCP Retransmission Scenario

- ACK가 손실되었을 때 이다.
- Host A 가 보낸 데이터를 Host B가 잘 받았지만 ACK 100 이 손실
- Timeout 이 걸리고 재전송

- 이 경우는 time의 timeout 시간을 너무 짧게 설정하여 발생한다

- Host A가 seq 92와 seq 100을 보낸 후 Host B는 이에대한 ACK 100, 120을 보내지만 ACK 100이 유실된다.
- 이때 Host A는 ACK 100 이 오지 않았지만 ACK 120 을 받았으므로 ACK 100 또한 잘 전송되었다는 것을 알 수 있다.
다음은 receiver의 event와 action 에 대해 살펴보자
| EVENT AT RCV | RCV ACTION |
| 예상 순서 번호와 함께 도착한 순서대로 세그먼트의 도착. 예상 순서 번호까지의 모든 데이터는 이미 ACK(수신 확인)을 받음 | 지연된 ACK. 다음 세그먼트를 기다리며 최대 500ms까지 대기합니다. 다음 세그먼트가 없다면 ACK를 전송함 |
| 예상 순서 번호와 함께 도착한 순서대로 세그먼트의 도착. 하나의 다른 세그먼트는 아직 ACK 대기 중 | 즉시 단일 누적 ACK를 보내서, 예상 순서대로 도착한 두 세그먼트를 모두 ACK |
| 예상한 순서 번호보다 높은 순서 번호를 가진 순서와 다른 세그먼트의 도착. 갭이 발견 | 즉시 중복 ACK를 보내서, 다음에 예상되는 바이트의 순서 번호를 나타냅니다 |
| 갭을 부분적으로나 완전히 채우는 세그먼트의 도착 | 갭의 하위 끝에서 세그먼트가 시작된다면, 즉시 ACK를 전송합니다 |
TCP 는 fast retransmit 이 가능하다
- Timeout 을 기다리는것은 비 효율적
- 중복 ACK를 사용하여 유실을 감지

Timeout
Timeout 이 너무 짧을 경우, 불필요한 retransmission이 발생
너무 길 경우 너무 느린 응답 발생
SampleRTT: segment 전송에서 ACK 수신까지 걸린 시간
EstimatedRTT = (1- a)*EstimatedRTT + a*SampleRTT
a = 0.125
TimeoutInterval : EstimatedRTT + 4DevRTT
safety margin
- DevRTT = (1-b)DevRTT +b|SampleRTT - EstimatedRTT|
- b = 0.25
- RTT 계산 예제
