171
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 All material copyright 1996-2012 J.F Kurose and K.W. Ross, All Rights Reserved 蒋力 计算机科学与工程系

Chapter 3 Transport Layer - SJTU · 2019. 4. 1. · Transport Layer 3-3 Chapter 3 outline 3.1 transport-layer services 3.2 multiplexing and demultiplexing 3.3 connectionless transport:

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

  • Transport Layer 3-1

    Chapter 3Transport Layer

    Computer Networking: A Top Down Approach

    6th edition Jim Kurose, Keith Ross

    Addison-WesleyMarch 2012

    All material copyright 1996-2012J.F Kurose and K.W. Ross, All Rights Reserved

    蒋力计算机科学与工程系

  • Transport Layer 3-2

    Chapter 3: Transport Layer

    our goals: understand

    principles behind transport layer services: multiplexing,

    demultiplexing

    reliable data transfer

    flow control

    congestion control

    learn about Internet transport layer protocols: UDP: connectionless

    transport

    TCP: connection-oriented reliable transport

    TCP congestion control

  • Transport Layer 3-3

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-4

    Transport services and protocols

    provide logical communicationbetween app processes running on different hosts

    transport protocols run in end systems

    send side: breaks app messages into segments, passes to network layer

    rcv side: reassembles segments into messages, passes to app layer

    Router won’t check segments

    more than one transport protocol available to apps

    Internet: TCP and UDP

    applicationtransportnetworkdata linkphysical

    applicationtransportnetworkdata linkphysical

  • Transport Layer 3-53-5

    Transport vs. network layer

    network layer: logical communication between hosts

    transport layer:logical communication between processes relies on, enhances,

    network layer services

    12 kids in Ann’s house sending letters to 12 kids in Bill’s house:

    hosts = houses processes = kids app messages = letters in

    envelopes transport protocol = Ann

    and Bill who demux to in-house siblings

    network-layer protocol = postal service

    household analogy:

    Ann’s siblings regard Ann as postal service, but Ann works in house not in real postal service.

    When Ann and Bill travel, Susan and Harvey take responsibility. They are younger and unreliable!

    Ann and Bill’s service rely on postal service! But they can help a little! Lost, security etc.

  • Transport Layer 3-6

    Internet transport-layer protocols

    reliable, in-order delivery (TCP) congestion control

    flow control

    connection setup

    unreliable, unordered delivery: UDP no-frills extension of “best-

    effort” IP Minimum service: deliver,

    error-checking

    services not available: delay guarantees

    bandwidth guarantees

    applicationtransportnetworkdata linkphysical

    applicationtransportnetworkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    networkdata linkphysical

    Network links overflow

    Receiver overflow

  • Transport Layer 3-73-7

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-8

    Multiplexing/demultiplexing

    process

    socket

    use header info to deliverreceived segments to correct socket

    demultiplexing at receiver:multiplexing at sender:

    handle data from multiplesockets, add transport header (later used for demultiplexing)

    transport

    application

    physical

    link

    network

    P2P1

    transport

    application

    physical

    link

    network

    P4

    transport

    application

    physical

    link

    network

    P3

    Rely on sockets

    Multiplexing/demultiplexing is not limited in transport level. Their use depends on when a single protocol in a level are invoked by higher level protocol

    Ann and Bill

  • Transport Layer 3-9

    How demultiplexing works

    host receives IP datagrams each datagram has source IP

    address, destination IP address

    each datagram carries one transport-layer segment

    each segment has source, destination port number

    host uses IP addresses & port numbers to direct segment to appropriate socket

    source port # dest port #

    32 bits

    applicationdata

    (payload)

    other header fields

    TCP/UDP segment format

  • Transport Layer 3-10

    Connectionless demultiplexing

    recall: created socket has host-local port #:clientSocket = socket(AF_INET,SOCK_DGRAM)

    when host receives UDP segment: checks destination port #

    in segment

    directs UDP segment to socket with that port #

    recall: when creating datagram to send into UDP socket, must specify destination IP address

    destination port #

    IP datagrams with same dest. port #, but different source IP addresses and/or source port numbers will be directed to same socket at dest

    OS assign one for you

    clientSocket.bind((‘’,12534))

    clientSocket.sendto(message,(serverIP,serverPort))

    serverSocket.recvfrom(serverPort)

  • Transport Layer 3-11

    Connectionless demux: exampleserverSocket = socket(AF_INET, SOCK_DGRAM)

    serverSocket.bind((‘’, 6428));

    transport

    application

    physical

    link

    network

    P3transport

    application

    physical

    link

    network

    P1

    transport

    application

    physical

    link

    network

    P4

    clientSocket1 = socket(AF_INET, SOCK_DGRAM)

    clientSocket.bind((‘’, 5775));

    clientSocket2 = socket(AF_INET, SOCK_DGRAM)

    clientSocket.bind((‘’, 9157));

    source port: 9157dest port: 6428

    source port: 6428dest port: 9157

    source port: ?dest port: ?

    source port: ?dest port: ?

  • Transport Layer 3-12

    Connection-oriented demux

    TCP socket identified by 4-tuple: source IP address

    source port number

    dest IP address

    dest port number

    demux: receiver uses all four values to direct segment to appropriate socket

    server host may support many simultaneous TCP sockets: each socket identified by

    its own 4-tuple

    web servers have different sockets for each connecting client non-persistent HTTP will

    have different socket for each request

  • Transport Layer 2-13

    实例程序: TCP client

    from socket import *

    serverName = ’servername’

    serverPort = 12000

    clientSocket = socket(AF_INET, SOCK_STREAM)

    clientSocket.connect((serverName,serverPort))

    sentence = raw_input(‘Input lowercase sentence:’)

    clientSocket.send(sentence)

    modifiedSentence = clientSocket.recv(1024)

    print ‘From Server:’, modifiedSentence

    clientSocket.close()

    Python TCPClient

    为接触服务器创建TCP 套接字, 远程端口号12000

    不需要附加地址和端口号

  • Transport Layer 2-14

    示例程序: TCP server

    from socket import *serverPort = 12000

    serverSocket = socket(AF_INET,SOCK_STREAM)serverSocket.bind((‘’,serverPort))

    serverSocket.listen(1)print ‘The server is ready to receive’

    while 1:connectionSocket, addr = serverSocket.accept()

    sentence = connectionSocket.recv(1024)capitalizedSentence = sentence.upper()

    connectionSocket.send(capitalizedSentence)connectionSocket.close()

    Python TCPServer

    创建TCP 欢迎套接字

    服务器开始监听到来的TCP 请求

    循环

    服务器在accept()等待到达的请求, 新的套接字被创

    从套接字读取字节流(但不像UDP那样读地址)

    对这个客户关闭套接字 (但不关闭欢迎套接字)

  • Transport Layer 3-15

    Connection-oriented demux: example

    transport

    application

    physical

    link

    network

    P3transport

    application

    physical

    link

    P4

    transport

    application

    physical

    link

    network

    P2

    source IP,port: A,9157dest IP, port: B,80

    source IP,port: B,80dest IP,port: A,9157

    host: IP address A

    host: IP address C

    network

    P6P5P3

    source IP,port: C,5775dest IP,port: B,80

    source IP,port: C,9157dest IP,port: B,80

    three segments, all destined to IP address: B,dest port: 80 are demultiplexed to different sockets

    server: IP address B

  • Transport Layer 3-16

    Connection-oriented demux: example

    transport

    application

    physical

    link

    network

    P3transport

    application

    physical

    link

    transport

    application

    physical

    link

    network

    P2

    source IP,port: A,9157dest IP, port: B,80

    source IP,port: B,80dest IP,port: A,9157

    host: IP address A

    host: IP address C

    server: IP address B

    network

    P3

    source IP,port: C,5775dest IP,port: B,80

    source IP,port: C,9157dest IP,port: B,80

    P4

    threaded server

    Would it be a problem if two clients send pkt with same source port #

    Review Q: Why most TCP services use a monitoring socket?

  • Transport Layer

    Connection-oriented demux: HTTP

    Check out the python implemented simple HTTP server

    Port scanner

  • Transport Layer 3-18

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-19

    UDP: User Datagram Protocol [RFC 768]

    “no frills,” “bare bones”Internet transport protocol

    “best effort” service, UDP segments may be:

    lost

    delivered out-of-order to app

    connectionless:

    no handshaking between UDP sender, receiver

    each UDP segment handled independently of others

    UDP use: streaming multimedia

    apps (loss tolerant, rate sensitive)

    DNS

    SNMP

    reliable transfer over UDP: add reliability at

    application layer

    application-specific error recovery!

  • Transport Layer 3-20

    Why is there a UDP?

    Flexible for app to decide when and what to send No congestion control: UDP can blast away as fast as desired TCP will re-send pkt if out-of-order or corrupt

    No connection setup time 3 RRT handshaking

    No connection state at end-systems Smaller header size Media stream app - UDP or TCP?

    Massive stream data congests the network

    Take-home work use wireshark to investigate the video web & their app Tips: iku, open 8909, 17171, 8828 Tips: CDN

  • Transport Layer 3-21

    UDP: segment header

    source port # dest port #

    32 bits

    applicationdata

    (payload)

    UDP segment format

    length checksum

    length, in bytes of UDP segment,

    including header

    no connection establishment (which can add delay)

    simple: no connection state at sender, receiver

    small header size

    no congestion control: UDP can blast away as fast as desired

    why is there a UDP?

  • Transport Layer 3-22

    UDP checksum

    sender: treat segment contents,

    including header fields, as sequence of 16-bit integers

    checksum: addition (one’s complement sum) of segment contents

    sender puts checksum value into UDP checksum field

    receiver: compute checksum of

    received segment

    check if computed checksum equals checksum field value:

    NO - error detected

    YES - no error detected. But maybe errors nonetheless? More later ….

    Goal: detect “errors” (e.g., flipped bits) in transmitted segment

  • Transport Layer 3-23

    Internet checksum: example

    example: add two 16-bit integers

    1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 01 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 01 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

    wraparound

    sum

    checksum

    Note: when adding numbers, a carryout from the most significant bit needs to be added to the result

  • Transport Layer 3-24

    Why Checksum at Transport Level?

    Is Link Layer Enough?

    Data transferred in links are correct

    No Guarantees

    But they can be corrupted in router and network layer

    End-to-End Principle

  • Transport Layer 3-25

    Application View of the World

  • Transport Layer 3-26

    Why Doesn’t the Network Help?

    Compress data?

    Reformat/translate/improve requests?

    Serve cached data?

    Add security?

    Migrate connections across the network?

    Or one of any of a huge number of other things?

    Generally, may things the network can do to improve the app and ease the design.

    But NO

  • Transport Layer 3-27

    End-to-End Principle“The function in question can completely and correctly be implemented only with the knowledge and help of the application standing at the end

    points of the communication system.”

    “Functions placed at the lower levels may be redundant or of little valuewhen compared to providing them at the higher level.”

    Saltzer 1984

    Do we need link layer checksum? Think about Cost!!

    “Communications protocol operations should be defined to occur at the end-points of a communications system.”

    “Sometimes an incomplete version of the function provided by the communication system may be useful as a performance enhancement.”

  • Transport Layer 3-28

    Example: File Transfer

    Exactly some program in MIT did!

    The assumption is wrong and developer lost lots of the source code

    TCP error checking CANNOT guarantee HASH

    Link error checking CAN help/improve the performance, e.g., wireless!

  • Transport Layer 3-29

    “Strong” End-to-End Principle

    The network’s job is to transmit datagrams as

    efficiently and flexibly as possible. Everything else

    should be done at the fringes…-[RFC 1958]

  • Transport Layer 3-303-30

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-31

    Principles of reliable data transfer important in application, transport, link layers

    top-10 list of important networking topics!

    characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

    Pkt corruption, Pkt loss, Pkt duplication

  • Transport Layer 3-32

    characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

    Principles of reliable data transfer important in application, transport, link layers

    top-10 list of important networking topics!

  • Transport Layer 3-33

    characteristics of unreliable channel will determine complexity of reliable data transfer protocol (rdt)

    important in application, transport, link layers top-10 list of important networking topics!

    Principles of reliable data transfer

  • Transport Layer 3-34

    Reliable data transfer: getting started

    send

    side

    receive

    side

    rdt_send(): called from above,

    (e.g., by app.). Passed data to deliver to receiver upper layer

    udt_send(): called by rdt,

    to transfer packet over unreliable channel to receiver

    rdt_rcv(): called when packet

    arrives on rcv-side of channel

    deliver_data(): called by

    rdt to deliver data to upper

    Review Q: How many

    times it calls?

    Review Q: How many

    times it calls?

  • Transport Layer 3-35

    we’ll: incrementally develop sender, receiver sides of

    reliable data transfer protocol (rdt)

    consider only unidirectional data transfer but control info will flow on both directions!

    use finite state machines (FSM) to specify sender, receiver

    state1

    state2

    event causing state transition

    actions taken on state transition

    state: when in this “state” next state

    uniquely determined by next event

    event

    actions

    Reliable data transfer: getting started

  • Transport Layer 3-36

    rdt1.0: reliable transfer over a reliable channel

    underlying channel perfectly reliable no bit errors

    no loss of packets

    separate FSMs for sender, receiver: sender sends data into underlying channel

    receiver reads data from underlying channel

    Wait for

    call from

    above packet = make_pkt(data)

    udt_send(packet)

    rdt_send(data)

    extract (packet,data)

    deliver_data(data)

    Wait for

    call from

    below

    rdt_rcv(packet)

    sender receiver

  • Transport Layer 3-37

    underlying channel may flip bits in packet checksum to detect bit errors

    the question: how to recover from 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 rdt2.0 (beyond rdt1.0): error detection receiver feedback: control msgs (ACK,NAK) rcvr-

    >sender

    rdt2.0: channel with bit errors

    How do humans recover from “errors”during conversation?

    Let's play a game:Transmit a sentence to the on on your back!

    i. the listener cannot talk

    ii. the listener can talk

  • Transport Layer 3-38

    underlying channel may flip bits in packet

    How to detect errors? checksum to detect bit errors

    How to recover from errors: Receiver Feedback

    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

    rdt2.0: channel with bit errors

  • Transport Layer 3-39

    new mechanisms in rdt2.0 (beyond rdt1.0): error detection feedback: control msgs (ACK,NAK) from receiver to

    sender

    rdt2.0: Discussion

    Sender How to construct pkt?

    Add checksum to the packet

    Must check feedback If ACK?

    Send next pkt

    If NAK? Resend this pkt

    Receiver Must check if received

    packet is corrupted If not, send back ACK

    Otherwise, send back NAK

  • Transport Layer 3-40

    rdt2.0: FSM specification

    Wait for

    call from

    above

    sndpkt = make_pkt(data, checksum)

    udt_send(sndpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    udt_send(ACK)

    rdt_rcv(rcvpkt) &&

    notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) &&

    corrupt(rcvpkt)

    Wait for

    ACK or

    NAK

    Wait for

    call from

    belowsender

    receiverrdt_send(data)

    L

  • Transport Layer 3-41

    rdt2.0: operation with no errors

    Wait for

    call from

    above

    sndpkt = make_pkt(data, checksum)

    udt_send(sndpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    udt_send(ACK)

    rdt_rcv(rcvpkt) &&

    notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) &&

    corrupt(rcvpkt)

    Wait for

    ACK or

    NAK

    Wait for

    call from

    below

    rdt_send(data)

    L

  • Transport Layer 3-42

    rdt2.0: error scenario

    Wait for

    call from

    above

    snkpkt = make_pkt(data, checksum)

    udt_send(sndpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    udt_send(ACK)

    rdt_rcv(rcvpkt) &&

    notcorrupt(rcvpkt)

    rdt_rcv(rcvpkt) && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    isNAK(rcvpkt)

    udt_send(NAK)

    rdt_rcv(rcvpkt) &&

    corrupt(rcvpkt)

    Wait for

    ACK or

    NAK

    Wait for

    call from

    below

    rdt_send(data)

    L

  • Transport Layer 3-43

    rdt2.0 has a fatal flaw!

    what happens if ACK/NAK corrupted?

    sender doesn’t know what happened at receiver!

    What to do?

    Retransmit?

    can’t just retransmit: possible duplicate

    handling duplicates: sender retransmits current pkt

    if ACK/NAK corrupted

    How receiver know the pkt is resent (Y/N deliver)?

    sender adds sequence number to each pkt

    receiver discards (doesn’t deliver up) duplicate pkt

    stop and waitsender sends one packet, then waits for receiver response

    Review Q: How many sequence number do we

    need?

  • Transport Layer 3-44

    rdt2.1: Exploration

    Sender Seq # Added to Packet

    2 seq #’s (0,1) will suffice why?

    Must check if received ACK/NAK corrupted

    If corrupted? resend the pkt

    with the same seq #

    Receiver Must check if received

    packet is duplicate

    State indicates whether 0 or 1 is expected pktseq#

    If duplicated?NOT deliver

    Must resend ACK when receiving a duplicate

    Note

    Receiver can not know if its last ACK/NAK was received OK at sender

  • Transport Layer 3-45

    rdt2.1: sender, handles garbled ACK/NAKs

    Wait for

    call 0 from

    above

    rdt_send(data)

    sndpkt = make_pkt(0, data, checksum)

    udt_send(sndpkt)

    Wait for

    ACK or

    NAK 0

    rdt_send(data)

    sndpkt = make_pkt(1, data, checksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt)

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt)

    Wait for

    call 1 from

    above

    Wait for

    ACK or

    NAK 1

    LL

  • Transport Layer 3-46

    Wait for

    0 from

    below

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    && has_seq1(rcvpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    Wait for

    1 from

    below

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    && has_seq0(rcvpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    sndpkt = make_pkt(NAK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    sndpkt = make_pkt(NAK, chksum)

    udt_send(sndpkt)

    rdt2.1: receiver, handles garbled ACK/NAKs

    Bit error in pkt

  • Transport Layer 3-47

    rdt2.1: sender, handles garbled ACK/NAKs

    Wait for

    call 0 from

    above

    rdt_send(data)

    sndpkt = make_pkt(0, data, checksum)

    udt_send(sndpkt)

    Wait for

    ACK or

    NAK 0 udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    isNAK(rcvpkt)

    rdt_send(data)

    sndpkt = make_pkt(1, data, checksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    isNAK(rcvpkt)

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt)

    Wait for

    call 1 from

    above

    Wait for

    ACK or

    NAK 1

    LL

    Re-send which pkt?

  • Transport Layer 3-48

    Wait for

    0 from

    below

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    && has_seq1(rcvpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    Wait for

    1 from

    below

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    && has_seq0(rcvpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    sndpkt = make_pkt(NAK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    sndpkt = make_pkt(NAK, chksum)

    udt_send(sndpkt)

    rdt2.1: receiver, handles garbled ACK/NAKs

    If bit error in pkt again

    And again!!!

    Re-sending loop!!!

    If successfull

    Unfortunately!ACK is corrupt

  • Transport Layer 3-49

    rdt2.1: sender, handles garbled ACK/NAKs

    Wait for

    call 0 from

    above

    rdt_send(data)

    sndpkt = make_pkt(0, data, checksum)

    udt_send(sndpkt)

    Wait for

    ACK or

    NAK 0 udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    ( corrupt(rcvpkt) ||

    isNAK(rcvpkt) )

    rdt_send(data)

    sndpkt = make_pkt(1, data, checksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    ( corrupt(rcvpkt) ||

    isNAK(rcvpkt) )

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt)

    Wait for

    call 1 from

    above

    Wait for

    ACK or

    NAK 1

    LL

    If the ACK/NAK is corrupted

  • Transport Layer 3-50

    Wait for

    0 from

    below

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    && has_seq1(rcvpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    Wait for

    1 from

    below

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    && has_seq0(rcvpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    sndpkt = make_pkt(NAK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    not corrupt(rcvpkt) &&

    has_seq0(rcvpkt)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) &&

    not corrupt(rcvpkt) &&

    has_seq1(rcvpkt)

    sndpkt = make_pkt(ACK, chksum)

    udt_send(sndpkt)

    rdt_rcv(rcvpkt) && corrupt(rcvpkt)

    sndpkt = make_pkt(NAK, chksum)

    udt_send(sndpkt)

    rdt2.1: receiver, handles garbled ACK/NAKs

    If bit error in ACK again

    And again!!!

    Re-sending loop!!!

  • Transport Layer 3-51

    rdt2.1: discussion

    sender:

    seq # added to pkt

    two seq. #’s (0,1) will suffice. Why?

    must check if received ACK/NAK corrupted

    twice as many states state must “remember” whether “expected” pkt should have seq # of 0 or 1

    receiver:

    must check if received packet is duplicate state indicates whether

    0 or 1 is expected pkt seq #

    note: receiver can notknow if its last ACK/NAK received OK at sender

  • Transport Layer 3-52

    rdt2.2: a NAK-free protocol

    same functionality as rdt2.1, using ACKs only

    instead of NAK, receiver sends ACK for last pkt received OK receiver must explicitly include seq # of pkt being ACKed

    duplicate ACK at sender results in same action as NAK: retransmit current pkt

  • Transport Layer 3-53

    rdt2.2: 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) &&

    ( corrupt(rcvpkt) ||

    isACK(rcvpkt,1) )

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt,0)

    Wait for

    ACK

    0

    sender FSMfragment

    rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)

    && has_seq1(rcvpkt)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(ACK1, chksum)

    udt_send(sndpkt)

    Wait for

    0 from

    below

    rdt_rcv(rcvpkt) &&

    (corrupt(rcvpkt) ||

    has_seq1(rcvpkt))

    udt_send(sndpkt)

    receiver FSMfragment

    L

  • Transport Layer 3-54

    rdt3.0: channels with errors and loss

    new assumption:underlying channel can also lose packets (data, ACKs)

    checksum, seq. #, ACKs, retransmissions will be of help … but not enough

    approach: sender waits “reasonable” amount of time for ACK

    retransmits if no ACK received in this time

    if pkt (or ACK) just delayed (not lost):

    retransmission will be duplicate, but seq. #’s already handles this

    receiver must specify seq # of pkt being ACKed

    requires countdown timer

  • Transport Layer 3-55

    rdt3.0 sender

    sndpkt = make_pkt(0, data, checksum)

    udt_send(sndpkt)

    start_timer

    rdt_send(data)

    Wait

    for

    ACK0

    rdt_rcv(rcvpkt) &&

    ( corrupt(rcvpkt) ||

    isACK(rcvpkt,1) )

    Wait for

    call 1 from

    above

    sndpkt = make_pkt(1, data, checksum)

    udt_send(sndpkt)

    start_timer

    rdt_send(data)

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt,0)

    rdt_rcv(rcvpkt) &&

    ( corrupt(rcvpkt) ||

    isACK(rcvpkt,0) )

    rdt_rcv(rcvpkt)

    && notcorrupt(rcvpkt)

    && isACK(rcvpkt,1)

    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-56

    sender receiver

    rcv pkt1

    rcv pkt0

    send ack0

    send ack1

    send ack0

    rcv ack0

    send pkt0

    send pkt1

    rcv ack1

    send pkt0

    rcv pkt0pkt0

    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 pkt0pkt0

    pkt0

    ack1

    ack0

    ack0

    (b) packet loss

    pkt1X

    loss

    pkt1timeout

    resend pkt1

    rdt3.0 in action

  • Transport Layer 3-57

    rdt3.0 in action

    rcv pkt1send 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 pkt0pkt0

    pkt0

    ack1

    ack0

    ack0

    (c) ACK loss

    ack1X

    loss

    pkt1timeout

    resend pkt1

    rcv pkt1send ack1

    (detect duplicate)

    pkt1

    sender receiver

    rcv pkt1

    send ack0rcv ack0

    send pkt1

    send pkt0

    rcv pkt0pkt0

    ack0

    (d) premature timeout/ delayed ACK

    pkt1timeout

    resend pkt1

    ack1

    send ack1

    send pkt0rcv ack1

    pkt0

    ack1

    ack0

    send pkt0rcv ack1 pkt0

    rcv pkt0send ack0ack0

    rcv pkt0

    send ack0(detect duplicate)

    If packet delayed multiple timeouts

  • Transport Layer 3-58

    rdt3.0: stop-and-wait operation

    first packet bit transmitted, t = 0

    sender receiver

    RTT

    last packet bit transmitted, t = L / R

    first packet bit arrives

    last packet bit arrives, send ACK

    ACK arrives, send next

    packet, t = RTT + L / R

  • Transport Layer 3-59

    Performance of rdt3.0

    rdt3.0 is correct, but performance stinks

    e.g.: 1 Gbps link, 15 ms prop. delay, 8000 bit packet:

    U sender: utilization – fraction of time sender busy sending

    U sender =

    .008

    30.008 = 0.00027

    L / R

    RTT + L / R =

    if RTT=30 msec, 1KB pkt every 30 msec: 33kB/sec thruput over 1 Gbps link

    network protocol limits use of physical resources!

    LR

    8000 bits

    109 bits/sec= = 8 microsecsDtrans =

  • Transport Layer 3-60

    Pipelined protocols

    pipelining: sender allows multiple, “in-flight”, yet-to-be-acknowledged pkts range of sequence numbers must be increased

    buffering at sender and/or receiver

    two generic forms of pipelined protocols: go-Back-N, selective repeat

  • Transport Layer 3-61

    Pipelining: increased 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 ACKlast bit of 3rd packet arrives, send ACK

    3-packet pipelining increases

    utilization by a factor of 3!

    U sender =

    .0024

    30.008 = 0.00081

    3L / R

    RTT + L / R =

  • Transport Layer 3-62

    Pipelined protocols: overview

    Go-back-N: sender can have up to

    N unacked packets in pipeline

    receiver only sends cumulative ack doesn’t ack packet if

    there’s a gap

    sender has timer for oldest unacked packet when timer expires,

    retransmit all unacked packets

    Selective Repeat: sender can have up to N

    unack’ed packets in pipeline

    receiver sends individual ack for each packet

    sender maintains timer for each unacked packet when timer expires,

    retransmit only that unacked packet

  • Transport Layer 3-63

    Go-Back-N: sender

    k-bit seq # in pkt header

    “window” of up to N, consecutive unack’ed pkts allowed

    ACK(n): ACKs all pkts up to, including seq # n - “cumulative ACK” may receive duplicate ACKs (see receiver)

    timer for oldest in-flight pkt

    timeout(n): retransmit packet n and all higher seq # pkts in window

  • Transport Layer 3-64

    GBN in action

    send pkt0send pkt1send pkt2send pkt3

    (wait)

    sender receiver

    receive pkt0, send ack0receive pkt1, send ack1

    receive pkt3, discard, (re)send ack1rcv ack0, send pkt4

    rcv ack1, send pkt5

    pkt 2 timeoutsend pkt2send pkt3send pkt4send pkt5

    Xloss

    receive pkt4, discard, (re)send ack1

    receive pkt5, discard, (re)send ack1

    rcv pkt2, deliver, send ack2rcv pkt3, deliver, send ack3rcv pkt4, deliver, send ack4rcv 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-65

    GBN: sender extended FSM

    Waitstart_timer

    udt_send(sndpkt[base])

    udt_send(sndpkt[base+1])

    udt_send(sndpkt[nextseqnum-1])

    timeout

    rdt_send(data)

    if (nextseqnum < base+N) {

    sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)

    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) &&

    notcorrupt(rcvpkt)

    base=1

    nextseqnum=1

    rdt_rcv(rcvpkt)

    && corrupt(rcvpkt)

    L

    What if a duplicated ACK?

    When to stop/start timer

    Draw the sliding window!

    What if a out-of-order ACK?

  • Transport Layer 3-66

    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 (don’t buffer): no receiver buffering! re-ACK pkt with highest in-order seq #

    Wait

    udt_send(sndpkt)

    default

    rdt_rcv(rcvpkt)

    && notcurrupt(rcvpkt)

    && hasseqnum(rcvpkt,expectedseqnum)

    extract(rcvpkt,data)

    deliver_data(data)

    sndpkt = make_pkt(expectedseqnum,ACK,chksum)

    udt_send(sndpkt)

    expectedseqnum++

    expectedseqnum=1

    sndpkt =

    make_pkt(expectedseqnum,ACK,chksum)

    L

    GBN: receiver extended FSM

  • Transport Layer 3-67

    Selective repeat

    receiver individually acknowledges all correctly received pkts buffers pkts, as needed, for eventual in-order delivery

    to upper layer

    sender only resends pkts for which ACK not received sender timer for each unACKed pkt

    sender window N consecutive seq #’s limits seq #s of sent, unACKed pkts

  • Transport Layer 3-68

    Selective repeat: sender, receiver windows

  • Transport Layer 3-69

    Selective repeat

    data from above: if next available seq # in window, send pkt

    timeout(n): resend pkt n, restart timer

    ACK(n) in [sendbase,sendbase+N]:

    mark pkt n as received

    if n smallest unACKed pkt, advance window base to next unACKed seq #

    sender

    How is the window sliding?

  • Transport Layer 3-70

    Selective repeat

    pkt n in [rcvbase, rcvbase+N-1] send ACK(n)

    out-of-order: buffer

    in-order: deliver (also deliver buffered, in-order pkts), advance window to next not-yet-received pkt

    pkt n in [rcvbase-N,rcvbase-1] ACK(n)

    otherwise: ignore

    receiver

  • Transport Layer 3-71

    Selective repeat in action

    send pkt0send pkt1send pkt2send pkt3

    (wait)

    sender receiver

    receive pkt0, send ack0receive pkt1, send ack1

    receive pkt3, buffer, send ack3rcv ack0, send pkt4

    rcv ack1, send pkt5

    pkt 2 timeoutsend pkt2

    Xloss

    receive pkt4, buffer, send ack4

    receive pkt5, buffer, send ack5

    rcv pkt2; deliver pkt2,pkt3, pkt4, pkt5; send ack2

    record ack3 arrived

    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

    record ack4 arrived

    record ack5 arrived

    Q: what happens when ack2 arrives?

  • Transport Layer 3-72

    Selective repeat:dilemma

    example: seq #’s: 0, 1, 2, 3 window size=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

    timeoutretransmit pkt0

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2

    0 1 2 3 0 1 2X

    X

    X

    will accept packetwith 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 packetwith seq number 0

    0 1 2 3 0 1 2 pkt3

    (a) no problem

    receiver can’t see sender side.receiver behavior identical in both cases!

    something’s (very) wrong!

    receiver sees no difference in two scenarios!

    duplicate data accepted as new in (b)

    Q: what relationship between seq # size and window size to avoid problem in (b)?

  • Transport Layer

    Animation

  • Transport Layer 3-74

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-75

    TCP: Overview RFCs: 793,1122,1323, 2018, 2581

    full duplex data: bi-directional data flow

    in same connection

    MSS: maximum segment size

    connection-oriented: handshaking (exchange

    of control msgs) inits sender, receiver state before data exchange

    flow controlled: sender will not

    overwhelm receiver

    point-to-point: one sender, one receiver

    reliable, in-order byte steam: no “message

    boundaries”

    pipelined: TCP congestion and

    flow control set window size

  • Transport Layer 3-76

    TCP segment structure

    source port # dest port #

    32 bits

    application

    data

    (variable length)

    sequence number

    acknowledgement number

    receive window

    Urg data pointerchecksum

    FSRPAUhead

    len

    not

    used

    options (variable length)

    URG: urgent data

    (generally not used)

    ACK: ACK #

    valid

    PSH: push data now

    (generally not used)

    RST, SYN, FIN:

    connection estab

    (setup, teardown

    commands)

    # bytes

    rcvr willing

    to accept

    counting

    by bytes

    of data

    (not segments!)

    Internet

    checksum

    (as in UDP)

  • Transport Layer 3-77

    TCP seq. numbers, ACKs

    sequence numbers:

    byte stream “number” of first byte in segment’s data

    acknowledgements:

    seq # of next byte expected from other side

    cumulative ACK

    Q: how receiver handles out-of-order segments

    A: TCP spec doesn’t say, -up to implementor source port # dest port #

    sequence number

    acknowledgement number

    checksum

    rwnd

    urg pointer

    incoming segment to sender

    A

    sent ACKed

    sent, not-yet ACKed(“in-flight”)

    usablebut not yet sent

    not usable

    window sizeN

    sender sequence number space

    source port # dest port #

    sequence number

    acknowledgement number

    checksum

    rwnd

    urg pointer

    outgoing segment from sender

  • Transport Layer 3-78

    TCP seq. numbers, ACKs

    Usertypes‘C’

    host ACKsreceipt

    of echoed‘C’

    host ACKsreceipt of‘C’, echoesback ‘C’

    simple telnet scenario

    Host BHost A

    Seq=42, ACK=79, data = ‘C’

    Seq=79, ACK=43, data = ‘C’

    Seq=43, ACK=80

  • Transport Layer 3-79

    TCP round trip time, timeout

    Q: how to set TCP timeout value?

    longer than RTT

    but RTT varies

    too short: premature timeout, unnecessary retransmissions

    too long: slow reaction to segment loss

    Q: how to estimate RTT? SampleRTT: measured

    time from segment transmission until ACK receipt

    ignore retransmissions

    SampleRTT will vary, want estimated RTT “smoother” average several recent

    measurements, not just current SampleRTT

    Wasting time

    Wasting bandwidth

  • Transport Layer 3-80

    RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

    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 weighted moving average influence of past sample decreases exponentially fast typical value: α = 0.125

    TCP round trip time, timeout

    RTT (milliseconds)

    RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

    sampleRTT

    EstimatedRTT

    time (seconds)

  • Transport Layer 3-81

    timeout interval: EstimatedRTT plus “safety margin” large variation in EstimatedRTT -> larger safety margin

    estimate SampleRTT deviation from EstimatedRTT:

    DevRTT = (1- β)*DevRTT +

    β *|SampleRTT-EstimatedRTT|

    TCP round trip time, timeout

    (typically, β = 0.25)

    TimeoutInterval = EstimatedRTT + 4*DevRTT

    estimated RTT “safety margin”

  • Transport Layer 3-82

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-83

    TCP reliable data transfer

    TCP creates rdt service on top of IP’s unreliable service pipelined segments

    cumulative acks

    single retransmission timer

    retransmissions triggered by: timeout events

    duplicate acks

    let’s initially consider simplified TCP sender: ignore duplicate acks

    ignore flow control, congestion control

  • Transport Layer 3-84

    TCP sender events:

    data rcvd from app:

    create segment with seq #

    seq # is byte-stream number of first data byte in segment

    start timer if not already running think of timer as for

    oldest unacked segment

    expiration interval: TimeOutInterval

    timeout:

    retransmit segment that caused timeout

    restart timer

    ack rcvd:

    if ack acknowledges previously unacked segments update what is known

    to be ACKed

    start timer if there are still unacked segments

  • Transport Layer 3-85

    TCP sender (simplified)

    wait

    for

    event

    NextSeqNum = InitialSeqNum

    SendBase = InitialSeqNum

    L

    create segment, seq. #: NextSeqNum

    pass segment to IP (i.e., “send”)

    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 > SendBase) {

    SendBase = y

    /* SendBase–1: 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-86

    TCP: retransmission scenarios

    lost ACK scenario

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=92, 8 bytes of data

    Xtimeout

    ACK=100

    premature timeout

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=92, 8bytes of data

    timeout

    ACK=120

    Seq=100, 20 bytes of data

    ACK=120

    SendBase=100

    SendBase=120

    SendBase=120

    SendBase=92

  • Transport Layer 3-873-87

    TCP: retransmission scenarios

    X

    cumulative ACK

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    Seq=120, 15 bytes of data

    timeout

    Seq=100, 20 bytes of data

    ACK=120

    Do we need to retransmit the first pkt?

    The sequent timeout is doubled

    until receiving an ACK or rdt_sent?

  • Transport Layer 3-883-88

    TCP ACK generation [RFC 1122, RFC 2581]

    event at receiver

    arrival of in-order segment with

    expected seq #. All data up to

    expected seq # already ACKed

    arrival of in-order segment with

    expected seq #. One other

    segment has ACK pending

    arrival of out-of-order segment

    higher-than-expect seq. # .

    Gap detected

    arrival of segment that

    partially or completely fills gap

    TCP receiver action

    delayed ACK. Wait up to 500ms

    for next segment. If no next segment,

    send ACK

    immediately send single cumulative

    ACK, ACKing both in-order segments

    immediately send duplicate ACK,

    indicating seq. # of next expected byte

    immediate send ACK, provided that

    segment starts at lower end of gap

  • Transport Layer 3-89

    Problem!

  • Transport Layer 3-90

    X

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    timeout ACK=100

    ACK=100

    ACK=100

    Problems

    Seq=100, 20 bytes of data

    Seq=100, 20 bytes of data

  • Transport Layer 3-91

    TCP fast retransmit

    time-out period often relatively long: long delay before

    resending lost packet

    detect lost segments via duplicate ACKs. sender often sends

    many segments back-to-back

    if segment is lost, there will likely be many duplicate ACKs.

    if sender receives 3 ACKs for same data

    (“triple duplicate ACKs”),resend unacked segment with smallest seq # likely that unacked

    segment lost, so don’t wait for timeout

    TCP fast retransmit

  • Transport Layer 3-92

    X

    fast retransmit after sender receipt of triple duplicate ACK

    Host BHost A

    Seq=92, 8 bytes of data

    ACK=100

    timeout ACK=100

    ACK=100

    ACK=100

    TCP fast retransmit

    Seq=100, 20 bytes of data

    Seq=100, 20 bytes of data

  • Transport Layer 3-93

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-94

    TCP flow control

    Speed-Matching Service Match Send Rate to Receiving App’s Drain Rate

  • Transport Layer 3-95

    TCP flow controlapplication

    process

    TCP socketreceiver buffers

    TCPcode

    IPcode

    application

    OS

    receiver protocol stack

    application may remove data from

    TCP socket buffers ….

    … slower than TCP receiver is delivering(sender is sending)

    from sender

    receiver controls sender, so

    sender won’t overflow receiver’s buffer by transmitting too much, too fast

    flow control

  • Transport Layer 3-96

    TCP flow control

    buffered data

    free buffer spacerwnd

    RcvBuffer

    TCP segment payloads

    to application process

    receiver “advertises” free buffer space by including rwnd value in TCP header of receiver-to-sender segments RcvBuffer size set via

    socket options (typical default is 4096 bytes)

    many operating systems autoadjust RcvBuffer

    sender limits amount of unacked (“in-flight”) data to receiver’s rwnd value

    guarantees receive buffer will not overflow

    receiver-side buffering

    What if rwnd = 0 !

  • Transport Layer 3-97

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-98

    Connection Management

    before exchanging data, sender/receiver “handshake”: agree to establish connection (each knowing the other willing

    to establish connection)

    agree on connection parameters

    connection state: ESTABconnection variables:

    seq # client-to-serverserver-to-client

    rcvBuffer size

    at server,client

    application

    network

    connection state: ESTABconnection Variables:

    seq # client-to-serverserver-to-client

    rcvBuffer size

    at server,client

    application

    network

    Socket clientSocket =

    newSocket("hostname","port

    number");

    Socket connectionSocket =

    welcomeSocket.accept();

  • Transport Layer 3-99

    Q: will 2-way handshake always work in network?

    variable delays

    retransmitted messages (e.g. req_conn(x)) due to message loss

    message reordering

    can’t “see” other side

    2-way handshake:

    Let’s talk

    OKESTAB

    ESTAB

    choose xreq_conn(x)

    ESTAB

    ESTABacc_conn(x)

    Agreeing to establish a connection

  • Transport Layer 3-100

    Agreeing to establish a connection

    2-way handshake failure scenarios:

    retransmitreq_conn(x)

    ESTAB

    req_conn(x)

    half open connection!(no client!)

    client terminates

    serverforgets x

    connection x completes

    retransmitreq_conn(x)

    ESTAB

    req_conn(x)

    data(x+1)

    retransmitdata(x+1)

    acceptdata(x+1)

    choose xreq_conn(x)

    ESTAB

    ESTAB

    acc_conn(x)

    client terminates

    ESTAB

    choose xreq_conn(x)

    ESTAB

    acc_conn(x)

    data(x+1) acceptdata(x+1)

    connection x completes server

    forgets x

  • Transport Layer 3-101

    TCP 3-way handshake

    SYNbit=1, Seq=x

    choose init seq num, xsend TCP SYN msg

    ESTAB

    SYNbit=1, Seq=yACKbit=1; ACKnum=x+1

    choose init seq num, ysend TCP SYNACKmsg, 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-102

    TCP 3-way handshake: FSM

    closed

    L

    listen

    SYNrcvd

    SYNsent

    ESTAB

    Socket clientSocket =

    newSocket("hostname","port

    number");

    SYN(seq=x)

    Socket connectionSocket =

    welcomeSocket.accept();

    SYN(x)

    SYNACK(seq=y,ACKnum=x+1)create new socket for

    communication back to client

    SYNACK(seq=y,ACKnum=x+1)

    ACK(ACKnum=y+1)ACK(ACKnum=y+1)

    L

    Server Client

  • Transport Layer 3-103

    SYN Flood Attack

    Deluge of SYNs

    Deplete Server Resources Half-Open Connections

    SYN Cookies

    Don’t Allocate Resources until ACK Received

  • Transport Layer 3-104

    TCP: closing a connection

    client, server each close their side of connection send TCP segment with FIN bit = 1

    respond to received FIN with ACK on receiving FIN, ACK can be combined with own FIN

    simultaneous FIN exchanges can be handled

  • Transport Layer 3-105

    FIN_WAIT_2

    CLOSE_WAIT

    FINbit=1, seq=y

    ACKbit=1; ACKnum=y+1

    ACKbit=1; ACKnum=x+1

    wait for serverclose

    can stillsend data

    can no longersend data

    LAST_ACK

    CLOSED

    TIMED_WAIT

    timed wait for 2*max

    segment lifetime

    CLOSED

    TCP: closing a connection

    FIN_WAIT_1 FINbit=1, seq=xcan no longersend but canreceive data

    clientSocket.close()

    client state server state

    ESTABESTAB

  • Transport Layer 3-106

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    GBN or SR

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-107

    What is congestion control?

    Basic approaches to congestion control

    In the network

    From the end host

    Principles of congestion control

  • Transport Layer 3-108

    Congestion What is it?

    What isn’t it?

    Problems Lost Packets

    Long Delays

    Principles of congestion control

  • Transport Layer 3-109

    congestion: informally: “too many sources sending too much

    data too fast for network to handle” different from flow control!

    manifestations:

    lost packets (buffer overflow at routers)

    long delays (queueing in router buffers)

    a top-10 problem!

    Principles of congestion control

  • Transport Layer 3-110

    Two packets colliding at a router, heading the same port

    Flows using up all link capacity (TCP communication flow)

    Too many users using a link during a peak hour

    Time Scales of Congestion

    queue

    Trans. Rate

    Multi. RTT

  • What causes congestion?

    t

    Cum

    ula

    tive b

    its

    12Mb/s

    A1(t)

    A1(t)+A2(t)

    Q(t)

    Q(t) What if the buffer is finite?

  • Another example?

    Are there congestions?

    Notice the sender to avoid downstream pkt drop!

    How to split the trans. Rate?

    6 Mb/s

    6 Mb/s

    A:3 Mb/s

    C:6 Mb/s

    B:3 Mb/s

    A:4 Mb/s

    C:4 Mb/s

    B:4 Mb/s

  • Another example?

    Are there congestions?

    Notice the sender to avoid downstream pkt drop!

    How to split the trans. Rate?

    A:4 Mb/s

    C:4 Mb/s

    B:4 Mb/s

    D:? Mb/s

  • Congestion is unavoidable

    Arguably a little congestion is good! : We use packet switching because it makes efficient use of

    the links. Therefore, buffers in the routers are frequently occupied.

    If buffers are always empty, delay is low, but our usage of the network is low

    If buffers are always occupied, delay is high, but we are using the network more efficiently

  • Observations

    Congestion is inevitable, and arguably desirable.

    Congestion happens at different time scales - from two individual packets colliding, to some flows sending too quickly, to flash crowds appearing in the network.

    If packets are dropped, then retransmissions can make congestion even worse.

    When packets are dropped, they waste resources upstream before they were dropped.

    We need a definition of fairness, to decide how we want flows to share a bottleneck link.

  • Fairness and throughput

    How to allocate the trans. rate if everyone wants to send at the maximum rate

    2 1A

    B C

    0.25

    1.75 0.75

    Total throughput = 2.75

    0.5

    1.5 0.5

    Total throughput = 2.5

    In first allocation, A is penalized for achieving a higher throughput. Therefore, it’s a tradeoff between throughput and fairness

  • Max-min Fairness

    Definition:

    An allocation is max-min fair if you can not increase the rate of one flow without decreasing the rate of another flow with a lower rate

    2 1A

    B C

    0.5

    1.5 0.5

    Total throughput = 2.5

    Curtailing for equal rate in bottleneck

  • Max-min Fairness: Single link

    Definition is intuitive and simple on a single link.

    1

    A

    B

    C

    0.5

    1

    0.2

    0.2

    0.4

    0.4 Max-min fair

  • Goals for congestion control

    High throughput: keep links busy and flows fast

    Max-min fairness

    Respond quickly to changing network conditions

    Distributed control

    Where to put congestion control?

  • Example: FQ at every router

    R

    R/2

    R/2

    Not responsible, cannot tell the sender how the rate should be set!!

  • Transport Layer 3-121

    Causes/costs of congestion: scenario 1

    two senders, two receivers

    one router, infinite buffers

    output link capacity: R

    no retransmission

    maximum per-connection throughput: R/2

    unlimited shared

    output link buffers

    Host A

    original data: lin

    Host B

    throughput: lout

    R/2

    R/2

    lout

    lin R/2dela

    ylin

    large delays as arrival rate, lin, approaches capacity

    Queueing Delay

  • Transport Layer 3-122

    Causes/costs of congestion: scenario 1

    Large queueing DELAY are experienced as the packet arrival rate nears the link

    capacity

  • Transport Layer 3-123

    one router, finite buffers

    sender retransmission of timed-out packet application-layer input = application-layer output: lin = lout

    transport-layer input includes retransmissions : lin lin

    finite shared output

    link buffers

    Host A

    lin : original data

    Host B

    loutl'in: original data, plusretransmitted data

    Causes/costs of congestion: scenario 2

  • Transport Layer 3-124

    idealization: sender has perfect knowledge

    sender sends only when router buffers available

    finite shared output

    link buffers

    lin : original dataloutl'in: original data, plus

    retransmitted data

    copy

    free buffer space!

    R/2

    R/2

    lout

    lin

    Causes/costs of congestion: scenario 2

    Host B

    A

  • Transport Layer 3-125

    lin : original dataloutl'in: original data, plus

    retransmitted data

    copy

    no buffer space!

    Idealization: known losspackets can be lost, dropped at router due to full buffers

    sender only resends if packet known to be lost

    Causes/costs of congestion: scenario 2

    A

    Host B

  • Transport Layer 3-126

    lin : original dataloutl'in: original data, plus

    retransmitted data

    free buffer space!

    Causes/costs of congestion: scenario 2

    Idealization: known losspackets can be lost, dropped at router due to full buffers

    sender only resends if packet known to be lost

    R/2

    R/2lin

    lout

    when sending at R/2,

    some packets are

    retransmissions but

    asymptotic goodput

    is still R/2 (why?)

    A

    Host B

  • Transport Layer 3-127

    A

    linloutl'in

    copy

    free buffer space!

    timeout

    R/2

    R/2lin

    lout

    when sending at R/2,

    some packets are

    retransmissions

    including duplicated

    that are delivered!

    Host B

    Realistic: duplicates packets can be lost, dropped

    at router due to full buffers

    sender times out prematurely, sending two copies, both of which are delivered

    Causes/costs of congestion: scenario 2

  • Transport Layer 3-128

    R/2

    lout

    when sending at R/2,

    some packets are

    retransmissions

    including duplicated

    that are delivered!

    “costs” of congestion: more work (retrans) for given “goodput” unneeded retransmissions: link carries multiple copies of pkt

    decreasing goodput

    R/2lin

    Causes/costs of congestion: scenario 2

    Realistic: duplicates packets can be lost, dropped

    at router due to full buffers

    sender times out prematurely, sending two copies, both of which are delivered

  • Transport Layer 3-129

    four senders

    multihop paths

    timeout/retransmit

    Q: what happens as lin and lin’

    increase ?

    finite shared output

    link buffers

    Host A lout

    Causes/costs of congestion: scenario 3

    Host B

    Host C

    Host D

    lin : original data

    l'in: original data, plusretransmitted data

    A: as red lin’ increases, all arriving

    blue pkts at upper queue are dropped, blue throughput g 0

  • Transport Layer 3-130

    another “cost” of congestion:

    when packet dropped, any “upstream transmission capacity used for that packet was wasted!

    Causes/costs of congestion: scenario 3

    C/2

    C/2

    lout

    lin’

    A B

    D C

  • Transport Layer 3-131

    Approaches towards congestion control

    two broad approaches towards congestion control:

    end-end congestion control:

    no explicit feedback from network

    congestion inferred from end-system observed loss, delay

    approach taken by TCP

    network-assisted congestion control:

    routers provide feedback to end systems

    single bit indicating congestion (SNA, DECbit, TCP/IP ECN, ATM)

    explicit rate for sender to send at

  • Network-based

    Q:Who is responsible ?

    A: Router

    Q:How to indicate a congestion?

    A: Pkt drop, queue occupancy, threshold, link capacity etc.

    Q:How to get back to sender?

    TCP: ECN, DECbit(data cost)

    Congestion!!!

    DECbit

  • Transport Layer 3-133

    Case study: ATM ABR congestion control

    ABR: available bit rate: “elastic service”

    if sender’s path “underloaded”: sender should use

    available bandwidth

    if sender’s path congested:

    sender throttled to minimum guaranteed rate

    RM (resource management) cells:

    sent by sender, interspersed with data cells

    bits in RM cell set by switches (“network-assisted”) NI bit: no increase in rate

    (mild congestion)

    CI bit: congestion indication

    RM cells returned to sender by receiver, with bits intact

  • Transport Layer 3-134

    Case study: ATM ABR congestion control

    two-byte ER (explicit rate) field in RM cell congested switch may lower ER value in cell

    senders’ send rate thus max supportable rate on path

    EFCI bit in data cells: set to 1 in congested switch

    if data cell preceding RM cell has EFCI set, receiver sets CI bit in returned RM cell

    RM cell data cell

  • End-host based

    Q: Is it worth providing congestion control by the network?

    Q:How can the host observe the network behavior (congestion)?

    A: drop, delay …

    For TCP, it has to do this because IP provides no support

  • Transport Layer 3-136

    Overload sliding window mechanism

    Exploits TCP’s sliding window used for flow control.

    Tries to figure out how many packets it can safely have outstanding in the network at a time.

    sent ACKed

    sent, not-yet ACKed(“in-flight”)

    usablebut not yet sent

    not usable

    sender sequence number space

  • Transport Layer 3-137

    AIMD: additive increase multiplicative decrease

  • Transport Layer 3-138

    Animation for AIMDhttp://guido.appenzeller.net/anims/

  • Transport Layer 3-139

    Single flow dynamicslockstep

  • Transport Layer 3-140

    Sending rate for single flow

    Constant!!!

    How large should the buffer be?

  • Transport Layer 3-141

    Sending rate for single flow

  • Transport Layer 3-142

    Observations for single flow

    Window expands/contracts according to AIMD

    …to probe how many bytes the pipe can hold.

    The sawtooth is the stable operating point.

    The sending rate is constant.

    …if we have sufficient buffers (RTT x C).

  • Transport Layer 3-143

    Multiple flows

  • Transport Layer 3-144

    One flow vs multiple flows

    Why the saw tooth has different shape ??

  • Transport Layer 3-145

    Simple geometric intuition

  • Transport Layer 3-146

    Observations for multiple flow

    Window expands/contracts according to AIMD.

    …to probe how many bytes the pipe can hold.

    Bottleneck will contain packets from many flows.

    The sending rate varies with window size.

    AIMD is very sensitive to loss rate.

    AIMD penalizes flows with long RTTs.

  • Transport Layer 3-147

    Chapter 3 outline

    3.1 transport-layer services

    3.2 multiplexing and demultiplexing

    3.3 connectionless transport: UDP

    3.4 principles of reliable data transfer

    3.5 connection-oriented transport: TCP

    segment structure

    reliable data transfer

    flow control

    connection management

    3.6 principles of congestion control

    3.7 TCP congestion control

  • Transport Layer 3-148

    TCP Congestion Control

    End-to-End Reacts to events observable at the end host (e.g.

    packet loss).

    Limit send rate when network is congested

    Questions How to perceive congestion?

    How to limit send rate?

    How to change send rate?

  • Transport Layer 3-149

    How to Perceive Congestion?

    Implicit End-to-End Feedback

    ACK Received ?

    ACK Not Received ?

  • Transport Layer 3-150

    TCP Congestion Control: details

    sender limits transmission:

    cwnd is dynamic, function of perceived network congestion

    TCP sending rate:

    roughly: send cwnd bytes, wait RTT for ACKS, then send more bytes

    last byteACKed sent, not-

    yet ACKed(“in-flight”)

    last byte sent

    cwnd

    LastByteSent-

    LastByteAcked< cwnd

    sender sequence number space

    rate ~~cwnd

    RTTbytes/sec

    How to change cwnd ?

  • Transport Layer 3-151

    How to Limit Send Rate?

    Limiting # of unACKed bytes “in pipeline” cwnd: differs from rwnd (how, why?)

    Sender limited by min(__, __)

    LastByteSent - LastByteAcked

  • Transport Layer 3-152

    TCP Congestion Control

    Goal Fast But Not Too Fast

    How to find rate just below congestion level?

  • Transport Layer 3-153

    TCP congestion control (AIMD)

    approach: sender increases transmission rate (window size), probing for usable bandwidth, until loss occurs

    additive increase: increase cwnd by 1 MSS every RTT until loss detected

    multiplicative decrease: cut cwnd in half after loss cwnd:

    TC

    P s

    end

    er

    co

    ng

    estion w

    ind

    ow

    siz

    e

    AIMD saw tooth

    behavior: probing

    for bandwidth

    additively increase window size ……. until loss occurs (then cut window in half)

    time

    What happens in detail?

  • Transport Layer 3-154

    Practical TCP Congestion control

    Flow control window is only about endpoint

    Have TCP estimate a congestion window for the network

    Sender window = min(flow window, congestion window)

    Separate congestion control into two states Slow start: on connection startup or packet

    timeout

    Congestion avoidance: steady operation

    TCP Tahoe, 1987-1988

  • Transport Layer 3-155

    Success Event

    If ACK Received _______cwndincrease

    Slowstart Increase Exponentiially

    Connection start or after Timeout

    Congestion Avoidance Increase linearly

    Normal Operation

    Increase by MSS2/congestion window for

    each acknowledgment;

    Increase by MSS each round trip time

  • Transport Layer 3-156

    Loss Event

    If Segment Lost _______cwndDecrease

    Timeout Cut cwnd to 1

    Duplicated ACKs Cut cwnd to half

  • Transport Layer 3-157

    TCP Slow Start

    when connection begins,increase rate exponentially until first loss event: initially cwnd = 1 MSS

    double cwnd every RTT

    done by incrementing cwnd for every ACK received

    Feature: initial rate is slow but ramps up exponentially fast

    Host A

    RT

    T

    Host B

    time

  • Transport Layer 3-158

    TCP Slow Start

    ssthresh Cwnd threshold maintained by TCP

    On timeout Ssthresh = cwnd/2

    When cwnd >= ssthresh Congestion Avoidance

  • Transport Layer 3-159

    TCP Slow Start Summary

    Slow start Window starts at

    Maximum Segment Size (MSS)

    Increase window by MSS for each acknowledged packet

    Exponentially grow congestion window to sense network capacity

    “Slow” compared to prior approach

  • Transport Layer 3-160

    TCP: detecting, reacting to loss

    loss indicated by timeout: cwnd set to 1 MSS;

    window then grows exponentially (as in slow start) to threshold, then grows linearly

    loss indicated by 3 duplicate ACKs: TCP RENO dup ACKs indicate network capable of delivering

    some segments

    cwnd is cut in half window then grows linearly

    TCP Tahoe always sets cwnd to 1 (timeout or 3 duplicate acks)

  • Transport Layer 3-161

    Q: when should the exponential increase switch to linear? Why?

    A: when cwnd gets to 1/2 of its value before timeout.

    A: Less aggressive

    Implementation: variable ssthresh

    on loss event, ssthresh is set to 1/2 of cwnd just before loss event

    Cwnd += MSS/cwnd for each ACK received

    TCP: switching from slow start to CA

  • Transport Layer 3-162

    Summary: TCP Congestion Control

    timeout

    ssthresh = cwnd/2cwnd = 1 MSS

    dupACKcount = 0

    retransmit missing segment

    L

    cwnd > ssthresh

    congestion

    avoidance

    cwnd = cwnd + MSS (MSS/cwnd)dupACKcount = 0

    transmit new segment(s), as allowed

    new ACK.

    dupACKcount++

    duplicate ACK

    fast

    recovery

    cwnd = cwnd + MSStransmit new segment(s), as allowed

    duplicate ACK

    ssthresh= cwnd/2cwnd = ssthresh + 3

    retransmit missing segment

    dupACKcount == 3

    timeout

    ssthresh = cwnd/2cwnd = 1 dupACKcount = 0

    retransmit missing segment

    ssthresh= cwnd/2cwnd = ssthresh + 3retransmit missing segment

    dupACKcount == 3cwnd = ssthreshdupACKcount = 0

    New ACK

    slow

    start

    timeout

    ssthresh = cwnd/2 cwnd = 1 MSS

    dupACKcount = 0retransmit missing segment

    cwnd = cwnd+MSSdupACKcount = 0transmit new segment(s), as allowed

    new ACKdupACKcount++

    duplicate ACK

    L

    cwnd = 1 MSSssthresh = 64 KBdupACKcount = 0

    NewACK!

    NewACK!

    NewACK!

  • Transport Layer 3-163

    TCP Congestion Control: Phases• cwnd < ssthresh ?

    • cwnd > ssthresh ?

  • Transport Layer 3-164

    TCP Congestion Control: Phases• cwnd < ssthresh ?

    • cwnd > ssthresh ?

    • Timeout ? • Triple Duplicated ACK ?

  • Transport Layer 3-165

    TCP Congestion Control: Phases• Timeout ?

    • Ssthresh = cwnd/2• Cwnd = 1MSS

    • Triple Duplicated ACK ?

    • Ssthresh = cwnd/2• Cwnd = ssthresh

  • Transport Layer 3-166

    TCP throughput

    avg. TCP thruput as function of window size, RTT? ignore slow start, assume always data to send

    W: window size (measured in bytes) where loss occurs avg. window size (# in-flight bytes) is ¾ W

    avg. thruput is 3/4W per RTT

    W

    W/2

    avg TCP thruput = 34

    WRTT

    bytes/sec

  • Transport Layer 3-167

    TCP Futures: TCP over “long, fat pipes”

    example: 1500 byte segments, 100ms RTT, want 10 Gbps throughput

    requires W = 83,333 in-flight segments

    throughput in terms of segment loss probability, L [Mathis 1997]:

    ➜ to achieve 10 Gbps throughput, need a loss rate of L = 2·10-10 – a very small loss rate!

    new versions of TCP for high-speed

    TCP throughput = 1.22 . MSS

    RTT L

  • Transport Layer 3-168

    fairness goal: if K TCP sessions share same bottleneck link of bandwidth R, each should have average rate of R/K

    TCP connection 1

    bottleneck

    router

    capacity R

    TCP Fairness

    TCP connection 2

  • Transport Layer 3-169

    Why is TCP fair?

    two competing sessions: additive increase gives slope of 1, as throughout increases

    multiplicative decrease decreases throughput proportionally

    R

    R

    equal bandwidth share

    Connection 1 throughput

    congestion avoidance: additive increase

    loss: decrease window by factor of 2

    congestion avoidance: additive increaseloss: decrease window by factor of 2

  • Transport Layer 3-170

    Fairness (more)

    Fairness and UDP

    multimedia apps often do not use TCP do not want rate

    throttled by congestion control

    instead use UDP: send audio/video at

    constant rate, tolerate packet loss

    Fairness, parallel TCP connections

    application can open multiple parallel connections between two hosts

    web browsers do this

    e.g., link of rate R with 9 existing connections: new app asks for 1 TCP, gets rate

    R/10

    new app asks for 11 TCPs, gets R/2

  • Transport Layer 3-171

    Chapter 3: summary

    principles behind transport layer services:

    multiplexing, demultiplexing

    reliable data transfer

    flow control

    congestion control

    instantiation, implementation in the Internet UDP

    TCP

    next:

    leaving the network “edge”(application, transport layers)

    into the network “core”