計算機網路和網際網路 - Transport layer

Computer Networks and Internet - Transport layer

R4 Cheng
10 min readOct 13, 2020

Router 沒到這一層 (只到網路層),所以 Transport layer 被使用在 end system

Contents:

+ Principles behind transport layer services (2020.9.13)

+ What does transport service supply?

+ Attributes

+ Transport layer vs. Network layer

+ TCP (Connection-oriented transport)

+ UDP

+ Reference

Principles behind transport layer services (2020.9.13)

+ Multiplexing(往下送)/demultiplexing(往上送)

+ Reliable data transfer (在不可靠的環境下提供可靠服務)

+ Flow control (控制傳速)

+ Congestion control (TCP ability, 擁塞控制)

Multiplexing(往下送)/demultiplexing(往上送)

  • Multiplexing: gathering data from multiple sockets and enveloping data with header (later used for demultiplexing)
  • Demultiplexing: delivering received segments to correct socket

Header includes: source port, destination port, sequence number

Reliable data transfer (在不可靠的環境下提供可靠服務)

  • Rdt 1.0: 可的傳輸+可靠的 channel (2020.10.13)

理想狀況,但現實很難達成

Co bit errors, no loss of packets

  • Rdt 2.0: channel with bit errors (2020.10.15)

Checksum to detect it errors, recovery from errors

-> ACK (OK)/NAK (error) back to sender

-> sender re-transmits pkt on receipt of NAK

  • Rdt 2.1: sender, handles garbled ACK/NAKs (2020.10.15)
  • Rdt 3.0 ….
  • finally => 活下來的其中一個 protocol -> TCP

What does transport service supply?

Send side: breaks app layer messages into segments and passes to network layer

Receive side: reassembles segments into messages and passes to app layer

Attributes

  • No delay guarantee (時間不保證)
  • No bandwidth guarantee (不保證用多少頻寬傳送)
  • 一定送到

Transport layer vs. Network layer

Transport layer => IP address + port (將封包傳送到某台機器的某的port)

Network layer => IP address (將封包傳送到某台機器)

TCP (Connection-oriented transport)

TCP service [RFC793]

TCP segment structure

TCP seq. #s and ACKs

TCP Connection Management

TCP Congestion control

TCP service [RFC793]

  • point-to-point: one sender, one receiver
  • reliable: 可靠的,封包不會掉 (connection-oriented)
  • in-order: 封包傳送有序

=> if loss 封包 => acknowledgements + re-transmissions

Re-transmissions are triggered by:

1. timeout events

2. duplicate ACKs

  • Byte stream: 以 byte 為單位,每一組 segment 都有 sequence number (my guess, not sure),no message boundaries
  • sender & receiver buffers: 在沒收到 ACK 之前的封包通通要 buffer
  • MSS: Max segment size
  • flow control (流量控制): sender won’t overwhelm receiver

receiver 控制 sender 的傳速

  • congestion control (壅塞控制): when network congested, senders slow down

=> TCP 判斷方式:if loss packets, congestion => slow down

  • it doesn’t provide: timing (不保證何時會到), 不保證傳輸擁有最小頻寬

TCP segment structure

https://drive.google.com/drive/folders/1qGWvoR6cvZgb_AfKCPQXvk9mEOQQVjlU

Sequence number

  • Sequence number = application data 第一個 byte 的 Sequence number
  • So next sequence number = current sequence number + data length

Acknowledgement number

ACK N = ANK N-1 以前的 byte 都收到了

Receive window

For flow control (receiver tells sender)

If == 0, 即使連線已經建好也不能傳送 data

Flag

  • U (URG) = urgent data (通常不使用)
  • P (PSH) = 強制 sender buffer 裡的 data 全都送到 receiver (generally not used)
  • R (RST, reset) — 為1表示出現嚴重差錯,可能需要重新建立TCP連接。還可以用於拒絕連接請求。
  • S (SYN) — 為1表示這個封包是要建連線的封包,用於建立連接和使順序號同步
  • F (FIN, finish) — 為1表示傳送方沒有資料要傳輸了,代表連線即將結束。

TCP seq. #s and ACKs

https://drive.google.com/drive/folders/1qGWvoR6cvZgb_AfKCPQXvk9mEOQQVjlU

ACK 79 (from Host A) = 希望收到 Seq 79 from Host B = Seq 78 以前的 bytes 已收到

ACK 43 (from Host B) = 希望收到 ACK 43 (?可能打錯)from Host A = Seq 42 以前的 bytes已收到

Out-of-order: 例如 Seq 70(後送) 比 Seq 53 (先送) 先到 receiver => How to handle in receiver’s buffer? “Depend on implementor”

TCP Connection Management

在送 data 之前,sender 和 receiver 要先建立連線

  • Initialize TCP variables: seq. number, buffers, flow control info

Three way handshake

Step 1: client host sends TCP SYN segment to server

=> specifies initial client seq. # (no data sent)

Step 2: server host receives SYN and replies with SYN + ACK segment

=> server allocates buffers

=> specifies initial server seq. #

Step 3: client receives SYN + ACK and replies with ACK segment which may contain data

Closing a connection (When data transmission ends)

clientSocket.close();

TCP Congestion control

一開始先一直增加傳送速度,直到 loss bytes

Three mechanisms:

AIMD

Slow start

Conservation after timeout events

AIMD (additive increase, multiplicative decrease)

每一個 RTT 加一個 MSS 的大小在 Congestion Window (線性)

https://drive.google.com/drive/folders/1qGWvoR6cvZgb_AfKCPQXvk9mEOQQVjlU

CongWin = Congestion Window

Slow start (但是指數加速)

傳送速度指數上升

Summary

  • 當 CongWin 低於閾值 (Threshold) 時,sender 是 slow start phase

=> 速度以指數上升

  • 當 CongWin 高於閾值 (Threshold) 時,sender 是 congestion-avoidance phase

=> 速度以線性上升

  • 當收到 triple duplicate ACK

=> 閾值 set to CongWin/2, CongWin set to 閾值

  • 當發生 timeout

=> 閾值 set to CongWin/2, CongWin set to 1 MSS

UDP

UDP service [RFC768]

UDP checksum

Socket programming with UDP

UDP service [RFC768]

  • Best effort (可能會 lost packets)
  • Unreliable data transfer between sending and receiving process
  • Unordered
  • It doesn’t provide: connection setup, reliability, flow control, congestion control, timing (不保證何時會到), 不保證傳輸擁有最小頻寬, bandwidth guarantee
  • No handshaking
  • 每個封包獨立傳送 (So receive out of order or lost)
  • Often used for streaming multimedia apps
1. Loss tolerant -> e.p. 聽音樂掉一封包無感覺2. Rate sensitive

UDP checksum

Goal: detect errors in transmitted segment (例如1變0,0變1)

if computed checksum equals received checksum field value=> No errors detected (But not equal to no error)else=> error detected

Socket programming with UDP

  • Packet based I/O
  • Class (Java): DatagramSocket, DatagramPacket

Reference

[1] 黃能富教授 — 計算機網路概論

[2] 黃能富教授計算機網路概論講義 (私人連結)

--

--

R4 Cheng
R4 Cheng

Written by R4 Cheng

「0」が過去で「1」が未来「今」は何処にもない

No responses yet