第五章.運輸層
運輸層的概述
運輸層屬于面向通信部分的最高層,同時也是用戶功能中的最低層。從運輸層的角度看,通信的真正端點并不是主機而是主機中進程
運輸層有一個很重要的功能, 復用 和 分用 。復用是指發(fā)送方不同的應用進程都可以使用同一個運輸層協(xié)議傳送數(shù)據(jù),分用指接收方的運輸層在剝?nèi)笪牡氖撞亢竽軌虬堰@些數(shù)據(jù)正確交付目的應用進程。
運輸層兩大通信協(xié)議:TCP(傳輸控制協(xié)議) 和 UDP(用戶數(shù)據(jù)報協(xié)議) 。
端口
使用協(xié)議端口號可以達到分用的目的,注意的是,這種在協(xié)議棧層間的抽象的協(xié)議端口是 軟件端口 ,和路由器或交換機上的硬件端口是完全不同概念。硬件端口是不同硬件設備進行交互的接口,而軟件端口是應用層的各種協(xié)議進程與運輸實體進行層間交互的一種地址。
16位端口可允許65525個不同的端口,端口分為兩大類,服務器端使用的端口號(0-49151)和客戶端使用的端口號(49152-65535)。其中服務器端使用的端口號又分為兩種:
- 熟知端口號:0-1023,一般給常用軟件分配,讓用戶都知道。
- 登記端口號,1024-49151,為沒有熟知端口號的應用程序使用,需要在IANA登記,以防重復。
UDP
UDP只在IP的數(shù)據(jù)報服務之上增加了很少一點功能,就是復用和分用的功能以及差錯檢測。UDP是無連接,盡最大努力交付,面向報文的(對應用層交下來的報文,添加首部后直接發(fā)送)。UDP沒有擁堵控制,首部開銷很小,只有8個字節(jié),由于UDP沒有擁堵控制,如果很多主機同時發(fā)送高速率的實時視頻流時,網(wǎng)絡就容易發(fā)生擁堵。
TCP
TCP是面向連接,點對點通信,可靠交付,全雙工通信的,面向字節(jié)流。
可靠傳輸?shù)墓ぷ髟?/h3>
先從最簡單的停止等待協(xié)議說起
停止等待協(xié)議
每發(fā)送完一個分組就停止發(fā)送,等待對方的確認,在收到確認后再發(fā)送下一個分組。其間如果出現(xiàn)差錯(超過一段時間后沒有收到確認),就 超時重傳 。通過這樣的機制(也叫自動重傳請求ARQ(Automatic Repeat reQuest)),就可以實現(xiàn)可靠通信。
確認丟失和確認遲到
接收方收到重傳分組,需要做兩件事,丟棄這個分組,向發(fā)送方發(fā)送確認,因為A是收不到確認才發(fā)了重傳分組。
發(fā)送方收到遲到的確認,丟棄即可,如果發(fā)送方始終收不到確認,說明線路太差。
信道利用率 U = Td/(Td+RTT+Ta)
- Td:發(fā)送方發(fā)送分組所需要的時間
- RTT往返時間
- Ta:接收方發(fā)送確認所需時間
停止等待的的信道利用率是很低的。
連續(xù)ARQ協(xié)議
發(fā)送方維持一個發(fā)送窗口,每收到一個確認就可以把發(fā)送窗口向前滑動。接收方一般采用累計確認的方式,就是在收到幾個分組后,對按序到達的最后一個分組發(fā)送確認。
TCP可靠傳輸?shù)膶崿F(xiàn)
TCP的滑動窗口是以 字節(jié) 為單位的,流程跟連續(xù)ARQ協(xié)議很像,窗口的大小是可以改變的。另外TCP發(fā)送方和接收方都有緩存,發(fā)送緩存包含發(fā)送窗口和應用程序傳送給TCP準備發(fā)送的數(shù)據(jù)。接收緩存存放按序到達,但未被應用程序讀取的數(shù)據(jù)和未按序到達的數(shù)據(jù)。對于未按序到達的數(shù)據(jù),TCP一般臨時存放在接收窗口中,等到缺少的字節(jié)收到后再按序交付給應用程序。
選擇確認SACK
對于收到的報文段無差錯,只是未按序號,中間還缺少一些序號的數(shù)據(jù),只要求發(fā)送方重傳缺少的數(shù)據(jù),這時候選擇確認SACK是一種可行的處理方法。
但是由于TCP首部沒有哪個字段可以存放字節(jié)塊的邊界信息,而首部長度限制,所以一般還是重傳所有未被確認的數(shù)據(jù)塊。
TCP的流量控制
所謂流量控制就是讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來得及接收。
接收方收到了分組后,可以在確認報文中設置rwnd來要求發(fā)送方窗口大小調整,以此來控制流量。但是如果發(fā)送方收到了零窗口通知后,接收方要增大窗口發(fā)送一個增大窗口報文,但是這個報文丟失會造成死鎖,因此TCP為每一個連接設有一個持續(xù)計時器。
只要TCP連接的一方收到對方的零窗口通知,就啟動持續(xù)計時器,如果計時器的時間到期,就發(fā)送一個 零窗口探測報文段(僅有1字節(jié)的數(shù)據(jù)) ,接收方在確認這個探測報文時給出現(xiàn)在的窗口值,如果還是零,就重新設置持續(xù)計時器,不是零就打破死鎖。
TCP的擁堵控制
所謂擁堵控制就是防止過多的數(shù)據(jù)注入到網(wǎng)絡中,這樣可以使網(wǎng)絡中的路由器或鏈路不致過載。擁堵控制是防止網(wǎng)絡線路中過多的數(shù)據(jù)堵塞,而流量控制是為了讓接收端來得即接收數(shù)據(jù),當然網(wǎng)絡中有很多主機在發(fā)送數(shù)據(jù)時,擁堵控制就顯得特別重要。
擁堵控制的四種算法: 慢開始 ,擁堵避免, 快重傳 , 快恢復 。
相關名詞:
- 擁堵窗口cwnd
- 接收窗口rwnd
- 慢開始門限ssthresh
慢開始和擁堵避免
發(fā)送方維持一個擁堵窗口cwnd的狀態(tài)變量,發(fā)送窗口等于min(擁堵窗口,接收窗口),當網(wǎng)絡發(fā)送擁堵時,就減小擁堵窗口,反之增大。那么發(fā)送方如何知道網(wǎng)絡發(fā)生了擁堵?我們知道,當網(wǎng)絡發(fā)生擁堵時,路由器就會丟棄分組,因此當發(fā)送方?jīng)]有按時收到應當?shù)竭_的 確認報文 ,就可以認為網(wǎng)絡發(fā)生了擁堵。
慢開始:當主機開始發(fā)送數(shù)據(jù)時,應當先試探性地往網(wǎng)絡中發(fā)送數(shù)據(jù)。通常一開始先把擁堵窗口cwnd設置為一個最大報文段MSS的數(shù)值,每接收到 一個確認報文 后,就可以把cwnd 增加至多一個 MSS的數(shù)值,也就是翻倍增大cwnd大小。
為了防止擁堵窗口cwnd增長過大引起網(wǎng)絡擁堵,還需要設置一個慢開始門限ssthresh狀態(tài)變量。
- 當cwnd<ssthresh,使用慢開始算法
- 當cwnd>ssthresh,停止使用慢開始算法而改用擁堵避免算法
- 當cwnd=ssthresh,兩者皆可
擁堵避免 就是cwnd每經(jīng)過一個往返時間RRT就把發(fā)送方的擁堵窗口cwnd增加1,而不是加倍,即擁堵避免是線性增長,慢開始是指數(shù)增長。
乘法減小:無論在慢開始階段還是擁堵避免階段,只要出現(xiàn)超時(即可能出現(xiàn)網(wǎng)絡擁堵),就把慢開始門限值ssthresh 設置為當前cwnd的減半,并且cwnd設置為1
加法增大:在執(zhí)行 擁堵避免 算法后,使 擁堵窗口 緩慢增大
乘法減小和加法增大合起來常稱為AIMD算法。
注意的是,上述兩種算法并不能完全避免擁堵,只是使網(wǎng)絡不容易出現(xiàn)擁堵。
快重傳和快恢復
- 快重傳:快重傳算法首先要求接收方每收到一個失序的報文段后就立即發(fā)出重復確認。例如沒有收到M3,卻收到了M4,以后收到M5,M6等都立刻發(fā)出確認M2,讓發(fā)送方及時知道M3丟失??熘貍魉惴ㄒ?guī)定發(fā)送方只要一連續(xù)收到 三個重復確認 就應當立即重傳對方尚未收到的報文段,而不必繼續(xù)等待為M3設置的重傳計時器到期,這樣整個網(wǎng)絡的吞吐量得到了很大的提升。
- 快恢復:當發(fā)送方連續(xù)收到三個重復確認,把ssthresh和新的cwnd設置為當前cwnd的一半,然后開始執(zhí)行擁堵避免算法(加法增大)。
在采用快恢復算法時,慢開始算法只是在TCP連接建立時和網(wǎng)絡出現(xiàn)超時時才使用。
注意的是,發(fā)送方的發(fā)送窗口一定不能超過接收方在TCP首部中給出的接收窗口rwnd,即發(fā)送窗口上限 = min[rwnd,cwnd]
TCP連接管理
相關TCP報文首部:
- SYN:在建立連接時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文段。如果對方同意建立連接,在響應報文段SYN=1和ACK=1
- seq:序號,表明該報文段第一個數(shù)據(jù)字節(jié)的序號
- ACK:僅當ACK=1時確認號字段才有效。
- ack:確認號,期望收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)的序號
- FIN:用來釋放一個連接。FIN=1,表明此報文段的發(fā)送方的數(shù)據(jù)已發(fā)送完畢,并要求釋放連接。
TCP連接的建立

關于最后一次確認的作用:
假定A第一次建立連接發(fā)送的請求報文延遲了,A重發(fā)一次建立連接的請求,于是B收到了兩個連接建立請求,錯誤地打開兩個連接。
TCP連接的釋放

TCP連接釋放是雙方都可以主動發(fā)起釋放連接請求。
關于最后主動關閉連接方需要進入TIME-WAIT狀態(tài)等待2MSL時間
為了確保A最后發(fā)送的ACK報文能夠到達B。如果A在TIME-WAIT狀態(tài)下收到了B的FIN+ACK報文的重傳,就可以重傳一次最后的ACK報文。因此TCP連接中被動關閉連接的一方往往是先關閉連接的一方。
另外TCP連接中,除了時間等待計時器外,還有一個保活計時器,其作用是為了防止客戶端的主機出現(xiàn)故障,而長期占用服務器的資源。
第六章.應用層
DNS域名系統(tǒng)
域名系統(tǒng)DNS(Domain Name System),從域名解析出IP地址。因特網(wǎng)的域名系統(tǒng)DNS被設計成為一個聯(lián)機分布式數(shù)據(jù)庫系統(tǒng),使大多數(shù)名字都在本地進行解析,僅少量解析需要在因特網(wǎng)上通信。
當需要解析主機名的時候,主機調用解析程序,用UDP用戶數(shù)據(jù)報方式發(fā)給本地域名服務器,如果本地域名服務器無法解析域名,就向其他域名服務器發(fā)出查詢請求。
域名結構
例子:mail.cctv.com,從左往右,mail是三級域名,cctv是二級域名,com是頂級域名