第六章 传输层
思維導(dǎo)圖:
一、 概述
與數(shù)據(jù)鏈路層關(guān)系
- 提供可靠的、高效的、性?xún)r(jià)比高的數(shù)據(jù)傳輸
- 輸出實(shí)體
- 傳輸層利用網(wǎng)絡(luò)層的服務(wù),為它的上層應(yīng)用層提供服務(wù)
?
網(wǎng)絡(luò)層與傳輸層不同點(diǎn):
- 網(wǎng)絡(luò)層運(yùn)行在由承運(yùn)商操作的路由器上,因此用戶(hù)無(wú)法真正控制到網(wǎng)絡(luò)層
- 把另一層放在網(wǎng)絡(luò)層之上,可以讓用戶(hù)能夠控制到服務(wù)質(zhì)量(some control)
- 傳輸層原語(yǔ)獨(dú)立于網(wǎng)絡(luò)層原語(yǔ),而網(wǎng)絡(luò)層原語(yǔ)會(huì)因?yàn)榫W(wǎng)絡(luò)的不同而不同
- 網(wǎng)絡(luò)層負(fù)責(zé)把數(shù)據(jù)從源機(jī)送達(dá)到目的機(jī)(Host to Host)
- 傳輸層負(fù)責(zé)把數(shù)據(jù)送達(dá)到具體的應(yīng)用進(jìn)程(End to End:端到端)
?
?與數(shù)據(jù)鏈路層關(guān)系
?
?數(shù)據(jù)段(TPDU,傳輸層協(xié)議數(shù)據(jù)單元)
- TPDU(Transport Protocol Data Unit)是從傳輸實(shí)體發(fā)到對(duì)端傳輸實(shí)體的信息,有的教材叫TPDU為數(shù)據(jù)段(segment)?
- TPDU作為數(shù)據(jù)(載荷)被封裝在分組(packet)中,由網(wǎng)絡(luò)層傳輸交換
- 分組作為數(shù)據(jù)(載荷)被封裝在幀(frames)中,由數(shù)據(jù)鏈路層傳輸交換
兩個(gè)常用的協(xié)議:
- UDP(User Datagram Protocol)用戶(hù)數(shù)據(jù)報(bào)協(xié)議
- TCP(Transmission Control Protocol)傳輸控制協(xié)議
?
二、 用戶(hù)數(shù)據(jù)報(bào)協(xié)議UDP
UDP提供無(wú)連接的連接,可以使用源端口和目的端口
- UDP數(shù)據(jù)段包括4個(gè)字段共8字節(jié)的頭部和數(shù)據(jù)兩個(gè)部分
- 其中第3個(gè)字段,長(zhǎng)度字段(域)表示;包括頭部和數(shù)據(jù)總共有多少字節(jié)
- 第4個(gè)是校驗(yàn)和(checksum)是可選的,如果不計(jì)算校驗(yàn)和,則該字段/域置為0
- UDP數(shù)據(jù)段中最獨(dú)特、最重要的字段是1、2個(gè)字段,分別表示源端口和目的端口,都是用16比特表示的
端口被分為三段:
自由端口(Free port)
- 本地分配
- 動(dòng)態(tài)的隨機(jī)端口
?UDP校驗(yàn)和計(jì)算:
校驗(yàn)和中用到的IP偽頭部:(TCP協(xié)議值為6)
收到數(shù)據(jù)進(jìn)行校驗(yàn)和計(jì)算,計(jì)算的數(shù)據(jù)里面包括收到的校驗(yàn)和,計(jì)算的結(jié)果應(yīng)該為全1,否則傳輸過(guò)程中發(fā)生錯(cuò)誤。
?
?
通信模型
端點(diǎn)就是套接字(Socket)
包括:
- IP地址
- 端口號(hào)
通信五元組:
一些著名的端口號(hào):
傳輸層的PDU不僅僅送達(dá)主機(jī),而且送達(dá)端口,即應(yīng)用進(jìn)程
?
三、 TCP數(shù)據(jù)段(Transmission Control Protocol)
- TCP連接上的每個(gè)字節(jié)都有它自己獨(dú)有的32位序列號(hào)
- 單收、發(fā)雙方的TCP實(shí)體不是以字節(jié),而是以數(shù)據(jù)段的形式交換數(shù)據(jù)
- TCP數(shù)據(jù)段必須適合IP分組的65515字節(jié)(65535-20B)的載荷限制
- ? ? ? ? 每個(gè)TCP數(shù)據(jù)段必須適合于下層網(wǎng)絡(luò)的MTU
Sequence number
- 序列號(hào),表示一個(gè)字節(jié)的編號(hào)
- 初始序列號(hào)ISNs(initial sequence numbers):隨機(jī)產(chǎn)生的
Acknowledgement number
- 確認(rèn)號(hào),期望接收的字節(jié)編號(hào)(32位)
- TCP的可靠傳輸保證,采用了肯定確認(rèn)機(jī)制
?:
保留字段,和控制比特
- URG:緊急數(shù)據(jù),即使win = 0,也可以發(fā)送。值為1時(shí),馬上處理
- ACK: ?? =1,確認(rèn)號(hào)有效
- PSH:表示這是帶有PUSH標(biāo)志的數(shù)據(jù),接受方收到這樣的數(shù)據(jù),應(yīng)該立刻送到上層,而不需要緩存它
- RST: 被用來(lái)重置一個(gè)已經(jīng)混亂的連接,如果在連接建立階段,就直接拒絕建立連接
- SYN: 用在連接建立的過(guò)程
?
- FIN:被用來(lái)釋放連接,它表示發(fā)送方已經(jīng)沒(méi)有數(shù)據(jù)要傳輸了,但是可以繼續(xù)接收數(shù)據(jù)
?
Window size:
- 為了避免接收方被大量涌入的數(shù)據(jù)所淹沒(méi),TCP實(shí)體進(jìn)行流控(Flow control)
- ?告訴對(duì)方可以發(fā)送的數(shù)據(jù)字節(jié)數(shù),即從確認(rèn)字節(jié)號(hào)開(kāi)始,連續(xù)發(fā)送的字節(jié)總數(shù)
- 窗口尺寸的大小,取決于接收方
Checksum(校驗(yàn)和):
- 計(jì)算方法跟UDP數(shù)據(jù)段中校驗(yàn)和計(jì)算一樣,唯一不一樣的就是偽頭部中的用戶(hù)協(xié)議值取為6
Urgent pointer:
- 緊急指針,和URG控制位配合使用,指明了緊急數(shù)據(jù)
Options
- 如果有選項(xiàng)域,它提供了一種增加基本頭沒(méi)有包含的內(nèi)容的方法
?
TCP三次握手
1.? 建立過(guò)程
- 一方(server)被動(dòng)地等待一個(gè)進(jìn)來(lái)地連接請(qǐng)求
- 另一方(client)通過(guò)發(fā)送連接請(qǐng)求,設(shè)置一些參數(shù)
- 服務(wù)器回發(fā)確認(rèn)應(yīng)答
- 應(yīng)答到達(dá)請(qǐng)求方,請(qǐng)求方最后確認(rèn),連接建立
- 可能地安全問(wèn)題:SYN泛洪Dos攻擊(偽造源IP)
2.? 連接釋放
- 任何一方在沒(méi)有數(shù)據(jù)要傳送地時(shí)候,都可以發(fā)送一個(gè)FIN置位了的TCP數(shù)據(jù)段
- 當(dāng)FIN被確認(rèn)的時(shí)候,該方向的連接被關(guān)閉了
- 當(dāng)雙向的連接都關(guān)閉了的時(shí)候,連接釋放
?四次握手正常釋放連接:
- ?
TCP傳輸策略
傳輸?shù)氖侨p工的字節(jié)流
采用Window size 進(jìn)行流控
策略
- 當(dāng)窗口數(shù)為0時(shí),發(fā)送者不能正常發(fā)送數(shù)據(jù)段,除非:
- Urgent數(shù)據(jù)。比如,用戶(hù)想殺掉遠(yuǎn)端機(jī)器上的進(jìn)程的時(shí)候,可以發(fā)送數(shù)據(jù)。
- 發(fā)送者可以發(fā)送一個(gè)字節(jié)的數(shù)據(jù)段,以便讓接收者再次發(fā)送期待接收的字節(jié)號(hào)(確認(rèn))和窗口數(shù)(避免死鎖)
優(yōu)化
1.? 優(yōu)化接收端
- 接收端可以推遲500ms發(fā)送確認(rèn)分組和窗口更新,以便可以免費(fèi)搭載在處理后的回顯分組內(nèi)(free ride)
-
傻瓜窗口綜合癥
2.? 優(yōu)化發(fā)送端:Nagle's algorithm
- 當(dāng)數(shù)據(jù)以一次一字節(jié)的速度到達(dá)傳輸實(shí)體的時(shí)候,只發(fā)送第一個(gè)字節(jié),然后將后續(xù)的字節(jié)緩存起來(lái),知道發(fā)出的字節(jié)得到確認(rèn)
- 將緩存起來(lái)的字節(jié)在一個(gè)數(shù)據(jù)段中發(fā)出,在繼續(xù)緩存,知道發(fā)出的數(shù)據(jù)得到確認(rèn)
- 有些情況禁用,如:互聯(lián)網(wǎng)遠(yuǎn)程運(yùn)行
?
TCP擁塞控制
擁塞檢測(cè)(Congestion detection)
- 所有的互聯(lián)網(wǎng)TCP算法都假定超時(shí)是由擁塞引起的,并且通過(guò)監(jiān)視超時(shí)的情況來(lái)判斷是否出現(xiàn)問(wèn)題
擁塞控制(Congestion control)
- 當(dāng)一個(gè)連接建立的時(shí)候,雙方選擇一個(gè)合適的窗口大俠,接收方根據(jù)自己的緩存區(qū)大小來(lái)指定窗口的大小
- 如果發(fā)送者遵循這個(gè)窗口大小的限制,則接收端不會(huì)出現(xiàn)緩沖區(qū)溢出的問(wèn)題,但可能由于網(wǎng)絡(luò)內(nèi)部的擁塞而發(fā)生問(wèn)題
?
兩個(gè)窗口問(wèn)題
- 要解決擁塞,應(yīng)該是認(rèn)識(shí)到這兩個(gè)潛在的問(wèn)題:網(wǎng)絡(luò)容量、接收者容量
- 為此,每個(gè)發(fā)送者維護(hù)兩個(gè)窗口
- 接收者窗口:反映了目前接收者的處理能力(容易獲取)
- 擁塞窗口:大小反應(yīng)了網(wǎng)絡(luò)目前的容量(難于獲取)
- 只要發(fā)送者發(fā)送的數(shù)據(jù)字節(jié)數(shù)是兩個(gè)窗口中小的那個(gè)窗口數(shù)
慢啟動(dòng)算法(Slow Start)
- 當(dāng)連接建立的時(shí)候,發(fā)送者用當(dāng)前使用的最大數(shù)據(jù)段長(zhǎng)度初始化擁塞窗口,然后發(fā)送一個(gè)最大的數(shù)據(jù)段
- 如果在定時(shí)器超時(shí)之前收到確認(rèn),則將擁塞窗口翻倍,然后發(fā)送兩個(gè)數(shù)據(jù)段,直到超時(shí)(或達(dá)到接收方窗口的大小)
閾值開(kāi)始,每次傳輸,線性增長(zhǎng)
-
不斷超時(shí),不斷重啟
- 重新慢啟動(dòng)的時(shí)候,擁塞窗口值不用重置為一個(gè)數(shù)據(jù)段大小,而是可以設(shè)置為閾值大小,從這里直接開(kāi)始線性增長(zhǎng),者就是所謂的快速恢復(fù)
-
任何時(shí)候,如果TCP傳輸實(shí)體收到一個(gè)ICMP抑制分組(ICMP source quench),則該事件被當(dāng)作超時(shí)對(duì)待
TCP定時(shí)器
- ?TCP采用了肯定確認(rèn)重傳技術(shù),保證每一個(gè)字節(jié)的可靠傳輸
- 每發(fā)一個(gè)數(shù)據(jù)段,都會(huì)啟動(dòng)一個(gè)定時(shí)器——重傳定時(shí)器(retransmission timer,Positive ackn.with retransmit)
- 持續(xù)定時(shí)器(persistence timer) 用來(lái)避免如下死鎖
?
- ? 保活定時(shí)器(keep-alive timer)——用來(lái)檢查連接是否存活
- ? 在關(guān)閉時(shí)候,處于time-wait中使用的定時(shí)器,運(yùn)行兩倍的最大分組生存時(shí)間,以確保連接 ? ? 關(guān)閉之后,該連接上的所有數(shù)據(jù)都完全消失
?
TCP與UDP比較:
?
-
?TCP
- 可靠傳輸方式
- ? ? 可讓?xiě)?yīng)用程序簡(jiǎn)單化,程序員可以不必進(jìn)行錯(cuò)誤檢查、修正等工作
- ?UDP
- 為了降低對(duì)計(jì)算機(jī)資源的需求(如:DNS)
- ? ? 應(yīng)用程序本身已提供數(shù)據(jù)完整性的檢查機(jī)制,毋須依賴(lài)傳輸層的協(xié)議來(lái)保證
- ? ? 應(yīng)用程序傳輸?shù)?strong>并非關(guān)鍵性的數(shù)據(jù)(如:路由器周期性的路由信息交換)
- ? ? 一對(duì)多方式,必須使用UDP(TCP限于一對(duì)一的傳送)
轉(zhuǎn)載于:https://www.cnblogs.com/zxj-262410/p/10620591.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: iPhone 12 的扁平中框相较 iP
- 下一篇: 第二次作业--熟悉使用工具