μλ‘
μ΄μ κ²μκΈμμλ UDPμ λν΄μ μ λ¦¬ν΄ λ³΄μμ΅λλ€. UDPλ λΉ μ°κ²°νμΌλ‘ μ λ’°μ±μ 보μ₯νμ§ μλ λ°λ©΄ TCPλ μ°κ²° μ§ν₯νμΌλ‘ μ λ’°μ±μ 보μ₯νλ€λ νΉμ§μ΄ μμμ΅λλ€.
μ΄λ² κ²μκΈμμλ TCPμ λν΄ μ 리νκΈ°μ μμ μ΄λ»κ² μ λ’°μ± μλ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμμ§μ λν΄μ λ¨Όμ μμλ³΄κ² μ΅λλ€.
rdt1. 0
rdt(reliable data transfer): μ λ’°μ μΈ λ°μ΄ν° μ μ‘
rdt1.0μ μλ²½νκ² μ λ’°μ μΈ μ±λ μμμμ μ λ’°μ μΈ λ°μ΄ν° μ μ‘μ ννν©λλ€.
rdt 1.0 μ‘μ μμ μμ μμ λν μ νμν λ¨Έμ (finite-state machine, FSM)μ μ΄λ―Έμ§λ μλμ κ°μ΅λλ€.
μ μ΄λ―Έμ§μ (a)μμ FSMμ μ‘μ μμ λμμ μ μνκ³ , (b)μ FSMμ μμ μμ λμμ μ μν©λλ€.
rdtμ μ‘μ μΈ‘μ rdt_send(data) μ΄λ²€νΈμ μν΄ μμ κ³μΈ΅μΌλ‘λΆν° λ°μ΄ν°λ₯Ό λ°μλ€μ΄κ³ λ°μ΄ν°λ₯Ό ν¬ν¨ν ν¨ν·μ μμ±ν©λλ€(make_pkt(data)). κ·Έλ¦¬κ³ λ ν ν¨ν·μ μ±λλ‘ μ‘μ ν©λλ€. μ€μ λ‘ rdt_send(data) μ΄λ²€νΈλ μμ κ³μΈ΅ μ ν리μΌμ΄μ μ νλ‘μμ νΈμΆ(μ:rdt_send(data))μ μν΄μ λ°μν©λλ€.
μμ μΈ‘μμ, rdtλ rdt_rcv(packet) μ΄λ²€νΈμ μν΄ νμμ μ±λλ‘λΆν° ν¨ν·μ μμ νκ³ , ν¨ν·μΌλ‘λΆν°(extract(packet, data)μ μν΄μ) λ°μ΄ν°λ₯Ό μΆμΆν ν λ°μ΄ν°λ₯Ό μμ κ³μΈ΅μΌλ‘ μ λ¬ν©λλ€(deliver_data(data)). rdt_rcv(packet) μ΄λ²€νΈλ νμ κ³μΈ΅ νλ‘ν μ½λ‘λΆν°μ νλ‘μμ νΈμΆ(μ: rdt_rcv())μ μν΄μ λ°μν©λλ€.
μ΄λ¬ν κ°λ¨ν νλ‘ν μ½μμλ λ°μ΄ν° λ¨μμ ν¨ν· λ¨μμ μ°¨μ΄μ μ΄ μμΌλ©°, λͺ¨λ ν¨ν· νλ¦μ μ‘μ μλ‘λΆν° μμ μκΉμ§ μ λλ€. μ¦, μμ ν μ λ’°μ μΈ μ±λμμλ μ€λ₯κ° μκΈΈ μ μμΌλ―λ‘ μμ μΈ‘μ΄ μ‘μ μΈ‘μκ² μ΄λ ν νΌλλ°±(feedback)λ μ 곡ν νμκ° μμ΅λλ€.
rdt2.0
rdt(reliable data transfer): μ λ’°μ μΈ λ°μ΄ν° μ μ‘
rdt2.0μ λΉνΈ μ€λ₯κ° μλ μ±λ μμμμ μ λ’°μ λ°μ΄ν° μ μ‘μ ννν©λλ€.
νμ μ±λμ λ μ€μ§ λͺ¨λΈμ ν¨ν· μμ λΉνΈλ€μ΄ νμ μ±λμμ μμλλ λͺ¨λΈμ λλ€. μ΄λ¬ν μ±λμμ μ λ’°μ μΈ ν΅μ μ μν νλ‘ν μ½μ κΈμ νμΈ μλ΅(positive acknowledgment)μ λΆμ νμΈ μλ΅(negative acknowledgment)μ μ¬μ©ν©λλ€.
μ΄λ¬ν λ μλ΅μ λ°μ΄ν°κ° μ ννκ² μμ λμλμ§ λλ μλͺ» μμ λμ΄ λ°λ³΅μ΄ νμνμ§λ₯Ό μμ μκ° μ‘μ μμκ² μλ € μ€ μ μκ² ν©λλ€.
μ μ΄λ―Έμ§λ μ€λ₯ κ²μΆ, κΈμ νμΈ μλ΅ κ·Έλ¦¬κ³ λΆμ νμΈ μλ΅λ€μ κ³ λ €ν rdt2.0μ FSMμ 보μ΄κ³ μμ΅λλ€.
rdt2.0μ μ‘μ μΈ‘μ 2κ°μ μνλ₯Ό κ°μ§λλ€. (a)μ μΌμͺ½μ μνμμ, μ‘μ μΈ‘ νλ‘ν μ½μ μμ κ³μΈ΅μΌλ‘λΆν° λ°μ΄ν°κ° μ λ¬λκΈ°λ₯Ό κΈ°λ€λ¦½λλ€. rdt_send(data) μ΄λ²€νΈκ° λ°μνλ©΄, μ‘μ μλ ν¨ν· 체ν¬μ¬κ³Ό ν¨κ» μ μ‘λ λ°μ΄ν°λ₯Ό ν¬ν¨νλ ν¨ν·(sndpkt)μ μμ±νκ³ , κ·Έ ν¨ν·μ udt_send(sndpkt) λμμ ν΅ν΄ μ μ‘ν©λλ€.
체ν¬μ¬μ λν λ΄μ©: https://dkswnkk.tistory.com/570
(a)μ μ€λ₯Έμͺ½μ μνμμλ μ‘μ μ νλ‘ν μ½μ μμ μλ‘λΆν° ACK λλ NAK ν¨ν·μ κΈ°λ€λ¦½λλ€. λ§μ½ ACK ν¨ν·μ΄ μμ λλ€λ©΄(rdt_rcv(rcvpkt) && isACK(rcvpkt)) μ‘μ μλ κ°μ₯ μ΅κ·Όμ μ μ‘λ ν¨ν·μ΄ μ ννκ² μμ λμλ€λ κ²μ μκ² λ©λλ€. κ·Έλμ νλ‘ν μ½μ μμ κ³μΈ΅μΌλ‘λΆν° λ°μ΄ν°λ₯Ό κΈ°λ€λ¦¬λ μνλ‘ λμκ°λλ€. λ§μ½ NAKκ° μμ λλ©΄ νλ‘ν μ½μ λ§μ§λ§ ν¨ν·μ μ¬μ μ‘νκ³ μ¬μ μ‘λ λ°μ΄ν° ν¨ν·μ λν μλ΅μΌλ‘ μμ μμ μν΄ μλ΅λλ ACK λλ NAKλ₯Ό κΈ°λ€λ¦½λλ€.
μ‘μ μκ° ACK λλ NAKλ₯Ό κΈ°λ€λ¦¬λ μνμ μμ λλ μμ κ³μΈ΅μΌλ‘λΆν° λ μ΄μμ λ°μ΄ν°λ₯Ό μ λ¬ λ°μ μ μμ΅λλ€. μ¦, rdt_send() μ΄λ²€νΈκ° λ°μν μ μμΌλ©° κ·Έλ¬λ―λ‘ μ‘μ μλ μμ μκ° νμ¬μ ν¨ν·μ μ ννκ² μμ νλ€λ κ²μ νμ νκΈ° μ κΉμ§ μλ‘μ΄ λ°μ΄ν°λ₯Ό μ λ¬νμ§ μμ΅λλ€. μ΄λ¬ν νΉμ§ λλ¬Έμ rdt2.0κ³Ό κ°μ νλ‘ν μ½μ μ μ‘ - ν - λκΈ°(stop-and-wait) νλ‘ν μ½μ΄λΌκ³ λ λΆλ¦ λλ€.
μ¬μ€ rdt2.0 νλ‘ν μ½μ μ λμνλ κ² κ°μ§λ§ ACK λλ NAK ν¨ν·μ΄ μμλ μ μλ€λ κ°λ₯μ±μ κ³ λ €νμ§ μμλ€λ μΉλͺ μ μΈ κ²°ν¨μ΄ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν κ°λ¨ν ν΄κ²°μ± μΌλ‘ λ°μ΄ν° ν¨ν·μ μλ‘μ΄ νλλ₯Ό μΆκ°νκ³ μ΄ νλ μμ μμ λ²νΈ(sequence number)λ₯Ό μ½μ νλ λ°©μμΌλ‘ λ°μ΄ν° ν¨ν·μ μ‘μ μκ° λ²νΈλ₯Ό λΆμ΄λ λ°©λ²μ΄ μμ΅λλ€. μ€μ λ‘ TCPμμλ μ΄λ¬ν λ°©μμ μ¬μ©νκ³ μμ΅λλ€.
μμ μλ μμ λ ν¨ν·μ΄ μ¬μ μ‘ μΈμ§λ₯Ό κ²°μ ν λλ μ΄ μμλ²νΈλ§ νμΈνλ©΄ λ©λλ€. μ΄λ¬ν κ°λ¨ν stop-and-wait νλ‘ν μ½μ κ²½μ°, ν λΉνΈ μμ λ²νΈλ©΄ μ‘μ μκ° μ΄μ μ μ μ‘λ ν¨ν·μ λ€μ μ μ‘ν κ²μΈμ§, μλλ©΄ μλ‘μ΄ ν¨ν·μ μ μ‘ν κ²μΈμ§λ₯Ό μΆ©λΆν μ μ μμ΅λλ€.
μΌλ°μ μΌλ‘ rdt2.0μ μ±λμ λΉνΈ μ€λ₯λ§ μλ μ±λμ΄κ³ , ν¨ν·μ μμ€νμ§ μλ μ±λμ΄λΌκ³ κ°μ νκ³ μμΌλ―λ‘, ACKμ NAK ν¨ν·λ€μ μ΄λ€ ν¨ν· μμ νμΈμλ΅μ νλ ν¨ν·μ μμ λ²νΈλ₯Ό νμν νμλ μμ΅λλ€.
μ κ·Έλ¦Όλ€μ rdt2.0μ μμ λ²μ μΈ rdt2.1μ λν FSMμ λνλ΄κ³ μμ΅λλ€. rdt2.1 μ‘μ μμ μμ μ FSM κ°κ°μ μ΄μ λ³΄λ€ λ λ°° λ§μ μνλ₯Ό κ°μ§κ³ μλλ°, μ΄λ νλ‘ν μ½ μνκ° νμ¬(μ‘μ μμ μν΄μ) μ μ‘λκ³ μκ±°λ, μλλ©΄(μμ μκ°) κΈ°λ€λ¦¬κ³ μλ ν¨ν·μ΄ μμ λ²νΈ 0 λλ 1μ κ°μ ΈμΌ νλμ§λ₯Ό λ°μν΄μΌ νκΈ° λλ¬Έμ λλ€.
νλ‘ν μ½ rdt2.1μ μμ μλ‘λΆν° μ‘μ μκΉμ§μ κΈμ νμΈμλ΅κ³Ό λΆμ νμΈμλ΅μ λͺ¨λ ν¬ν¨ν©λλ€. μμκ° λ°λ ν¨ν·μ΄ μμ λλ©΄, μμ μλ μ΄λ―Έ μ μ μμ ν ν¨ν·μ λν κΈμ νμΈ μλ΅μ μ μ‘ν©λλ€. μμλ ν¨ν·μ΄ μμ λλ©΄, μμ μλ λΆμ νμΈ μλ΅μ μ μ‘ν©λλ€.
rdt3.0
rdt(reliable data transfer): μ λ’°μ μΈ λ°μ΄ν° μ μ‘
rdt3.0μ λΉνΈ μ€λ₯μ μμ€ μλ μ±λ μμμμ μ λ’°μ λ°μ΄ν° μ μ‘μ ννν©λλ€.
λΉνΈκ° μμλλ κ² μΈμλ μΈν°λ·μ ν¬ν¨νλ μ€λλ μ»΄ν¨ν° νκ²½μ²λΌ νμ μ±λμ΄ ν¨ν·μ μμ€νλ κ²½μ°κ° λ°μ ν μλ μμ΅λλ€. μ΄λ΄ λλ μ΄λ ν λ°©μμΌλ‘ ν΄κ²°ν μ μμκΉμ?
μ μ΄λ―Έμ§λ ν¨ν·μ΄ μμλκ±°λ μμ€λ μ μλ μ±λμμ λ°μ΄ν°λ₯Ό μ λ’°μ μΌλ‘ μ μ‘νλ νλ‘ν μ½μΈ rdt3.0μ λν μ‘μ μ FSMμ 보μ¬μ€λλ€.
μ μ΄λ―Έμ§λ νλ‘ν μ½μ΄ ν¨ν· μμ€ λλ μ§μ° μμ΄ μ΄λ»κ² λμνλμ§μ μμ€λ λ°μ΄ν° ν¨ν·μ μ΄λ»κ² μ²λ¦¬νλμ§λ₯Ό 보μ¬μ€λλ€.
'ComputerScience π > μ»΄ν¨ν°λ€νΈμν¬' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ€νΈμν¬] νΈλμ€ν¬νΈ κ³μΈ΅(3) - UDP (0) | 2022.06.29 |
---|---|
[λ€νΈμν¬] νΈλμ€ν¬νΈ κ³μΈ΅(2) - λ€μ€νμ μλ€μ€ν (0) | 2022.06.29 |
[λ€νΈμν¬] νΈλμ€ν¬νΈ κ³μΈ΅(1) - μλΉμ€ λ° κ°μ (0) | 2022.06.29 |
[λ€νΈμν¬] μ½ν μΈ λΆλ°° λ€νΈμν¬(CDN) (0) | 2022.05.08 |
[λ€νΈμν¬] DNSλ? (0) | 2022.05.08 |
[λ€νΈμν¬] μ ν리μΌμ΄μ κ³μΈ΅(5) - μΏ ν€μ μΉ μΊμ± (0) | 2022.05.02 |
λκΈ