王道计算机网络 传输层整理 超详细版
傳輸層是主機才有的層次。
傳輸層的功能
1、傳輸層提供進程和進程之間的邏輯通信。(網絡層提供主機之間的通信)
邏輯通信:傳輸層之間的通信好像是沿著水平方向傳送數據,但事實上這兩個傳輸層之間并沒有一條水平方向的物理連接。
2、復用和分用。復用是指發送方不同的應用進程都可以使用同一個傳輸層協議傳送數據;分用是指接收方的傳輸層在剝去報文的首部后能夠把這些數據正確交付到目的應用進程。
另一種說法:
復用:應用層所有的應用進程都可以通過傳輸層再傳輸到網絡層。
分用:傳輸層從網絡層收到數據后交付指明的應用進程。
3、傳輸層對收到的報文進行差錯檢測(首部和數據部分)。【網絡層只檢查IP數據報的首部,不檢驗數據部分是否出錯】。
4、提供兩種不同的傳輸協議,即面向連接的TCP和無連接的UDP。【網絡層無法同時實現兩種協議】。
面向連接服務與無連接服務
面向連接的傳輸控制協議TCP
傳送數據之間必須建立連接,數據傳送結束后要釋放連接。不提供廣播或多播服務。由于TCP要提供可靠的面向連接的傳輸服務,因此不可避免增加了許多開銷:確認、流量控制、計時器及連接管理等。
可靠,面向連接,時延大,適用于大文件。
無連接的用戶數據報協議UDP
傳送數據之前不需要建立連接,收到UDP報文后也不需要給出任何確認。
不可靠,無連接,時延小,適用于小文件。
傳輸層的尋址與端口
端口:傳輸層的服務訪問點(SAP),標識主機中的應用進程。
數據鏈路層的SAP是MAC地址,網絡層的SAP是IP地址。
端口號只有本地意義,在因特網中不同計算機的相同端口是沒有聯系的。
端口號長度為16bit,能標識65536個不同的端口號。
常見的應用程序與對應的端口號
在網絡中采用發送方和接收方的套接字組合來識別端點,套接字唯一標識了網絡中的一個主機和它上面的一個進程。
套接字 Socket = (主機IP地址,端口號)
UDP協議
UDP只在IP數據報服務之上增加了很少功能,即復用分用和差錯檢測功能。
UDP的主要特點:
1、UDP是無連接的,減少開銷和發送數據之前的時延。
2、UDP使用最大努力交付,即不保證可靠交付。
3、UDP是面向報文的,適合一次性傳輸少量數據的網絡應用。
? 應用層給UDP多長的報文,UDP就照樣發送,即一次發一個完整報文。
4、UDP無擁塞控制,適合很多實時應用。
5、UDP首部開銷小,8B,TCP是20B。
UDP首部格式
分用時,如果找不到對應的目的端口號,就丟棄報文,并給發送方發送ICMP“端口不可達”的差錯報告報文。
UDP校驗
在計算校驗和時,要在UDP數據報之前增加12B的偽首部,偽首部并不是UDP的真正首部。只是在計算校驗和時,臨時添加在UDP數據報的前面,得到一個臨時的UDP數據報。
17:封裝UDP報文的IP數據報首部協議字段是17。
UDP長度:UDP首部8B + 數據部分長度(不包括偽首部)。
在發送端:
1、添上偽首部。
2、全0填充校驗和字段。
3、全0填充數據部分。
4、偽首部 + 首部 + 數據部分 采用二進制反碼求和。
5、把和求反碼填入校驗和字段。
6、去掉偽首部,發送。
在接收端:
1、添上偽首部。
2、偽首部 + 首部 + 數據部分 采用二進制反碼求和。
3、結果全為1則無差錯,否則丟棄數據報/交給應用層附上出錯的警告。
TCP協議的特點和TCP報文段
TCP協議特點
1、TCP是面向連接(虛連接)的傳輸層協議。
2、每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的。
3、TCP提供可靠交付的服務,無差錯、不丟失、不重復、按序到達。
4、TCP提供全雙工通信。允許通信雙方的應用進程在任何時候都能發送數據,為此鏈段設有發送緩存和接收緩存。
? 發送緩存:準備發送的數據 & 已發送但尚未收到確認的數據。
? 接收緩存:按序到達但尚未被接受應用程序讀取的數據 & 不按序到達的數據。
5、TCP面向字節流:TCP把應用程序交下來的數據看成僅僅是一連串的無結構的字節流。
TCP報文段
序號:在一個TCP連接中傳送的字節流中的每一個字節都按順序編號,本字段表示本報文段所發送數據的第一個字節的序號。
確認號:期望收到對方下一個報文段的第一個數據字節的序號。若確認號為 N,則證明到序號 N - 1 為止的所有數據都已正確收到。
數據偏移(首部長度):TCP報文段的數據起始處距離TCP報文段的起始處有多遠,以4B為單位。
窗口:指的是發送本報文段的一方的接收窗口,即現在允許對方發送的數據量。
檢驗和:檢驗首部 + 數據,檢驗時要加上12B偽首部,第四個字段為6。
緊急指針:URG = 1時才有意義,指出本報文段中緊急數據的字節數。
選項:最大報文段長度MSS、窗口擴大、時間戳、選擇確認 ……
六個控制位:
緊急位 URG:URG = 1時,標明此報文段中有緊急數據,是高優先級的數據,應盡快傳送,不用在緩存里排隊,配合緊急指針字段使用。
確認位 ACK:ACK = 1時確認號有效,在連接建立后所有傳送的報文段都必須把ACK置為1。
推送位 PSH:PSH = 1時,接收方盡快交付接收應用進程,不再等到緩存填滿再向上交付。
復位 RST:RST = 1時,表明TCP連接中出現嚴重差錯,必須釋放連接,然后再重新建立傳輸連接。
同步位 SYN:SYN = 1時,表明是一個連接請求/連接接受報文。
終止位 FIN:FIN = 1時,表明此報文段發送方數據已發完,要求釋放連接。
TCP連接管理
TCP連接傳輸三個階段:
連接建立 — 數據傳送 — 連接釋放
TCP的連接建立
1、客戶端發送連接請求報文段,無應用層數據。
? SYN = 1,seq = x(隨機)
2、服務器端為該TCP連接分配緩存和變量,并向客戶端返回確認報文段,允許連接,無應用層數據。
? SYN = 1,ACK = 1,seq = y(隨機),ack = x + 1
3、客戶端為該TCP連接分配緩存和變量,并向服務器返回確認的確認,可以攜帶數據。
? SYN = 0,ACK = 1,seq = x + 1,ack = y + 1
SYN洪泛攻擊
TCP的連接釋放
參與一條TCP連接的兩個進程中的任何一個都能終止該連接,連接結束后,主機中的緩存和變量將被釋放。
1、客戶端發送連接釋放報文段,停止發送數據,主動關閉TCP連接。
? FIN = 1,seq = u
2、服務器端回送一個確認報文段,客戶到服務器這個方向的連接就釋放了 —— 半關閉狀態。
? ACK = 1,seq = v,ack = u + 1
3、服務器發完數據,就發出連接釋放報文段,主動關閉TCP連接。
? FIN = 1,ACK = 1,seq = w,ack = u + 1
4、客戶端回送一個確認報文段,再等到時間等待計時器設置的 2MSL(最長報文段壽命)后,連接徹底關閉。
? ACK = 1,seq = u + 1,ack = w + 1
TCP可靠傳輸
可靠:保證接收方進程從緩存區讀出的字節流與發送方發出的字節流是完全一樣的。
TCP 實現可靠傳輸的機制:1、校驗 2、序號 3、 確認 4、重傳。
TCP流量控制
流量控制:讓發送方慢點,要讓接收方來得及接收。
TCP利用滑動窗口機制實現流量控制。
在通信過程中,接收方根據自己 接收緩存 的大小,動態地調整發送方的發送窗口大小,即接收窗口 rwnd(接收方設置確認報文段的 窗口字段 來將 rwnd 通知給發送方),發送方的 發送窗口取接收窗口 rwnd 和擁塞窗口 cwnd 的最小值。
發送窗口大小可以動態變化。
for example
TCP為每一個連接設有一個持續計時器,只要TCP連接的一方收到對方的零窗口通知,就啟動持續計時器。
若持續計時器設置的時間到期,就發送一個零窗口探測報文段。接收方收到探測報文段時給出的現在的窗口值,
若窗口仍然是0,那么發送方就重新設置持續計時器。
TCP擁塞控制
擁塞控制:防止過多的數據注入到網絡中。全局性。
流量控制是點對點的。
假定:
1、數據單方向傳送,而另一個方向只傳送確認。
2、接收方總是有足夠大的緩存空間,因而發送窗口取決于擁塞程度。
發送窗口 = Min{接收窗口 rwnd,擁塞窗口 cwnd}
接收窗口:接收方根據接受緩存設置的值,并告知給發送方,反映接收方容量。
擁塞窗口: 發送方根據自己估算的網絡擁塞程度而設置的窗口值,反映網絡當前容量。
擁塞控制四種算法
慢開始和擁塞避免
快重傳和快恢復
總結
以上是生活随笔為你收集整理的王道计算机网络 传输层整理 超详细版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下Java连接数据库出现 Ac
- 下一篇: 【计算机网络复习 数据链路层】3.5.5