chapter 3 transport layer - burapha university

110
Transport Layer 3-1 Chapter 3 Transport Layer Computer Networking: A Top Down Approach 6 th edition Jim Kurose, Keith Ross Addison-Wesley March 2012 āļāļēāļĢāđƒāļŠāđ‰āļŠāđ„āļĨāļ”āđŒ : āđ€āļ™āļ·āđ‰āļ­āļŦāļēāđƒāļ™āļŠāđ„āļĨāļ”āđŒāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļ–āļđāļāđāļ›āļĨāļĄāļēāļˆāļēāļāļŠāđ„āļĨāļ”āđŒāļ•āđ‰āļ™āļ‰āļšāļąāļšāļ›āļĢāļ°āļāļ­āļšāļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ‚āļ­āļ‡āļœāļđāđ‰āđāļ•āđˆāļ‡āļŠāļ·āđˆāļ­ Kurose āđāļĨāļ° Ross āļœāļđāđ‰āđāļ›āļĨāļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āļ—āļļāļāļ—āđˆāļēāļ™āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļŠāđ„āļĨāļ”āđŒāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āđ‰ āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļ—āđˆāļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļ”āļđāļ āļēāļžāđ€āļ„āļĨāļ·āđˆāļ­āļ™āđ„āļŦāļ§ āļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄ ,āđāļāđ‰āđ„āļ‚ āđāļĨāļ° āļĨāļšāļŠāđ„āļĨāļ”āđŒ (āļ™āļąāļšāļĢāļ§āļĄāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ™āļĩāđ‰) āđāļĨāļ°āđ€āļ™āļ·āđ‰āļ­āļŦāļēāļ‚āļ­āļ‡āļŠāđ„āļĨāļ”āđŒāđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļāļąāļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āļ­āļ‡āļ—āđˆāļēāļ™ āļŠāļēāļŦāļĢāļąāļšāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĩāđˆāļĒāļ™ āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļŠāļīāđˆāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ : â€Ē āļ–āđ‰āļēāļ—āđˆāļēāļ™āđƒāļŠāđ‰āļŠāđ„āļĨāļ”āđŒāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰ (āđ€āļ›āđ‡āļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡, āđƒāļ™āļŦāđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļ™) āļ­āļĒāđˆāļēāļĨāļ·āļĄāļāļĨāđˆāļēāļ§āļ–āļķāļ‡āļ—āļĩāđˆāļĄāļēāļ‚āļ­āļ‡āļŠāđ„āļĨāļ”āđŒ (āļŦāļĨāļąāļ‡āļˆāļēāļāļ™āļĩāđ‰ āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļ—āļļāļāļ„āļ™āļ­āļļāļ”āļŦāļ™āļļāļ™āđāļĨāļ°āđƒāļŠāđ‰āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ‚āļ­āļ‡āļœāļđāđ‰āđāļ•āđˆāļ‡āļ”āđ‰āļēāļ™āļ‚āđ‰āļēāļ‡) â€Ē āļ–āđ‰āļēāļ„āļļāļ“āđ‚āļžāļŠāļ•āđŒāļŠāđ„āļĨāļ”āđŒāđƒāļ” āđ† āđƒāļ™āđ€āļ§āļ›, āļ­āļĒāđˆāļēāļĨāļ·āļĄāļāļĨāđˆāļēāļ§āļ–āļķāļ‡āļ§āđˆāļē āļ„āļļāļ“āđāļāđ‰āđ„āļ‚āļˆāļēāļāļŠāđ„āļĨāļ”āđŒāļ•āđ‰āļ™āļ‰āļšāļąāļšāļ‚āļ­āļ‡āđ€āļĢāļē āđāļĨāļ° āļĢāļ°āļšāļļ āļ–āļķāļ‡āļĨāļīāļ‚āļŠāļīāļ—āļ˜āļīāđŒāļ‚āļ­āļ‡āđ€āļĢāļēāļ”āđ‰āļ§āļĒ āļ‚āļ­āļ‚āļ­āļšāļ„āļļāļ“āđāļĨāļ°āļ‚āļ­āđƒāļŦāđ‰āļŠāļ™āļļāļ! āļ“āļąāļāļ™āļ™āļ—āđŒ āļĨāļĩāļĨāļēāļ•āļĢāļ°āļāļđāļĨ āļœāļđāđ‰āđ€āļĢāļĩāļĒāļšāđ€āļĢāļĩāļĒāļ‡ āļŠāļ‡āļ§āļ™āļĨāļīāļ‚āļŠāļīāļ—āļ˜āļīāđŒ 2013 āđ€āļ™āļ·āđ‰āļ­āļŦāļēāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ€āļ›āđ‡āļ™āļĨāļīāļ‚āļŠāļīāļ—āļ˜āļīāđŒāļ‚āļ­āļ‡āļ„āļ“āļ°āļ§āļīāļ—āļĒāļāļēāļĢāļŠāļēāļĢāļŠāļ™āđ€āļ—āļĻ

Upload: others

Post on 13-Feb-2022

8 views

Category:

Documents


0 download

TRANSCRIPT

Transport Layer 3-1

Chapter 3 Transport Layer

Computer Networking A Top Down Approach

6th edition Jim Kurose Keith Ross

Addison-Wesley March 2012

āļāļēāļĢāđƒāļŠāļŠāđ„āļĨāļ”

āđ€āļ™āļ­āļŦāļēāđƒāļ™āļŠāđ„āļĨāļ”āđ€āļŦāļĨāļēāļ™āļ–āļāđāļ›āļĨāļĄāļēāļˆāļēāļāļŠāđ„āļĨāļ”āļ•āļ™āļ‰āļšāļšāļ›āļĢāļ°āļāļ­āļšāļŦāļ™āļ‡āļŠāļ­āļ‚āļ­āļ‡āļœāđāļ•āļ‡āļŠāļ­ Kurose āđāļĨāļ° Ross

āļœāđāļ›āļĨāļ­āļ™āļāļēāļ•āđƒāļŦāļ—āļāļ—āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāļŠāđ„āļĨāļ”āļ—āļ‡āļŦāļĄāļ”āđ„āļ” āļ”āļ‡āļ™āļ™āļ—āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļ”āļ āļēāļžāđ€āļ„āļĨāļ­āļ™āđ„āļŦāļ§ āļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļĄ

āđāļāđ„āļ‚ āđāļĨāļ° āļĨāļšāļŠāđ„āļĨāļ” (āļ™āļšāļĢāļ§āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ™) āđāļĨāļ°āđ€āļ™āļ­āļŦāļēāļ‚āļ­āļ‡āļŠāđ„āļĨāļ”āđ€āļžāļ­āđƒāļŦāđ€āļŦāļĄāļēāļ°āļāļšāļ„āļ§āļēāļĄāļ•āļ­āļ‡āļāļēāļĢāļ‚āļ­āļ‡āļ—āļēāļ™

āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ•āļ­āđ„āļ›āļ™āđ€āļ—āļēāļ™āļ™

bull āļ–āļēāļ—āļēāļ™āđƒāļŠāļŠāđ„āļĨāļ”āđ€āļŦāļĨāļēāļ™ (āđ€āļ›āļ™āļ•āļ§āļ­āļĒāļēāļ‡ āđƒāļ™āļŦāļ­āļ‡āđ€āļĢāļĒāļ™) āļ­āļĒāļēāļĨāļĄāļāļĨāļēāļ§āļ–āļ‡āļ—āļĄāļēāļ‚āļ­āļ‡āļŠāđ„āļĨāļ” (āļŦāļĨāļ‡āļˆāļēāļāļ™

āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ—āļāļ„āļ™āļ­āļ”āļŦāļ™āļ™āđāļĨāļ°āđƒāļŠāļŦāļ™āļ‡āļŠāļ­āļ‚āļ­āļ‡āļœāđāļ•āļ‡āļ”āļēāļ™āļ‚āļēāļ‡)

bull āļ–āļēāļ„āļ“āđ‚āļžāļŠāļ•āļŠāđ„āļĨāļ”āđƒāļ” āđ† āđƒāļ™āđ€āļ§āļ› āļ­āļĒāļēāļĨāļĄāļāļĨāļēāļ§āļ–āļ‡āļ§āļē āļ„āļ“āđāļāđ„āļ‚āļˆāļēāļāļŠāđ„āļĨāļ”āļ•āļ™āļ‰āļšāļšāļ‚āļ­āļ‡āđ€āļĢāļē āđāļĨāļ° āļĢāļ°āļš

āļ–āļ‡āļĨāļ‚āļŠāļ—āļ˜āļ‚āļ­āļ‡āđ€āļĢāļēāļ”āļ§āļĒ

āļ‚āļ­āļ‚āļ­āļšāļ„āļ“āđāļĨāļ°āļ‚āļ­āđƒāļŦāļŠāļ™āļ

āļ“āļāļ™āļ™āļ— āļĨāļĨāļēāļ•āļĢāļ°āļāļĨ āļœāđ€āļĢāļĒāļšāđ€āļĢāļĒāļ‡ āļŠāļ‡āļ§āļ™āļĨāļ‚āļŠāļ—āļ˜ 2013 āđ€āļ™āļ­āļŦāļēāļ—āļ‡āļŦāļĄāļ”āđ€āļ›āļ™āļĨāļ‚āļŠāļ—āļ˜āļ‚āļ­āļ‡āļ„āļ“āļ°āļ§āļ—āļĒāļāļēāļĢāļŠāļēāļĢāļŠāļ™āđ€āļ—āļĻ

Transport Layer 3-2

Chapter 3 Transport Layer

āđ€āļ›āļēāļŦāļĄāļēāļĒ āđ€āļ‚āļēāđƒāļˆāļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļ‚āļ­āļ‡āļāļēāļĢ

āđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™ Transport āļāļēāļĢāļĢāļ§āļĄāļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing demultiplexing)

āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (reliable data transfer)

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (flow control)

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (congestion control)

āđ€āļĢāļĒāļ™āļĢāđ€āļāļĒāļ§āļāļšāđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāđƒāļ™āļŠāļ™

Transport āļ‚āļ­āļ‡ Internet UDP āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

(connectionless transport) TCP āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” āđāļ•āļ•āļ­āļ‡āļĄāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented reliable transport)

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP

Transport Layer 3-3

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-4

Transport services and protocols

āđƒāļŦāļšāļĢāļāļēāļĢāļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āđ€āļŠāļ­āļĄ (āđ€āļŠāļ‡ logic) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ€āļ‹āļŠāļ‚āļ­āļ‡āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļ—āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ•āļēāļ‡āđ†

transport protocols āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļŠāļ‡ āļ— āļēāļāļēāļĢāđāļĒāļ

āļ‚āļ­āļĄāļĨāļ­āļ­āļāđ€āļ›āļ™ segments āđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ network layer

āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļĢāļš āļĢāļ§āļšāļĢāļ§āļĄ segments āđāļĨāļ°āļ›āļĢāļ°āļāļ­āļšāđƒāļŦāđ€āļ›āļ™āļ‚āļ­āļ„āļ§āļēāļĄāđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ app

āļĄāđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļ—āđƒāļŦāļšāļĢāļāļēāļĢāđƒāļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļ™āļ‡āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨ Internet TCP and UDP

application transport network data link physical

application transport network data link physical

Transport Layer 3-5

āļŠāļ™ Transport vs āļŠāļ™ Network

āļŠāļ™ network āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡

āļŠāļ™ transport āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ‚āļ‹āļŠ āđƒāļŠāļšāļĢāļāļēāļĢāļ”āļ§āļĒ āđāļĨāļ° āļŠāļ§āļĒāđ€āļŠāļĢāļĄ

āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡āļŠāļ™ network

āđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™ Ann āļŠāļ‡āļˆāļ”āļŦāļĄāļēāļĒ 12 āļ‰āļšāļšāđ„āļ›āļŦāļēāđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™āļ‚āļ­āļ‡ Bill

āđ€āļ„āļĢāļ­āļ‡ = āļšāļēāļ™ āđ‚āļžāļĢāđ€āļ‹āļŠ = āđ€āļ”āļ āļ‚āļ­āļ„āļ§āļēāļĄāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ = āļˆāļ”āļŦāļĄāļēāļĒāđƒāļ™

āļ‹āļ­āļ‡ āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ transport = Ann

āđāļĨāļ° Bill āļ—āļ•āļ­āļ‡āđāļĒāļāļˆāļ”āļŦāļĄāļēāļĒāđƒāļŦāļĨāļ āđ† āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ network = āļšāļĢāļāļēāļĢ

āļ‚āļ­āļ‡āđ„āļ›āļĢāļĐāļ“āļĒ

āļ­āļ›āļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļšāļšāļēāļ™

Transport Layer 3-6

āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™āļ—āļĢāļēāļ™āļŠāļ›āļ­āļĢāļ•āļ‚āļ­āļ‡āļ­āļ™āđ€āļ•āļ­āļĢāđ€āļ™āļ• āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ™āļēāđ„āļ§āđƒāļˆ

āļŦāļĢāļ­āļ™āļēāđ€āļŠāļ­āļ–āļ­āđ„āļ” (TCP) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ

āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ UDP āđ„āļĄāļĄāļ­āļ°āđ„āļĢāđ€āļžāļĄāđ€āļ•āļĄāļˆāļēāļāļŠāļ™ IP āļ—āđ€āļ›āļ™

ldquobest-effortrdquo

āđ„āļĄāđƒāļŦāļšāļĢāļāļēāļĢāđ€āļŦāļĨāļēāļ™ āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ„āļ§āļēāļĄāļĨāļēāļŠāļē āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āđāļšāļ™āļ”āļ§āļ”āļ˜

application transport network data link physical

application transport network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

Transport Layer 3-7

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-2

Chapter 3 Transport Layer

āđ€āļ›āļēāļŦāļĄāļēāļĒ āđ€āļ‚āļēāđƒāļˆāļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļ‚āļ­āļ‡āļāļēāļĢ

āđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™ Transport āļāļēāļĢāļĢāļ§āļĄāļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing demultiplexing)

āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (reliable data transfer)

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (flow control)

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (congestion control)

āđ€āļĢāļĒāļ™āļĢāđ€āļāļĒāļ§āļāļšāđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāđƒāļ™āļŠāļ™

Transport āļ‚āļ­āļ‡ Internet UDP āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

(connectionless transport) TCP āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” āđāļ•āļ•āļ­āļ‡āļĄāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented reliable transport)

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP

Transport Layer 3-3

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-4

Transport services and protocols

āđƒāļŦāļšāļĢāļāļēāļĢāļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āđ€āļŠāļ­āļĄ (āđ€āļŠāļ‡ logic) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ€āļ‹āļŠāļ‚āļ­āļ‡āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļ—āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ•āļēāļ‡āđ†

transport protocols āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļŠāļ‡ āļ— āļēāļāļēāļĢāđāļĒāļ

āļ‚āļ­āļĄāļĨāļ­āļ­āļāđ€āļ›āļ™ segments āđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ network layer

āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļĢāļš āļĢāļ§āļšāļĢāļ§āļĄ segments āđāļĨāļ°āļ›āļĢāļ°āļāļ­āļšāđƒāļŦāđ€āļ›āļ™āļ‚āļ­āļ„āļ§āļēāļĄāđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ app

āļĄāđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļ—āđƒāļŦāļšāļĢāļāļēāļĢāđƒāļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļ™āļ‡āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨ Internet TCP and UDP

application transport network data link physical

application transport network data link physical

Transport Layer 3-5

āļŠāļ™ Transport vs āļŠāļ™ Network

āļŠāļ™ network āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡

āļŠāļ™ transport āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ‚āļ‹āļŠ āđƒāļŠāļšāļĢāļāļēāļĢāļ”āļ§āļĒ āđāļĨāļ° āļŠāļ§āļĒāđ€āļŠāļĢāļĄ

āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡āļŠāļ™ network

āđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™ Ann āļŠāļ‡āļˆāļ”āļŦāļĄāļēāļĒ 12 āļ‰āļšāļšāđ„āļ›āļŦāļēāđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™āļ‚āļ­āļ‡ Bill

āđ€āļ„āļĢāļ­āļ‡ = āļšāļēāļ™ āđ‚āļžāļĢāđ€āļ‹āļŠ = āđ€āļ”āļ āļ‚āļ­āļ„āļ§āļēāļĄāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ = āļˆāļ”āļŦāļĄāļēāļĒāđƒāļ™

āļ‹āļ­āļ‡ āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ transport = Ann

āđāļĨāļ° Bill āļ—āļ•āļ­āļ‡āđāļĒāļāļˆāļ”āļŦāļĄāļēāļĒāđƒāļŦāļĨāļ āđ† āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ network = āļšāļĢāļāļēāļĢ

āļ‚āļ­āļ‡āđ„āļ›āļĢāļĐāļ“āļĒ

āļ­āļ›āļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļšāļšāļēāļ™

Transport Layer 3-6

āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™āļ—āļĢāļēāļ™āļŠāļ›āļ­āļĢāļ•āļ‚āļ­āļ‡āļ­āļ™āđ€āļ•āļ­āļĢāđ€āļ™āļ• āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ™āļēāđ„āļ§āđƒāļˆ

āļŦāļĢāļ­āļ™āļēāđ€āļŠāļ­āļ–āļ­āđ„āļ” (TCP) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ

āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ UDP āđ„āļĄāļĄāļ­āļ°āđ„āļĢāđ€āļžāļĄāđ€āļ•āļĄāļˆāļēāļāļŠāļ™ IP āļ—āđ€āļ›āļ™

ldquobest-effortrdquo

āđ„āļĄāđƒāļŦāļšāļĢāļāļēāļĢāđ€āļŦāļĨāļēāļ™ āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ„āļ§āļēāļĄāļĨāļēāļŠāļē āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āđāļšāļ™āļ”āļ§āļ”āļ˜

application transport network data link physical

application transport network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

Transport Layer 3-7

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-3

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-4

Transport services and protocols

āđƒāļŦāļšāļĢāļāļēāļĢāļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āđ€āļŠāļ­āļĄ (āđ€āļŠāļ‡ logic) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ€āļ‹āļŠāļ‚āļ­āļ‡āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļ—āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ•āļēāļ‡āđ†

transport protocols āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļŠāļ‡ āļ— āļēāļāļēāļĢāđāļĒāļ

āļ‚āļ­āļĄāļĨāļ­āļ­āļāđ€āļ›āļ™ segments āđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ network layer

āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļĢāļš āļĢāļ§āļšāļĢāļ§āļĄ segments āđāļĨāļ°āļ›āļĢāļ°āļāļ­āļšāđƒāļŦāđ€āļ›āļ™āļ‚āļ­āļ„āļ§āļēāļĄāđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ app

āļĄāđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļ—āđƒāļŦāļšāļĢāļāļēāļĢāđƒāļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļ™āļ‡āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨ Internet TCP and UDP

application transport network data link physical

application transport network data link physical

Transport Layer 3-5

āļŠāļ™ Transport vs āļŠāļ™ Network

āļŠāļ™ network āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡

āļŠāļ™ transport āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ‚āļ‹āļŠ āđƒāļŠāļšāļĢāļāļēāļĢāļ”āļ§āļĒ āđāļĨāļ° āļŠāļ§āļĒāđ€āļŠāļĢāļĄ

āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡āļŠāļ™ network

āđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™ Ann āļŠāļ‡āļˆāļ”āļŦāļĄāļēāļĒ 12 āļ‰āļšāļšāđ„āļ›āļŦāļēāđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™āļ‚āļ­āļ‡ Bill

āđ€āļ„āļĢāļ­āļ‡ = āļšāļēāļ™ āđ‚āļžāļĢāđ€āļ‹āļŠ = āđ€āļ”āļ āļ‚āļ­āļ„āļ§āļēāļĄāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ = āļˆāļ”āļŦāļĄāļēāļĒāđƒāļ™

āļ‹āļ­āļ‡ āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ transport = Ann

āđāļĨāļ° Bill āļ—āļ•āļ­āļ‡āđāļĒāļāļˆāļ”āļŦāļĄāļēāļĒāđƒāļŦāļĨāļ āđ† āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ network = āļšāļĢāļāļēāļĢ

āļ‚āļ­āļ‡āđ„āļ›āļĢāļĐāļ“āļĒ

āļ­āļ›āļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļšāļšāļēāļ™

Transport Layer 3-6

āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™āļ—āļĢāļēāļ™āļŠāļ›āļ­āļĢāļ•āļ‚āļ­āļ‡āļ­āļ™āđ€āļ•āļ­āļĢāđ€āļ™āļ• āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ™āļēāđ„āļ§āđƒāļˆ

āļŦāļĢāļ­āļ™āļēāđ€āļŠāļ­āļ–āļ­āđ„āļ” (TCP) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ

āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ UDP āđ„āļĄāļĄāļ­āļ°āđ„āļĢāđ€āļžāļĄāđ€āļ•āļĄāļˆāļēāļāļŠāļ™ IP āļ—āđ€āļ›āļ™

ldquobest-effortrdquo

āđ„āļĄāđƒāļŦāļšāļĢāļāļēāļĢāđ€āļŦāļĨāļēāļ™ āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ„āļ§āļēāļĄāļĨāļēāļŠāļē āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āđāļšāļ™āļ”āļ§āļ”āļ˜

application transport network data link physical

application transport network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

Transport Layer 3-7

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-4

Transport services and protocols

āđƒāļŦāļšāļĢāļāļēāļĢāļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āđ€āļŠāļ­āļĄ (āđ€āļŠāļ‡ logic) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ€āļ‹āļŠāļ‚āļ­āļ‡āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļ—āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ•āļēāļ‡āđ†

transport protocols āļ— āļēāļ‡āļēāļ™āļ­āļĒāļšāļ™āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļŠāļ‡ āļ— āļēāļāļēāļĢāđāļĒāļ

āļ‚āļ­āļĄāļĨāļ­āļ­āļāđ€āļ›āļ™ segments āđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ network layer

āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āļĢāļš āļĢāļ§āļšāļĢāļ§āļĄ segments āđāļĨāļ°āļ›āļĢāļ°āļāļ­āļšāđƒāļŦāđ€āļ›āļ™āļ‚āļ­āļ„āļ§āļēāļĄāđāļĨāļ§āļŠāļ‡āļ•āļ­āđ„āļ›āļĒāļ‡āļŠāļ™ app

āļĄāđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļ—āđƒāļŦāļšāļĢāļāļēāļĢāđƒāļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļ™āļ‡āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨ Internet TCP and UDP

application transport network data link physical

application transport network data link physical

Transport Layer 3-5

āļŠāļ™ Transport vs āļŠāļ™ Network

āļŠāļ™ network āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡

āļŠāļ™ transport āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ‚āļ‹āļŠ āđƒāļŠāļšāļĢāļāļēāļĢāļ”āļ§āļĒ āđāļĨāļ° āļŠāļ§āļĒāđ€āļŠāļĢāļĄ

āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡āļŠāļ™ network

āđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™ Ann āļŠāļ‡āļˆāļ”āļŦāļĄāļēāļĒ 12 āļ‰āļšāļšāđ„āļ›āļŦāļēāđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™āļ‚āļ­āļ‡ Bill

āđ€āļ„āļĢāļ­āļ‡ = āļšāļēāļ™ āđ‚āļžāļĢāđ€āļ‹āļŠ = āđ€āļ”āļ āļ‚āļ­āļ„āļ§āļēāļĄāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ = āļˆāļ”āļŦāļĄāļēāļĒāđƒāļ™

āļ‹āļ­āļ‡ āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ transport = Ann

āđāļĨāļ° Bill āļ—āļ•āļ­āļ‡āđāļĒāļāļˆāļ”āļŦāļĄāļēāļĒāđƒāļŦāļĨāļ āđ† āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ network = āļšāļĢāļāļēāļĢ

āļ‚āļ­āļ‡āđ„āļ›āļĢāļĐāļ“āļĒ

āļ­āļ›āļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļšāļšāļēāļ™

Transport Layer 3-6

āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™āļ—āļĢāļēāļ™āļŠāļ›āļ­āļĢāļ•āļ‚āļ­āļ‡āļ­āļ™āđ€āļ•āļ­āļĢāđ€āļ™āļ• āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ™āļēāđ„āļ§āđƒāļˆ

āļŦāļĢāļ­āļ™āļēāđ€āļŠāļ­āļ–āļ­āđ„āļ” (TCP) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ

āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ UDP āđ„āļĄāļĄāļ­āļ°āđ„āļĢāđ€āļžāļĄāđ€āļ•āļĄāļˆāļēāļāļŠāļ™ IP āļ—āđ€āļ›āļ™

ldquobest-effortrdquo

āđ„āļĄāđƒāļŦāļšāļĢāļāļēāļĢāđ€āļŦāļĨāļēāļ™ āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ„āļ§āļēāļĄāļĨāļēāļŠāļē āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āđāļšāļ™āļ”āļ§āļ”āļ˜

application transport network data link physical

application transport network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

Transport Layer 3-7

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-5

āļŠāļ™ Transport vs āļŠāļ™ Network

āļŠāļ™ network āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡

āļŠāļ™ transport āļāļēāļĢāļŠāļ­āļŠāļēāļĢ (āđ€āļŠāļ‡āļ•āļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļ‡āđ‚āļžāļĢāđ‚āļ‹āļŠ āđƒāļŠāļšāļĢāļāļēāļĢāļ”āļ§āļĒ āđāļĨāļ° āļŠāļ§āļĒāđ€āļŠāļĢāļĄ

āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡āļŠāļ™ network

āđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™ Ann āļŠāļ‡āļˆāļ”āļŦāļĄāļēāļĒ 12 āļ‰āļšāļšāđ„āļ›āļŦāļēāđ€āļ”āļ 12 āļ„āļ™āđƒāļ™āļšāļēāļ™āļ‚āļ­āļ‡ Bill

āđ€āļ„āļĢāļ­āļ‡ = āļšāļēāļ™ āđ‚āļžāļĢāđ€āļ‹āļŠ = āđ€āļ”āļ āļ‚āļ­āļ„āļ§āļēāļĄāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ = āļˆāļ”āļŦāļĄāļēāļĒāđƒāļ™

āļ‹āļ­āļ‡ āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ transport = Ann

āđāļĨāļ° Bill āļ—āļ•āļ­āļ‡āđāļĒāļāļˆāļ”āļŦāļĄāļēāļĒāđƒāļŦāļĨāļ āđ† āđ‚āļžāļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™ network = āļšāļĢāļāļēāļĢ

āļ‚āļ­āļ‡āđ„āļ›āļĢāļĐāļ“āļĒ

āļ­āļ›āļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļšāļšāļēāļ™

Transport Layer 3-6

āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™āļ—āļĢāļēāļ™āļŠāļ›āļ­āļĢāļ•āļ‚āļ­āļ‡āļ­āļ™āđ€āļ•āļ­āļĢāđ€āļ™āļ• āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ™āļēāđ„āļ§āđƒāļˆ

āļŦāļĢāļ­āļ™āļēāđ€āļŠāļ­āļ–āļ­āđ„āļ” (TCP) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ

āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ UDP āđ„āļĄāļĄāļ­āļ°āđ„āļĢāđ€āļžāļĄāđ€āļ•āļĄāļˆāļēāļāļŠāļ™ IP āļ—āđ€āļ›āļ™

ldquobest-effortrdquo

āđ„āļĄāđƒāļŦāļšāļĢāļāļēāļĢāđ€āļŦāļĨāļēāļ™ āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ„āļ§āļēāļĄāļĨāļēāļŠāļē āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āđāļšāļ™āļ”āļ§āļ”āļ˜

application transport network data link physical

application transport network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

Transport Layer 3-7

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-6

āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļŠāļ™āļ—āļĢāļēāļ™āļŠāļ›āļ­āļĢāļ•āļ‚āļ­āļ‡āļ­āļ™āđ€āļ•āļ­āļĢāđ€āļ™āļ• āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ™āļēāđ„āļ§āđƒāļˆ

āļŦāļĢāļ­āļ™āļēāđ€āļŠāļ­āļ–āļ­āđ„āļ” (TCP) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ

āļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ UDP āđ„āļĄāļĄāļ­āļ°āđ„āļĢāđ€āļžāļĄāđ€āļ•āļĄāļˆāļēāļāļŠāļ™ IP āļ—āđ€āļ›āļ™

ldquobest-effortrdquo

āđ„āļĄāđƒāļŦāļšāļĢāļāļēāļĢāđ€āļŦāļĨāļēāļ™ āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ„āļ§āļēāļĄāļĨāļēāļŠāļē āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āđāļšāļ™āļ”āļ§āļ”āļ˜

application transport network data link physical

application transport network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

network data link physical

Transport Layer 3-7

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-7

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-8

āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļ‚āļ­āļĄāļĨ (Multiplexingdemultiplexing)

socket

āđƒāļŠāļ‚āļ­āļĄāļĨāļŠāļ§āļ™ header āđ€āļžāļ­āļŠāļ‡ segment āļ—āđ„āļ”āļĄāļēāđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

demultiplexing āļ—āļœāļĢāļš āļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŦāļĨāļēāļĒ āđ† socket āđƒāļŠ header āļ‚āļ­āļ‡āļŠāļ™ transport āđ€āļ‚āļēāđ„āļ› (header āļˆāļ°āļ–āļāđƒāļŠāđ€āļžāļ­āļ— āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ‡)

multiplexing āļ—āļœāļŠāļ‡

transport

application

physical

link

network

P2 P1

transport

application

physical

link

network

P4

transport

application

physical

link

network

P3 process

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-9

āļ— āļē demultiplexing āļ­āļĒāļēāļ‡āđ„āļĢ

source port dest port

32 bits

application data

(payload)

other header fields

TCPUDP segment format

host āļĢāļšāļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļēāļāļŠāļ™ IP āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡

āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđāļ•āļĨāļ°āļ”āļēāļ•āļēāđāļāļĢāļĄāļˆāļ°āļĄ segment āļ‚āļ­āļ‡āļŠāļ™

transportāļ­āļĒ āđāļ•āļĨāļ° segment āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ•āļ™

āļ—āļēāļ‡āđāļĨāļ°āļ›āļĨāļēāļĒāļ—āļēāļ‡ (source and destination port number)

host āđƒāļŠāļ‚āļ­āļĄāļĨāļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāđāļĨāļ°āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ• āđ€āļžāļ­āļ™ āļēāđ€āļ‹āļāđ€āļĄāļ™āļ•āđ„āļ›āļĒāļ‡ socket āļ—āļ–āļāļ•āļ­āļ‡

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-10

demultiplexing āļāļĢāļ“āļ—āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connectionless)

datagrams āļ‚āļ­āļ‡ IP āļ—āļĄ āđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ•āļ§āđ€āļ”āļĒāļ§āļāļ™ āđāļĄāļˆāļ°āļĄāļ—āļ­āļĒ IP āđāļĨāļ°āļŦāļĢāļ­ āđ€āļĨāļ‚ port āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‡āļ•āļ™āļ—āļēāļ‡āļ•āļēāļ‡āļāļ™ (process āļ—āļŠāļ‡ datagram āđ€āļ›āļ™āļ„āļ™āļĨāļ° process āđāļ•āļŠāļ‡āļĄāļēāļ— process āļœāļĢāļšāļ•āļ§āđ€āļ”āļĒāļ§āļāļ™) āļˆāļ°āļ–āļāļ™ āļēāđ„āļ›āļĒāļ‡ socket āđ€āļ”āļĒāļ§āļāļ™ āļ—āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡

āļˆāļēāļāļšāļ—āļ—āđāļĨāļ§ socket āļ—āļ–āļāļŠāļĢāļēāļ‡āļˆāļ°āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ āļēāļāļš

DatagramSocket mySocket1 = new DatagramSocket(12534)

āđ€āļĄāļ­ host āļĢāļš segment āļ‚āļ­āļ‡ UDP āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āđƒāļ™

segment āļ™ āļē segment āļ‚āļ­āļ‡ UDP āđ„āļ›āļĒāļ‡

socket āļ—āļœāļāļāļš port āļ™āļ™

āđ€āļĄāļ­āļˆāļ°āļŠāļĢāļēāļ‡āļ”āļēāļ•āļēāđāļāļĢāļĄāđ€āļžāļ­āļŠāļ‡āđ„āļ›āļĒāļ‡

socket āļ—āđ€āļ›āļ™ UDP āļ•āļ­āļ‡āļ— āļēāļāļēāļĢāļĢāļ°āļš āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ port āļ›āļĨāļēāļĒāļ—āļēāļ‡

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-11

Connectionless demux example

DatagramSocket serverSocket = new DatagramSocket

(6428)

transport

application

physical

link

network

P3 transport

application

physical

link

network

P1

transport

application

physical

link

network

P4

DatagramSocket mySocket1 = new DatagramSocket (5775)

DatagramSocket mySocket2 = new DatagramSocket

(9157)

source port 9157 dest port 6428

source port 6428 dest port 9157

source port dest port

source port dest port

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-12

socket āđāļšāļš TCP āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™ āļ‹āļ‡āļĄāļ­āļ‡āļ„āļ›āļĢāļ°āļāļ­āļšāļ”āļ‡āļ™ source IP address

(āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ•āļ™āļ—āļēāļ‡)

source port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ•āļ™āļ—āļēāļ‡ )

dest IP address (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđ„āļ­āļžāļ›āļĨāļēāļĒāļ—āļēāļ‡)

dest port number (āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢāļ•āļ›āļĨāļēāļĒāļ—āļēāļ‡ )

demux āļˆāļ°āļ”āļ„āļēāļ—āļ‡āļŠāļŠāļ§āļ™āđ€āļžāļ­āļ™ āļē packet āđ„āļ›āļĒāļ‡ sockets āļ—āđ€āļŦāļĄāļēāļ°āļŠāļĄ

āđ€āļ„āļĢāļ­āļ‡āđ€āļ‹āļĢāļŸāđ€āļ§āļ­āļĢāļ­āļēāļˆāđ€āļ›āļ” sockets āđāļšāļš TCP āļˆ āļēāļ™āļ§āļ™āļĄāļēāļāļžāļĢāļ­āļĄāļāļ™ āļ‹āļ‡ āđāļ•āļĨāļ° socket āļ–āļāļĢāļ°āļšāļ”āļ§āļĒ 4 āļŠāļ§āļ™

(āđāļ•āļˆāļ°āļĄāļŠāļ§āļ™āļ— 3 āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡āđ€āļŦāļĄāļ­āļ™ āđ† āļāļ™)

web servers āļˆāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ† socket āđ„āļ§āļŠ āļēāļŦāļĢāļšāđ€āļŠāļ­āļĄāļ•āļ­āļāļšāđāļ•āļĨāļ° client HTTP āđāļšāļš non-persistent āļˆāļ°āđƒāļŠ

socket āļ—āđāļ•āļāļ•āļēāļ‡āļāļ™āļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ° request

demux āļāļĢāļ“āļ—āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (Connection-oriented)

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-13

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

P4

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

network

P6 P5 P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

āļ—āļ‡ 3 segment āļĄāļ—āļ­āļĒ IP āļ›āļĨāļēāļĒāļ—āļēāļ‡ āļ„āļ­ B āđāļĨāļ° āđ€āļĨāļ‚āļžāļ­āļĢāļ• āļ›āļĨāļēāļĒāļ—āļēāļ‡āļ„āļ­ 80 āđāļ•āļ–āļāđāļĒāļāļŠāļ‡āđ„āļ›āļĒāļ‡ socket āļ—āļ•āļēāļ‡āļāļ™

server IP address B

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-14

Connection-oriented demux example

transport

application

physical

link

network

P3 transport

application

physical

link

transport

application

physical

link

network

P2

source IPport A9157 dest IP port B80

source IPport B80 dest IPport A9157

host IP address A

host IP address C

server IP address B

network

P3

source IPport C5775 dest IPport B80

source IPport C9157 dest IPport B80

P4

threaded server

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-15

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-16

UDP User Datagram Protocol [RFC 768]

āđ€āļ›āļ™ protocol āļ‚āļ­āļ‡ Internet āļ—āđ„āļĄāđ„āļ”āļĄāļŠāļ§āļ™āđ€āļžāļĄāđ€āļ•āļĄāļ­āļ°āđ„āļĢ

āļšāļĢāļāļēāļĢāđāļšāļš ldquoāļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđƒāļŦāļ”āļ—āļŠāļ”rdquo (best effort) āļ”āļ‡āļ™āļ™ segment āđāļšāļš UDP āļ­āļēāļˆ āļŠāļāļŦāļēāļĒ āđ„āļ›āļ–āļ‡ app āļ‚āļ­āļ‡āļœāļĢāļšāđāļ•āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļš

āđ„āļĄāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ„āļĄāļĄāļāļēāļĢāļ— āļē handshake āļĢāļ°āļŦāļ§āļēāļ‡āļœāļŠāļ‡

āđāļĨāļ°āļœāļĢāļš āđāļ•āļĨāļ° segment āļ—āđ€āļ›āļ™ UDP āļˆāļ°āļ–āļ

āļˆāļ”āļāļēāļĢāđ€āļ›āļ™āļ­āļŠāļĢāļ°āļˆāļēāļ segment āļ­āļ™ āđ†

UDP āđƒāļŠāđƒāļ™ app āļ—āļŠāļ‡ multimedia āļ­āļĒāļēāļ‡āļ•āļ­āđ€āļ™āļ­āļ‡

(āļ‹āļ‡āļ—āļ™āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒ āđāļ• sensitive āļāļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡)

DNS SNMP

āļ–āļēāļˆāļ°āđƒāļŦ āļāļēāļĢāļ–āļēāļĒāđ‚āļ­āļ™āļ‚āļ­āļĄāļĨāļšāļ™ UDP āļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļāļ§āļēāļ™ āđ€āļžāļĄāļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļ—āļŠāļ™ application āļĄāļāļēāļĢāļāļ„āļ™āļ‚āļ­āļœāļ”āļžāļĨāļēāļ” (āļ‚āļ™āļ­āļĒāļāļš āđāļ•āļĨāļ°

application)

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-17

UDP āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ segment (segment header)

source port dest port

32 bits

application data

(payload)

UDP segment format

length checksum

āļ„āļ§āļēāļĒāļēāļ§āļ‚āļ­āļ‡ segment āļ‚āļ­āļ‡ UDP (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ byte) āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĒāļēāļ§

āļ‚āļ­āļ‡ header āļ”āļ§āļĒ

āđ„āļĄāļ•āļ­āļ‡āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āļ‹āļ‡āđ€āļ›āļ™āļŠāļ§āļ™āļ—āđ€āļžāļĄāļ„āļ§āļēāļĄāļĨāļēāļŠāļē)

āļ‡āļēāļĒ āđ„āļĄāļ‹āļšāļ‹āļ­āļ™ āđ„āļĄāļ•āļ­āļ‡āļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

āļŠāļ§āļ™āļŦāļ§ (header) āļĄāļ‚āļ™āļēāļ”āđ€āļĨāļ āđ„āļĄāļĄāļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ UDP

āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ”āļĢāļ§āļ”āđ€āļĢāļ§āļ•āļēāļĄāļ—āļ•āļ­āļ‡āļāļēāļĢ

āļ— āļēāđ„āļĄāļ–āļ‡āļ•āļ­āļ‡āļĄ UDP

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-18

checksum āļ‚āļ­āļ‡ UDP

āļœāļŠāļ‡ āļˆāļ”āļāļēāļĢāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļ—āļˆāļ°āđ„āļ›āļ­āļĒāđƒāļ™

segment āļĢāļ§āļĄāļ—āļ‡āļ‚āļ­āļĄāļĨāļŠāļ§āļ™āļŦāļ§āļ•āļēāļ‡ āđ† āļ—āđ€āļ›āļ™āļĨ āļēāļ”āļšāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āđ€āļ•āļĄ 16 āļšāļ•āļŦāļĨāļēāļĒāļˆ āļēāļ™āļ§āļ™

checksum āļœāļĨāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ•āļēāļ‡ āđ† āđƒāļ™ segment

āļœāļŠāļ‡āđƒāļŠ checksum āđ€āļ‚āļēāđ„āļ›āđƒāļ™ field checksum āđƒāļ™ header āļ‚āļ­āļ‡ UDP

āļœāļĢāļš āļ„ āļēāļ™āļ§āļ“āļŦāļē checksum āļ‚āļ­āļ‡ segment āļ—āđ„āļ”

āļĢāļšāļĄāļēāđƒāļŦāļĄ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļē checksum āđƒāļ™ field āļ‚āļ­āļ‡

header āļāļš āļ„āļēāļ—āđ€āļžāļ‡āđ„āļ”āļˆāļēāļāļāļēāļĢāļ„ āļēāļ™āļ§āļ“ āļ§āļēāđ€āļ—āļēāļāļ™āļŦāļĢāļ­āđ„āļĄ āļ–āļēāđ„āļĄ āđāļŠāļ”āļ‡āļ§āļēāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āļ–āļēāđƒāļŠ āđāļŠāļ”āļ‡āļ§āļē āđ„āļĄāļžāļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđāļ•

āļˆāļĢāļ‡ āđ† āđāļĨāļ§ āļāļ­āļēāļˆāļˆāļ°āļĄāļ‚āļ­āļœāļ”āļžāļĨāļēāļ”āđ„āļ”āļ­āļĒāļ” (āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļˆāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ‡)

āļˆāļ”āļĄāļ‡āļŦāļĄāļēāļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļœāļ”āļžāļĨāļēāļ” āđ€āļŠāļ™ bits āļ—āļ„āļēāđ‚āļ”āļ™āļāļĨāļšāđƒāļ™ segment

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-19

Internet checksum āļ•āļ§āļ­āļĒāļēāļ‡

āļ•āļ§āļ­āļĒāļēāļ‡ āļāļēāļĢāļšāļ§āļ 16-bit integers āļŠāļ­āļ‡āļˆ āļēāļ™āļ§āļ™

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

wraparound

sum

checksum

Note āļ‚āļ“āļ°āļ—āļšāļ§āļāļ•āļ§āđ€āļĨāļ‚ āđ€āļĄāļ­ bitāļ— 16 (bit āļ‹āļēāļĒāļŠāļ”) āļĄāļāļēāļĢāļ—āļ”āđ€āļĨāļ‚ āđƒāļŦāļ™ āļēāđ€āļĨāļ‚āļ™āļ™āđ„āļ›āļšāļ§āļāļāļš bit āļ— 1 āđāļĨāļ§āļˆāļ‡ flip bit āļ—āļ bit āđ€āļžāļ­āđƒāļŦāđ„āļ” checksum

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-20

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-21

Principles of reliable data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-22

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link

āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-23

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­ data transfer

āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ„āļĄāļ™āļēāđ€āļŠāļ­āļ–āļ­āļĄāļĨāļāļĐāļ“āļ°āļ—āļˆāļ°āđ€āļ›āļ™āļ•āļ§āļ āļēāļŦāļ™āļ”āļ„āļ§āļēāļĄāļ‹āļšāļ‹āļ­āļ™āļ‚āļ­āļ‡ protocol āđ‚āļ­āļ™āļ­āļēāļĒāļ‚āļ­āļĄāļĨāļ— reliable (reliable data transfer protocol rdt)

āļŠ āļēāļ„āļāđƒāļ™āļŠāļ™ application transport link āļ•āļ” top-10 āļ‚āļ­āļ‡āļŦāļ§āļ‚āļ­āļ—āļēāļ‡āļ”āļēāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-24

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

āļ”āļēāļ™āļœāļŠāļ‡ āļ”āļēāļ™āļœāļĢāļš

rdt_send() āļ–āļāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļšāļ™ (āđ€āļŠāļ™ āđ‚āļ”āļĒ app) āļ— āļēāļŦāļ™āļēāļ—āļœāļēāļ™āļ‚āļ­āļĄāļĨāđ€āļžāļ­āđƒāļŦāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āđ„āļ›

āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™āļ‚āļ­āļ‡āļœāļĢāļš

udt_send() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āļ—āļˆāļ°āđ‚āļ­āļ™āļ–āļēāļĒ packet āļœāļēāļ™āļŠāļ­āļ‡āļāļēāļĢ

āļŠāļ­āļŠāļēāļĢāļ— unreliable āđ„āļ›āļĒāļ‡āļœāļĢāļš

rdt_rcv() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ OS āđ€āļĄāļ­ OS āđ„āļ”āļĢāļš packet āļ—āļĄāļēāļ–āļ‡āļŠāļ­āļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ”āļēāļ™āļœāļĢāļš

deliver_data() āļ–āļāđ€āļĢāļĒāļāđ‚āļ”āļĒ rdt āđ€āļžāļ­āđƒāļŦāļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļšāļ™

Transport Layer 3-25

āđ€āļĢāļēāļˆāļ° āļ„āļ­āļĒ āđ† āļžāļ’āļ™āļē protocol āļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļŦāļĢāļ­ reliable

data transfer protocol (rdt) āļ•āļ­āļ™āļ™ āļžāļˆāļēāļĢāļ“āļēāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļšāļ—āļēāļ‡āđ€āļ”āļĒāļ§āļāļ­āļ™

āđāļ•āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (control info) āļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļāļĨāļšāļ—āļ‡āļŠāļ­āļ‡āļ—āļēāļ‡

āđƒāļŠ finite state machines (FSM) āđ€āļžāļ­āļ āļēāļŦāļ™āļ”āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ­āļ‡āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

state 1

state 2

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļ— āļēāđƒāļŦāđ€āļāļ”āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āļœāļēāļ™āļ‚āļ­āļ‡ State āļāļēāļĢāļāļĢāļ°āļ— āļēāļ‚āļ“āļ°āđ€āļ›āļĨāļĒāļ™āļœāļēāļ™ State

āļŠāļ–āļēāļ™āļ° (state) āđ€āļĄāļ­āļ­āļĒāđƒāļ™ state āļ›āļˆāļˆāļšāļ™ state āļ–āļ”āđ„āļ›āļˆāļ°āļ‚āļ™āļ­āļĒāļāļšāđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļˆāļ°

āđ€āļāļ”āļ‚āļ™ āļ“ state āļ›āļˆāļˆāļšāļ™

āđ€āļŦāļ•āļāļēāļĢāļ“ āļāļēāļĢāļāļĢāļ°āļ— āļē

Reliable data transfer āđ€āļĢāļĄāļ•āļ™

Transport Layer 3-26

rdt10 āļāļēāļĢāđ‚āļ­āļ™āļ–āļēāļĒāļ‚āļ­āļĄāļĨāđāļšāļš reliable āļœāļēāļ™āļŠāļ­āļ‡āļŠāļāļāļēāļ“āđāļšāļš reliable

āļŠāļĄāļĄāļ•āđƒāļŦ āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āļ­āļĒāļ‚āļēāļ‡āđƒāļ•āđ€āļ›āļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļ—āđ€āļŠāļ­āļ–āļ­āđ„āļ” āđ„āļĄāļĄāļāļēāļĢāļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āļšāļ• āđ„āļĄāļĄāļ‚āļ­āļĄāļĨāļŠāļāļŦāļēāļĒ

FSMs āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡ āđāļĨāļ° āļŠ āļēāļŦāļĢāļšāļœ āļĢāļš āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāđ„āļ›āļĒāļ‡āļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡ āļœāļĢāļšāļĢāļšāļ‚āļ­āļĄāļĨāļˆāļēāļāļŠāļ™āļ”āļēāļ™āļĨāļēāļ‡

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļšāļ™ packet = make_pkt(data) udt_send(packet)

rdt_send(data)

extract (packetdata) deliver_data(data)

āļĢāļ­āļĢāļšāļāļēāļĢāđ€āļĢāļĒāļāļˆāļēāļāļŠāļ™

āļ”āļēāļ™āļĨāļēāļ‡

rdt_rcv(packet)

āļœāļŠāļ‡ āļœāļĢāļš

Transport Layer 3-27

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ

acknowledgements (ACKs) receiver explicitly tells sender that pkt received OK

negative acknowledgements (NAKs) receiver explicitly tells sender that pkt had errors

sender retransmits pkt on receipt of NAK

new mechanisms in rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

āļ›āļāļ•āđāļĨāļ§ āļĄāļ™āļĐāļĒāđƒāļŠāļ§āļ˜āļāļēāļĢāđƒāļ”āđƒāļ™āļāļēāļĢāđāļāđ„āļ‚ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāļŠāļ™āļ—āļ™āļē

Transport Layer 3-28

āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ­āļēāļˆāļāļĨāļšāļ„āļēāļšāļēāļ‡ bit āđƒāļ™ packet āđƒāļŠāļ§āļ˜āļāļēāļĢ checksum āđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš bit errors

āļ„ āļēāļ–āļēāļĄ āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđāļāđ„āļ‚āļ‚āļ­āļĄāļĨāđƒāļŦāļ–āļāļ•āļ­āļ‡āđ„āļ”āļ­āļĒāļēāļ‡āđ„āļĢ āļāļēāļĢāļ•āļ­āļšāļĢāļš (acknowledgements (ACKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļēāđ„āļ”āļĢāļš packet āđāļĨāļ§ āļāļēāļĢāļ•āļ­āļšāļ›āļāđ€āļŠāļ˜ (negative acknowledgements (NAKs)) āļœāļĢāļšāđāļˆāļ‡āļœāļŠāļ‡āļ§āļē packet āļĄ

errors sender āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļĄāļ­āđ„āļ”āļĢāļš NAK

āļāļĨāđ„āļāļ—āđ€āļžāļĄāļ‚āļ™ in rdt20 (āđ€āļžāļĄāļˆāļēāļ rdt10) āļāļēāļĢāļ•āļĢāļ§āļˆāļˆāļšāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ” āļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļ‚āļ­āļĄāļĨāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļ„āļ§āļšāļ„āļĄ (ACKNAK) āļˆāļēāļāļœāļĢāļšāđ„āļ›āļĒāļ‡āļœāļŠāļ‡

rdt20 āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ­āļŠāļēāļĢāļ—āļĄ bit errors

rdt_send(data)

Transport Layer 3-29

rdt20 āļ‚āļ­āļ āļēāļŦāļ™āļ”āļ‚āļ­āļ‡ FSM

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below sender

receiver

L

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

rdt_send(data)

Transport Layer 3-30

rdt20 operation with no errors

L

Wait for call from above

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-31

rdt20 error scenario

Wait for call from below L

rdt_send(data)

Wait for call from above

sndpkt = make_pkt(data checksum) udt_send(sndpkt)

extract(rcvpktdata) deliver_data(data) udt_send(ACK)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)

udt_send(NAK)

rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)

Wait for ACK or NAK

Wait for call from below

Transport Layer 3-32

rdt20 has a fatal flaw

āļˆāļ°āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āļ–āļē ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āļœāļŠāļ‡āđ„āļĄāļĢāļ§āļēāļœāļĢāļšāļĢāļš pkt āļ„āļĢāļšāļ–āļ§āļ™

āļŦāļĢāļ­āđ„āļĄ āđ„āļĄāļ„āļ§āļĢāļŠāļ‡ pkt āļ‹ āļēāļ­āļāļ„āļĢāļ‡ āđ€āļžāļĢāļēāļ°

pkt āļ‹ āļēāļāļ™

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļ‚āļ­āļĄāļĨāļ—āļ‹ āļēāļ‹āļ­āļ™ āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡āļ–āļē

ACKNAK āđ€āļāļ”āđ€āļŠāļĒāļŦāļēāļĒ āđ€āļ•āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđƒāļŦāđāļ•āļĨāļ°

packet āļœāļĢāļšāļ•āļ­āļ‡āļ—āļ‡ packet āļ—āļ‹ āļēāļāļ™

stop and wait āļœāļŠāļ‡āļ— āļēāļāļēāļĢāļŠāļ‡packetāđāļĨāļ°āļĢāļ­āđƒāļŦāļœāļĢāļšāļ•āļ­āļšāļāļĨāļšāļ”āļ§āļĒ ACKNAK āļāļ­āļ™āļ—āļˆāļ°āļŠāļ‡ packet āļ•āļ­āđ„āļ›

Transport Layer 3-33

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

Wait for

ACK or

NAK 0 udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isNAK(rcvpkt) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt)

Wait for

call 1 from

above

Wait for

ACK or

NAK 1

L L

Transport Layer 3-34

Wait for

0 from

below

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq0(rcvpkt)

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

Wait for

1 from

below

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq0(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

not corrupt(rcvpkt) ampamp

has_seq1(rcvpkt)

rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)

sndpkt = make_pkt(ACK chksum)

udt_send(sndpkt)

sndpkt = make_pkt(NAK chksum)

udt_send(sndpkt)

rdt21 āļœāļŠāļ‡āļˆāļ”āļāļēāļĢāļāļš ACKNAKs āļ—āđ„āļĄāļ–āļāļ•āļ­āļ‡

Transport Layer 3-35

rdt21 āļ­āļ āļ›āļĢāļēāļĒ

āļœāļŠāļ‡ āđƒāļŠāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđƒāļ™packet āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (01) āļāļžāļ­

āļ™āļāļŠāļ— āļēāđ„āļĄ āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē ACKNAK āļ—

āđ„āļ”āļĢāļšāđ€āļŠāļĒāđ„āļ›āļŦāļĢāļ­āđ„āļĄ āļˆ āļēāļ™āļ§āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ•āļ­āļ‡āđ€āļ›āļ™āļŠāļ­āļ‡

āđ€āļ—āļēāļ‚āļ­āļ‡āļˆ āļēāļ™āļ§āļ™āļŠāļ–āļēāļ™āļ° āđ€āļžāļĢāļēāļ°āļœāļŠāļ‡āļ•āļ­āļ‡āđ€āļāļšāļŠāļ–āļēāļ™āļ°āđ€āļžāļ­ldquoāļˆ āļērdquo

āļ§āļē pkt āļ–āļ”āđ„āļ›āļˆāļ°āļ•āļ­āļ‡āļĄāđ€āļĨāļ‚ seq 0 āļŦāļĢāļ­ 1

āļœāļĢāļš āļ•āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļē pkt āļ—āđ„āļ”āļĢāļšāļ‹ āļēāļāļš

pkt āļ—āđ„āļ”āļĢāļšāļāļ­āļ™āļŦāļ™āļēāļŦāļĢāļ­āđ„āļĄ āļœāļĢāļšāļˆāļ°āđ€āļāļšāļŠāļ–āļēāļ™āļ°āļ—āļĢāļ°āļšāļ§āļē 0 āļŦāļĢāļ­ 1

āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļ§āļēāļˆāļ°āđ„āļ”

āļ‚āļ­āļŠāļ‡āđ€āļāļ• āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļē ACKNAK āļŠāļ”āļ—āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡āļŦāļĢāļ­āđ„āļĄ

Transport Layer 3-36

rdt22 protocol āļ—āđ„āļĄāļ•āļ­āļ‡āđƒāļŠ NAK

āļ— āļēāļ‡āļēāļ™āđ€āļŦāļĄāļ­āļ™āļāļš rdt21 āđāļ•āđƒāļŠāđāļ„ ACKs āđāļ—āļ™āļ—āļˆāļ°āļŠāļ‡ NAK āļœāļĢāļšāļŠāļ‡ ACK āļŠ āļēāļŦāļĢāļš pkt āļŠāļ”āļ—āļēāļĒāļ—āđ„āļ”āļĢāļšāļ–āļāļ•āļ­āļ‡

āļāļ‡āļĢāļšāļˆāļ°āļ•āļ­āļ‡āļĢāļ§āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡āļ–āļ ACK āđ„āļ›āļ”āļ§āļĒ

āļˆāļ°āļŠāļ‡ ACK āļ‹ āļēāđ„āļ›āļ—āļœāļŠāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡ āļœāļĨāļĨāļžāļ˜āļˆāļ°āļ­āļ­āļāļĄāļēāđ€āļŦāļĄāļ­āļ™āļāļĢāļ“āļ—āļŠāļ‡ NAK āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ pkt āļ•āļ§āļĨāļēāļŠāļ”āđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡

rdt22 sender receiver fragments

Transport Layer 3-37

rdt22 sender receiver fragments

Wait for

call 0 from

above

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

rdt_send(data)

udt_send(sndpkt)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

Wait for

ACK

0

sender FSM fragment

rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)

ampamp has_seq1(rcvpkt)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(ACK1 chksum)

udt_send(sndpkt)

Wait for

0 from

below

rdt_rcv(rcvpkt) ampamp

(corrupt(rcvpkt) ||

has_seq1(rcvpkt))

udt_send(sndpkt)

receiver FSM fragment

L

Transport Layer 3-38

rdt30 āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļ—āļĄāļ„āļ§āļēāļĄāļœāļ”āļžāļĨāļēāļ”āđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ

āđ€āļžāļĄāļ‚āļ­āļŠāļ™āļ™āļĐāļāļēāļ™ āļŠāļ­āļ‡āļŠāļāļāļēāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāđ€āļŠāļĒāđāļžāļ„āđ€āļāļˆ (āđ„āļĄāļ§āļēāļˆāļ°āđ€āļ›āļ™āļ‚āļ­āļĄāļĨāļŦāļĢāļ­ ACKs) āđ„āļ” āļāļĨāđ„āļ checksum āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq

ACKs āđāļĨāļ° āļāļēāļĢāļŠāļ‡āļ‹ āļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļ§āļĒ āđāļ•āļĄāļ™āļāļĒāļ‡āđ„āļĄāđƒāļŠāļ—āļēāļ‡āļ­āļ­āļ

āļ§āļ˜ āļœāļŠāļ‡āļĢāļ­ ACK āļāļĨāļšāļĄāļēāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ— ldquoāļŠāļĄāđ€āļŦāļ•āļŠāļĄāļœāļĨrdquo

āļŠāļ‡ pkt āđ€āļ”āļĄāđ„āļ›āđƒāļŦāļĄāļ­āļāļ„āļĢāļ‡āļ–āļēāđ„āļĄāđ„āļ”āļĢāļš ACK āļ āļēāļĒāđƒāļ™āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ™

āļ–āļē pkt (āļŦāļĢāļ­ ACK) āļĄāļēāļ–āļ‡āļĨāļēāļŠāļē (āđ„āļĄāđƒāļŠāļŦāļēāļĒāđ„āļ›) āļāļēāļĢāļŠāļ‡āđƒāļŦāļĄāļāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļŠāļ‡āļ‹ āļē āļ‹āļ‡ seq

āđ„āļ”āļˆāļ”āļāļēāļĢāđ€āļĢāļ­āļ‡āđ€āļāļĒāļ§āļāļšāļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ” āļœāļĢāļšāļ•āļ­āļ‡āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ pkt āļ—āļ āļēāļĨāļ‡

āļ–āļ ACKed

āļ•āļ­āļ‡āđƒāļŠāļāļēāļĢāļ™āļšāđ€āļ§āļĨāļēāļ–āļ­āļĒāļŦāļĨāļ‡ (timer)

Transport Layer 3-39

rdt30 sender

sndpkt = make_pkt(0 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

Wait

for

ACK0

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt1) )

Wait for

call 1 from

above

sndpkt = make_pkt(1 data checksum)

udt_send(sndpkt)

start_timer

rdt_send(data)

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt0)

rdt_rcv(rcvpkt) ampamp

( corrupt(rcvpkt) ||

isACK(rcvpkt0) )

rdt_rcv(rcvpkt)

ampamp notcorrupt(rcvpkt)

ampamp isACK(rcvpkt1)

stop_timer

stop_timer

udt_send(sndpkt)

start_timer

timeout

udt_send(sndpkt)

start_timer

timeout

rdt_rcv(rcvpkt)

Wait for

call 0from

above

Wait

for

ACK1

L

rdt_rcv(rcvpkt)

L

L

L

Transport Layer 3-40

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

pkt1

ack1

ack0

ack0

(a) no loss

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0 pkt0

pkt0

ack1

ack0

ack0

(b) packet loss

pkt1 X

loss

pkt1 timeout

resend pkt1

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-41

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

rcv pkt0

send ack0

send ack1

send ack0

rcv ack0

send pkt0

send pkt1

rcv ack1

send pkt0

rcv pkt0

pkt0

pkt0

ack1

ack0

ack0

(c) ACK loss

ack1 X

loss

pkt1 timeout

resend pkt1

rcv pkt1 send ack1

(detect duplicate)

pkt1

sender receiver

rcv pkt1

send ack0 rcv ack0

send pkt1

send pkt0

rcv pkt0

pkt0

ack0

(d) premature timeout delayed ACK

pkt1 timeout

resend pkt1

ack1

send ack1

send pkt0 rcv ack1

pkt0

ack1

ack0

send pkt0 rcv ack1 pkt0

rcv pkt0 send ack0

ack0

rcv pkt0

send ack0 (detect duplicate)

āļ‚āļ“āļ° rdt30 āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

Transport Layer 3-42

āļ›āļĢāļ°āļŠāļ—āļ˜āļ āļēāļžāļ‚āļ­āļ‡ rdt30

rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet

U sender utilization ndash fraction of time sender busy sending

U sender =

008

30008 = 000027

L R

RTT + L R =

if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link

network protocol limits use of physical resources

Dtrans = L R

8000 bits

109 bitssec = = 8 microsecs

Transport Layer 3-43

rdt30 stop-and-wait operation

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļāļ–āļāļŠāļ‡ t = 0

āļœāļŠāļ‡ āļœāļĢāļš

RTT

āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļ–āļāļŠāļ‡ t = L R

āļšāļ•āđāļĢāļāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļšāļ•āļŠāļ”āļ—āļēāļĒāļ‚āļ­āļ‡āđāļžāļ„āđ€āļāļˆāļĄāļēāļ–āļ‡ āļŠāļ‡ ACK

āđ„āļ”āļĢāļš ACK āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ•āļ­āđ„āļ› t = RTT + L R

U sender =

008

30008 = 000027

L R

RTT + L R =

Transport Layer 3-44

protocols āđāļšāļš pipelined

pipelining āļœāļŠāļ‡āļŠāļ‡āļŦāļĨāļēāļĒ packet āđ„āļ›āļĒāļ‡āļœāļĢāļšāļ—āļ‡ āđ† āļ— pkt āđ€āļŦāļĨāļēāļ™āļ™āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļāļēāļĢāļĒāļ™āļĒāļ™āļ•āļ­āļšāļĢāļš (not yet acked) āļŠāļ§āļ‡āļ‚āļ­āļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āļˆāļ°āļ•āļ­āļ‡āđ€āļžāļĄāļ‚āļ™ āļ•āļ­āļ‡āļžāļāļ‚āļ­āļĄāļĨ (buffer) āļ—āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš

protocols āđāļšāļš pipelined āđāļšāļšāļ—āļ§āđ„āļ›āļĄāļŠāļ­āļ‡āđāļšāļš go-Back-N selective repeat

Transport Layer 3-45

Pipelining āļŠāļ§āļĒāđ€āļžāļĄ utilization

first packet bit transmitted t = 0

sender receiver

RTT

last bit transmitted t = L R

first packet bit arrives

last packet bit arrives send ACK

ACK arrives send next

packet t = RTT + L R

last bit of 2nd packet arrives send ACK

last bit of 3rd packet arrives send ACK

3-packet pipelining increases

utilization by a factor of 3

U sender =

0024

30008 = 000081

3L R

RTT + L R =

Transport Layer 3-46

protocols āđāļšāļš pipeline āļ āļēāļžāļĢāļ§āļĄ

Go-back-N āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ

ack āđ„āļ”āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāđāļ„āļŠāļ‡ cumulative ack āđ„āļĄ ack packet āļ–āļēāļĄāļ™āļāļ­āđƒāļŦāđ€āļāļ” gap

āļœāļŠāļ‡āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›

āļ™āļēāļ™āļ—āļŠāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āđāļžāļ„āđ€āļāļˆ

āļ—āļ‡āļŦāļĄāļ”āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļ­āļāļ„āļĢāļ‡

Selective Repeat āļœāļŠāļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāļĒāļ‡āļ–āļ ack āđ„āļ”

āđ„āļĄāđ€āļāļ™ N āđāļžāļ„āđ€āļāļˆāđƒāļ™ pipeline

āļœāļĢāļšāļˆāļ°āļ•āļ­āļ‡āļŠāļ‡ ack āļāļĨāļšāđƒāļŦāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆ

āļœāļŠāļ‡āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—

āđ„āļĄāđ„āļ” ack āđ€āļĄāļ­āđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāđƒāļ”āļŦāļĄāļ” āļœāļŠāļ‡āļˆāļ°āļŠāļ‡

āđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ™āļ™āđ€āļ—āļēāļ™āļ™

Transport Layer 3-47

Go-Back-N āļœāļŠāļ‡

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq (k bit) āļˆāļ°āļ­āļĒāđƒāļ™ header āļ‚āļ­āļ‡ packet āļ­āļ™āļāļēāļ•āđƒāļŦāļ‚āļ™āļēāļ” ldquowindowrdquo (āļ‚āļ­āļ‡ pkt āļ—āļ•āļ”āļāļ™āđāļĨāļ°āļĒāļ‡āđ„āļĄāļ–āļ ack) āđ„āļĄāđ€āļāļ™ N

ACK(n) āļˆāļ° ack āđāļžāļ„āđ€āļāļˆāļ—āļ‡āļŦāļĄāļ”āđ„āļ›āļˆāļ™āļ–āļ‡āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ—āļēāļāļš n - ldquoāļāļēāļĢ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative ACK)rdquo āļ­āļēāļˆāļĄāļāļēāļĢāđ„āļ”āļĢāļš ACKs āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļ”āļĄāļ‹ āļē (āļ”āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļ”āļēāļ™ receiver)

āļĄāļāļēāļĢāļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļšāđāļžāļ„āđ€āļāļˆāļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ āļ‹āļ‡āđ€āļ”āļ™āļ—āļēāļ‡āļ™āļēāļ™āļ—āļŠāļ”āđāļĨāļ°āļĒāļ‡āđ„āļĄāđ„āļ” ACK (pkt āļ—āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ™āļ­āļĒāļ—āļŠāļ”āđƒāļ™ window)

timeout(n) āđ€āļ§āļĨāļēāļŦāļĄāļ”āļ— pkt n āļœāļŠāļ‡āļˆāļ°āļŠāļ‡ pkt n āđāļĨāļ° pkt āļ—āļ‡āļŦāļĄāļ”āđƒāļ™ window (āļ‹āļ‡āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļē n) āļ­āļāļ„āļĢāļ‡

Transport Layer 3-48

GBN FSM āļ”āļēāļ™āļœāļŠāļ‡āļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Wait start_timer

udt_send(sndpkt[base])

udt_send(sndpkt[base+1])

hellip

udt_send(sndpkt[nextseqnum-1])

timeout

rdt_send(data)

if (nextseqnum lt base+N)

sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)

udt_send(sndpkt[nextseqnum])

if (base == nextseqnum)

start_timer

nextseqnum++

else

refuse_data(data)

base = getacknum(rcvpkt)+1

If (base == nextseqnum)

stop_timer

else

start_timer

rdt_rcv(rcvpkt) ampamp

notcorrupt(rcvpkt)

base=1

nextseqnum=1

rdt_rcv(rcvpkt)

ampamp corrupt(rcvpkt)

L

Transport Layer 3-49

ACK-only always send ACK for correctly-received pkt with highest in-order seq may generate duplicate ACKs need only remember expectedseqnum

out-of-order pkt discard (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq

Wait

udt_send(sndpkt)

default

rdt_rcv(rcvpkt)

ampamp notcurrupt(rcvpkt)

ampamp hasseqnum(rcvpktexpectedseqnum)

extract(rcvpktdata)

deliver_data(data)

sndpkt = make_pkt(expectedseqnumACKchksum)

udt_send(sndpkt)

expectedseqnum++

expectedseqnum=1

sndpkt =

make_pkt(expectedseqnumACKchksum)

L

GBN FSM āļ”āļēāļ™āļœāļĢāļšāļ—āđ€āļžāļĄāļˆāļēāļāļ‚āļ­āļ‡āđ€āļ”āļĄ

Transport Layer 3-50

GBN in action

send pkt0 send pkt1 send pkt2 send pkt3

(wait)

sender receiver

receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4

rcv ack1 send pkt5

pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5

X loss

receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1

rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5

ignore duplicate ACK

0 1 2 3 4 5 6 7 8

sender window (N=4)

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8

Transport Layer 3-51

Selective repeat

āļœ āļĢāļš Ack āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļ”āļĢāļšāļĄāļēāļ–āļāļ•āļ­āļ‡ āđ€āļāļš (buffer) āđāļžāļ„āđ€āļāļˆ āđ€āļ—āļēāļ—āļˆ āļēāđ€āļ›āļ™ āđ€āļžāļ­āļ—āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ§ āđ„āļ›āļĒāļ‡ layer

āļšāļ™āđ„āļ”āđƒāļ™āļ—āļēāļĒāļ—āļŠāļ”

āļœāļŠāļ‡āđāļ„āļŠāļ‡āđāļžāļ„āđ€āļāļˆāļ‹ āļēāđ€āļ‰āļžāļēāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack āđ€āļ—āļēāļ™āļ™ āļ•āļ§āļˆāļšāđ€āļ§āļĨāļē (āļ—āļēāļ‡āļāļ‡āļœāļŠāļ‡) āļˆāļ°āļˆāļšāđ€āļ§āļĨāļēāļ‚āļ­āļ‡āđāļ•āļĨāļ°āđāļžāļ„āđ€āļāļˆāļ—āđ„āļĄāđ„āļ”āļĢāļš Ack

Window āļ‚āļ­āļ‡āļœāļŠāļ‡ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ­āļĒ N āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ•āļ”āļāļ™ āļˆ āļēāļāļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡āđāļžāļ•āđ€āļāļˆāļ—āļŠāļ‡āđ„āļ›āđāļĨāļ§ āđāļĨāļ°āđ„āļĄāđ„āļ”āļĢāļš Ack

Transport Layer 3-52

Selective repeat sender receiver windows

Transport Layer 3-53

Selective repeat

āļ‚āļ­āļĄāļĨāļĄāļēāļˆāļēāļ layer āļ”āļēāļ™āļšāļ™ āļ–āļēāļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ§āļēāļ‡āđƒāļ™ window āđƒāļŦ

āļŠāļ‡ pkt āđ„āļ”

timeout(n) āļŠāļ‡ pkt n āļ‹ āļē āļˆāļšāđ€āļ§āļĨāļēāđƒāļŦāļĄ

ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļœāļĢāļšāđ„āļ”āļĢāļš pkt n āđāļĨāļ§ āļ–āļē n āđ€āļāļ”āđ€āļ›āļ™āļŦāļĄāļēāļĒāđ€āļĨāļ‚āđāļĢāļāļŠāļ”āđƒāļ™āļŦāļ™āļēāļ•āļēāļ‡

(n āđ€āļ—āļēāļāļš sendbase) āļ—āđ„āļĄāđ„āļ” āļ–āļ ack āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļēāļ‡āļ”āļēāļ™āļ‚āļ§āļē āđ‚āļ”āļĒāđ€āļĨāļ­āļ™āđ„āļ›āļĒāļ‡āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ—āđ„āļĄāđ„āļ”āļ–āļ ack

āļœāļŠāļ‡ pkt n in [rcvbase rcvbase+N-1] āļŠāļ‡ ACK(n) āļ–āļēāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš buffer āļ–āļēāļ•āļēāļĄāļĨ āļēāļ”āļš āļŠāļ‡ (āļĢāļ§āļĄāļ–āļ‡āđƒāļŦāļŠāļ‡ pkt āļ—

āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāđāļĨāļ°āļ­āļĒāđƒāļ™āļšāļŸāđ€āļŸāļ­āļĢ) āđ€āļĨāļ­āļ™ window āđ„āļ›āļ—āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ–āļ”āđ„āļ›āļ‚āļ­āļ‡ pkt āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļšāļˆāļēāļāļœāļŠāļ‡

pkt n in [rcvbase-Nrcvbase-1] ACK(n)

otherwise āļ—āļ‡āđ„āļ›āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ

āļœāļĢāļš

Transport Layer 3-54

āļ‚āļ“āļ° Selective repeat āļ” āļēāđ€āļ™āļ™āļāļēāļĢ

āļŠāļ‡ pkt0

sender receiver

āļĢāļš pkt0 āļŠāļ‡ ack0

āļĢāļš pkt1 āļŠāļ‡ ack1

āļĢāļš pkt3 buffer āļŠāļ‡ ack3 āļĢāļš ack0 āļŠāļ‡ pkt4

āļĢāļš ack1 āļŠāļ‡ pkt5

pkt 2 timeout send pkt2

X loss

āļĢāļš pkt4 buffer āļŠāļ‡ ack4

āļĢāļš pkt5 buffer āļŠāļ‡ ack5

āļĢāļš pkt2 deliver pkt2

pkt3 pkt4 pkt5 āļŠāļ‡ ack2

āļšāļ™āļ—āļ ack3 āļĄāļēāļ–āļ‡āđāļĨāļ§

sender window (N=4)

āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§ āļšāļ™āļ—āļ ack4 āļĄāļēāļ–āļ‡āđāļĨāļ§

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ ack2 āļĄāļēāļ–āļ‡

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

0 1 2 3 4 5 6 7 8

āļŠāļ‡ pkt1 āļŠāļ‡ pkt2

āļŠāļ‡ pkt3

(wait)

Transport Layer 3-55

Selective repeat dilemma

āļ•āļ§āļ­āļĒāļēāļ‡ āļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq 0 1 2 3 āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window =3

receiver window (after receipt)

sender window (after receipt)

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2 pkt0

timeout retransmit pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2 X

X

X

will accept packet with seq number 0

(b) oops

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

pkt0

pkt1

pkt2

0 1 2 3 0 1 2

pkt0

0 1 2 3 0 1 2

0 1 2 3 0 1 2

0 1 2 3 0 1 2

X

will accept packet with seq number 0

0 1 2 3 0 1 2 pkt3

(a) no problem

āļœāļĢāļšāđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŦāļ™āļ”āļēāļ™āļœāļŠāļ‡āđ„āļ” āļžāļĪāļ•āļāļĢāļĢāļĄāļœāļĢāļšāļˆāļ°āđ€āļŦāļĄāļ­āļ™āļāļ™āļ—āļ‡ 2 āļŠāļ–āļēāļ™āļāļēāļĢāļ“

āļĄāļšāļēāļ‡āļ­āļĒāļēāļ‡āļ—āļœāļ” (āļĄāļēāļ)

āļœāļĢāļšāđ„āļĄāđ€āļŦāļ™āļ–āļ‡āļ„āļ§āļēāļĄāđāļ•āļāļ•āļēāļ‡āļ‚āļ­āļ‡āļ—āļ‡ 2 āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ™

āđƒāļ™āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ (b) āļ‚āļ­āļĄāļĨāđ€āļāļēāļ—āļ–āļāļŠāļ‡āļ‹ āļē āđ€āļĄāļ­āļœāļĢāļšāļĢāļšāļĄāļē āļˆāļ°āļ™āļāļ§āļēāđ€āļ›āļ™āļ‚āļ­āļĄāļĨāđƒāļŦāļĄ

Q āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ seq āļāļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡

window āđ€āļāļĒāļ§āļ‚āļ­āļ‡āļāļ™āļĒāļ‡āđ„āļ‡āđ€āļžāļ­āļ—āļˆāļ°āļŦāļĨāļāđ€āļĨāļĒāļ‡āļ›āļāļŦāļēāđƒāļ™āļ•āļ§āļ­āļĒāļēāļ‡ (b)

Transport Layer 3-56

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-57

TCP āļ āļēāļžāļĢāļ§āļĄ RFCs 79311221323 2018 2581

āļ‚āļ­āļĄāļĨāđāļšāļšāļŠāļ­āļ‡āļ—āļĻāļ—āļēāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡āđ„āļ›āđāļĨāļ°āļāļĨāļšāđƒāļ™āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ (connection) āđ€āļ”āļĒāļ§āļāļ™ MSS āļ‚āļ™āļēāļ” segment āļ—āđƒāļŦāļāļŠāļ”āļ—

TCP āļˆāļ°āļĢāļšāđ„āļ” (Max Segment Size)

connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ‡

āļ‚āļ­āļ„āļ§āļēāļĄāļ„āļ§āļšāļ„āļĄ) āļ•āļ‡āļ„āļēāļŠāļ–āļēāļ™āļ°āļ•āļ‡āļ•āļ™āđƒāļŦāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļš āļāļ­āļ™āļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļ„āļ§āļēāļĄ

flow controlled āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļāļ™āļāļ§āļēāļ—āļœāļĢāļšāļˆāļ°āļĢāļš

āđ„āļ”

point-to-point (āļŠāļ–āļēāļ™āļ—āļ™āļ‡-āđ„āļ›-āļŠāļ–āļēāļ™āļ—āļ™āļ‡) āļœāļŠāļ‡āļŦāļ™āļ‡āļ„āļ™ āļœāļĢāļšāļŦāļ™āļ‡āļ„āļ™

āļŠāļēāļĒāļ‚āļ­āļĄāļĨāđ€āļ›āļ™āđ„āļšāļ•āļ—āđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāđāļĨāļ°āļ‚āļ­āļĄāļĨāđ„āļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđ„āļĄāļĄ ldquoāļ‚āļ­āļšāđ€āļ‚āļ•rdquo āļ‚āļ­āļ‡āļ‚āļ­āļ„āļ§āļēāļĄ

(āļ‚āļ­āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļ–āļ‡āļœāļĢāļšāļ•āļ­āđ€āļ™āļ­āļ‡āļāļ™)

pipelined āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđāļĨāļ°āļāļēāļĢāļ„āļ§āļšāļ„āļĄ

āļ­āļ•āļĢāļēāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡ TCP āļˆāļ°āļ āļēāļŦāļ™āļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window

Transport Layer 3-58

TCP segment structure

source port dest port

32 bits

application

data

(variable length)

sequence number

acknowledgement number

receive window

Urg data pointer checksum

F S R P A U head

len

not

used

options (variable length)

URG āļ‚āļ­āļĄāļĨāđ€āļĢāļ‡āļ”āļ§āļ™ (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

ACK ACK valid

PSH āļœāļĨāļāļ‚āļ­āļĄāļĨāđƒāļŦāļŠāļ™ app (āđ‚āļ”āļĒāļ—āļ§ āđ† āđ„āļ› āđ„āļĄāļ–āļāđƒāļŠ)

RST SYN FIN āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļ•āļ­

(āļ„ āļēāļŠāļ‡ setup teardown)

āļˆ āļēāļ™āļ§āļ™ bytes āļ— āļœāļĢāļšāđ€āļ•āļĄāđƒāļˆāļˆāļ°āļĢāļš

āļ™āļšāđ‚āļ”āļĒāđƒāļŠ byte āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (āđ„āļĄāđƒāļŠ segment)

Internet checksum

(āđ€āļŦāļĄāļ­āļ™āđƒāļ™ UDP)

Transport Layer 3-59

TCP seq numbers ACKs

āļŦāļĄāļēāļĒāđ€āļĨāļ‚ sequence āđ€āļĨāļ‚āļ‚āļ­āļ‡ byte stream āļˆāļ°āđ€āļ›āļ™ byte

āđāļĢāļāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ segment āļ™ acknowledgements āđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ–āļ”āđ„āļ›āļ—āļ­āļāļ”āļēāļ™āļŦāļ™āļ‡

āļ„āļēāļ”āļŦāļ§āļ‡āļ§āļēāļˆāļ°āđ„āļ” cumulative ACK (ACK āđāļšāļšāļĢāļ§āļĄ)

Q āļœāļĢāļšāļˆāļ”āļāļēāļĢāļāļš segment āļ—āļĄāļēāļ–āļ‡āđ„āļĄāđ€āļĢāļĒāļ‡āļĨ āļēāļ”āļšāļ­āļĒāļēāļ‡āđ„āļĢ A TCP āđ„āļĄāļĄāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”āļŠāļ§āļ™āļ™ ndash āļ‚āļ™āļ­āļĒ

āļāļšāļ„āļ™āļ—āļˆāļ°āļĄāļēāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ TCP source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāđ€āļ‚āļēāļĄāļēāļ–āļ‡āļœāļŠāļ‡

A

sent ACKed

sent not-yet ACKed (ldquoin-flightrdquo)

usable but not yet sent

not usable

window size N

sender sequence number space

source port dest port

sequence number acknowledgement number

checksum

rwnd urg pointer

segment āļ‚āļēāļ­āļ­āļāļˆāļēāļāļœāļŠāļ‡

Transport Layer 3-60

TCP seq numbers ACKs

User types lsquoCrsquo

host ACKs receipt

of echoed lsquoCrsquo

host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo

āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡ telnet āļ­āļĒāļēāļ‡āļ‡āļēāļĒ

Host B Host A

Seq=42 ACK=79 data = lsquoCrsquo

Seq=79 ACK=43 data = lsquoCrsquo

Seq=43 ACK=80

Transport Layer 3-61

TCP round trip time timeout

Q āđ€āļĢāļēāļ„āļ§āļĢāļˆāļ°āļ āļēāļŦāļ™āļ” time out āđ„āļ§āļ—āđ€āļ—āļēāđƒāļ”

āļĄāļēāļāļāļ§āļēāđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđāļ•āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ™āļ™āđāļ›āļĢāļ›āļĢāļ§āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļ™āļ­āļĒāđ€āļāļ™āđ„āļ› timeout āļāļ­āļ™āļ āļēāļŦāļ™āļ” āļ— āļēāđƒāļŦāļĄāļāļēāļĢ retransmissions āđ‚āļ”āļĒāđ„āļĄāļˆ āļēāđ€āļ›āļ™

āļ āļēāļŦāļ™āļ”āđ„āļ§āļĄāļēāļāđ€āļāļ™āđ„āļ› āļĢāļ°āļšāļšāļ•āļ­āļšāļŠāļ™āļ­āļ‡āļ•āļ­āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡ segment āļŠāļēāđ€āļāļ™āđ„āļ›

Q āļˆāļ°āļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āļ­āļĒāļēāļ‡āđ„āļĢ

SampleRTT āļ§āļ”āļˆāļēāļāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ•āļ‡āđāļ•āđ€āļĢāļĄāļŠāļ‡ sengment āļˆāļ™āļāļĢāļ°āļ—āļ‡āđ„āļ”āļĢāļšACK āđ„āļĄāļŠāļ™āđƒāļˆāļāļēāļĢ retransmissions

SampleRTT āļĄāļ„āļēāđāļ›āļĢāļ›āļĢāļ§āļ™ āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĄāļēāļ“āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ RTT āđƒāļŦ smooth āļāļ§āļē āđƒāļŠāļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļ„āļēāļŦāļĨāļēāļĒ āđ† āļ„āļē āđ„āļĄāđƒāļŠāđāļ„

āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ SampleRTT āļ›āļˆāļˆāļšāļ™

Transport Layer 3-62

RTT gaiacsumassedu to fantasiaeurecomfr

100

150

200

250

300

350

1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106

time (seconnds)

RT

T (

mil

lise

con

ds)

SampleRTT Estimated RTT

EstimatedRTT = (1- )EstimatedRTT + SampleRTT

āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡āļāļēāļĢāđ€āļ„āļĨāļ­āļ™āļ—āļ–āļ§āļ‡āļ™ āļēāļŦāļ™āļāđāļšāļš exponential āļ„āļē SampleRTT āļ—āđƒāļ™āļ­āļ”āļ•āļˆāļ°āļĄāļœāļĨāļ•āļ­ EstimatedRTT āļĨāļ”āļĨāļ‡āđāļšāļš exponentially āđ‚āļ”āļĒāļ—āļ§āđ„āļ›āļˆāļ°āļ āļēāļŦāļ™āļ”āļ„āļē = 0125

TCP round trip time timeout

RTT (

mill

iseco

nds)

RTT gaiacsumassedu to fantasiaeurecomfr

sampleRTT

EstimatedRTT

time (seconds)

Transport Layer 3-63

āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ timeout EstimatedRTT āļšāļ§āļāļāļšāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āđ€āļ­āļēāđ„āļ§ āļĒāļ‡āļ„āļēāļ‚āļ­āļ‡ EstimatedRTT āļ—āđāļ›āļĢāļ›āļĢāļ§āļ™āļĄāļēāļāđ€āļ—āļēāđ„āļĢ -gt āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­āļ„āļ§āļēāļĄāļĄāļēāļāļ‚āļ™āļ•āļēāļĄ

āļĄāļ›āļĢāļ°āđ€āļĄāļ™āļ„āļēāļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡ SampleRTT āļˆāļēāļ EstimatedRTT

DevRTT = (1-)DevRTT +

|SampleRTT-EstimatedRTT|

TCP round trip time timeout

(typically = 025)

TimeoutInterval = EstimatedRTT + 4DevRTT

estimated RTT ldquoāļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āđ€āļœāļ­rdquo

Transport Layer 3-64

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-65

TCP reliable data transfer

TCP āļŠāļĢāļēāļ‡āļšāļĢāļāļēāļĢāđāļšāļš reliable āļ­āļĒāļšāļ™āļšāļĢāļāļēāļĢāļ‚āļ­āļ‡ IP āļ—āđ€āļ›āļ™āđāļšāļš unreliable segments āļ–āļāļŠāļ‡āđāļšāļš pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļšāļŠāļ‡āđƒāļŦāļĄāļ„āļēāļ•āļ§āđ€āļ”āļĒāļ§

TCP āļŠāļ‡ segment āđƒāļŦāļĄāđ€āļĄāļ­ āđ€āļŦāļ•āļāļēāļĢāļ“ timeout āđ„āļ”āļĢāļš acks āļ‹ āļē āđ† āļāļ™

āđ€āļĢāļēāļĄāļēāđ€āļĢāļĄāļ•āļ™āļžāļˆāļēāļĢāļ“āļēāļ—āļēāļ‡āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP āļ­āļĒāļēāļ‡āļ‡āļēāļĒāļāļ­āļ™ āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆ acks āļ‹ āļē āļĒāļ‡āđ„āļĄāļ•āļ­āļ‡āļŠāļ™āđƒāļˆāļāļēāļĢāļ„āļ§āļšāļ„āļĄ flow āđāļĨāļ°

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

Transport Layer 3-66

āđ€āļŦāļ•āļāļēāļĢāļ“āļ‚āļ­āļ‡ TCP sender

āđ€āļĄāļ­āđ„āļ”āļ‚āļ­āļĄāļĨāļˆāļēāļ app āļŠāļĢāļēāļ‡ segment āļ”āļ§āļĒāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āđ€āļĨāļ‚ seq āļ„āļ­āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ‚āļ­āļ‡āđ„āļšāļ•āđāļĢāļ

āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™āđāļ•āļĨāļ° segment āļŦāļēāļ timer āļĒāļ‡āđ„āļĄāđ€āļ„āļĒāļ–āļāļ•āļ‡ āļˆāļ°āđ€āļĢāļĄ

āļ•āļ‡āđ€āļ§āļĨāļē āļāļēāļĢāļ•āļ‡āđ€āļ§āļĨāļēāđ€āļžāļ­āļˆāļšāđ€āļ§āļĨāļēāļŠ āļēāļŦāļĢāļš

segment āđ€āļāļēāļ—āļŠāļ”āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack āļŠāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļŦāļĄāļ”āļ­āļēāļĒ

TimeOutInterval

timeout āļŠāļ‡āđƒāļŦāļĄāđ€āļ‰āļžāļēāļ° segment āļ—āđ€āļāļ”

timeout āļ•āļ‡āđ€āļ§āļĨāļēāļ™āļšāđƒāļŦāļĄ āđ€āļĄāļ­āđ„āļ”āļĢāļš ack āļ–āļē ack āđ€āļ›āļ™ ack āļ‚āļ­āļ‡ segment

āļāļ­āļ™āļŦāļ™āļēāļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš ack Update āļŠāļ‡āļ—āļĢāļ§āļē āļ–āļ ACK āđāļĨāļ§ āđ€āļĢāļĄāļ•āļ‡āđ€āļ§āļĨāļēāļ™āļš āļ–āļēāļĒāļ‡āļ„āļ‡āļĄ segment

āļ—āļĒāļ‡āđ„āļĄāđ„āļ”āļĢāļš acked

Transport Layer 3-67

āļ”āļēāļ™āļœāļŠāļ‡āļ‚āļ­āļ‡ TCP (āļ­āļĒāļēāļ‡āļ‡āļēāļĒ)

wait

for

event

NextSeqNum = InitialSeqNum

SendBase = InitialSeqNum

L

create segment seq NextSeqNum

pass segment to IP (ie ldquosendrdquo)

NextSeqNum = NextSeqNum + length(data)

if (timer currently not running)

start timer

data received from application above

retransmit not-yet-acked segment with smallest seq start timer

timeout

if (y gt SendBase)

SendBase = y

SendBasendash1 last cumulatively ACKed byte

if (there are currently not-yet-acked segments)

start timer

else stop timer

ACK received with ACK field value y

Transport Layer 3-68

TCP retransmission scenarios

lost ACK scenario

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

X tim

eout

ACK=100

premature timeout

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=92 8 bytes of data

tim

eout

ACK=120

Seq=100 20 bytes of data

ACK=120

SendBase=100

SendBase=120

SendBase=120

SendBase=92

Transport Layer 3-69

TCP retransmission scenarios

X

cumulative ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

Seq=120 15 bytes of data

tim

eout

Seq=100 20 bytes of data

ACK=120

Transport Layer 3-70

āļāļēāļĢāļŠāļĢāļēāļ‡ ACK āļ‚āļ­āļ‡ TCP [RFC 1122 RFC 2581]

āđ€āļŦāļ•āļāļēāļĢāļ“āļ—āļœāļĢāļš āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ) āđ‚āļ”āļĒāļ‚āļ­āļĄāļĨāļ—āļ‡āļŦāļĄāļ”āļˆāļ™āļ–āļ‡āđ€āļĨāļ‚ seq āļ—āļ„āļēāļ”āļŦāļ§āļ‡āđ„āļ§ āļ–āļ ACK āļŦāļĄāļ”āđāļĨāļ§

āđ€āļĄāļ­ Segment āļ—āļĄāļēāļ–āļ‡āđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš (āļ™āļ™āļ„āļ­ āļĄāļŦāļĄāļēāļĒāđ€āļĨāļ‚ seq āļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦ āđ„āļĄāļĄ gap āđƒāļ™ segment āļ—āđ„āļ”āļĄāļē) āđāļ•āļĄāļšāļēāļ‡ segment āļĒāļ‡āđ„āļĄāđ„āļ” ACK

Segment āļĄāļēāļ–āļ‡āđāļšāļšāđ„āļĄāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļš āđ‚āļ”āļĒāļĄāđ€āļĨāļ‚ seq āļŠāļ‡āļāļ§āļēāļ—āļ•āļ­āļ‡āļāļēāļĢ āļ— āļēāđƒāļŦāļĄ gap (āļŠāļ­āļ‡āđ‚āļŦāļ§) āđ€āļāļ”āļ‚āļ™ Segment āļ— āļēāļĄāļēāļ–āļ‡ āļ—āļˆāļ°āđ€āļ•āļĄāļšāļēāļ‡āļŠāļ§āļ™āļŦāļĢāļ­āđ€āļ•āļĄāđ€āļ•āļĄāļŠāļ­āļ‡āđ‚āļŦāļ§

TCP receiver action āļ­āļĒāļēāđ€āļžāļ‡āļŠāļ‡ ACK āļĢāļ­āļ­āļ segment āļ™āļ‡ āđ‚āļ”āļĒāļĢāļ­āļŠāļ 500ms āļŦāļēāļāļĒāļ‡āđ„āļĄāļĄ segment āļĄāļē āļāļŠāļ‡ ACK āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄ (cumulative) āđ„āļ›āļ—āļ™āļ—āđƒāļ™āļ„āļĢāļ‡āđ€āļ”āļĒāļ§ āļ‹āļ‡āļˆāļ°āđ€āļ›āļ™āļāļēāļĢ Ack segment āļ—āļĄāļēāđāļšāļšāđ€āļĢāļĒāļ‡āļ•āļēāļĄāļĨ āļēāļ”āļšāļ—āļ‡āļŠāļ­āļ‡ segments āļŠāļ‡ ACK āļ‹ āļē āđ„āļ›āļ—āļ™āļ— āđ‚āļ”āļĒāđƒāļŠāđ€āļĨāļ‚ seq āļ‚āļ­āļ‡ byte āļ—āļ•āļ­āļ‡āļāļēāļĢ āļŠāļ‡ ACK āđāļšāļšāļĢāļ§āļĄāļ—āļ™āļ— āđ‚āļ”āļĒ segment āļ—āļˆāļ° Ack āđ€āļĢāļĄāļˆāļēāļāļ”āļēāļ™āļ—āļ™āļ­āļĒāļāļ§āļēāļ‚āļ­āļ‡ gap

Transport Layer 3-71

TCP fast retransmit

āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢ time-out āļĄāļāļˆāļ°āļ„āļ­āļ™āļ‚āļēāļ‡āļĒāļēāļ§ (āđ‚āļ”āļĒāđ€āļ›āļĢāļĒāļšāđ€āļ—āļĒāļš) āļ— āļēāđƒāļŦāđƒāļŠāđ€āļ§āļĨāļēāļ„āļ­āļ™āļ‚āļēāļ‡āļ™āļēāļ™āļāļ­āļ™āļ—āļˆāļ°

āļŠāļ‡ packet āļ­āļāļ„āļĢāļ‡

āđāļāđ‚āļ”āļĒ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļŠāļāđ€āļŠāļĒ pack āđ‚āļ”āļĒāļ”āļ— ACKs āļ—āļ‹ āļē āđ† āļāļ™ āļœāļŠāļ‡āļĄāļāļŠāļ‡ segment āļ•āļ” āđ† āļāļ™ āļ”āļ‡āļ™āļ™ āļ–āļē segment āļŦāļ™āļ‡āļŦāļēāļĒāđ„āļ› āļˆāļ‡

āđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ—āļˆāļ°āļĄ ACKs āļ‹ āļē āđ† āļāļ™āļˆ āļēāļ™āļ§āļ™āļĄāļēāļ

āļ–āļēāļœāļŠāļ‡āđ„āļ”āļĢāļš ACKs āļŠ āļēāļŦāļĢāļšāļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ 3 ACKS (ACKs āļ—āļ‹ āļēāļāļ™āļŠāļēāļĄāļ„āļĢāļ‡) āļœāļŠāļ‡āļ•āļ­āļ‡āļŠāļ‡ seq āļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (āļĢāļ°āļšāđ€āļĨāļ‚ seq āļ—āđ€āļĨāļāļ—āļŠāļ”) āļĄāđāļ™āļ§āđ‚āļ™āļĄāļ§āļē segment āļ—āļĒāļ‡āđ„āļĄāļ–āļ

ack āļˆāļ°āļŦāļēāļĒāđ„āļ›āđ€āļĨāļĒ āļ”āļ‡āļ™āļ™ āļˆāļ‡āđ„āļĄāļ•āļ­āļ‡āļĢāļ­āđƒāļŦāļŦāļĄāļ”āđ€āļ§āļĨāļē

TCP fast retransmit

Transport Layer 3-72

X

fast retransmit after sender receipt of triple duplicate ACK

Host B Host A

Seq=92 8 bytes of data

ACK=100

tim

eout

ACK=100

ACK=100

ACK=100

TCP fast retransmit

Seq=100 20 bytes of data

Seq=100 20 bytes of data

Transport Layer 3-73

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-74

TCP flow control application

process

buffer āļ”āļēāļ™āļœāļĢāļš āļ‚āļ­āļ‡ TCP socket

TCP code

IP code

application

OS

protocol stack āļ”āļēāļ™āļœāļĢāļš

application āļĨāļšāļ‚āļ­āļĄāļĨāļˆāļēāļ buffer āļ‚āļ­āļ‡ TCP socket hellip

hellip āļŠāļēāļāļ§āļē TCP āļŠāļ‡āļ‚āļ­āļĄāļĨ āļ‚āļ™āđ„āļ› (āļ‚āļ“āļ°āļ—āļœāļŠāļ‡āļ āļēāļĨāļ‡āļˆāļ°āļŠāļ‡)

from sender

āļœāļĢāļšāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļĄāļœāļŠāļ‡āđ„āļ” āļ”āļ‡āļ™āļ™ āļœāļŠāļ‡āļˆāļ°āđ„āļĄāļŠāļ‡āļ‚āļ­āļĄāļĨāđ€āļĢāļ§āđ„āļ› āļŦāļĢāļ­ āļĄāļēāļāđ€āļāļ™āđ„āļ›āļˆāļ™āļĨāļ™ (Overflow) buffer āļ‚āļ­āļ‡āļœāļĢāļš

flow control

Transport Layer 3-75

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļĄāļĨāļ‚āļ­āļ‡ TCP

āļ‚āļ­āļĄāļĨāļ—āļ­āļĒ buffer

buffer āļŠāļ§āļ™āļ—āļĒāļ‡āļ§āļēāļ‡ rwnd

RcvBuffer

āļŠāļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ (payload) āđƒāļ™ segment āļ‚āļ­āļ‡ TCP

āđ„āļ›āļĒāļ‡ process āļ‚āļ­āļ‡ application

āļœāļĢāļšāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ buffer āļ—āļ§āļēāļ‡āđ„āļ§āđƒāļ™ field rwnd āļ—āļ­āļĒāđƒāļ™āļŠāļ§āļ™āļŦāļ§āļ‚āļ­āļ‡ TCP āļ—āļˆāļ°āļŠāļ‡āđ„āļ›āļĒāļ‡āļœāļŠāļ‡ āļœāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļšāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ RcvBuffer āđ„āļ”

āđ‚āļ”āļĒāđƒāļŠ API āļ•āļ‡āļ„āļē option āļ‚āļ­āļ‡ socket (āļ„āļēāđ€āļĢāļĄāļ•āļ™āļ—āļ§āđ„āļ›āļ„āļ­ 4096 āđ„āļšāļ•)

āļ—āļāļĢāļ°āļšāļšāļ›āļāļšāļ•āļāļēāļĢāļˆāļ°āļ›āļĢāļšāļ‚āļ™āļēāļ” RcvBuffer āļ­āļ•āđ‚āļ™āļĄāļ•

āļœāļŠāļ‡āļˆ āļēāļāļ”āļˆ āļēāļ™āļ§āļ™āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļ—āļĒāļ‡āđ„āļĄāļ–āļ acked (ldquoāļ­āļĒāđƒāļ™āļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo) āđƒāļŦāđ€āļ—āļēāļāļšāļ„āļē rwnd āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāļœāļĢāļš

āđ€āļ›āļ™āļāļēāļĢāļĢāļšāļ›āļĢāļ°āļāļ™āļ§āļē buffer āļ‚āļ­āļ‡āļœāļĢāļšāļˆāļ°āđ„āļĄāļĨāļ™

āļāļēāļĢbuffer āđƒāļ™āļ”āļēāļ™āļ‚āļ­āļ‡āļœāļĢāļš

Transport Layer 3-76

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-77

āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āļāļ­āļ™āļ—āļˆāļ°āļĄāļāļēāļĢāđāļĨāļāđ€āļ›āļĨāļĒāļ™āļ‚āļ­āļĄāļĨāļāļ™ āļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ•āļ­āļ‡āļ•āļāļĨāļ‡āļāļ™āļāļ­āļ™ āļ•āļāļĨāļ‡āļĢāļ§āļĄāđƒāļ™āļāļēāļĢāļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (āđāļ•āļĨāļ°āļ„āļ™āļˆāļ°āļĢāļ§āļēāļ­āļāļāļēāļĒāļ­āļĒāļēāļāļˆāļ°āđ€āļŠāļ­āļĄāļ•āļ­āļŦāļĢāļ­āđ„āļĄ) āļ•āļāļĨāļ‡āļ„āļēāļžāļēāļĢāļēāļĄāđ€āļ•āļ­āļĢāļŠ āļēāļŦāļĢāļšāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

connection state ESTAB connection variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

connection state ESTAB connection Variables

seq client-to-server server-to-client rcvBuffer size

at serverclient

application

network

Socket clientSocket =

newSocket(hostnameport

number)

Socket connectionSocket =

welcomeSocketaccept()

Transport Layer 3-78

Q 2-way handshake āļˆāļ°āļ— āļēāļ‡āļēāļ™āđ„āļ”āđ€āļŠāļĄāļ­āđ„āļ›āļŦāļĢāļ­āđ„āļĄāļšāļ™ network

āļ„āļ§āļēāļĄāļĨāļēāļŠāļēāļ­āļēāļˆāđ€āļ›āļĨāļĒāļ™āđ„āļ› āļ‚āļ­āļ„āļ§āļēāļĄāļ­āļēāļˆāļ–āļāļŠāļ‡āļ‹ āļēāļ•āļ§āļ­āļĒāļēāļ‡ (āđ€āļŠāļ™

req_conn(x)) āđ€āļ™āļ­āļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļ‚āļ­āļĄāļĨāļ­āļēāļˆāļŠāļĨāļšāļāļ™ āđ„āļĄāļŠāļēāļĄāļēāļĢāļ–āļĢāđ„āļ”āļ§āļēāļ­āļāļāļ‡āđ„āļ”āļĢāļšāļŦāļĢāļ­āđ„āļĄ

āđ„āļ”āļĢāļšāļ‚āļ­āļĄāļĨāļ­āļ°āđ„āļĢ

2-way handshake

āļĄāļēāļ„āļĒāļāļ™āđ€āļ–āļ­āļ°

āļ•āļāļĨāļ‡ ESTAB

ESTAB

choose x

req_conn(x)

ESTAB

ESTAB acc_conn(x)

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-79

āđ€āļŦāļ•āļāļēāļĢāļ“āļœāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ 2-way handshake

retransmit req_conn(x)

ESTAB

req_conn(x)

half open connection (no client)

client terminates

server forgets x

connection x completes

retransmit req_conn(x)

ESTAB

req_conn(x)

data(x+1)

retransmit data(x+1)

accept data(x+1)

choose x req_conn(x)

ESTAB

ESTAB

acc_conn(x)

client terminates

ESTAB

choose x req_conn(x)

ESTAB

acc_conn(x)

data(x+1) accept data(x+1)

connection x completes server

forgets x

āļ•āļāļĨāļ‡āļ—āļˆāļ°āļŠāļĢāļēāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-80

3-way handshake āļ‚āļ­āļ‡ TCP

SYNbit=1 Seq=x

choose init seq num x send TCP SYN msg

ESTAB

SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1

choose init seq num y send TCP SYNACK msg acking SYN

ACKbit=1 ACKnum=y+1

received SYNACK(x) indicates server is live send ACK for SYNACK

this segment may contain client-to-server data

received ACK(y) indicates client is live

SYNSENT

ESTAB

SYN RCVD

client state

LISTEN

server state

LISTEN

Transport Layer 3-81

closed

L

listen

SYN rcvd

SYN sent

ESTAB

Socket clientSocket =

newSocket(hostnameport

number)

SYN(seq=x)

Socket connectionSocket =

welcomeSocketaccept()

SYN(x) SYNACK(seq=yACKnum=x+1)

create new socket for communication back to client

SYNACK(seq=yACKnum=x+1)

ACK(ACKnum=y+1)

ACK(ACKnum=y+1)

L

FSM āļ‚āļ­āļ‡ 3-way handshake āļ‚āļ­āļ‡ TCP

Transport Layer 3-82

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

client server āđ€āļĨāļāđ€āļŠāļ­āļĄāļ•āļ­āļ—āđāļ•āļĨāļ°āļ”āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ‚āļ”āļĒāđāļ•āļĨāļ°āļ”āļēāļ™āļˆāļ°āļŠāļ‡ TCP segment āļ”āļ§āļĒ FIN bit = 1

āļ•āļ­āļšāļāļĨāļš FIN āļ”āļ§āļĒ ACK āđƒāļ™āļ‚āļ“āļ°āļ—āļĢāļš FIN ACK āļāļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāļ­āļĒāđƒāļ™āđāļžāļ„āđ€āļāļˆāļ—āļŠāļ‡ FIN āļĄāļēāđ„āļ”āļ”āļ§āļĒ

āđāļ•āļĨāļ°āļ”āļēāļ™āļŠāļēāļĄāļēāļĢāļ–āļŠāļ‡ FIN āđ„āļ”āļžāļĢāļ­āļĄ āđ† āļāļ™

Transport Layer 3-83

FIN_WAIT_2

CLOSE_WAIT

FINbit=1 seq=y

ACKbit=1 ACKnum=y+1

ACKbit=1 ACKnum=x+1

wait for server close

can still send data

can no longer send data

LAST_ACK

CLOSED

TIMED_WAIT

timed wait for 2max

segment lifetime

CLOSED

FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data

clientSocketclose()

client state

server state

ESTAB ESTAB

TCP āļāļēāļĢāļŦāļĒāļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­

Transport Layer 3-84

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-85

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ„āļĄāđ€āļ›āļ™āļ—āļēāļ‡āļāļēāļĢ ldquoāđ€āļĄāļ­āļˆ āļēāļ™āļ§āļ™āļ„āļ™āļŠāļ‡āļĄāļēāļāđ€āļāļ™āđ„āļ› āļ āļēāļĨāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļĄāļēāļ

āđ€āļāļ™āđ„āļ›āļ”āļ§āļĒāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđ€āļĢāļ§āđ€āļāļ™āļāļ§āļēāļ— Network āļˆāļ°āļĢāļšāđ„āļŦāļ§rdquo āđāļ•āļāļ•āļēāļ‡āļˆāļēāļ flow control āļœāļĨāļ—āļ­āļēāļˆāļ—āđ€āļāļ”āļ‚āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

packets āļŦāļēāļĒ (buffer āļĨāļ™āļ— routers) āļĨāļēāļŠāļēāļĄāļēāļ (āđ€āļ‚āļēāļ„āļ§āđƒāļ™ buffers āļ‚āļ­āļ‡ router)

āđ€āļ›āļ™āļ›āļāļŦāļēāļ—āļ„āļ™āļŠāļ™āđƒāļˆāļ•āļ” 10 āļ­āļ™āļ”āļšāļ•āļ™āđ†

āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

Transport Layer 3-86

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 1

āļĄāļœāļŠāļ‡āđāļĨāļ°āļœāļĢāļšāļ­āļĒāļēāļ‡āļĨāļ°āļŠāļ­āļ‡āļ„āļ™ Router 1 āļ•āļ§ āđ„āļĄāļˆ āļēāļāļ” buffers āļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link R āđ„āļĄāļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆāļ•āļ­āļŦāļ™āļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ R2

buffer āļ— link āļ‚āļēāļ­āļ­āļāļĄ buffer āđ„āļĄāļˆāļāļ”

Host A

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin

Host B

āļ­āļ•āļĢāļēāļ‚āļ­āļĄāļĨāļ—āļŠāļ‡āļŠ āļēāđ€āļĢāļˆ lout

R2

R2

lou

t

lin R2 de

lay

lin

āļ”āđ€āļĨāļĒāļˆāļ°āļĄāļēāļāļ‚āļ™āđ€āļĄāļ­āļ­āļ•āļĢāļēāļŠāļ‡āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāđ€āļ‚āļēāđƒāļāļĨāļ„āļ§āļēāļĄāļˆāļ‚āļ­āļ‡ link

Transport Layer 3-87

Router 1 āļ•āļ§ Buffer āđāļ•āļĄāļ‚āļ™āļēāļ” buffer āļˆ āļēāļāļ” āļ•āļ­āļ‡āļŠāļ‡ pkt āđ„āļ›āļ‹ āļēāļ–āļē pkt āļ™āļ™ timeout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ application = āļ‚āļ­āļĄāļĨāļ­āļ­āļāļˆāļēāļāļŠāļ™ application lin = lout

āļ‚āļ­āļĄāļĨāđ€āļ‚āļēāļ‚āļ­āļ‡āļŠāļ™ transport āļˆāļ°āļĢāļ§āļĄāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļēāļ”āļ§āļĒ lin lin

Buffer āļ‚āļ­āļ‡ link āļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļ‹āļ‡āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš

Host B

lout lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

lsquo

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-88

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļœāļŠāļ‡āļĢāļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđƒāļ™āđ€āļ„āļĢāļ­āļ‚āļēāļĒ āļœāļŠāļ‡āļŠāļ‡āđ€āļ‰āļžāļēāļ°āļ•āļ­āļ™āļ—āđ€āļĢāļēāđ€āļ•āļ­āļĢāļĄ buffer āđ€āļŦāļĨāļ­āļ­āļĒ

Buffer āļ‚āļ­āļ‡ link āļ—āđāļŠāļĢāļ­āļĒāļēāļ‡āļˆ āļēāļāļ”

lout copy

āļĄ buffer āļ§āļēāļ‡

R2

R2

lou

t

lin

Host B

A

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-89

lout copy

no buffer space

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

A

Host B

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-90

lout

free buffer space

R2

R2 lin

lou

t

āđ€āļĄāļ­āļŠāļ‡āļ‚āļ­āļĄāļĨāļ— R2 āļšāļēāļ‡ packets āļ–āļāļŠāļ‡āļ‹ āļē āđāļ• goodput āļĒāļ‡āļ„āļ‡āļĄāļ„āļēāļĨāđ€āļ‚āļēāļŦāļē R2 (āļ— āļēāđ„āļĄ)

A

Host B

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ­āļ”āļĄāļ„āļ• āļŠāļĄāļĄāļ•āļ§āļēāļœāļŠāļ‡āļĢāļ§āļēāļ‚āļ­āļĄāļĨāđƒāļ”āļŦāļēāļĒāļˆāļēāļāļāļēāļĢāļ–āļ drop āļ— router āđ€āļĄāļ­ buffer āđ€āļ•āļĄ āļœāļŠāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāļāļ•āļ­āđ€āļĄāļ­āļĢāļ§āļēāļĄ

Packet āļŠāļāļŦāļēāļĒ

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļšāļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-91

A

lin lout lin

copy

free buffer space

timeout

R2

R2 lin

lou

t

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Host B

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡

āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡

āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

Transport Layer 3-92

R2

lou

t

ldquoāļœāļĨrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļžāļ­āđƒāļŦāđ„āļ”āļ‚āļ­āļĄāļĨāđƒāļ™āļ­āļ•āļĢāļēāļ—āļ•āļ­āļ‡āļāļēāļĢ (goodput) āļ•āļ­āļ‡āļ— āļēāļ‡āļēāļ™āļĄāļēāļāļ‚āļ™ (āļŠāļ‡āļ‹ āļē) āđ€āļĄāļ­āļ•āļ­āļ‡āļŠāļ‡ packets āļ‹ āļēāđ‚āļ”āļĒāļ—āđ„āļĄāļˆ āļēāđ€āļ›āļ™ link āļˆāļ°āļ•āļ­āļ‡āļĨ āļēāđ€āļĨāļĒāļ‡āļŦāļĨāļēāļĒ copy āļ‚āļ­āļ‡

āļ‚āļ­āļĄāļĨāđ€āļ”āļĒāļ§āļāļ™ āļ— āļēāđƒāļŦ goodput āļĨāļ”āļĨāļ‡

R2 lin

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“ 2

āđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļ‡ āļĄāļāļēāļĢāļŠāļ‡āļ‹ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļ­āļ•āļāļŦāļĨāļ™āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļŠāļ™āļ—āļēāļ‡āđ€āļ™āļ­āļ‡āļˆāļēāļ buffers āđ€āļ•āļĄ 2 āđāļ•āļšāļēāļ‡āļ„āļĢāļ‡ Timer āļ‚āļ­āļ‡āļœāļŠāļ‡āļŦāļĄāļ”āđ€āļ§āļĨāļēāļĨāļ‡āļāļ­āļ™āđ€āļ§āļĨāļēāļ­āļ™āļ„āļ§āļĢ āļœāļŠāļ‡āļˆāļ‡āļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļēāđ„āļ›āļ­āļāļŦāļ™āļ‡ packets āļ‹āļ‡ packet āļ—āļ‡āļ„āļāļˆāļ°āļ–āļāļŠāļ‡āđ„āļ›āļ–āļ‡āļœāļĢāļš

āđ€āļĄāļ­āļ āļēāļĨāļ‡āļŠāļ‡āļ—āļ­āļ•āļĢāļē R2 āļšāļēāļ‡ packet āļˆāļ°āļ–āļāļŠāļ‡āļ‹ āļē āđƒāļ™āļ—āļ™āļĢāļ§āļĄāļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ‹ āļē āļ—āļ‚āļ­āļĄāļĨāđ„āļĄāđ„āļ”āļŦāļēāļĒ āđāļ• timeout āļāļ­āļ™āđ€āļ§āļĨāļēāļ”āļ§āļĒ

Transport Layer 3-93

āļĄāļœāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ‡ 4 āđ‚āļŪāļŠāļ• āđ€āļŠāļ™āļ—āļēāļ‡āļ•āļ­āļ‡āļœāļēāļ™āļŦāļĨāļēāļĒāļˆāļ” āļŦāļĄāļ”āđ€āļ§āļĨāļēāļŠāļ‡āđ„āļ›āļ‚āļ­āļĄāļĨāļ‹ āļē

Q āđ€āļāļ”āļ­āļ°āđ„āļĢāļ‚āļ™āđ€āļĄāļ­ Îŧin āđāļĨāļ° Îŧinrsquo āđ€āļžāļĄāļ‚āļ™

Buffer āļ‚āļ­āļ‡āđ€āļŠāļ™āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđƒāļŠāļĢāļ§āļĄāļāļ™āļĄāļ‚āļ™āļēāļ”āļˆ āļēāļāļ”

Host A lout

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

Host B

Host C Host D

A āđ€āļĄāļ­ Îŧinrsquo āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļŠāļ™āļŠāđāļ”āļ‡āļĄāļ‚āļ™āļēāļ”āđ€āļžāļĄāļ‚āļ™ āļ‚āļ­āļĄāļĨāđƒāļ™

āđ€āļŠāļ™āļŠāļ™ āļēāđ€āļ‡āļ™āļāļˆāļ°āļ–āļ drop āļ— āļēāđƒāļŦ throughput āļ‚āļ­āļ‡ connection āļŠāļ™ āļēāđ€āļ‡āļ™āđ€āļŦāļĨāļ­ 0

lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš lin āļ‚āļ­āļĄāļĨāļ•āļ™āļ‰āļšāļš āļšāļ§āļāļāļš

āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļŠāļ‡āļ‹ āļē

Transport Layer 3-94

āļ­āļāļŦāļ™āļ‡ ldquoāļœāļĨāđ€āļŠāļĒrdquo āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļĄāļ­āđāļžāļāđ€āļāļˆāļ–āļāļ—āļ‡āđ„āļ› āļ™āļ™āļāđ€āļ—āļēāļāļšāļ§āļē āļ—āļĢāļĒāļēāļāļĢāđ€āļ„āļĢāļ­āļ‚āļēāļĒ (āļ—āđƒāļŠāļŠāļ‡āļ‚āļ­āļĄāļĨāļāļ­āļ™

āļŦāļ™āļēāļ—āļ‚āļ­āļĄāļĨāļ™āļˆāļ°āļ–āļāļ—āļ‡) āļ–āļāđƒāļŠāđ„āļ›āļ­āļĒāļēāļ‡āđ„āļĢāļ„āļē

āļ•āļ™āđ€āļŦāļ•āđāļĨāļ°āļœāļĨāļ‚āļ­āļ‡āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ āđ€āļŦāļ•āļāļēāļĢāļ“āļˆ āļēāļĨāļ­āļ‡āļ— 3

C2

C2

lou

t

linrsquo

Transport Layer 3-95

āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

2 āđāļ™āļ§āļ—āļēāļ‡āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŠāđāļ„āđ€āļ„āļĢāļ­āļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ (end-end)

āđ„āļĄāļĄāļāļēāļĢāđāļˆāļ‡āļāļĨāļš (feedback) āļˆāļēāļāđ€āļ„āļĢāļ­āļ‚āļēāļĒ

āļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļˆāļ°āļ–āļāđ€āļ”āļēāđ‚āļ”āļĒāđ€āļ„āļĢāļ­āļ‡āļ—āļ­āļĒāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ—āļ„āļ­āļĒāļŠāļ‡āđ€āļāļ• loss delay

āđ€āļ›āļ™āļ§āļ˜āļ‚āļ­āļ‡ TCP

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āđ‚āļ”āļĒāđƒāļŦāļ­āļ›āļāļĢāļ“āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļŠāļ§āļĒ

routers āļˆāļ°āļ— āļēāļāļēāļĢāđāļˆāļ‡ feedback āđ„āļ›āļ—āļĢāļ°āļšāļšāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļŠ bit 1 bit āđ€āļžāļ­āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄ

āđāļ­āļ­āļ” (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ­ āļĢāļ°āļšāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ—āļŠāļ”āđ€āļˆāļ™

āļŠ āļēāļŦāļĢāļšāļœāļŠāļ‡

Transport Layer 3-96

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

ABR available bit rate ldquoāļšāļĢāļāļēāļĢāļ—āļĄāļ„āļ§āļēāļĄāļĒāļ”āļŦāļĒāļ™rdquo āļ–āļēāđ€āļŠāļ™āļ—āļēāļ‡āļ‚āļ­āļ‡āļœāļŠāļ‡ ldquoāļĄāļ‚āļ­āļĄāļĨāļ™āļ­āļĒāļāļ§āļē

āļ„āļ§āļēāļĄāļˆāļ°āļĄāļēāļrdquo āļœāļŠāļ‡āļˆāļ°āđƒāļŠāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āļˆāļēāļ

bandwidth āļ—āđ€āļŦāļĨāļ­āļ­āļĒ āļ–āļē path āļ‚āļ­āļ‡āļœāļŠāļ‡āđāļ­āļ­āļ”

āļœāļŠāļ‡āļˆāļ°āļ„āļ­āļĒ āđ† āļĨāļ”āļ­āļ•āļĢāļēāļŠāļ‡āđƒāļŦāđ€āļŦāļĨāļ­āđ€āļ—āļēāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļ‚āļ™āļ• āļēāļ—āļĢāļšāļ›āļĢāļ°āļāļ™āđ„āļ§

RM (resource management) cells āļŠāļ‡āđ‚āļ”āļĒāļœāļŠāļ‡ āđāļ—āļĢāļ āđ† āđ„āļ›āļāļš cell āļ—āđ€āļ›āļ™āļ‚āļ­āļĄāļĨ bits āđƒāļ™ RM cell āļ–āļāļ•āļ‡āļ„āļēāđ‚āļ”āļĒ switches

(ldquoāđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ„āļ­āļĒāļŠāļ§āļĒrdquo) NI bit āđ„āļĄāđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ (āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļĢāļ°āļ”āļšāļāļĨāļēāļ‡) CI bit āļāļēāļĢāļšāļ‡āļšāļ­āļāļ–āļ‡āļ„āļ§āļēāļĄāđāļ­āļ­āļ”

āļœāļĢāļšāđ„āļĄāđāļāļ„āļēāđƒāļ™ bit āļ™āļ‚āļ­āļ‡ RM cells āđāļĨāļ°āļŠāļ‡āđ„āļ›āđƒāļŦāļœāļŠāļ‡

Transport Layer 3-97

field āļ‚āļ­āļĄāļĨ ER (explicit rate) āļ‚āļ™āļēāļ” 2 byte āđƒāļ™ cell RM switch āļ—āđāļ­āļ­āļ”āļ­āļēāļˆāļĨāļ”āļ„āļē ER āđƒāļ™ cell āļ”āļ‡āļ™āļ™ āļ­āļ•āļĢāļēāļ—āļœāļŠāļ‡āļˆāļ°āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆāļ°āđ€āļ›āļ™āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĄāļēāļāļ—āļŠāļ”āļ— link āđƒāļ™āđ€āļŠāļ™āļ—āļēāļ‡āļˆāļ°āļĢāļ­āļ‡āļĢāļšāđ„āļ”

bit EFCI āđƒāļ™ cell āļ‚āļ­āļĄāļĨ āļ–āļāļ•āļ‡āļ„āļēāđ„āļ§āļ— 1 āđƒāļ™ switch āļ—āļĄāļ‚āļ­āļĄāļĨāđāļ­āļ­āļ” āļ–āļē cell āļ‚āļ­āļĄāļĨāļāļ­āļ™āļŦāļ™āļē RM cell āļ–āļāļ•āļ‡āļ„āļē EFCI āļœāļĢāļšāļˆāļ°āļ•āļ‡āļ„āļē bit CI āđƒāļ™ cell RM āļ—

āļŠāļ‡āļāļĨāļšāđƒāļŦāļœāļŠāļ‡

RM cell data cell

āļāļĢāļ“āļĻāļāļĐāļē āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ ATM āđāļšāļš ABR

Transport Layer 3-98

Chapter 3 Outline

31 āļšāļĢāļāļēāļĢāđƒāļ™āļ‚āļ™ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļ‚āļ­āļĄāļĨ

(multiplexing and demultiplexing)

33 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļĄāļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connectionless transport) UDP

34 āļŦāļĨāļāļāļēāļĢāļ•āļēāļ‡ āđ† āļ‚āļ­āļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āđ„āļ§āđƒāļˆāđ„āļ” (principles of reliable data transfer)

35 āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ•āļ­āļ‡āļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļāļ­āļ™ (connection-oriented transport) TCP āđ‚āļ„āļĢāļ‡āļŠāļĢāļēāļ‡āļŠāļ§āļ™āļ‚āļ­āļĄāļĨ (segment) āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāļ—āļ™āļēāđ€āļŠāļ­āļ–āļ­āļ™āļēāđ„āļ§āđƒāļˆāđ„āļ”

(reliable data transfer) āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨ (flow control) āļāļēāļĢāļˆāļ”āļāļēāļĢāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ (connection

management)

36 āļŦāļĨāļāļāļēāļĢāļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡ (congestion control)

37 congestion control āļ‚āļ­āļ‡ TCP

Transport Layer 3-99

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP additive increase (āđ€āļžāļĄāđāļšāļšāļšāļ§āļ) multiplicative decrease (āļĨāļ”āđāļšāļšāđ€āļ—āļēāļ•āļ§)

āļ§āļ˜ āļœāļŠāļ‡āđ€āļžāļĄāļ­āļ•āļĢāļēāļŠāļ‡ (window size) āļ„āļ§āļēāļ™āļŦāļē bandwidth āļ—āļĄāđƒāļŦāđƒāļŠāđ„āļ” āļˆāļ™āļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļˆāļ°āđ€āļāļ”āļ‚āļ™ additive increase āđ€āļžāļĄ cwnd āļ—āļĨāļ° 1 MSS āļ—āļ āđ† RTT āļˆāļ™āļāļ§āļēāļˆāļ° pkt āļˆāļ°āļŦāļēāļĒ multiplicative decrease āļ•āļ”āļĨāļ” cwnd āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āđ€āļ”āļĒāļ§āļŦāļĨāļ‡āļˆāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ

cwnd

āļ‚āļ™āļē

āļ”āļ‚āļ­āļ‡ co

nges

tion

wind

ow āļ‚āļ­āļ‡āļœāļŠ

āļ‡āđāļšāļš

TCP

āļžāļĪāļ•āļāļĢāļĢāļĄāļ‚āļ­āļ‡ AIMD āđ€āļ›āļ™ āļĨāļāļĐāļ“āļ°āļŸāļ™āđ€āļĨāļ­āļĒ āļŦāļē bandwidth

āļ‚āļ™āļēāļ” window āđ€āļžāļĄāđāļšāļšāļšāļ§āļ hellip hellip āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļāļ”āļāļēāļĢāļŠāļāļŦāļēāļĒ (āļˆāļēāļāļ™āļ™ āļ•āļ”āļĨāļ‡āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡)

time

Transport Layer 3-100

āļœāļŠāļ‡āļˆ āļēāļāļ”āļāļēāļĢāļŠāļ‡

āļ‚āļ™āļēāļ” cwnd āļˆāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›āļĄāļē āļ‚āļ™āļāļšāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒāļ—āļœāļŠāļ‡āđ„āļ”āļĢāļĄāļē

āļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡ TCP āļ­āļĒāļēāļ‡āļ„āļĢāļēāļ§ āđ† āļŠāļ‡āļ‚āļ­āļĄāļĨāļˆ āļēāļ™āļ§āļ™

cwnd bytes āļĢāļ­ ACKS āđ€āļžāļ­āļ›āļĢāļ°āļĄāļēāļ“āļ„āļē RTT āļˆāļēāļāļ™āļ™āļŠāļ‡āđ„āļšāļ•āļ‚āļ­āļĄāļĨāđ€āļžāļĄ

byte āļŠāļ”āļ—āļēāļĒāļ— āļ–āļ ACKed āļŠāļ‡ āđāļ•āļĒāļ‡āđ„āļĄāļ–āļ

ACK (ldquoāļ­āļĒāļĢāļ°āļŦāļ§āļēāļ‡āļāļēāļĢāđ€āļ”āļ™āļ—āļēāļ‡rdquo)

byte āļŠāļ”āļ—āļēāļĒāļ—āļŠāļ‡āđ„āļ›

cwnd

LastByteSent-

LastByteAcked lt cwnd

āļŠāļ§āļ‡āđ€āļĨāļ‚ sequence number āļ‚āļ­āļ‡āļœāļŠāļ‡

rate ~ ~ cwnd

RTT bytessec

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡ TCP āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĒāļ”

Transport Layer 3-101

TCP Slow Start

āđ€āļĄāļ­āđ€āļĢāļĄāļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ āđ€āļžāļĄāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āđāļšāļšāļĒāļāļ āļēāļĨāļ‡ (exponentially) āļˆāļ™āļāļ§āļēāļˆāļ°āđ€āļˆāļ­āļāļš loss āļ„āļĢāļ‡āđāļĢāļ āđ€āļĢāļĄāļ•āļ™āļ‚āļ™āļēāļ” cwnd = 1 MSS āđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āļŦāļ™āļ‡āđ€āļ—āļēāļ•āļ§āļ—āļ āđ† RTT āļ™āļ™āļ„āļ­ āđ‚āļ”āļĒāđ€āļžāļĄāļ‚āļ™āļēāļ” cwnd āđ„āļ› 1 MSS

āļŠ āļēāļŦāļĢāļšāļ—āļ āđ† ACK āļ—āđ„āļ”āļĢāļš

āļŠāļĢāļ› āļ­āļ•āļĢāļēāļŠāļ‡āđ€āļĢāļĄāđāļĢāļāļˆāļ°āļŠāļēāđāļ•āļ„āļēāļˆāļ°āđ€āļžāļĄāđāļšāļšāļāļĢāļ°āđ‚āļ”āļ”āļ‚āļ™āļ­āļĒāļēāļ‡āļĢāļ§āļ”āđ€āļĢāļ§

Host A

RTT

Host B

time

Transport Layer 3-102

TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļ•āļ­āļšāļŠāļ™āļ­āļ‡

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒ timeout cwnd āļ–āļāļ•āļ‡āđ„āļ§āļ— 1 MSS āļˆāļēāļāļ™āļ™āļŦāļ™āļēāļ•āļēāļ‡āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļĨāļ‚āļĒāļāļ āļēāļĨāļ‡ (exponential āđ€āļŦāļĄāļ­āļ™āđƒāļ™ slow start)

āļˆāļ™āđ„āļ›āļ–āļ‡āļ„āļē threshold āļˆāļēāļāļ™āļ™āļˆāļ°āđ€āļžāļĄāļ‚āļ™āđ€āļ›āļ™āđ€āļŠāļ‡āđ€āļŠāļ™

āļ–āļē loss āļ–āļāļĢāļ°āļšāđ‚āļ”āļĒāđ„āļ”āļĢāļš ACK āļ‹ āļē 3 ACKs (3 duplicate acks) TCP RENO

ACKs āļ‹ āļē āļĢāļ°āļšāļ–āļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļāļēāļĢāļŠāļ‡ segments āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ

cwnd āļ–āļāļ•āļ”āđ€āļŦāļĨāļ­āļ„āļĢāļ‡āļ™āļ‡āļˆāļēāļāļ™āļ™āđ€āļžāļĄāļ‚āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

TCP Tahoe āļˆāļ°āļ•āļ‡āļ„āļē cwnd āđ€āļ›āļ™ 1 āđ€āļŠāļĄāļ­ (āđ„āļĄāļ§āļēāļˆāļ° timeout āļŦāļĢāļ­ 3 dup acks)

Transport Layer 3-103

Q āđ€āļĄāļ­āđ„āļĢ TCP āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļĨāļĒāļ™āļˆāļēāļāļāļēāļĢāđ€āļžāļĄāļ‚āļ™āđāļšāļš exponential āđ€āļ›āļ™āđāļšāļšāđ€āļŠāļ‡āđ€āļŠāļ™

A āđ€āļĄāļ­ cwnd āļ–āļāđ€āļžāļĄāđ€āļ›āļ™ 12 āļ‚āļ­āļ‡ ldquoāļ„āļēāļ—āļĄāļēāļāļ—āļŠāļ”rdquo āļ‚āļ­āļ‡āļĄāļ™āļāļ­āļ™āļˆāļ°āđ€āļāļ” timeout

āļāļēāļĢāļ” āļēāđ€āļ™āļ™āļāļēāļĢ āļ•āļ§āđāļ›āļĢ ssthresh āļ‚āļ“āļ°āđ€āļāļ” Loss ssthresh āļˆāļ°āļ–āļ

āļ•āļ‡āļ„āļēāļ— 12 āļ‚āļ­āļ‡āļ„āļē cwnd āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āđāļ›āļ›āđ€āļ”āļĒāļ§ (āļ„āļē cwnd āļ—āļĄāļēāļāļ—āļŠāļ”āļāļ­āļ™āđ€āļāļ”āđ€āļŦāļ•āļāļēāļĢāļ“)

TCP āļˆāļēāļ slow start āđ€āļ›āļ™ CA (Congestion Avoidance)

Transport Layer 3-104

āļŠāļĢāļ› TCP Congestion Control

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0

retransmit missing segment

L

cwnd gt ssthresh

congestion

avoidance

cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed

new ACK

dupACKcount++

duplicate ACK

fast

recovery

cwnd = cwnd + MSS transmit new segment(s) as allowed

duplicate ACK

ssthresh= cwnd2 cwnd = ssthresh + 3

retransmit missing segment

dupACKcount == 3

timeout

ssthresh = cwnd2 cwnd = 1 dupACKcount = 0

retransmit missing segment

ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment

dupACKcount == 3 cwnd = ssthresh dupACKcount = 0

New ACK

slow

start

timeout

ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment

cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed

new ACK dupACKcount++

duplicate ACK

L

cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0

New ACK

New ACK

New ACK

Transport Layer 3-105

Throughput āļ‚āļ­āļ‡ TCP

āļ„āļēāđ€āļ‰āļĨāļĒ throughput āļ‚āļ­āļ‡ TCP āđ€āļ›āļ™ function āļ‚āļ­āļ‡āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āđāļĨāļ° RTT āđ„āļĄāļŠāļ™āđƒāļˆ slow start āļŠāļĄāļĄāļ•āļ§āļēāļ‚āļ­āļĄāļĨāļ–āļāļŠāļ‡āļ•āļĨāļ­āļ”

W āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļŦāļ™āļ§āļĒāđ€āļ›āļ™ bytes) āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ—āđ€āļāļ”āļ‚āļ™ āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window (āļˆ āļēāļ™āļ§āļ™ byte āļ—āđ€āļ”āļ™āļ—āļēāļ‡āļ­āļĒ) āļ„āļ­ frac34 W āļ„āļēāđ€āļ‰āļĨāļĒāļ‚āļ­āļ‡ throughput āļ„āļ­ 34W āļ•āļ­ RTT

W

W2

avg TCP thruput = 3 4

W RTT

bytessec

Transport Layer 3-106

TCP āđƒāļ™āļ­āļ™āļēāļ„āļ• TCP āđƒāļ™ ldquopipes āļ—āļĒāļēāļ§āđāļĨāļ°āļĄāļ„āļ§āļēāļĄāļˆāļŠāļ‡rdquo

āļ•āļ§āļ­āļĒāļēāļ‡ 1500 byte segments 100ms RTT āļ•āļ­āļ‡āļāļēāļĢāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10 Gbps

requires W = 83333 in-flight segments āļ„āļ§āļēāļĄāđ€āļ›āļ™āđ„āļ›āđ„āļ”āļ‚āļ­āļ‡āļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āđƒāļ™āļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨ L [Mathis 1997]

āđ€āļžāļ­āļ—āļˆāļ°āļĄāļŠāļ­āļ‡āļ—āļēāļ‡āļāļēāļĢāļŠāļ‡āļ‚āļ™āļēāļ” 10Gbps āļ•āļ­āļ‡āļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨāđ€āļžāļĒāļ‡āđāļ„ =

210-10 ndash āļ™āļ­āļĒāļĄāļēāļ āļ”āļ‡āļ™āļ™ āļ•āļ­āļ‡āļĄ TCP āļĢāļ™āđƒāļŦāļĄāļŠ āļēāļŦāļĢāļšāļāļēāļĢāļŠāļ‡āđāļšāļšāļ„āļ§āļēāļĄāđ€āļĢāļ§āļŠāļ‡

TCP throughput = 122 MSS RTT L

Transport Layer 3-107

āđ€āļ›āļēāļŦāļĄāļēāļĒāļ‚āļ­āļ‡ fairness āļ–āļēāļĄ TCP session āļˆ āļēāļ™āļ§āļ™ K session āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ™ āđāļ•āļĨāļ° session āļ„āļ§āļĢāļˆāļ°āđ€āļ‰āļĨāļĒāļ—āļĢāļžāļĒāļēāļāļĢāđ€āļŦāļĄāļ­āļ™āļāļ™āļ— RK

TCP connection 1

router āļ„āļ­āļ‚āļ§āļ” āļĄāļ„āļ§āļēāļĄāļˆ R

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (Fairness) āļ‚āļ­āļ‡ TCP

TCP connection 2

Transport Layer 3-108

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„āļ‚āļ­āļ‡ TCP āļ„āļ­āļ­āļ°āđ„āļĢ session 2 session āđāļ‚āļ‡āļāļ™āđƒāļŠāļ—āļĢāļžāļĒāļēāļāļĢ additive increase āđƒāļŦāļ„āļ§āļēāļĄāļŠāļ™āđ€āļŠāļ™āđ€āļ—āļēāļāļš 1 (session āļ—āļ‡ 2 āļ„āļ­āļĒ āđ† āđ„āļ” throughput āđ€āļžāļĄāļ—āļĨāļ°

āļ™āļ”) multiplicative decrease āļĨāļ” throughput āđ„āļ›āļ„āļĢāļ‡āļŦāļ™āļ‡

R

R

āđ€āļŠāļ™āļĢāļ°āļšāđāļšāļ™āļ”āļ§āļ˜āļ—āđƒāļŠāļĢāļ§āļĄāđ€āļ—āļēāļāļ™

Throuput āļ‚āļ­āļ‡ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­āļ— 1

congestion avoidance (CA) additive increase āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

congestion avoidance (CA) additive increase

āļŠāļāđ€āļŠāļĒ āļĨāļ”āļ‚āļ™āļēāļ”āļ‚āļ­āļ‡ window āļĨāļ‡āđ„āļ›āļ„āļĢāļ‡āļ™āļ‡

Transport Layer 3-109

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ (āļ•āļ­)

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āđāļĨāļ° UDP āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļšāļ­āļĒāļ„āļĢāļ‡āđ„āļĄ

āđƒāļŠ TCP āđ„āļĄāļ•āļ­āļ‡āļāļēāļĢāđƒāļŦāļ­āļ•āļĢāļēāļāļēāļĢāļŠāļ‡āļĨāļ”āļĨāļ‡āđ€āļžāļĢāļēāļ°

āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡

āļĄāļĨāļ•āļĄāđ€āļ”āļĒāđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļˆāļ‡āđƒāļŠ UDP āđāļ—āļ™ āļŠāļ‡āđ€āļŠāļĒāļ‡āļ§āļ”āđ‚āļ­āļ”āļ§āļĒāļ„āļ§āļēāļĄāđ€āļĢāļ§āļ„āļ‡āļ— āļ—āļ™

āļ•āļ­āļāļēāļĢāļŠāļāđ€āļŠāļĒāļ‚āļ­āļĄāļĨ

āļ„āļ§āļēāļĄāđ€āļŠāļĄāļ­āļ āļēāļ„ āļāļēāļĢāđ€āļŠāļ­āļĄāļ•āļ­ TCP āđāļšāļšāļ‚āļ™āļēāļ™ āđāļ­āļžāļžāļĨāđ€āļ„āļŠāļ™āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļ›āļ”āļŦāļĨāļēāļĒāļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­āļĢāļ°āļŦāļ§āļēāļ‡āđ€āļ„āļĢāļ­āļ‡ 2 āđ€āļ„āļĢāļ­āļ‡āđāļšāļšāļ‚āļ™āļēāļ™āđ„āļ”

āđ€āļ§āļšāļšāļĢāļēāļ§āđ€āļ‹āļ­āļĢāļ— āļēāđāļšāļšāļ™ āļ•āļ§āļ­āļĒāļēāļ‡āđ€āļŠāļ™ link āļ—āļĄāļ„āļ§āļēāļĄāļˆ R āļ‹āļ‡āļĄ 9 āļāļēāļĢ

āđ€āļŠāļ­āļĄāļ•āļ­ āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 1 TCP āļˆāļ°āđ„āļ”āļĢāļšāļ— rate

R10 āļ–āļēāđāļ­āļžāđƒāļŦāļĄāļ•āļ­āļ‡āļāļēāļĢ 11 TCPs āļˆāļ°āđ„āļ”āļĢāļšāļ— R2

Transport Layer 3-110

Chapter 3 āļšāļ—āļŠāļĢāļ›

āļŦāļĨāļāļāļēāļĢāđ€āļšāļ­āļ‡āļŦāļĨāļ‡āļāļēāļĢāđƒāļŦāļšāļĢāļāļēāļĢāļŠāļ™transport multiplexing demultiplexing āļāļēāļĢāļŠāļ‡āļ‚āļ­āļĄāļĨāđāļšāļšāđ„āļ§āđƒāļˆāđ„āļ” āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļāļēāļĢāđ„āļŦāļĨāļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ āļāļēāļĢāļ„āļ§āļšāļ„āļĄāļ„āļ§āļēāļĄāļ„āļšāļ„āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄāļĨ

āļāļĢāļ“āļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļ›āļāļšāļ•āļšāļ™ internet UDP TCP

āļ–āļ”āđ„āļ› āļ­āļ­āļāļˆāļēāļāļ›āļĨāļēāļĒāļ—āļēāļ‡āļ‚āļ­āļ‡āļĢāļ°āļšāļš

āđ€āļ„āļĢāļ­āļ‚āļēāļĒ (application transport layers)

āđ€āļ‚āļēāđ„āļ›āļĒāļ‡āļŠāđāļāļ™āļ‚āļ­āļ‡āđ€āļ„āļĢāļ­āļ‚āļēāļĒ