λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Network

ARQ와 TCP 의 차이점, 그리고 TCP Reno

ARQ와 TCPλŠ” νŒ¨ν‚·μ˜ 였λ₯˜λ₯Ό μ œμ–΄ν•œλ‹€λŠ” νŠΉμ§•μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
그렇기에, 무엇이 λ‹€λ₯Έμ§€ μ•Œμ•„λ³΄κ³ μž ν•©λ‹ˆλ‹€.  

⭐ Automatic Repeat Request (ARQ)

λ°μ΄ν„°μ˜ 신뒰성을 보μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 였λ₯˜ μ œμ–΄ λ©”μ»€λ‹ˆμ¦˜μ„ Automatic Repeat Request(μ΄ν•˜ ARQ)라 λΆ€λ¦…λ‹ˆλ‹€.

ARQ μ’…λ₯˜μ—λŠ” Stop-and-Wait ARQ , Go-Back-N ARQ , Selective Repeat ARQ κ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

  • Stop-and-Wait ARQ

전솑후 λŒ€κΈ° ν”„λ‘œν† μ½œλ‘œ λΆ€λ₯΄κΈ°λ„ ν•©λ‹ˆλ‹€.

이 방식은 νŒ¨ν‚·μ„ μ „μ†‘ν•˜κ³  κ·Έ νŒ¨ν‚·μ— λŒ€ν•œ μˆ˜μ‹  확인 응닡(ACK)을 λ°›κ³ λ‚˜μ„œ, λ‹€μŒ νŒ¨ν‚·μ„ μ „μ†‘ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

 

μž₯점은 순차적으둜 νŒ¨ν‚·μ„ 보내기 λ•Œλ¬Έμ— κ΅¬ν˜„μ΄ 쉽고, νŒ¨ν‚·μ— 손상이 적은 ν™˜κ²½μ— μ μ ˆν•©λ‹ˆλ‹€.

단점은 ν•˜λ‚˜μ˜ νŒ¨ν‚·λ‹Ή λ„€νŠΈμ›Œν¬λ₯Ό μ™•λ³΅ν•˜λŠ” μ‹œκ°„μ΄ 걸리기 λ•Œλ¬Έμ— λ§Žμ€ νŒ¨ν‚·μ„ λ³΄λ‚΄κ±°λ‚˜ νŒ¨ν‚· 손상이 λ§Žμ€ ν™˜κ²½μ—μ„œ 효율이 λ–¨μ–΄μ§‘λ‹ˆλ‹€.

 

  • Pipelining (νŒŒμ΄ν”„λΌμ΄λ‹)

이후에, μ „μ†‘λœ νŒ¨ν‚·μ— λŒ€ν•œ μˆ˜μ‹  확인 응닡을 받지 μ•Šκ³ λ„ μ—¬λŸ¬ μš”μ²­μ„ 보낼 수 μžˆλŠ” νŒŒμ΄ν”„λΌμ΄λ‹μ΄ λ‚˜μ˜€κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

νŒŒμ΄ν”„λΌμ΄λ‹μ„ 톡해 μˆ˜μ‹  확인 응닡을 받지 μ•Šμ•„λ„ λ‹€μŒ νŒ¨ν‚·μ„ μ „μ†‘ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이 νŒŒμ΄ν”„λΌμ΄λ‹ 기법을 μ‚¬μš©ν•œ 것이 Go-Back-N ARQ , Selective Repeat ARQ μž…λ‹ˆλ‹€.

 

  • Go-Back-N ARQ

μ†‘μ§„μžλŠ” μˆ˜μ‹  확인 응닡(ACK)λ₯Ό 받지 μ•Šκ³ λ„, 일정 수의(N개) νŒ¨ν‚·μ„ μ—°μ†μ μœΌλ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.

λ§Œμ•½, μˆ˜μ‹ μžκ°€ νŒ¨ν‚·μ˜ 였λ₯˜λ₯Ό κ°μ§€ν•˜λ©΄ NAKλ©”μ‹œμ§€ λŒ€μ‹  ν•΄λ‹Ή νŒ¨ν‚·μ˜ Sequence Number λ₯Ό 가지고 ACK둜 μ†‘μ‹ μžμ—κ²Œ μ•Œλ €μ€λ‹ˆλ‹€.

μ΄λ ‡κ²Œ μ†μ‹€λœ 단 ν•˜λ‚˜μ˜ νŒ¨ν‚· Sequence Number λ§Œμ„ 보내고, κ·Έ 이전에 받은 Sequence Number λŠ” 보내지 μ•ŠλŠ” λ‹€λŠ” μ˜λ―Έμ—μ„œ λˆ„μ ACK  방식이라 ν•©λ‹ˆλ‹€.

그리고, μ†‘μ‹ μžλŠ” ν•΄λ‹Ή Sequence Number 둜 SendBase λ₯Ό κ°±μ‹ ν•©λ‹ˆλ‹€.

* Sequence Number : νŒ¨ν‚·μ˜ μˆœμ„œλ₯Ό 맀긴 λ²ˆν˜Έμž…λ‹ˆλ‹€.

* SendBase : μ†‘μ‹ μžκ°€ κ°€μž₯ λ¨Όμ € μ „μ†‘ν•œ 데이터 쀑 아직 ACKλ₯Ό 받지 λͺ»ν•œ κ°€μž₯ μž‘μ€ Sequence Number

 

  • Selective Repeat ARQ

Go-Back-N λ°©μ‹μ²˜λŸΌ μˆ˜μ‹  확인 응닡(ACK)λ₯Ό 받지 μ•Šκ³ , 일정 수의(N개) νŒ¨ν‚·μ„ μ—°μ†μ μœΌλ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, Go-Back-N ARQ 와 λ‹€λ₯΄κ²Œ μ†μ‹€λœ νŒ¨ν‚·μ— λŒ€ν•΄μ„œλ§Œ μž¬μ „μ†‘ν•©λ‹ˆλ‹€.

λ˜ν•œ, 손싀 νŒ¨ν‚·μ— λŒ€ν•œ 정보λ₯Ό μ•Œλ €μ£ΌλŠ” 방식이 λ‹€λ¦…λ‹ˆλ‹€. λˆ„μ  ACK방식이 μ•„λ‹Œ NAK λ©”μ‹œμ§€λ₯Ό 톡해 μ†μ‹€λœ νŒ¨ν‚·μ„ μ†‘μ‹ μžμ—κ²Œ μ•Œλ €μ€λ‹ˆλ‹€.

 

⭐TCP와 ARQ의 차이점은 무엇인가?

1. TCPλŠ” νŒ¨ν‚·μ„ μ˜¬λ°”λ₯΄κ²Œ μˆ˜μ‹ ν•˜μ§€ λͺ»ν•  λ•Œ, NAK λ₯Ό 보내지 μ•ŠλŠ”λ‹€.

 

TechTarget :NACK (NAK, negative acknowledgment, not acknowledged) μ˜ 일뢀 μž…λ‹ˆλ‹€.

"TCPλŠ” μ†μ‹€λ˜κ±°λ‚˜ μ†μƒλœ λ©”μ‹œμ§€μ˜ μž¬μ „μ†‘μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ 일반적으둜 λͺ…μ‹œμ μΈ NACK(Negative Acknowledgment) λ©”μ‹œμ§€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€." λ₯Ό λ§ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

TCP does not ordinarily use an explicit NACK message to initiate a retransmission of a dropped or damaged message.

 

그러면 TCPλŠ” μ–΄λ–€ 방법을 μ‚¬μš©ν• κΉŒμš”? 

Wikipedia - Fast retransmit μ—λŠ” λ‹€μŒκ³Ό 같이 μ„€λͺ…ν•©λ‹ˆλ‹€.

 

TCPλŠ” μˆ˜μ‹ μžκ°€ μ€‘λ³΅λœ 3개의 ACK 응닡을 λ°›μœΌλ©΄ ν•΄λ‹Ή νŒ¨ν‚·μ„ 'λΉ λ₯Έ μž¬μ „μ†‘' κΈ°λ²•μœΌλ‘œ μ†μ‹€λœ νŒ¨ν‚·μ„ λ³΄λƒ„μœΌλ‘œμ¨ NAK(NACK) λ©”μ‹œμ§€λ₯Ό λŒ€μ²΄ν•©λ‹ˆλ‹€. 

* λΉ λ₯Έ μž¬μ „μ†‘ : νƒ€μž„아웃에 상관없이 ACK에 ν•΄λ‹Ήν•˜λŠ” νŒ¨ν‚·μ„ μž¬μ „μ†‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

* νƒ€μž„μ•„μ›ƒ : TCPμ—μ„œ μ†‘μ‹ μžκ°€ νŒ¨ν‚·μ„ 보내고, μˆ˜μ‹ μžμ—κ²Œ ACKλ₯Ό λ°›κΈ° κΉŒμ§€μ˜ μ‹œκ°„μ„ μž¬λŠ”λ° 이 μ‹œκ°„μ„ λ„˜κΈ°λŠ” 것을 νƒ€μž„μ•„μ›ƒμ΄λΌ ν•©λ‹ˆλ‹€.

νƒ€μž„μ•„μ›ƒμ΄ λ°œμƒν•˜λ©΄ μ†‘μ‹ μžλŠ” νŒ¨ν‚·μ΄ μ†μ‹€λœ κ²ƒμœΌλ‘œ κ°„μ£Όν•˜κ³ , νŒ¨ν‚·μ„ λ‹€μ‹œ λ³΄λ‚΄κ²Œ λ©λ‹ˆλ‹€.

When a sender receives three duplicate acknowledgments, it can be reasonably confident that the segment carrying the data that followed the last in-order byte specified in the acknowledgment was lost
Fast retransmit is an enhancement to TCP that reduces the time a sender waits before retransmitting a lost segment. A TCP sender normally uses a simple timer to recognize lost segments. If an acknowledgment is not received for a particular segment within a specified time (a function of the estimated round-trip delay time), the sender will assume the segment was lost in the network and will retransmit the segment.

 

2. ARQλŠ” 전솑 & 데이터 링크 κ³„μΈ΅μ—μ„œ μ‚¬μš©, TCP λŠ” 전솑 κ³„μΈ΅μ—μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

3. ARQ λŠ” νŒ¨ν‚·μ˜ 였λ₯˜λ§Œμ„ μ œμ–΄ν•˜μ§€λ§Œ, TCPλŠ” νŒ¨ν‚·μ˜ 였λ₯˜ μ œμ–΄, 혼작 μ œμ–΄, 흐름 μ œμ–΄λ„ ν•©λ‹ˆλ‹€.

 

  • TCP의 였λ₯˜ μ œμ–΄

TCPμ—μ„œ νŒ¨ν‚·μ˜ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ, Go-Back-N 의 λˆ„μ  ACK λ°©μ‹μ²˜λŸΌ μž‘λ™ν•˜λ‹€λŠ” μ μ—μ„œ Go-Back-N λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 였λ₯˜κ°€ λ°œμƒν•œ νŒ¨ν‚· μ΄ν›„λ‘œ 전체 보내지 μ•Šκ³ , Selective-Repeat 처럼 ν•΄λ‹Ή νŒ¨ν‚·λ§Œ μž¬μ „μ†‘ν•©λ‹ˆλ‹€.

이λ₯Ό 톡해, TCP의 였λ₯˜μ œμ–΄λŠ” Go-Back-N κ³Ό Selective-Repeat 을 ν˜Όν•©ν•œ 방식을 μ‚¬μš©ν•˜κ³ , 였λ₯˜κ°€ λ°œμƒν•œ νŒ¨ν‚·μ„ λ°›κΈ° μœ„ν•΄ μ€‘λ³΅λœ 3개의 ACK 응닡 & λΉ λ₯Έ μž¬μ „μ†‘μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

  • TCP의 흐름 μ œμ–΄

솑신 μΈ‘κ³Ό μˆ˜μ‹  츑이 데이터 전솑 속도λ₯Ό μ‘°μ ˆν•˜μ—¬ 솑신 츑이 보낸 데이터λ₯Ό μˆ˜μ‹  츑이 μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜λŠ” 상황을 λ°©μ§€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ μˆ˜μ‹  츑은 솑신 μΈ‘μ—κ²Œ 받을 수 μžˆλŠ” 데이터 μ–‘(window size)을 TCP ν—€λ”μ˜ window ν•„λ“œμ— λ‹΄μ•„ λ³΄λƒ…λ‹ˆλ‹€. λ§Œμ•½, μˆ˜μ‹  츑이 0을 window ν•„λ“œμ— λ‹΄μ•„μ„œ λ³΄λ‚΄κ²Œ 되면 솑신 츑은 데이터 전솑을 μ€‘λ‹¨ν•˜κ³ , persist Timer λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€. 이 Timer κ°€ λλ‚˜λ©΄ 솑신 츑은 μˆ˜μ‹  μΈ‘μ—κ²Œ μž‘μ€ νŒ¨ν‚·μ„ 보내 데이터λ₯Ό 보내도 λ˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

 

  • TCP의 혼작 μ œμ–΄

νŒ¨ν‚·μ˜ κ³Όλ„ν•œ μ „μ†‘μœΌλ‘œ 인해 λ°œμƒν•˜λŠ” ν˜Όμž‘μ„ λ°©μ§€ν•˜κ³ , λ„€νŠΈμ›Œν¬ μ„±λŠ₯을 μ΅œμ ν•˜κΈ° μœ„ν•΄ TCPκ°€ μ‚¬μš©ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€. 혼작 μ œμ–΄μ˜ μ „λž΅μœΌλ‘œ TCP Reno, TCP Tahoe κ°€ μžˆλŠ”λ° TCP Reno 에 λŒ€ν•΄ κ°€λ³κ²Œ μ†Œκ°œν•˜κ² μŠ΅λ‹ˆλ‹€.

 

⭐TCP Reno λ™μž‘ 원리

1. Slow start - 느린 μ‹œμž‘

초기 연결이 μ„€μ •λ˜λ©΄ 솑신 츑은 μ²˜μŒλΆ€ν„° λ§Žμ€ 데이터λ₯Ό 보내지 μ•Šκ³ , μž‘μ€ 혼작 μœˆλ„μš°(congestion window, μ΄ν•˜ cwnd) 크기인 (1, 2, 4, 10 , Max Segment Size μ΄ν•˜ MSS)둜 μ‹œμž‘ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ cwnd 의 ν¬κΈ°λŠ” RTT(왕볡 μ‹œκ°„) λ§ˆλ‹€ 2배둜 λŠ˜λ¦½λ‹ˆλ‹€.

κ·ΈλŸ¬λ‹€ cwnd κ°€ OSμž„κ³„κ°’μ— λ„λ‹¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

2. Congestion Avoidance - 혼작 νšŒν”Ό

cwnd κ°€ OS의 νŠΉμ • μž„κ³„κ°’μ— λ„λ‹¬ν•˜λ©΄ 혼작 νšŒν”Ό λ‹¨κ³„λ‘œ cwnd λ₯Ό μ΅œλŒ€ 1 Segment Size μ”© 늘리게 λ©λ‹ˆλ‹€.

 

3. Fast Retransmit - λΉ λ₯Έ μž¬μ „μ†‘

TCP Reno λŠ” μ€‘λ³΅λœ 3개의 ACK κ°€ λ°œμƒν•˜λ©΄, ν•΄λ‹Ή νŒ¨ν‚·μ΄ μ†μ‹€λ˜μ—ˆλ‹€κ³  νŒλ‹¨ν•˜μ—¬ νƒ€μž„μ•„μ›ƒμ„ 기닀리지 μ•Šκ³  μ¦‰μ‹œ μ†μ‹€λœ νŒ¨ν‚·μ„ μž¬μ „μ†‘ν•©λ‹ˆλ‹€. 이 λ•Œ, TCP Tahoe λŠ” νƒ€μž„μ•„μ›ƒμ΄ λ°œμƒν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦°λ‹€λŠ” 차이에 μ˜ν•΄ TCP Reno κ°€ μž¬μ „μ†‘μ„ 더 λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

4. Fast Recovery - λΉ λ₯Έ 회볡

νŒ¨ν‚·μ˜ 손싀이 λ°œμƒλœ ν›„ TCP Tahoe 와 TCP Reno λͺ¨λ‘ μž„κ³„κ°’μ„ ν˜„μž¬ cwnd 의 절반으둜 μ„€μ •ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, TCP Tahoe λŠ” 이 λ‹¨κ³„μ—μ„œ cwnd 의 값을 1 둜 쀄이며 '느린 μ‹œμž‘' λ‹¨κ³„λ‘œ λŒμ•„κ°€μ§€λ§Œ, TCP Reno λŠ” cwnd λ₯Ό 절반으둜 쀄이고, '혼작 νšŒν”Ό' 단계λ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.

 

 

좜처

- StackOverflow : Differences between TCP and Go Back N

- JSCODE : λ„€νŠΈμ›Œν¬ - TCP & UDP,

- TCP Tahoe and TCP Reno

- wikipedia - TCP congestion control

- GeeksForGeeks - ARQ,