傳輸層
傳輸層(Transport Layer)是ISO OSI協(xié)議的第四層協(xié)議,實現(xiàn)端到端的數(shù)據(jù)傳輸询一。該層是兩臺計算機經(jīng)過網(wǎng)絡(luò)進行數(shù)據(jù)通信時,第一個端到端的層次,具有緩沖作用朽褪。當網(wǎng)絡(luò)層服務(wù)質(zhì)量不能滿足要求時,它將服務(wù)加以提高无虚,以滿足高層的要求缔赠;當網(wǎng)絡(luò)層服務(wù)質(zhì)量較好時,它只用很少的工作友题。傳輸層還可進行復(fù)用嗤堰,即在一個網(wǎng)絡(luò)連接上創(chuàng)建多個邏輯連接。
傳輸層在終端用戶之間提供透明的數(shù)據(jù)傳輸度宦,向上層提供可靠的數(shù)據(jù)傳輸服務(wù)踢匣。傳輸層在給定的鏈路上通過流量控、分段/重組和差錯控制斗埂。一些協(xié)議是面向鏈接的符糊。這就意味著傳輸層能保持對分段的跟蹤,并且重傳那些失敗的分段呛凶。
1.傳輸層作用
傳輸層實現(xiàn)應(yīng)用進程間的端到端(end-to-end)通信
向應(yīng)用層提供通信服務(wù)
2.多路分解與復(fù)用
多路復(fù)用:所有應(yīng)用進程的數(shù)據(jù)通過傳輸層傳輸?shù)絀P層男娄;
多路分解:傳輸層收到的數(shù)據(jù)交付給相應(yīng)的應(yīng)用進程。
3.用戶數(shù)據(jù)報協(xié)議UDP
端到端的漾稀、盡力而為的模闲、無連接的數(shù)據(jù)報傳輸服務(wù) 1.無連接的 2.盡最大努力交付,即不保證可靠交付 3.面向報文的(在IP的功能上簡單擴展了端到端) 4.沒有擁塞控制 5.支持一對一崭捍、一對多尸折、多對一和多對多的交互通信(需要組播的通信都是建立在UDP之上)
4.傳輸控制協(xié)議TCP
端到端的、可靠的殷蛇、面向連接的字節(jié)流服務(wù) a).面向連接:先建立邏輯連接实夹,進行雙向數(shù)據(jù)流傳輸橄浓,通信結(jié)束后撤銷連接 b).面向字節(jié)流 c).點對點的全雙工通信 d).可靠傳輸:對一個連接上傳輸?shù)拿總€字節(jié)編號,通過接收確認和重傳來保證可靠傳輸 c).流量控制:防止發(fā)送方發(fā)出的數(shù)據(jù)超出接收方的接收能力
多路復(fù)用:源亮航、目的端口 連接管理:序號荸实、確認號、SYN缴淋、FIN 可靠傳輸:序號准给、確認號 流量控制:接收窗口 擁塞控制:未在TCP首部中體現(xiàn)(序號、確認號重抖、接收窗口)
4.1.連接管理
每條TCP連接是一對點到點的字節(jié)流
每條TCP連接者兩個端點露氮,即套接字(sokect)={IP : port}
每條TCP連接由兩個端點唯一標識,TCP連接={socket1, socket2} = {{IP1 : port1}, {IP2 : port2}}
TCP連接有3個階段:連接建立钟沛、數(shù)據(jù)傳輸畔规、連接釋放
1)TCP連接建立的目的
①使通信雙方確知對方的存在 ? ②雙方確定自己的初始序列號,并通知對方 ? ③允許雙方協(xié)商一些參數(shù)(最大報文長度讹剔、窗口大小等) ? ④對傳輸實體資源進行分配
2)TCP連接建立的方式
采用客戶端服務(wù)器方式(C/S)油讯,主動發(fā)起連接建立的應(yīng)用進程叫做客戶端,被動等待連接建立的叫服務(wù)器端延欠。
3)連接建立(三次握手)
①服務(wù)器進程B被動打開連接陌兑,進入LISTEN(收聽)狀態(tài),等待客戶端發(fā)出請求 ? ②客戶進程A主動打開連接由捎,向B發(fā)送連接請求報文段(報文段不挾帶數(shù)據(jù))兔综,SYN=1,序號=x狞玛,進入SYN-SENT(同步已發(fā)送)狀態(tài) ? ③服務(wù)器進程B收到請求后软驰,向A發(fā)送確認報文段(報文段不挾帶數(shù)據(jù)),SYN=1心肪,ACK=1锭亏,確認號=x+1,序號=y硬鞍,進入SYN-RCVD(同步收到)狀態(tài) ? ④客戶進程A收到確認后慧瘤,向B發(fā)送確認報文段(報文段可以攜帶數(shù)據(jù),不攜帶數(shù)據(jù)時不消耗序號固该,下一個序號依然是x+1)锅减,ACK=1,確認號=y+1伐坏,序號=x+1怔匣,進入ESTABLISHED(已建立連接)狀態(tài),B收到確認后桦沉,也進入ESTABLISHED狀態(tài)
為什么A需要向B發(fā)送最后一個確認報文段:為了防止“已失效的連接請求報文段”突然又傳到B發(fā)生錯誤每瞒,以至于B一直等待A發(fā)送數(shù)據(jù)金闽,B的資源被浪費。
4)連接釋放(四次揮手)
①A剿骨,B都處于ESTABLISHED狀態(tài)呐矾; ? ②客戶進程A主動關(guān)閉連接,向B發(fā)送連接釋放請求報文段(報文段不挾帶數(shù)據(jù))懦砂,F(xiàn)IN=1,序列號=u组橄,進入FIN-WAIT-1(終止等待1)狀態(tài)荞膘; ? ③B收到A的連接釋放報文段后,應(yīng)答確認玉工,ACK=1羽资,確認號=u+1,序號=v遵班,進入CLOSE-WAIT (關(guān)閉等待)狀態(tài)屠升,B仍然可以向A發(fā)送數(shù)據(jù),A進入FIN-WAIT-2(終止等待2)狀態(tài)狭郑; ? ④若B已經(jīng)沒有向A的數(shù)據(jù)腹暖,其應(yīng)用進程通知TCP連接釋放,B向A發(fā)送連接釋放報文段翰萨,F(xiàn)IN=1脏答,ACK=1,確認號=u+1亩鬼,序號=w殖告,進入LAST-ACK(最后確認)狀態(tài); ? ⑤A收到B的鏈接釋放報文段后雳锋,應(yīng)答確認黄绩,ACK=1,確認號=w+1玷过,序號=u+1爽丹,進入TIME-TIME-WAIT(時間等待)狀態(tài),B收到A的確認后冶匹,進入CLOSED狀態(tài)
A必須經(jīng)過時間等待計時器設(shè)置的時間2MSL(默認2分鐘)后习劫,進入CLOSED狀態(tài):確保A發(fā)送的最后一個ACK報文段能夠到達B;防止“已失效的連接請求報文段”出現(xiàn)在本連接中嚼隘。
4.2可靠傳輸
發(fā)送方的TCP:維護一個發(fā)送緩沖區(qū)
維護3個指針:LastByteAcked诽里、LastByteSent、LastByteWritten
發(fā)送窗口=min(通知窗口飞蛹,擁塞窗口)
累積確認(Cumulative ACK) :對按序到達的最后一個報文段進行確認
選擇確認(Selective ACK) :確認接收到的不連續(xù)的數(shù)據(jù)塊的邊界(使用首部的SACK選項谤狡,不影響確認號字段的使用)
4.3.流量控制
目的:為了防止發(fā)送方給慢接收方發(fā)數(shù)據(jù)造成接受崩潰灸眼,緩沖區(qū)溢出 原理:接收方通知發(fā)送方自己的接受窗口大小,發(fā)送方的發(fā)送窗口≤接收方的接受窗口
問題:
B向A發(fā)送了零窗口報文段后墓懂,B的接受緩存有了一些存儲空間焰宣,于是B向A發(fā)送了rwnd=400的報文段,然而報文段在傳送過程中丟失捕仔,這樣A一直等待B發(fā)送的非零窗口通知匕积,B一直等待A發(fā)送數(shù)據(jù),從而形成死鎖局面榜跌。
解決:
TCP為每一個連接設(shè)置一個持續(xù)計時器闪唆,只要TCP鏈接一方收到零窗口通知,就啟動持續(xù)計時器钓葫,計時器到期悄蕾,發(fā)送零窗口探測報文段,而對方就在確認這個探測報文段時給出現(xiàn)在的窗口值础浮,①如果窗口仍然是零帆调,那么重新設(shè)置持續(xù)計時器;②否則死鎖的僵局就可以打破豆同。
4.自適應(yīng)重傳
1)超時重傳
報文段的往返時間:RTT 加權(quán)平均往返時間:RTTS RTT的偏差加權(quán)平均值:RTTD 超時重傳時間:RTO RTTS = (1 - α) * RTTS + α * 新的RTT樣本值 (α一般為1/8) RTTD = (1 - β) * RTTD + β * | RTTS - 新的RTT樣本值 | (β一般為1/4) RTO = RTTS + 4 * RTTD
Karn算法: ①每次超時重傳一個報文段時番刊,停止計算新RTT樣本值 ②每次超時重傳一個報文段時,就把超時重傳時間RTO增大y倍(一般為2倍) ③當不發(fā)生報文段重傳時影锈,才計算RTTS和超時重傳時間RTO
2)快速重傳
原因:超時重傳作為TCP最基本的重傳機制撵枢,效率較低。
超時的粗粒度實現(xiàn)方法導(dǎo)致連接在等待一個定時器超時時精居,很長一段時間連接無效锄禽。
基本思想: ①接收方:當報文段到達,立刻回復(fù)ACK靴姿,即使該序號已被確認過 ②發(fā)送方:收到一個重復(fù)ACK(同一個確認的再一次重傳稱為重復(fù)確認)沃但,就知道接收方必定收到亂序到達的報文段,表明其前面的分組可能丟失佛吓。收到3個重復(fù)ACK時宵晚,立刻觸發(fā)重傳。
5.擁塞控制
1)窗口大小
MaxWindow = min (cwnd, AdvertisedWindow) 擁塞窗口cwnd (Congestion Windows):擁塞控制算法決定维雇,可以同時發(fā)出的最大字節(jié)數(shù)以防止造成網(wǎng)絡(luò)擁塞 通知窗口 (AdvertisedWindow):接收方?jīng)Q定淤刃,可以同時發(fā)出的最大字節(jié)數(shù)以防止超出接收方的接收能力
2)擁塞控制算法
①慢啟動 把初始擁塞窗口 cwnd 設(shè)置為不超過2至4個SMSS(最大報文段長度),在每收到一個對新的報文段的確認后吱型,把cwnd增加1個 SMSS 的數(shù)值數(shù)(每經(jīng)過一個傳輸輪次逸贾,cwnd就加倍) 設(shè)置一個慢開始門限ssthresh 當cwnd < ssthresh時,使用慢開始算法 當cwnd ≥ ssthresh時,使用擁塞避免算法
②擁塞避免(加法增大):每經(jīng)過一個往返時間RTT把發(fā)送方的cwnd加1铝侵,使得cwnd慢性增加 ③快重傳(乘法減凶粕恕):收到3個重復(fù)ACK立即觸發(fā)重傳 ④快恢復(fù)(在快重傳之后)
ssthresh減小為當前cwnd的一半:ssthresh = cwnd / 2
新?lián)砣翱?cwnd = 新的 ssthresh
執(zhí)行擁塞避免 (AIMD),使cwnd緩慢線性增大