[計網]傳送層

3.1

章節

探討

如何辨識目的地

TCP

UDP

非transport layer所處理的

3.2 Multiplexing , Demutiplxing

Multiplexing與Demutiplxing

透過IP, port辨識目的地,UDP,只需要ip與port即可發送訊息, 保存在transport layer的header

TCP

connection oriented demux有四個欄位, 多出source IP, dest. IP用於辨識來源host

Welcome socket, 可以透過同一個process處理Port監聽

3.3 UDP

Bare Bones,捨棄無法接受的封包,不做handshaking, 因此速度快,可容忍資料遺失應用適合,檢查資料錯誤(checksum), length

使用udp到協定

3.3.2 Checksum

16 bit,將資料分成多份16bit之後相加, 溢位後加到最小位bit上。

example,傳輸資料為

1011 0100 1010 1111 1001 0000 1010 0000

step 1

將資料以多個16 bit 分組,之後相加如下。

   1011 0100 1010 1111
   1001 0000 1010 0000
=========================
 1 0100 0101 0100 1111

可以發現結果多出一個bit,將它加到最小位得到

 0100 0101 0101 0000

step 2

將總和取一補數,得出checksum

~(0100 0101 0101 0000)
=======================
  1011 1010 1010 1111

setp 3 驗證

checksum與數值相加應該全部都是1才算正確, 以下示範驗證。

 0100 0101 0101 0000
 1011 1010 1010 1111
=====================
 1111 1111 1111 1111

可以看到得出的結果全部都是1

不過Checksum依然有缺陷,如果任意兩個不同的bit在不同的16 bit word中反轉, 1011 0100 1010 11101001 0000 1010 0001(顛倒了最小位)的總和與 原本正確的相同,這時就會被當成正確的傳輸。

3.4 Reliable Data Transfer

下層沒有可靠的機制,設計機制讓資料可以可靠傳輸。 接收端檢查,若錯誤則重新傳送。 採用FSM

不可靠的原因

假設傳送不會發生錯誤與遺失

如果

Rdt2 sender

  1. 產生封包送封包
  2. 等nak,ack 決定要不要重送
  3. 收到ack回到原始狀態

Rdt2 receiver

  1. 如果正確會傳ack
  2. 否則回傳nak

Rdt2依然不一定穩定,如ack,nak不一定正確

Rdt2.1 sender

ACK,NAK也可能出現問題,以及重複封包序列。 加入錯誤檢查碼,並且回傳ack或nak。

如果ack封包錯誤則當成nak處理,不過需要透過編號判斷封包是否正確, stop and wait,確定封包正確再切換編號,處理兩個編號的手法相同, receiver ack與nak要加上checksum

corrupt()錯誤封包

Rdt2.2

只發送ack,並且nak改成不正確序號的ack,之後接收者只需根據正不正確決定序號

Rdt3.0

考慮遺失資料,超時,可以透過發送端決定超時,為了避免重複接收使用序號, 如果封包出錯則等到timeout,而timeout都會重新發送封包,收到時將計時器停下, 接收端不需要修改。

尚未接收到封包無法得知封包是否丟失,透過超時計時器處理, 不過可能因此重送,透過序號判斷是否為當前傳送的Data。

不過性能不佳,採用pipelining可能缺少足夠的編號,並且需要buffer,

處理相關問題的演算法

3.4.3 go-back-n

不需要buffer, cumulative ACKs回傳最大收到編號

3.4.4 SR (Select Repeat)

接受者與發送者都有base index,設封包發送數量為N

最差的情況可能發送者的base為0,但接收者為N

3.5 TCP

In-order, pipelining

Flow control透過window size調整, Receive windows

congestion control: 擁塞控制可以限制TCP發送速度

3.6. congestion control

Congestion產生原因

可能導致

只考慮網路問題

無限queue,不會發生重傳

考慮有限

重傳時可以預測一定有queue位置, 都是packet lost才重送的話,可以使接收速率為R/2

交叉

3.7 congestion control

進入

  1. 緩慢增加速度(線性)AIMD,直到壅塞之後減半速度,再次嘗試加速壅塞=》透過 window size進行處理,除2
  2. Slow start: 每次乘2成,如果壅塞嚴重則退回1 MSS

TCP

透過擁塞時,除2產生的值作為ssthresh,並且AIMD

註解:

TCP Rene

TCP Tahoe

補充:Duplicate ack實際上可能是底下routing路徑修改

3.7.1 網路公平性

有效的網路條件

使用者加入:趨近公平的速度

TCP不公平

  1. 多個TCP連線在同主機,可能佔用多個頻寬
  2. 網路上可能有UDP封包,而TCP被降速

Network