λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸš— Major Study (Bachelor)/🟦 Network

[λ„€νŠΈμ›Œν¬] Network | UDP의 νŠΉμ§•, rdt ν”„λ‘œν† μ½œμ˜ λ°œμ „, GBNκ³Ό SR ν”„λ‘œν† μ½œμ˜ μž₯단점

by UKHYUN22 2022. 10. 12.
728x90

 

μ™œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμžκ°€ TCP 보닀 UDP λ°©μ‹μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜λ €κ³  ν•˜λŠ”μ§€ μ•Œμ•„λ³΄μž. 

 

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 레벨이 데이터 솑신에 λŒ€ν•΄μ„œ μ •κ΅ν•œ μ œμ–΄λ₯Ό ν•  수 μžˆλ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œμ„ΈμŠ€κ°€ 데이터λ₯Ό UDPμ—κ²Œ μ „λ‹¬ν•˜μžλ§ˆμž UDPλŠ” 데이터λ₯Ό UDP μ„Έκ·Έλ¨ΌνŠΈλ‘œ λ§Œλ“€κ³ , μ¦‰μ‹œ κ·Έ μ„Έκ·Έλ¨ΌνŠΈλ₯Ό λ„€νŠΈμ›Œν¬ κ³„μΈ΅μœΌλ‘œ μ „λ‹¬ν•œλ‹€. 이에 λ°˜ν•΄μ„œ TCPλŠ” 혼작 μ œμ–΄ λ©”μ»€λ‹ˆμ¦˜μ„ 가지고 μžˆλ‹€. 반면 UDPλŠ” κΈ°λ³Έ μ„Έκ·Έλ¨ΌνŠΈ 전달 외에 ν•„μš”ν•œ μ–΄λ–€ μΆ”κ°€ κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

두 번째둜 μ—°κ²° 섀정이 μ—†λ‹€λŠ” 것이닀. TCPλŠ” 데이터 전솑을 μ‹œμž‘ν•˜κΈ° 전에 Handshakeλ₯Ό μ‚¬μš©ν•œλ‹€. λ°˜λ©΄μ— UDPλŠ” ν˜•μ‹μ μΈ μ˜ˆλΉ„λ™μž‘ 없이 μ „μ†‘ν•œλ‹€. κ·ΈλŸ¬λ―€λ‘œ UDPλŠ” 연결을 μ„€μ •ν•˜κΈ° μœ„ν•œ μ–΄λ–€ 지연도 μ—†λ‹€. 

 

μ„Έ 번째둜 μ—°κ²° μƒνƒœκ°€ μ—†λ‹€. TCPλŠ” 쒅단 μ‹œμŠ€ν…œμ—μ„œ μ—°κ²° μƒνƒœλ₯Ό μœ μ§€ν•œλ‹€. 이에 λ°˜ν•΄ UDPλŠ” μ—°κ²° μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμœΌλ©° νŒŒλΌλ―Έν„° μ€‘μ˜ μ–΄λ–€ 것도 κΈ°λ‘ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έλž˜μ„œ νŠΉμ • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν• λ‹Ήλœ μ„œλ²„λŠ” TCP보닀 UDPμ—μ„œ λ™μž‘ν•  λ•Œ 더 λ§Žμ€ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μˆ˜μš©ν•  수 μžˆλ‹€.

 

 

 

UDPλŠ” RIP λΌμš°νŒ… ν…Œμ΄λΈ” 갱신에 μ‚¬μš©λœλ‹€. λ˜ν•œ UDPλŠ” λ„€νŠΈμ›Œν¬ 관리 (SNMP) 데이터λ₯Ό μ „λ‹¬ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. λ„€νŠΈμ›Œν¬ 관리 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ„€νŠΈμ›Œν¬κ°€ ν˜Όμž‘ν•œ μƒνƒœμ— μžˆμ„ λ•Œ 자주 λ™μž‘ν•΄μ•Ό ν•˜λ―€λ‘œ μ΄λŸ¬ν•œ κ²½μš°μ—λŠ” UDPκ°€ TCP보닀 μ’‹λ‹€. λ˜ν•œ DNS은 TCP의 μ—°κ²° μ„€μ • 지연을 ν”Όν•˜κΈ° μœ„ν•΄μ„œ UDPμ—μ„œ λ™μž‘ν•œλ‹€. λ˜ν•œ μ‹€μ‹œκ°„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ TCP 혼작 μ œμ–΄κ°€ λ‚˜μœ 영ν–₯을 λ―ΈμΉœλ‹€. κ·Έλž˜μ„œ ν•΄λ‹Ή κ°œλ°œμžλ“€μ€ κ·Έλ“€μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ TCP λŒ€μ‹  UDPμ—μ„œ λ™μž‘ν•˜λ„λ‘ λ§Œλ“ λ‹€.

 

UDPλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œμ„ΈμŠ€λ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό κ°€μ Έμ™€μ„œ 닀쀑화 / 역닀쀑화 μ„œλΉ„μŠ€μ— λŒ€ν•œ μΆœλ°œμ§€ 포트 번호 ν•„λ“œμ™€ λͺ©μ μ§€ 포트 번호 ν•„λ“œλ₯Ό μ²¨λΆ€ν•˜κ³  λ‹€λ₯Έ 두 ν•„λ“œλ“€μ„ μΆ”κ°€ν•œ 후에 μ΅œμ’… μ„Έκ·Έλ¨ΌνŠΈλ₯Ό λ„€νŠΈμ›Œν¬ κ³„μΈ΅μœΌλ‘œ λ„˜κ²¨μ€€λ‹€.

 

 

     UDP 체크섬은 였λ₯˜ κ²€μΆœμ„ μ œκ³΅ν•œλ‹€. 즉, 체크섬은 μ„Έκ·Έλ¨ΌνŠΈκ°€ μΆœλ°œμ§€λ‘œλΆ€ν„° λͺ©μ μ§€λ‘œ μ΄λ™ν–ˆμ„ λ•Œ UDP μ„Έκ·Έλ¨ΌνŠΈ μ•ˆμ˜ λΉ„νŠΈμ— λŒ€ν•œ 변경사항이 μžˆλŠ”μ§€ κ²€μ‚¬ν•˜λŠ” 것이닀. 솑신 μΈ‘μ—μ„œ UDPλŠ” μ„Έκ·Έλ¨ΌνŠΈ μ•ˆμ— μžˆλŠ” λͺ¨λ“  16λΉ„νŠΈ μ›Œλ“œ λ‹¨μœ„λ‘œ λ”ν•˜κ³  이에 λŒ€ν•˜μ—¬ λ‹€μ‹œ 1의 보수λ₯Ό μˆ˜ν–‰ν•˜λ©°, λ§μ…ˆ κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” μ˜€λ²„ν”Œλ‘œμš°λŠ” wrap aroundλ₯Ό ν•œλ‹€.

 

 

각 λΉ„νŠΈλ“€μ„ Bitwise 연산을 μˆ˜ν–‰ν•˜κ³  λ°œμƒν•œ Carry에 λŒ€ν•΄μ„œλŠ” 보수λ₯Ό μ·¨ν•œλ‹€. ν•΄λ‹Ή sum을 κ΅¬ν•˜κ²Œ 된 μƒνƒœμ—μ„œ 보수λ₯Ό κ΅¬ν•˜λ©΄ 체크섬을 ꡬ할 수 μžˆλ‹€. μˆ˜μ‹ μžμ—μ„œλŠ” 체크섬을 ν¬ν•¨ν•œ 4개의 λͺ¨λ“  16λΉ„νŠΈ μ›Œλ“œλ“€μ„ λ”ν•œλ‹€. λ§Œμ•½ νŒ¨ν‚·μ— μ–΄λ–€ 였λ₯˜λ„ μžˆμ§€ μ•Šλ‹€λ©΄ μˆ˜μ‹ μžμ—μ„œμ˜ 합은 1111111111111111이 될 것이닀. λ§Œμ•½ λΉ„νŠΈ μ€‘μ—μ„œ ν•˜λ‚˜λΌλ„ 0이 μžˆλ‹€λ©΄ νŒ¨ν‚·μ— 였λ₯˜κ°€ λ°œμƒν–ˆμ„μ„ ν•  수 μžˆλ‹€.

 

 

신뒰적인 데이터 전솑 연ꡬ에 λŒ€ν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό 보여쀀닀. μƒμœ„ 계측 κ°œμ²΄μ—κ²Œ μ œκ³΅λ˜λŠ” μ„œλΉ„μŠ€ μΆ”μƒν™”λŠ” 데이터가 전솑될 수 μžˆλŠ” 신뒰적인 μ±„λ„μ˜ 신뒰적인 μ±„λ„μ˜ μ„œλΉ„μŠ€ 좔상화닀. 신뒰적인 μ±„λ„μ—μ„œλŠ” μ „μ†‘λœ 데이터가 μ†μƒλ˜κ±°λ‚˜ μ†μ‹€λ˜μ§€ μ•ŠλŠ”λ‹€. 그리고 λͺ¨λ“  λ°μ΄ν„°λŠ” μ „μ†‘λœ μˆœμ„œλŒ€λ‘œ μ „λ‹¬λœλ‹€. 이것은 TCPκ°€ 인터넷 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€ λͺ¨λΈμ΄λ‹€. 이 μž‘μ—…μ€ 신뒰적인 전솑 ν”„λ‘œν† μ½œμ˜ μ•„λž˜μ— μžˆλŠ” 계측이 신뒰적이지 μ•ŠμœΌλ―€λ‘œ μ–΄λ €μ›Œμ§„λ‹€. μ˜ˆλ₯Ό λ“€μ–΄ TCPλŠ” 비신뒰적인 쒅단간 λ„€νŠΈμ›Œν¬ 계측 (IP)의 λ°”λ‘œ μƒμœ„μ— κ΅¬ν˜„λœ 신뒰적인 데이터 전솑 ν”„λ‘œν† μ½œμ΄λ‹€.

 

 

 

ν•΄λ‹Ή 그림은 데이터 전솑 ν”„λ‘œν† μ½œμ— λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 데이터 전솑 ν”„λ‘œν† μ½œμ˜ 솑신 츑은 rdt_send() ν˜ΈμΆœμ— μ˜ν•΄μ„œ μœ„μͺ½μœΌλ‘œλΆ€ν„° 호좜될 것이닀. μˆ˜μ‹  μΈ‘μ—μ„œλŠ” μƒμœ„ κ³„μΈ΅μœΌλ‘œ 전달될 데이터λ₯Ό λ„˜κΈΈ 것이닀. μˆ˜μ‹  μΈ‘μ—μ„œ rdt_rcv()λŠ” νŒ¨ν‚·μ΄ μ±„λ„μ˜ μˆ˜μ‹  μΈ‘μœΌλ‘œλΆ€ν„° λ„μ°©ν–ˆμ„ λ•Œ ν˜ΈμΆœλœλ‹€. rdt ν”„λ‘œν† μ½œμ΄ μƒμœ„ 계측에 데이터λ₯Ό μ „λ‹¬ν•˜λ €κ³  ν•  λ•Œ deleiver_data()λ₯Ό ν˜ΈμΆœν•œλ‹€. μ΄μ œλΆ€ν„° ν”„λ‘œν† μ½œ 데이터 λ‹¨μœ„μ— λŒ€ν•΄ μ„Έκ·Έλ¨ΌνŠΈλ³΄λ‹€λŠ” νŒ¨ν‚·μ΄λΌλŠ” μš©μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€.

 

 

λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” 사건은 λ³€ν™”λ₯Ό ν‘œκΈ°ν•˜λŠ” 평행선 μœ„μ— λ‚˜νƒ€λ‚Έλ‹€. 그리고 μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ μ·¨ν•΄μ§€λŠ” μ•‘μ…˜μ€ 평행선 μ•„λž˜μ— λ‚˜νƒ€λ‚Έλ‹€. rdt의 솑신 츑은 rdt_send(data) μ΄λ²€νŠΈμ— μ˜ν•΄ μƒμœ„ κ³„μΈ΅μœΌλ‘œλΆ€ν„° 데이터λ₯Ό 받아듀이고 데이터λ₯Ό ν¬ν•¨ν•œ νŒ¨ν‚·μ„ μƒμ„ ν•œλ‹€. (make_pkt) μ‹€μ œλ‘œ rdt_send() μ΄λ²€νŠΈλŠ” μƒμœ„ 계측 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν”„λ‘œμ‹œμ € ν˜ΈμΆœμ— μ˜ν•΄μ„œ λ°œμƒν•œλ‹€.

 

μˆ˜μ‹  μΈ‘μ—μ„œ rdtλŠ” rdt_rcv(packet) μ΄λ²€νŠΈμ— μ˜ν•΄ ν•˜μœ„μ˜ μ±„λ„λ‘œλΆ€ν„° νŒ¨ν‚·μ„ μˆ˜μ‹ ν•˜κ³ , νŒ¨ν‚·μœΌλ‘œλΆ€ν„° 데이터λ₯Ό μΆ”μΆœν•œ ν›„ 데이터λ₯Ό μƒμœ„ κ³„μΈ΅μœΌλ‘œ μ „λ‹¬ν•œλ‹€. μ΄λ²€νŠΈλŠ” ν•˜μœ„ 계측 ν”„λ‘œν† μ½œλ‘œλΆ€ν„°μ˜ ν”„λ‘œμ‹œμ € 호좜(rdt_rcv)에 μ˜ν•΄μ„œ λ°œμƒν•œλ‹€.

 

 

 

 

ν•˜μœ„ μ±„λ„μ˜ 더 μ‹€μ§ˆ λͺ¨λΈμ€ νŒ¨ν‚· μ•ˆμ˜ λΉ„νŠΈλ“€μ΄ ν•˜μœ„ μ±„λ„μ—μ„œ μ†μƒλ˜λŠ” λͺ¨λΈμ΄λ‹€. κ·ΈλŸ¬ν•œ λΉ„νŠΈ 였λ₯˜λŠ” νŒ¨ν‚·μ΄ 전솑 λ˜λŠ” μ „νŒŒλ˜κ±°λ‚˜ 버퍼링될 λ•Œ λ„€νŠΈμ›Œν¬μ˜ 물리적 ꡬ성 μš”μ†Œμ—μ„œ 일반적으둜 λ°œμƒν•œλ‹€. μ œμ–΄λ©”μ‹œμ§€κ°€ μΆ”κ°€λ˜λŠ”λ° μˆ˜μ‹ λ˜μ—ˆλŠ”μ§€ λ˜λŠ” 잘λͺ» μˆ˜μ‹ λ˜μ–΄ 반볡이 ν•„μš”ν•œμ§€λ₯Ό μˆ˜μ‹ μžκ°€ μ†‘μ‹ μžμ—κ²Œ μ•Œλ € 쀄 수 있게 ν•œλ‹€.

 

ν•˜μ§€λ§Œ rdt2.0은 잘 λ™μž‘λ˜λŠ” 것 κ°™μ§€λ§Œ 치λͺ…적인 결함이 μžˆλ‹€. ACK λ˜λŠ” NAK νŒ¨ν‚·μ΄ 손상될 수 μžˆλ‹€λŠ” κ°€λŠ₯성을 κ³ λ €ν•˜μ§€ μ•Šμ•˜λ‹€. μ†‘μ‹ μž λŒ€ μˆ˜μ‹ μž μ±„λ„λ‘œ 쀑볡 νŒ¨ν‚·μ„ μ „μ†‘ν•œλ‹€. ν•˜μ§€λ§Œ μ΄κ²ƒμ˜ λ¬Έμ œμ μ€ ACKλ‚˜ NAKκ°€ μ†‘μ‹ μžμ—κ²Œ μ •ν™•ν•˜κ²Œ μˆ˜μ‹ λ˜μ—ˆλŠ” 지λ₯Ό μ•Œ 수 μ—†λ‹€λŠ” 것이닀. κ·ΈλŸ¬λ―€λ‘œ λ„μ°©ν•˜λŠ” νŒ¨ν‚·μ΄ μƒˆλ‘œμš΄ 데이터λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ” 것인지, μ•„λ‹ˆλ©΄ μž¬μ „μ†‘μΈμ§€λ₯Ό 사전에 μ•Œ 수 μ—†λ‹€.

 

이에 λŒ€ν•œ μƒˆλ‘œμš΄ λ¬Έμ œμ— λŒ€ν•œ κ°„λ‹¨ν•œ 해결책은 데이터 νŒ¨ν‚·μ— μƒˆλ‘œμš΄ ν•„λ“œλ₯Ό μΆ”κ°€ν•˜κ³  이 ν•„λ“œ μ•ˆμ— μˆœμ„œλ²ˆν˜Έλ₯Ό μ‚½μž…ν•˜λŠ” λ°©μ‹μœΌλ‘œ 데이터 νŒ¨ν‚·μ— μ†‘μ‹ μžκ°€ 번호λ₯Ό λΆ™μ΄λŠ” 것이닀.

 

 

ν”„λ‘œν† μ½œ rdt 2.1은 μˆ˜μ‹ μžλ‘œλΆ€ν„° μ†‘μ‹ μžκΉŒμ§€μ˜ 긍정 확인응닡과 λΆ€μ • 확인응닡을 λͺ¨λ‘ ν¬ν•¨ν•œλ‹€.

 

 

μˆœμ„œκ°€ 바뀐 νŒ¨ν‚·μ΄ μˆ˜μ‹ λ˜λ©΄ μˆ˜μ‹ μžλŠ” 이미 전에 μˆ˜μ‹ ν•œ νŒ¨ν‚·μ— λŒ€ν•œ 긍정 확인응닡을 μ „μ†‘ν•œλ‹€. μ†μƒλœ νŒ¨ν‚·μ΄ μˆ˜μ‹ λ˜λ©΄ μˆ˜μ‹ μžλŠ” λΆ€μ • 확인응닡을 μ „μ†‘ν•œλ‹€. NAKλ₯Ό μ†‘μ‹ ν•˜λŠ” 것 λŒ€μ‹ μ—, κ°€μž₯ μ΅œκ·Όμ— μ •ν™•ν•˜κ²Œ μˆ˜μ‹ λœ νŒ¨ν‚·μ— λŒ€ν•΄ ACKλ₯Ό μ†‘μ‹ ν•¨μœΌλ‘œμ¨ NAKλ₯Ό μ†‘μ‹ ν•œ 것과 같은 효과λ₯Ό 얻을 수 μžˆλ‹€.  κ°™μ€ νŒ¨ν‚·μ— λŒ€ν•΄ 2 개의 ACKλ₯Ό μˆ˜μ‹ ν•œ μ†‘μ‹ μžλŠ” μˆ˜μ‹ μžκ°€ 두 번 ACKν•œ νŒ¨ν‚·μ˜ λ‹€μŒ νŒ¨ν‚·μ„ μ •ν™•ν•˜κ²Œ μˆ˜μ‹ ν•˜μ§€ λͺ»ν–ˆλ‹€λŠ” 것을 μ•ˆλ‹€. λΉ„νŠΈ 였λ₯˜λ₯Ό κ°–λŠ” 채널을 μœ„ν•œ NAK μ—†λŠ” 신뒰적인 데이터 전솑 ν”„λ‘œν† μ½œμ€ rdt 2.2에 ν•΄λ‹Ήν•œλ‹€.

 

 

νŒ¨ν‚· 손싀이 μΌμ–΄λ‚˜λŠ” κ²½μš°λŠ” μ–΄λ–»κ²Œ μ²˜λ¦¬ν•  것인가? μ†‘μ‹ μžκ°€ 데이터 νŒ¨ν‚·μ„ μ „μ†‘ν•˜κ³  νŒ¨ν‚· λ˜λŠ” μˆ˜μ‹ μžμ˜ νŒ¨ν‚·μ— λŒ€ν•œ ACKλ₯Ό μ†μ‹€ν–ˆλ‹€κ³  κ°€μ •ν•˜μž. μ–΄λŠ κ²½μš°μ—λ‚˜ μ†‘μ‹ μžλŠ” μ–΄λ– ν•œ 응닡도 μ—†λ‹€. λ§Œμ•½ μ†‘μ‹ μžκ°€ νŒ¨ν‚·μ„ μžƒμ–΄λ²„λ Έλ‹€λŠ” 것을 ν™•μ‹ ν•  μ •λ„λ‘œ μΆ©λΆ„ν•œ μ‹œκ°„μ„ 기닀릴 수만 μžˆλ‹€λ©΄, 데이터 νŒ¨ν‚·μ€ κ°„λ‹¨ν•˜κ²Œ μž¬μ „μ†‘λ  수 μžˆλ‹€.

 

 

 

κ·Έλ ‡λ‹€λ©΄ νŒ¨ν‚·μ„ μ†μ‹€ν–ˆλ‹€λŠ” 것을 ν™•μ‹ ν•˜κΈ° μœ„ν•΄ μ–Όλ§ˆλ‚˜ μ˜€λž«λ™μ•ˆ κΈ°λ‹€λ €μ•Ό ν• κΉŒ? μ†‘μ‹ μžλŠ” 적어도 μ†‘μ‹ μžμ™€ μˆ˜μ‹ μž μ‚¬μ΄μ˜ μ™•λ³΅μ‹œκ°„ 지연에 μˆ˜μ‹  μΈ‘μ—μ„œ νŒ¨ν‚·μ„ μ²˜λ¦¬ν•˜λŠ” 데 ν•„μš”ν•œ μ‹œκ°„μ„ λ”ν•œ 만큼 κΈ°λ‹€λ¦°λ‹€. λ§Žμ€ λ„€νŠΈμ›Œν¬μ—μ„œλŠ” 이 μ΅œμ•…μ˜ μ΅œλŒ€ μ§€μ—°μ‹œκ°„μ€ μ˜ˆμΈ‘ν•˜κΈ°λ„μ‘°μ°¨ 맀우 μ–΄λ ΅λ‹€. λ”μš±μ΄, μ΄μƒμ μœΌλ‘œλŠ” ν”„λ‘œν† μ½œμ΄ νŒ¨ν‚· 손싀을 κ°€λŠ₯ν•œ ν•œ 빨리 볡ꡬ해야 ν•œλ‹€. 사건 기반의 μž¬μ „μ†‘ λ©”μ»€λ‹ˆμ¦˜μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄, 주어진 μ‹œκ°„μ΄ 경과된 후에 μ†‘μ‹ μžλ₯Ό 쀑단할 수 μžˆλŠ” μΉ΄μš΄νŠΈλ‹€μš΄ 타이머가 ν•„μš”ν•˜λ‹€.

 

ν•΄λ‹Ή 그림은 νŒ¨ν‚·μ΄ μ†μƒλ˜κ±°λ‚˜ 손싀될 수 μžˆλŠ” μ±„λ„μ—μ„œ 데이터λ₯Ό μ‹ λ’°μ μœΌλ‘œ μ „μ†‘ν•˜λŠ” ν”„λ‘œν† μ½œμΈ rdt 3.0 에 λŒ€ν•œ μ†‘μ‹ μž FSM을 보여쀀닀.

 

μ†‘μ‹ μžμ˜ κ΄€μ μ—μ„œ μž¬μ „μ†‘μ€ λ§Œλ³‘ν†΅μΉ˜μ•½κ³Ό κ°™λ‹€. μ†‘μ‹ μžλŠ” 데이터 νŒ¨ν‚·μ΄ μ†μ‹€λ˜μ—ˆλŠ”μ§€, ACKκ°€ μ†μ‹€λ˜μ—ˆλŠ”μ§€, νŒ¨ν‚· λ˜λŠ” ACKκ°€ λ‹¨μˆœνžˆ μ§€λ‚˜μΉ˜κ²Œ μ§€μ—°λœ 것인지λ₯Ό μ•Œμ§€ λͺ»ν•œλ‹€. μ‹œκ°„ 기반의 μž¬μ „μ†‘ λ§€μ»€λ‹ˆμ¦˜μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄, 주어진 μ‹œκ°„μ΄ 경과된 후에 μ†‘μ‹ μžλ₯Ό 쀑단할 수 μžˆλŠ” μΉ΄μš΄νŠΈλ‹€μš΄ 타이머가 ν•„μš”ν•˜λ‹€.

 

(1) 맀 νŒ¨ν‚·μ΄ μ†‘μ‹ λœ μ‹œκ°„μ— 타이머λ₯Ό μ‹œμž‘ν•¨

(2) 타이머 μΈν„°λŸ½νŠΈμ— λ°˜μ‘ν•¨

(3) 타이머λ₯Ό 멈좀

 

μ‹œκ°„μ€ λ‹€μ΄μ–΄κ·Έλž¨μ˜ μœ„λ‘œλΆ€ν„° μ•„λž˜λ‘œ 움직인닀. 즉 νŒ¨ν‚·μ— λŒ€ν•œ μˆ˜μ‹  μ‹œκ°„μ€ 전솑 지연과 μ „νŒŒ 지연 λ•Œλ¬Έμ— νŒ¨ν‚· 전솑 μ‹œκ°„λ³΄λ‹€ 더 λŠ¦λ‹€.

 

λ‹€μŒ κ·Έλ¦Όμ—μ„œ λ³΄μ΄λŠ” 검은색 κ΄„ν˜ΈλŠ” 타이머가 μ„€μ •λœ 후에 νƒ€μž„ μ•„μ›ƒλœ μ‹œκ°„μ„ 가리킨닀. 이 ν”„λ‘œν† μ½œμ˜ μ’€ 더 μ„Έμ„Έν•œ 뢀뢄은 ν›„λ°˜λΆ€μ— λ‚˜μ˜€λ―€λ‘œ λ‚˜μ€‘μ— μ΄μ–΄μ„œ μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² λ‹€. νŒ¨ν‚·μ˜ μˆœμ„œλ²ˆν˜Έκ°€ 0κ³Ό 1이 λ²ˆκ°ˆμ•„ λ‚˜νƒ€λ‚˜λ―€λ‘œ, ν”„λ‘œν† μ½œ rdt 3.0은 λ•Œλ•Œλ‘œ Alternating-bit ν”„λ‘œν† μ½œμ΄λΌκ³  λΆ€λ₯Έλ‹€.

 

ν”„λ‘œν† μ½œ rdt 3.0은 κΈ°λŠ₯적으둜 μ •ν™•ν•œ ν”„λ‘œν† μ½œμ΄λ‹€. κ·ΈλŸ¬λ‚˜ rdt 3.0의 핡심적인 μ„±λŠ₯ λ¬Έμ œλŠ” rdt 3.0 이 Stop-and-wait ν”„λ‘œν† μ½œμ΄λΌλŠ” 것이닀. 미ꡭ의 μ„œλΆ€μ™€ 동뢀에 각각 μœ„μΉ˜ν•œ 쒅단 호슀트의 경우λ₯Ό κ³ λ €ν•΄λ³΄μž. 두 쒅단 μ‹œμŠ€ν…œ μ‚¬μ΄μ˜ RTTλŠ” λŒ€λž΅ 30msec 이닀. 이것듀이 1Gbps 전솑λ₯ μ„ 가진 채널에 μ˜ν•΄μ„œ μ—°κ²°λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •ν•˜μž. νŒ¨ν‚·λ‹Ή 1000 λ°”μ΄νŠΈ (8000bits) 의 νŒ¨ν‚· 크기λ₯Ό 가지고 1Gbps 링크둜 νŒ¨ν‚·μ„ μ‹€μ œ μ „μ†‘ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ€ 8 λ§ˆμ΄ν¬λ‘œμ„Έμ»¨λ“œμ΄λ‹€.

 

 

 

λ‹€μŒ 그림처럼 전솑 ν›„ λŒ€κΈ° ν”„λ‘œν† μ½œμ„ 가지고 μ†‘μ‹ μžκ°€ t = 0 μ—μ„œ 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μ‹œμž‘ν•œλ‹€λ©΄ 8 (λ§ˆμ΄ν¬λ‘œμ„Έμ»¨λ“œ)μ—μ„œ λ§ˆμ§€λ§‰ λΉ„νŠΈκ°€ 솑신 츑의 μ±„λ„λ‘œ λ“€μ–΄κ°„λ‹€. 이제 νŒ¨ν‚·μ€ 15msec λ™μ•ˆ λŒ€λ₯™μ„ νš‘λ‹¨ν•˜κ³  16.008 msecμ—μ„œ μˆ˜μ‹ μΈ‘μœΌλ‘œ λ§ˆμ§€λ§‰ λΉ„νŠΈκ°€ λ„μ°©ν•œλ‹€. ACK νŒ¨ν‚·μ€ 전솑 μ‹œκ°„μ„ λ¬΄μ‹œν•  수 μžˆμ„ 만큼이고 μˆ˜μ‹ μžλŠ” 데이터 νŒ¨ν‚·μ˜ λ§ˆμ§€λ§‰ λΉ„νŠΈκ°€ μˆ˜μ‹ λ˜μž 마자 ACK νŒ¨ν‚·μ„ 솑신할 수 μžˆλ‹€κ³  κ°€μ •ν•˜μž. μ†‘μ‹ μž 츑에 ACK νŒ¨ν‚·μ€ 30.008 msec 후에 λ‹€μ‹œ 받을 수 μžˆλ‹€. 

 

이λ₯Ό 생각해보면 30.0008 msec 쀑 0.008 msec λ™μ•ˆλ§Œ 데이터λ₯Ό μ „μ†‘ν•œ μ…ˆμ΄λ‹€.μ†‘μ‹ μžκ°€ 채널을 톡해 μ‹€μ œμ μœΌλ‘œ λΆ„μ£Όν•˜κ²Œ λΉ„νŠΈλ₯Ό μ „μ†‘ν•˜λŠ” 데만 κ±Έλ¦° μ‹œκ°„μ„ 이용λ₯ (Utilization) μˆ˜μ‹μœΌλ‘œ μ •μ˜ν•œλ‹€λ©΄, 0.00027 에 ν•΄λ‹Ήν•˜λŠ” 이용λ₯ μ„ κ°€μ§„λ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.

 

해결책은 확인 응닡을 기닀리지 μ•Šκ³  μ—¬λŸ¬ νŒ¨ν‚·μ„ μ „μ†‘ν•˜λ„λ‘ ν—ˆμš©ν•˜λŠ” 것이닀.

 

 

이 μ‚¬μ§„μ˜ 경우 μ†‘μ‹ μžκ°€ 3개의 νŒ¨ν‚·μ„ μ „μ†‘ν•˜λ„λ‘ ν—ˆμš©ν•œλ‹€λ©΄ μ†‘μ‹ μžμ˜ 이용λ₯ μ€ 3λ°°κ°€ 될 κ²ƒμ΄λΌλŠ” 것을 보여쀀닀. λ§Žμ€ 전솑 쀑인 μ†‘μ‹ μž-μˆ˜μ‹ μž νŒ¨ν‚·μ„ νŒŒμ΄ν”„λΌμΈμ— μ±„μ›Œ λ„£μŒμœΌλ‘œμ¨ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€. 이 κΈ°μˆ μ„ νŒŒμ΄ν”„ 라이닝이라고 λΆ€λ₯Έλ‹€.

 

 

GBN ν”„λ‘œν† μ½œμ—μ„œ μ†‘μ‹ μžλŠ” 확인응닡을 기닀리지 μ•Šκ³  μ—¬λŸ¬ νŒ¨ν‚·μ„ 전솑할 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ νŒŒμ΄ν”„λΌμΈμ—μ„œ 확인응닡이 μ•ˆ 된 νŒ¨ν‚·μ˜ μ΅œλŒ€ ν—ˆμš© 수 N보닀 크지 μ•Šμ•„μ•Ό ν•œλ‹€. 확인 응닡이 μ•ˆ 된 κ°€μž₯ 였래된 νŒ¨ν‚·μ˜ μˆœμ„œλ²ˆν˜Έλ₯Ό base둜 μ •μ˜ν•˜κ³  μ‚¬μš©λ˜μ§€ μ•Šμ€ κ°€μž₯ μž‘μ€ μˆœμ„œλ²ˆν˜Έλ₯Ό nextseqnum으둜 μ •μ˜ν•œλ‹€λ©΄ μˆœμ„œλ²ˆν˜Έμ˜ λ²”μœ„μ—μ„œ 총 4개의 ꡬ간을 확인할 수 μžˆλ‹€.

μ΄ˆλ‘μƒ‰ ꡬ간 - 이미 전솑 되고 ν™•μΈμ‘λ‹΅λœ νŒ¨ν‚·

λ…Έλž€μƒ‰ ꡬ간 - 솑신은 λ˜μ—ˆμ§€λ§Œ 아직 확인 μ‘λ‹΅λ˜μ§€ μ•Šμ€ νŒ¨ν‚·

νŒŒλž€μƒ‰ ꡬ간 - μƒμœ„ κ³„μΈ΅μœΌλ‘œλΆ€ν„° 데이터가 λ„μ°©ν•˜λ©΄ λ°”λ‘œ 전솑할 수 μžˆλŠ” νŒ¨ν‚·

투λͺ…색 ꡬ간 - νŒŒμ΄ν”„λΌμΈμ—μ„œ 확인응닡이 μ•ˆ 된 νŒ¨ν‚·μ˜ 확인응닡이 도착할 λ•ŒκΉŒμ§€ μ‚¬μš©λ  수 μ—†λ‹€.

 

base와 nextseqnum μ΄λΌλŠ” λ³€μˆ˜λ₯Ό μΆ”κ°€ν–ˆλ‹€. 이 FSM을 Extended FSM이라고 λΆ€λ₯Έλ‹€. 

 

- μƒμœ„λ‘œλΆ€ν„° 호좜

rdt_send()κ°€ μœ„λ‘œλΆ€ν„° 호좜되면, μ†‘μ‹ μžλŠ” 첫째둜 μœˆλ„μš°κ°€ 가득 μ°ΌλŠ”μ§€, 즉 N개의 아직 ν™•μΈμ‘λ‹΅λ˜μ§€ μ•Šμ€ νŒ¨ν‚·μ΄ μžˆλŠ” 지λ₯Ό ν™•μΈν•œλ‹€. (아직 ACKλ₯Ό 받지 μ•Šμ€ νŒ¨ν‚·μ΄ μžˆλŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 절차) μ μ ˆν•˜κ²Œ λ³€μˆ˜λ“€μ΄ κ°±μ‹ λœλ‹€.

- ACK의 μˆ˜μ‹ 

GBN ν”„λ‘œν† μ½œμ—μ„œ μˆœμ„œλ²ˆν˜Έ n을 가진 νŒ¨ν‚·μ— λŒ€ν•œ 확인응닡은 λˆ„μ ν™•μΈ μ‘λ‹΅μœΌλ‘œ μΈμ‹λœλ‹€.

 

μˆ˜μ‹ μžμ˜ 행동도 λ‹¨μˆœν•˜λ‹€. λ§Œμ•½ μˆœμ„œλ²ˆν˜Έ n을 가진 νŒ¨ν‚·μ΄ 였λ₯˜ 없이 μˆœμ„œλŒ€λ‘œ μˆ˜μ‹ λœλ‹€λ©΄, μˆ˜μ‹ μžλŠ” νŒ¨ν‚· n에 λŒ€ν•œ ACKλ₯Ό μ†‘μ‹ ν•˜κ³  μƒμœ„ 계측에 νŒ¨ν‚·μ˜ 데이터 뢀뢄을 μ „λ‹¬ν•œλ‹€. κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” μˆ˜μ‹ μžλŠ” κ·Έ νŒ¨ν‚·μ„ 버리고 κ°€μž₯ μ΅œκ·Όμ— μ œλŒ€λ‘œ μˆ˜μ‹ λœ μˆœμ„œμ˜ νŒ¨ν‚·μ— λŒ€ν•œ ACKλ₯Ό μž¬μ „μ†‘ν•œλ‹€.

 

GBN ν”„λ‘œν† μ½œμ—μ„œ μˆ˜μ‹ μžλŠ” μˆœμ„œκ°€ 잘λͺ»λœ νŒ¨ν‚·λ“€μ„ 버린닀. 이것은 μ†‘μ‹ μž 버퍼링을 κ°„λ‹¨ν•˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ μ†‘μ‹ μžλŠ” μœˆλ„μš° μƒμœ„μ™€ ν•˜μœ„ 경계와 이 μœˆλ„μš° μ•ˆμ— μžˆλŠ” nextseqnum μœ„μΉ˜λ₯Ό μœ μ§€ν•΄μ•Ό ν•˜λŠ” λ°˜λ©΄μ—, μˆ˜μ‹ μžκ°€ μœ μ§€ν•΄μ•Ό ν•˜λŠ” 것은 단지 λ‹€μŒ μˆœμ„œ νŒ¨ν‚·μ˜ μˆœμ„œλ²ˆν˜Έμ΄λ‹€.

 

μˆ˜μ‹ μžμ—μ„œ 였λ₯˜κ°€ λ°œμƒν•œ νŒ¨ν‚·μ„ μˆ˜μ‹ ν–ˆλ‹€κ³  μ˜μ‹¬λ˜λŠ” νŒ¨ν‚·λ§Œμ„ μ†‘μ‹ μžκ°€ λ‹€μ‹œ μ „μ†‘ν•˜λ―€λ‘œ λΆˆν•„μš”ν•œ μž¬μ „μ†‘μ„ ν”Όν•œλ‹€. SR μˆ˜μ‹ μžλŠ” νŒ¨ν‚·μ˜ μˆœμ„œμ™€λŠ” λ¬΄κ΄€ν•˜κ²Œ 손상 없이 μˆ˜μ‹ λœ νŒ¨ν‚·μ— λŒ€ν•œ 확인응닡을 ν•  것이닀. μˆœμ„œκ°€ ν‹€λ¦° νŒ¨ν‚·μ€ λΆ„μ‹€λœ νŒ¨ν‚·μ΄ μˆ˜μ‹ λ  λ•ŒκΉŒμ§€ 버퍼에 μ €μž₯ν•˜κ³ , μ†μ‹€λœ νŒ¨ν‚·μ΄ μˆ˜μ‹ λœ μ‹œμ μ—μ„œ 일련의 νŒ¨ν‚·μ„ μˆœμ„œλŒ€λ‘œ μƒμœ„κ³„μΈ΅μ— 전달할 수 μžˆλ‹€.