Post

[🌐CN] TCP - Transmission Control Protocol

[🌐CN] TCP - Transmission Control Protocol

🌐 Internet Protocol 전공 수업 정늬

신뢰성 있는 데읎터 전송의 핵심! TCP는 연결 지향적읎고 신뢰성 있는 전송을 볎장하는 Transport Layer 프로토윜읎닀. 팚킷 손싀, 순서 변겜, 쀑복 등 넀튞워크의 닀양한 묞제륌 핎결하여 안정적읞 데읎터 전송을 제공한닀.


TCP Service Model

Network의 Challenge

넀튞워크는 닀음곌 같은 묞제듀을 발생시킬 수 있닀:

  • drop packets: 대량의 팚킷 손싀 가능
  • delay packets: 수 쎈간 지연 가능
  • deliver packets out-of-order: 임의 지연윌로 읞한 순서 변겜
  • replicate packets: 드묌지만 팚킷 복제 발생
  • corrupt packets: 데읎터 손상

TCP의 핵심 Ʞ능

📚TCP (Transmission Control Protocol): Transport Layer에서 신뢰성 있고 순서가 볎장된 바읎튞 슀튞늌 전송을 제공하는 연결 지향 프로토윜

죌요 특징:

  1. Reliable delivery (신뢰성 있는 전달)
    • IP가 팚킷을 잃얎버늬는 겜우 TCP는 retransmission 수행
  2. In-order delivery (순서 볎장)
    • IP가 out-of-order delivery륌 하는 겜우 TCP가 reordering한 후 application에게 전달
  3. Flow control (흐멄 제얎)
    • 수신 application읎 받을 수 있는 만큌만 배달
  4. Byte-stream (바읎튞 슀튞늌)
    • 데읎터는 바읎튞의 연속
    • Segmentation → PMTU discovery 읎용
  5. Connection oriented (연결 지향)
    • 데읎터 전송ꎀ늬 (flow-control, reordering, segmentation, congestion control)
    • Hopefully with good performance

TCP Support for Reliable Delivery

신뢰성 볎장 메컀니슘

1. Checksum

  • 수신자에서 손상된 데읎터 감지
  • 손상된 팚킷은 드롭

2. Sequence numbers

  • 누띜된 데읎터 감지
  • 데읎터륌 올바륞 순서로 재배엎

3. Retransmission

  • 송신자가 손싀되거나 손상된 데읎터 재전송
  • Round-trip time 추정에 Ʞ반한 timeout
  • Fast retransmit algorithm윌로 신속한 재전송

Connection-Oriented

📚Connection Establishment: 데읎터 전송 전에 TCP는 연결을 수늜핎알 핹

연결 특징:

  • 하나의 TCP entity는 연결을 Ʞ닀늌 (“server”)
  • 닀륞 TCP entity (“client“)가 서버에 접속
  • 각 연결은 full duplex (양방향 통신)
1
2
3
4
5
6
7
8
9
10
11
12
CLIENT                          SERVER
                                waiting for
                                connection
                                request
  Request a connection    ────────►
                          ◄────────
  Accept a connection

  Data Transfer           ────────►
                          ◄────────

  Disconnect              ────────►

TCP Header

Header 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 0                   15 16                  31
┌───────────────────────┬──────────────────────┐
│    Source Port        │   Destination Port   │
│      (16 bits)        │      (16 bits)       │
├───────────────────────┎───────────────────────
│            Sequence Number (32 bits)         │
├───────────────────────────────────────────────
│         Acknowledgment Number (32 bits)      │
├─────┬────┬──────────────┬─────────────────────
│HdrLen│ 0  │    Flags     │  Advertised window │
│(4bit)│(6b)│   (6 bits)   │     (16 bits)      │
├──────┎────┎──────────────┌─────────────────────
│   TCP Checksum (16 bits) │ Urgent Pointer     │
│                          │    (16 bits)       │
├──────────────────────────┎─────────────────────
│           Options (variable)                  │
├────────────────────────────────────────────────
│                  Data                         │
└───────────────────────────────────────────────┘

죌요 필드

1. Sequence Number (32 bits)

  • 읎 섞귞뚌튞에 포핚된 데읎터의 시작 바읎튞 였프셋

2. Acknowledgment Number (32 bits)

  • 순서대로 수신한 가장 높은 시퀀슀 번혞 바로 닀음 번혞
  • “닀음에 Ʞ대하는 바읎튞는?”
  • 송신자가 시퀀슀 S에서 시작하는 N 바읎튞륌 볎낎멎 ACK는 S+N

3. Header Length (4 bits)

  • TCP 헀더의 4바읎튞 워드 개수
  • 5 = 옵션 없음 (20 bytes)

4. Reserved (6 bits)

  • “Must Be Zero” - 예앜된 비튞

5. Flags (6 bits)

  • SYN: 연결 수늜
  • ACK: Acknowledgment 유횚
  • FIN: 연결 종료
  • RST: 연결 늬셋
  • PSH: Push
  • URG: Urgent

6. Advertised Window (16 bits)

  • 데읎터 수신을 위핎 사용 가능한 버퍌 공간
  • TCP의 sliding window에 사용
  • Acknowledgment 필드 값을 넘얎선 였프셋윌로 핎석

7. Checksum (16 bits)

  • 에러 감지용

8. Urgent Pointer (16 bits)

  • URG 플래귞가 섀정된 겜우 사용

ACKing and Sequence Numbers

ACK 메컀니슘

송신자가 팚킷 전송:

  • 데읎터는 시퀀슀 번혞 X에서 시작
  • 팚킷은 B 바읎튞 포핚
  • X, X+1, X+2, 
, X+B-1

팚킷 수신 시, 수신자는 ACK 전송:

Case 1: X 읎전의 몚든 데읎터가 읎믞 수신됚

  • ACK는 X+B륌 확읞 (닀음 Ʞ대 바읎튞읎므로)

Case 2: 읎믞 수신한 가장 높은 바읎튞가 더 작은 값 Y

  • ACK는 Y+1을 확읞
  • 읎믞 ACK했더띌도 닀시 전송

Cumulative ACK (누적 ACK)

  • TCP는 누적 ACK 사용
  • ACK 번혞는 “읎 번혞 읎전까지 몚두 받았음”을 의믞
  • 쀑간에 손싀된 팚킷읎 있얎도 동음한 ACK 반복 전송

Initial Sequence Number (ISN)

📚ISN (Initial Sequence Number): 첫 번짞 바읎튞의 시퀀슀 번혞

왜 ISN = 0읎 아닌가?

싀용적 읎유:

  • IP 죌소와 포튞 번혞가 연결을 고유하게 식별
  • ê²°êµ­ 읎 포튞 번혞듀은 닀시 사용됚
  • 였래된 팚킷읎 여전히 전송 쀑음 가능성
  • 새로욎 연결곌 연ꎀ될 수 있음

TCP의 핎결책:

  • ISN을 변겜하도록 요구
  • 4 마읎크로쎈마닀 틱하는 32비튞 큎록에서 섀정
  • 4.55시간마닀 한 번만 wrap around
  • 연결 수늜 시 혞슀튞듀읎 ISN 교환

CONNECTION ESTABLISHMENT: THREE-WAY HANDSHAKE

3-Way Handshake 곌정

📚Three-Way Handshake: TCP 연결 수늜을 위한 3닚계 핞드셰읎크 프로섞슀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Client (initiator)              Server
Active Open                     Passive Open

connect()                       listen()
    │                              │
    │  SYN, SeqNum = x             │
    ├──────────────────────────────►
    │                              │
    │  SYN + ACK, SeqNum = y,      │
    │            Ack = x + 1       │
    ◄───────────────────────────────
    │                              │
    │  ACK, Ack = y + 1            │
    ├──────────────────────────────►
    │                              │
                                accept()

Step 1: Client의 SYN

  • Client가 Server에 SYN 전송
  • Client의 ISN 포핚

Step 2: Server의 SYN-ACK

  • Server가 SYN acknowledgment 반환
  • Server의 ISN 포핚
  • Client의 ISN + 1을 ACK

Step 3: Client의 ACK

  • Client가 Server의 SYN-ACK륌 확읞
  • Server의 ISN + 1을 ACK

각 혞슀튞는 상대방에게 자신의 ISN을 알렀쀌

  • 양방향 통신을 위핎 각자의 ISN 필요
  • 읎 팚킷을 받윌멎 데읎터 전송 시작 가능

SYN Packet읎 손싀되멎?

묞제:

  • Server가 팚킷을 버늌 (예: listen queue가 가득 ì°ž)
  • ê²°êµ­ SYN-ACK가 도착하지 않음

핎결책:

  • Sender가 타읎뚞륌 섀정하고 SYN-ACK륌 대Ʞ
  • 필요시 SYN 재전송
  • RFC 1122 & 2988: Ʞ볞 3쎈 사용 권장
  • 닀륞 구현첎: 6쎈 사용

TEARING DOWN THE CONNECTION

TCP Connection Termination

📚Connection Termination: 각 데읎터 흐늄의 끝은 독늜적윌로 종료되얎알 핹 (“half-close”)

4닚계 프로섞슀:

  1. X가 Y에게 FIN 전송 (active close)
  2. Y가 FIN을 ACK
    • 읎 시점: Y는 여전히 X에게 데읎터 전송 가능
  3. Y가 X에게 FIN 전송 (passive close)
  4. X가 FIN을 ACK

Normal Termination

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
A                               B
│                               │
│         FIN                   │
├──────────────────────────────►│
│                               │
│         ACK                   │
◄───────────────────────────────
│                               │
│                               │ Connection
│                               │ now half-closed
│         FIN                   │
◄───────────────────────────────
│                               │
│         ACK                   │
├──────────────────────────────►│
│                               │
│  Timeout: Avoid reincarnation │
│           ↓                   │
│     Connection                │
│     now closed                │

Sending/Receiving the FIN Packet

FIN 전송: close()

  • 프로섞슀가 소쌓을 통한 데읎터 전송 완료
  • 프로섞슀가 “close()”륌 혞출하여 소쌓 ë‹«êž°
  • TCP가 몚든 믞완료 바읎튞 전송 후 FIN 전송
  • 바읎튞가 아직 ACK되지 않았얎도 FIN 전송
  • FIN의 seqno가 몚든 바읎튞륌 넘얎서므로
  • 몚든 바읎튞가 전달될 때까지 ACK되지 않음

FIN 수신: EOF

  • 프로섞슀가 소쌓에서 데읎터 읜는 쀑
  • ê²°êµ­ 읜Ʞ 시도가 EOF 반환
  • 송신자가 close() 혞출하Ʞ 전의 몚든 바읎튞 전달됚

Abrupt Termination

RST (Reset) 사용:

  • A가 B에게 RST 전송
  • 프로섞슀 크래시 등의 읎유
  • B는 RST륌 ACK하지 않음
  • RST는 신뢰성 있게 전달되지 않음
  • 전송 쀑읞 데읎터는 손싀됚
  • B가 더 볎낎멎 또 닀륞 RST 발생

TCP Options

📚TCP Options: TCP 헀더의 가변 Ꞟ읎 옵션 필드 (최대 40 bytes, 4 bytes 배수)

죌요 옵션 종류

KindOptionLength (Byte)
0End of Option List (EOL)1≥
1No Operation (NOP)1
2Maximum Segment Size (MSS)4
3Window scaling factor3
4Selective ACK Permitted2
5Selective ACK2+8k (k < 5)
8Timestamp10
28User timeout4

옵션 섀명:

  • EOL: 뒀로 더 읎상 옵션 없음
  • NOP: padding 역할
  • MSS: peer에게 payload 크Ʞ 알늌 (MSS = MTU - 40)
  • WSF: 수신 socket buffer > 64KB음 때 peer에게 알렀쀌
    • window size (16 bits) < 65,535 KB
  • SACK permit: SACK 사용 가능 알늌
  • Timestamp: RTT 잡정
  • UTO: 최대 ACK Ʞ닀늬는 시간

SACK (Selective Acknowledgment)

📚SACK: TCP 섞귞뚌튞 한 번에 여러 개 볎낌 때 쀑간에 잃얎버늰 것만 알렀쀌 (SLE, SRE)

장점:

  • TCP 성능 향상
  • 불필요한 재전송 감소

동작:

1
2
3
4
5
6
7
8
Continuous data reception │ #49 │ Gap │ #51 │
                          ↓           ↓
                     ACK = 25733  ACK = 25733

쀑간 팚킷 수신 후:
Continuous received bytes │ #49 │ #53 │ #54 │ #51 │
                                      ↓
                                 ACK = 28699

FLOW CONTROL

📚Flow Control: 송신자가 수신자륌 정볎로 압도하는 것을 방지하는 알고늬슘

TCP Sliding Window Flow Control

특징:

  • Acknowledgment 전송곌 window size 섀정읎 분늬됚
  • Acknowledgment가 자동윌로 window size륌 슝가시킀지 않음
  • Acknowledgment는 누적적(cumulative)

Sliding Window Protocol

1
2
3
4
5
6
7
8
9
10
11
        Advertised window
    ◄─────────────────────►
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │10 │11 │
└───┮───┮───┮───┮───┮───┮───┮───┮───┮───┮───┘
        ◄───┐   ◄───────┐       ◄───────┐
    sent and│   sent but│   can │  can't│
acknowledged│    not    │  be   │  sent │
            │acknowledged│ sent  │       │
            └───────────►        │       │
               USABLE WINDOW     │       │

Window Operations

1. Window Closes (윈도우 닫힘)

  • 데읎터 전송 후 ACK 수신
  • 전송된 만큌 윈도우가 왌쪜윌로 읎동

2. Window Opens (윈도우 엎늌)

  • ACK 수신윌로 윈도우가 였륞쪜윌로 확장
  • 수신자의 TCP 버퍌가 비워질 때 발생

3. Window Shrinks (윈도우 축소)

  • 윈도우가 였륞쪜에서 축소
  • 사용하지 않아알 핹

Window Management

수신자는 송신자에게 두 파띌믞터 반환:

1
2
3
4
┌─────────────┬────────────────┐
│   AckNo     │ window size    │
│  (32 bits)  │    (16 bits)   │
└─────────────┮────────────────┘

핎석:

  • SeqNo = AckNo, AckNo+1, 
, AckNo+Win-1의 새 데읎터륌 받을 쀀비가 됚

특징:

  • 수신자는 윈도우륌 ì—Žì§€ 않고 데읎터 확읞 가능
  • 수신자는 데읎터 확읞 없읎 윈도우 크Ʞ 변겜 가능

Flow Control Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sender                          Receiver Buffer
sends 2K                        0           4K
of data     ┌─────────┐         ┌─────────────┐
            │2K│SeqNo=0│         │             │
            └────┌─────┘         └─────────────┘
                 └────────────►  ┌────┬────────┐
                                 │ 2K │        │
                 ◄──────────────┐└────┮────────┘
            ┌────────────────┐  │
            │AckNo=2048      │  │
            │Win=2048        │  │
            └────────────────┘  │

Sender      ┌─────────┐         │
sends 2K    │2K│SeqNo=2048│     │
of data     └────┌─────┘         │
                 └────────────►  ┌──────────┐
                                 │   4K     │
                 ◄──────────────┐└──────────┘
            ┌────────────────┐  │
            │AckNo=4096      │  │
            │Win=0           │  │
            └────────────────┘  │
                                │
Sender blocked                  │
                                │
                 ◄─────────────── ┌───┬────┐
            ┌────────────────┐  │ │   │ 3K │
            │AckNo=4096      │  │ └───┮────┘
            │Win=1024        │  │
            └────────────────┘  │

Advertised Window

📚Advertised Window: W: 닀음 Ʞ대 바읎튞륌 넘얎 W 바읎튞륌 볎낌 수 있음

Flow Control 메컀니슘:

  • 수신자는 W륌 사용하여 송신자의 버퍌 였버플로우 방지
  • 윈도우가 W읎멎 송신자는 최대 W/RTT bytes/sec로 전송 가능
  • 수신자는 암묵적윌로 송신자륌 수신 가능한 속도로 제한
  • 송신자가 너묎 빠륎멎 윈도우 ꎑ고가 점점 작아짐

RELIABILITY: RETRANSMISSION

Reasons for Retransmission

1
2
3
4
5
6
7
8
9
10
11
Timeout         Timeout         Timeout
   │               │               │
Packet    ACK   Packet    ACK   Packet
  │  ┌╳┐   │      │   ┌╳┐   │      │    ┌───┐
  │  └─┘   │      │   └─┘   │      │ ┌╳┐│ACK│
  └────►   │      └────►     │      │ └─┘└───┘
      ◄────┘          ◄──────┘      └────►  │
                                        ◄────┘◄────┐
  Packet lost     ACK lost        Early timeout  │
                  DUPLICATE       DUPLICATE PACKETS│
                  PACKET                           │

How Long Should Sender Wait?

Timeout 섀정:

  • 너묎 짧음: 불필요한 재전송
  • 너묎 김: 팚킷 손싀 시 곌도한 지연

TCP의 RTO (Retransmission Timeout):

  • RTT의 핚수로 섀정
  • ACK가 데읎터 전송 후 대략 RTT 후에 도착 예상
  • 변동(queuing, MAC)을 허용하는 슬랙 추가

잡정 묞제

  • RTT륌 얎떻게 잡정할 것읞가?
  • RTT의 좋은 추정치는?
  • “슬랙”의 좋은 추정치는?

Problem: Ambiguous Measurement

재전송 시 묞제:

1
2
3
4
5
6
7
8
9
10
11
Sender          Receiver        Sender          Receiver
  │ Original      │                │ Original      │
  │ Transmission  │                │ Transmission  │
  ├──────────────►│                ├──────────────►│
  │               │                │      ACK      │
  │Retransmission │                │  ◄─────┐      │
  ├──────────────►│                │Retransmission │
  │      ACK      │                ├──────────────►│
  ◄────────────────                │               │
  ↕               │                ↕               │
SampleRTT ?                      SampleRTT ?
  • 싀제 ACK와 재전송된 팚킷의 ACK륌 얎떻게 구분?

Karn/Partridge Algorithm

📚Karn/Partridge Algorithm: 재전송 시 RTT 잡정 묞제 핎결

규칙:

  • 원볞 전송에 대핎서만 SampleRTT 잡정
  • 섞귞뚌튞가 재전송되멎 추가 잡정에 사용하지 않음

Exponential Backoff 적용:

  • RTO 타읎뚞 만료 시마닀: RTO ← 2·RTO
  • 새 잡정 도착 시 (성공적읞 원볞 전송): RTO륌 계산된 값윌로 복원

RTT Estimation

Exponential Averaging

1
2
3
4
SampleRTT = AckRcvdTime - SendPacketTime
EstimatedRTT = α × EstimatedRTT + (1-α) × SampleRTT

α = 7/8 (for one measurement per flight)

귞래프:

1
2
3
4
5
6
7
8
9
EstimatedRTT ▲
              │     ╱╲
              │    ╱  ╲  ╱╲
              │   ╱    ╲╱  ╲
              │──────────────── EstimatedRTT
              │ ╱│  ╱│   │╲  │╲
              │╱ │ ╱ │   │ ╲ │ ╲
              └──┎──┎───┎──┎──┎──► Time
                SampleRTT

Jacobson/Karels Algorithm

📚Jacobson/Karels Algorithm: ꎀ찰된 변동성 잡멎에서 “슬랙” 계산

표쀀 펞찚 대신 평균 펞찚 사용:

  • 표쀀 펞찚는 비싌 제곱귌 필요
  • 평균 펞찚(mean deviation) 사용
1
2
3
4
5
6
Deviation = | SampleRTT – EstimatedRTT |
EstimatedDeviation: Deviation의 지수 평균

EstRTT = (1-α) × EstRTT + α × SRTT
RTTvar = (1-β) × RTTvar + β × (SRTT - EstRTT)
RTO = ERTT + 4 × RTTvar

α와 β 값

  • α = 1/8 (0.125)
  • β = 1/4 (0.25)
  • RTO는 EstimatedRTT + 4배의 변동성

Alternative to Timeouts: Fast Retransmission

Triple Duplicate ACK

📚Fast Retransmission: 3개의 쀑복 ACK 수신 시 슉시 재전송

동작 원늬:

  • 팚킷 n읎 손싀되지만 n+1, n+2, 
 도착
  • 순서에 맞지 않는 팚킷 도착 시마닀 수신자가 ACK 생성
  • n+1, n+2, 
 도착 시 시퀀슀 번혞 n에 대한 반복 ACK 생성
  • 몚두 동음하게 볎읎므로 “duplicate” acknowledgments
  • 송신자가 3개륌 볎멎 슉시 팚킷 n 재전송 (n만)

Fast Retransmission Diagram

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sender                          Receiver
  │      segment 1              │
  ├──────────────────────────►  │
  │                             │
  │◄──────ACK 2                 │
  │                             │
  │      segment 2              │
  ├──────────────────────────►  │
  │      segment 3              │
  ├──────────────────────────►  │
  │                             │
  │◄──────ACK 3                 │
  │                             │
  │◄──────ACK 4                 │
  │                             │
  │      segment 4 ──╳          │ segment 5 lost
  │      segment 5              │
  ├──────────────────────────►  │
  │      segment 6              │
  ├──────────────────────────►  │
  │      segment 7              │
  ├──────────────────────────►  │
  │                             │
  │◄──────ACK 4  ┐              │
  │◄──────ACK 4  │ 3 duplicate  │
  │◄──────ACK 4  ┘    ACKs      │
  │                             │
  │      segment 4              │
  ├──────────────────────────►  │ Fast Retransmit!

죌의사항:

  • ACK는 닀음 Ʞ대 팚킷에 대한 것
  • 팚킷 재정렬(reordering)읎 쀑복 ACK 유발 가능
  • 윈도우가 너묎 작윌멎 충분한 쀑복 ACK 생성 불가능

Additional TCP Features

Cumulative ACK

📚Cumulative ACK (Accumulated ACK): TCP ACK는 누적적윌로 동작

특징:

  • ACK 번혞는 “읎 번혞 읎전까지 몚두 수신했음”을 의믞
  • 쀑간에 팚킷읎 손싀되얎도 연속윌로 수신된 부분까지 ACK
  • 손싀된 팚킷 읎후에 도착한 팚킷듀은 동음한 ACK 번혞 반복

예시:

1
2
3
4
5
6
7
8
Continuous received bytes │ #49 │ Loss │ #51 │
                          ↓           ↓
                     ACK = 25733  ACK = 25733

손싀 팚킷 재전송 후:
Continuous received bytes │ #49 │ #53 │ #54 │ #51 │
                                      ↓
                                 ACK = 28699

Delayed ACK

📚Delayed ACK: TCP는 Ʞ볞적윌로 ACK suppress (performance 향상)

목적:

  • Full duplex (반대방향) 활용
  • 데읎터와 핚께 ACK 전송 가능

동작:

  • Delayed ACK timer expire 시 ACK 전송
  • 두 개의 섞귞뚌튞마닀 하나의 ACK
  • 최대 지연: 볎통 200ms

Persist Timer

📚Persist Timer: Window size = 0 상황 처늬

묞제:

  • RX로부터 0-ACK (Window size = 0) 받윌멎 TX 더 읎상 전송 불가
  • RX가 window update 할 때까지 TX freeze
  • Window update (ACK) 손싀 시 deadlock

핎결책:

  • RX가 0-ACK 수신 시 persist timer 시작 (RTO)
  • Timer expires, RX가 persist probe 전송 (1 byte)
    1. 0-ACK 닀시 전송 + 동음 ACK#
    2. 0-ACK 닀시 전송 + ACK 1슝가
    3. ACK (window size > 0) 전송

Keepalive Timer

📚Keepalive Timer: Half-open 상태 탐지

목적:

  • Half-open (client 조용히 닀욎된 겜우) 상태륌 탐지하여 connection 끊Ʞ
  • Server overhead 감소

동작:

  • TCP 표쀀은 아님
  • 앜 2시간 후 timeout
  • Keepalive probe: inadequate seq# (예: 읎믞 ACK 받은 것)
  • 삎아 있는 client의 겜우 바륞 ACK# packet 전송
  • Closed client 묎응답 → probe 3-5번 ë’€ 연결 핎지

TCP 요앜

TCP의 핵심 특징

1. 연결 지향 (Connection-Oriented)

  • Three-way handshake로 연결 수늜
  • Full duplex 양방향 통신
  • 명시적 연결 종료 (FIN)

2. 신뢰성 볎장 (Reliable Delivery)

  • Sequence number로 순서 볎장
  • Acknowledgment로 수신 확읞
  • Timeout & Retransmission
  • Fast Retransmit (3 duplicate ACKs)

3. 흐멄 제얎 (Flow Control)

  • Sliding window mechanism
  • Advertised window로 수신 버퍌 ꎀ늬
  • 수신자가 처늬 가능한 속도로 전송

4. 혌잡 제얎 (Congestion Control)

  • Network 상태에 맞춰 전송 속도 조절
  • Good performance 목표

TCP vs UDP

특징TCPUDP
연결Connection-orientedConnectionless
신뢰성Reliable deliveryUnreliable
순서In-order deliveryNo ordering
흐멄 제얎YesNo
였버헀드높음 (20+ bytes)낮음 (8 bytes)
속도느늌빠늄
사용 예HTTP, FTP, EmailDNS, VoIP, Streaming

TCP 사용읎 적합한 겜우

  • 데읎터 손싀읎 허용되지 않는 겜우
  • 순서가 쀑요한 겜우
  • 신뢰성 있는 전송읎 필요한 겜우

UDP 사용읎 적합한 겜우

  • 싀시간 전송읎 쀑요한 겜우
  • 앜간의 손싀읎 허용되는 겜우
  • 낮은 지연읎 필요한 겜우

References:

  • RFC 793: Transmission Control Protocol
  • RFC 1122: Requirements for Internet Hosts
  • RFC 2988: Computing TCP’s Retransmission Timer
  • Prof. Jongwon Yoon, Intelligent Machines Lab.
This post is licensed under CC BY 4.0 by the author.