Chapter 3: TRANSPORT LAYER
Introduction and Transport layer services
- Transport-layer is an end-to-end(point-to-point) layer used to deliver messages.
- From an application process perspective, it views the communication as if the hosts running the processes are connected directly.
- Transport-layer protocols are implemented on end-systems not on network routers.
- On the sending side, transport-layer converts application-layer messages into transport-layer packets(a.k.a. transport-layer segments). This is done by breaking messages into smaller chunks and adding a transport-layer header. The segments will be passed to the network-layer to be encapsulated within a network-layer packet(datagram) and sent to destination.
- On the receiving side, The network-layer extracts the segments from the datagram and passes it to the transport-layer. The transport layer then processes the received segments making it available to the application-layer.
Relationship between transport and network layer
- Transport-layer is just above the network-layer in the protocol.
- Transport-layer protocol provides logical communication between processes on different hosts.
- Network-layer protocol provides logical communication between hosts.
Overview of the transport layer in the internet
- IP service model is a best-effort delivery service. It tries its best but could not guarantee segment delivery.
- Extending host-to-host delivery into process-to-process delivery is called transport-layer multiplexing and demultiplexing.
- UDP only provides process-to-process delivering and error checking. Is unreliable.
- TCP provides reliable data transfer and congestion control.
- Congestion control is done by regulating the rate of the sending sides of TCP connections.
Multiplexing And Demultiplexing
- Segments knows their source port number and destination source number.
[IMPORTANT]Python codes
Create socket e.g.
sock = socket(AF_INET,SOCK_DGRAM)
AF_INET
means the ip assigned to the socket will be IPv4. For IPv6 use AF_INET6
.
SOCK_DGRAM
is for UDP connection. SOCK_STREAM
is for TCP connection.
Bind a socket with a port(Server side OPs)
sock.bind(('',19156))
- 19156 is the port binded.
Connect a socket to a server(Client side OPs)
sock.connect((servername,12000))
- 12000 is the port to connect on server.
Accept a connection(Server side OPs)
sock,addr = sock.accept()
Connectionless transport: UDP
- Best effort service.
Means UDP segments can be lost or delivered out of order.
- Connectionless
No handshaking.
Each UDP segment is handled independently.
- UDP use:
Loss tolerant, rate sensitive situation. e.g. Internet phone, video conferencing
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
UDP Checksum
- Provides error detection.
Sender:
- Treats all contents as sequence of 16-bit integers.
- checksum is the sum of segment contents in one's complement(i.e. turn all 1s into 0s, turn all os into 1's).
- Checksum is put into the UDP segement header.
Receiver:
- Computes the checksum.
- If the computed checksum is equal to the checksum in the segment header. There might be no errors.
- if not, error exists.
[IMPORTANT]Principles of Reliable data transfer(rdt)
-
懶得看英文可以看這個,30分鐘帶你搞懂兩個星期的課。
-
Terms:
rdt_send()
: Send side in RDT.
rdt_rcv()
: Receive side in RDT.
deliver_data()
: Deliver data to upper layer.
make_pkt()
: Creates a packet containing data.
extract()
: Extracts the packet.
Service model
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
RDT IS IMPORTANT AND WILL ALWAYS APPEAR ON TESTS!!!
96年 40%, 97年 40%, 100年 30%
rdt1.0
- Regard transmission as ideal. No loss of packets, bit error, timeout will happen.
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
rdt2.0
- Takes bit errors into consideration.
- Use checksum to detect errors
How to recover from errors?
- Acknowledgements(ACKs): Reciever tells the sender the packet is correct.
- Negative Acknowledgements(NAKs):
Receiver tells the sender the packet is incorrect.
If a packet is corrupted. the receiver can use NAKs to request the sender to retransmit.
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
If the ACK/NAK is corrupted, this will fail. How to fix this?
- Choice 1 : Add checksum bits to recover from bit errors, this solves the problem but does not lose it.
- Choice 2: When the receiver receives a corrupted ACK/NAK retransmit. This will introduce a new problem, duplicate packets.
Solution: Stop and wait:
Sender sends a packet then wait for respond.
- Sender adds a sequence(seq) number to packet. (0 or 1)
By doing this the sender can know whether the ACK or NAK is associated with the newest packet sent.
rtd2.1 sender:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
rtd2.1 receiver:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
rdt2.2
rdt2.2 functions like rdt2.1 but without NAK.
- Receive side sends ACK with the last correct packet's sequence number.
- If the sender received an ACK whose sequence number is not equal to the most recent sequence number, it is a NAK.
- Sender
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
rdt3.0
Takes bit lose and lose packets into consideration.
Difference with rdt2.2:
- Sender waits reasonable amount of time for ACK.
- Sender retransmits if no ACK received in time.(countdown timer)
Sender:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
Receiver:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
- Because packet sequence numbers alternate between 0 and 1. rtd3.0 is also known as alternating-bit protocol.
Downside of rdt3.0
Pipelined protocols
Pipelining:
Sender starts to send subsequent packets before ACK/NAK comes back.
Two generic forms: Go-back-N, selective repeat.
Go-back-N(GBN)
Sender
- Sender can have up to N packets in pipeline.
- k-bit sequence number.
- Sender has timer for oldest unACKed packet. Retransmit all unACKed packets if time expires.

receiver
- receiver send cumulative ACK.(i.e. doesn't ACK if there's a gap)
- ACKs the highest in-order sequence number only.
- Discard out-of-order packet

Selective receive(SR)
Sender
- Sender can have up to N packets in pipeline.
- Sender has timer for each unACKed packet.If timeout happens ,resend the packet.
receiver
- receiver sends individual ACKs for each packets.
- if Received in-order packet, deliver it.
- if Received out-of-order packet,put it into buffer.
connection-oriented transport: TCP
Overview:
- point-to-point
- reliable ,in-order byte stream
- Full duplex(bidirectional)
- Connection-oriented. Needs handshaking to init sender and receiver.
- Flow controlled. Sender will not overwhelm receiver.
TCP header:

sequence number:
- Byte stream number of the first byte in segment.
acknowledgement number:
- Is the sequence number of the next segment.
Round-Trip Time estimation and timeout
How to set TCP time out value?
- Longer than round trip time (RTT). But RTT isn't stable.
- too short: Premature timeout.
- too long: slow reaction to segment loss
How to estimate RTT?
- SampleRTT: measure time until ACK received.
- Because RTT isn't stable, use average of recent transmissions(EstimatedRTT).
Reliable data transfer
TCP sender

TCP fast transmit
- If sender receives 3 ACKs for same data, resend unACKed segment with smallest sequence number. (A segment is likely lost)
Flow control
- Receiver tells the sender how much free buffer space it has. The limits amount of unACked data according to free space left.
Connection management
starting a connection
Handshake:
- Agree to connection
- Agree on connection parameters.
2-way handshake sometimes doesn't
work. Three way handshake is preferred.
Three way handshake:

Closing a connection
- Send FIN bit = 1.
- Respond to FIN with ACK.
Principles of congestion control
Congestion:
- Too many sources sending too much data too fast for the network to handle.
- Manifestations: Lost packets, long delays.
Ideal scenario
known loss: packets can be lost on route. Ideally, sender only resends if packet is known to be lost
Realistic scenario
duplicates: Sender times out prematurely , two copies of packet is delivered.
cost of congestion:
- More things(copies of packets) has to be sent.
- multiple copies of packets are sent across the network, leading to more congestion.
TCP congestion control
Principles:
- Lost segment implies that congestion is happening, TCP sender's rate should reduce.
- An ACKed segment means network is delivering data well, sender's rate can be increased.
- Bandwidth probing. Transmission rate should be as fast as possible near to congestion.
AIMD(Additive Increase, Multiplicative Decrease)
- Saw tooth behavior
- approach: sender increases transmission rate (window size), probing for usable bandwidth, until loss occurs
- additive increase: increase cwnd by 1 MSS(Maximum segment size) every RTT until loss detected
- multiplicative decrease: cut cwnd in half after loss
TCP Slow Start
- Initial rate is low but ramps up exponentially fast.
- initially cwnd = 1 MSS
- double cwnd every RTT
- done by incrementing cwnd for every ACK received
- loss is indicated by timeout. if occurs, reduce to initial rate then grows exponentially to threshold, the grows linearly.
- Threshold is half the rate of timeout.
- Loss is indicated by 3 ACKs: TCP Reno.
- cwnd is cut in half window then grows linearly
- TCP Tahoe always sets cwnd to 1 (timeout or 3 duplicate acks)
Fairness
- With the strategy mentioned in TCP Slow Start, multiple competing sessions will have equal bandwidth share.
Fairness and UDP
- Multimedia apps often do not use TCP. Do not want rate throttled by congestion control
- Use UDP to send audio/video at constant rate, tolerate packet loss.
Explicit congestion Notification
network-assisted congestion control
- Two bits in IP Header marked by network router to indicate congestion.
- Congestion indication is carried to receiving host.
- Receiver notifies the sender that congestion is occurring.
END